Spaces:
Running
Running
Publish ControlSpec OpenShell protocol preview and nine recorded scenarios
Browse filesRecorded TLS gRPC and synthetic HTTP target evidence from source e30ac3657bdc75e2ec268b88429d762a7b4b70a8. Includes exact-action approval, replay protection, missing-proof and smolagents target-denial examples. Native OpenShell runtime is explicitly not run. Preserves the prior action lab and reference explorer. GitHub release v0.1.2-preview.1; 330 tests, lint and type checks passed.
- README.md +18 -11
- action-demo.html +75 -0
- action-traces.json +0 -0
- index.html +0 -0
- openshell-traces.json +0 -0
- reference-demo.html +43 -0
README.md
CHANGED
|
@@ -7,19 +7,26 @@ sdk: static
|
|
| 7 |
app_file: index.html
|
| 8 |
pinned: false
|
| 9 |
license: apache-2.0
|
| 10 |
-
short_description:
|
| 11 |
---
|
| 12 |
|
| 13 |
-
#
|
| 14 |
|
| 15 |
-
Explore
|
| 16 |
-
|
| 17 |
-
|
|
|
|
| 18 |
|
| 19 |
-
|
| 20 |
-
|
|
|
|
|
|
|
| 21 |
|
| 22 |
-
|
| 23 |
-
|
| 24 |
-
|
| 25 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 7 |
app_file: index.html
|
| 8 |
pinned: false
|
| 9 |
license: apache-2.0
|
| 10 |
+
short_description: Exact-action approval and evidence, alongside OpenShell
|
| 11 |
---
|
| 12 |
|
| 13 |
+
# Before an agent acts
|
| 14 |
|
| 15 |
+
Explore nine recorded action-control experiments using the real ControlSpec
|
| 16 |
+
evaluator, TLS gRPC middleware targeting NVIDIA OpenShell v0.1.2, and a separate
|
| 17 |
+
synthetic HTTP target. Inspect approvals, changed requests, replay, missing proof,
|
| 18 |
+
outage and a real smolagents tool calling without a ticket.
|
| 19 |
|
| 20 |
+
**Static evidence replay.** Scripted requests and test-operator approvals; no
|
| 21 |
+
live LLM, money or external actions. The actual OpenShell sandbox runtime was
|
| 22 |
+
not run and is visibly marked unavailable. These are protocol/target tests,
|
| 23 |
+
not evidence of sandbox containment or a native-platform benchmark.
|
| 24 |
|
| 25 |
+
[Source and reproduction](https://github.com/claytonsamples/controlspec/tree/main/integrations/openshell) ·
|
| 26 |
+
[Experimental release](https://github.com/claytonsamples/controlspec/releases/tag/v0.1.2-preview.1) ·
|
| 27 |
+
[Report a failure](https://github.com/claytonsamples/controlspec/issues)
|
| 28 |
+
|
| 29 |
+
The prior six-scene action demo and seven original reference examples remain
|
| 30 |
+
available through links in the app. Raw observations are downloadable. No signup
|
| 31 |
+
or keys are required. ControlSpec is independent; no NVIDIA or Hugging Face
|
| 32 |
+
endorsement is implied.
|
action-demo.html
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<!doctype html>
|
| 2 |
+
<html lang="en">
|
| 3 |
+
<head>
|
| 4 |
+
<meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
|
| 5 |
+
<title>ControlSpec — Same intent. Different outcome.</title>
|
| 6 |
+
<style>
|
| 7 |
+
:root{color-scheme:dark;--bg:#111513;--panel:#1a211d;--line:#36453b;--text:#edf2e7;--muted:#aabaad;--lime:#c7f582;--orange:#ffac83;--blue:#9dcaff}
|
| 8 |
+
*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text);font:16px/1.5 system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif}button,a,summary{touch-action:manipulation}button{font:inherit;cursor:pointer}a{color:inherit;text-underline-offset:4px}button:focus-visible,a:focus-visible,summary:focus-visible{outline:3px solid var(--blue);outline-offset:5px}header,main,footer{max-width:1280px;margin:auto;padding:0 38px}header{height:86px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--line)}.brand{font-weight:750;letter-spacing:-.7px;font-size:23px;text-decoration:none}.brand i{display:inline-block;width:17px;height:17px;border:4px solid var(--lime);border-radius:5px;margin-right:10px;transform:rotate(-12deg)}.toplinks{display:flex;gap:26px;font-size:13px}.eyebrow{text-transform:uppercase;letter-spacing:2px;font-size:11px;font-weight:750;color:var(--lime)}.hero{display:grid;grid-template-columns:1.4fr 1fr;align-items:end;gap:50px;padding:37px 0 26px}h1{font-size:clamp(36px,4.5vw,60px);line-height:1.05;letter-spacing:-2.8px;margin:10px 0 0;font-weight:650}h1 span{color:var(--lime)}.hero p{font-size:15px;color:var(--muted);max-width:400px;margin:0 0 3px}.notice{display:flex;gap:12px;align-items:center;border:1px solid var(--line);border-radius:8px;padding:11px 15px;color:var(--muted);font-size:12px}.dot{flex-shrink:0;width:7px;height:7px;border-radius:100%;background:var(--lime)}.notice strong{color:var(--text)}.scene-nav{display:flex;gap:8px;margin:23px 0 18px;flex-wrap:wrap}.scene-nav button{background:transparent;color:var(--muted);border:1px solid var(--line);border-radius:30px;padding:8px 14px;font-size:12px}.scene-nav button[aria-pressed=true]{background:var(--lime);border-color:var(--lime);color:#172014}.scene-nav button span{opacity:.65;margin-right:7px;font-variant-numeric:tabular-nums}.stage{border:1px solid var(--line);border-radius:15px;overflow:hidden;background:#151b17}.scene-head{display:flex;justify-content:space-between;align-items:start;gap:20px;padding:23px 26px;border-bottom:1px solid var(--line)}.scene-head h2{font-weight:550;letter-spacing:-.6px;font-size:25px;margin:2px 0 5px}.scene-head p{font-size:13px;color:var(--muted);margin:0;max-width:720px}.count{color:var(--muted);font:13px ui-monospace,monospace;white-space:nowrap;margin-top:6px}.phases{display:flex;padding:14px 26px;gap:8px;background:#101612;border-bottom:1px solid var(--line)}.phases span{flex:1;border-top:2px solid var(--line);padding-top:7px;font-size:10px;letter-spacing:.9px;text-transform:uppercase;color:var(--muted)}.phases span.active{border-color:var(--lime);color:var(--lime)}.lanes{display:grid;grid-template-columns:1fr 1fr}.lane{padding:24px 26px;min-width:0}.lane+.lane{border-left:1px solid var(--line);background:linear-gradient(150deg,#23302244,transparent)}.lane-title{font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:1.1px;display:flex;align-items:center;gap:9px}.marker{width:8px;height:8px;border-radius:50%;background:var(--orange)}.controlled .marker{background:var(--lime)}.lane-sub{color:var(--muted);font-size:11px;margin:5px 0 20px}.state-label{font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:1px}.value{font-size:43px;letter-spacing:-1.8px;font-weight:500;font-variant-numeric:tabular-nums;margin:0 0 3px}.state-caption{font-size:12px;color:var(--muted);min-height:19px}.status{margin:20px 0 12px;display:inline-block;border:1px solid var(--line);border-radius:5px;font-size:11px;letter-spacing:.5px;padding:5px 9px;color:var(--muted)}.status.done{border-color:#b17b5e;color:var(--orange);background:#ffac830c}.controlled .status.done{border-color:#708f4a;color:var(--lime);background:#c7f5820c}.events{height:108px;overflow:auto;font:12px/1.6 ui-monospace,SFMono-Regular,Consolas,monospace;color:var(--muted)}.events p{margin:0 0 7px;overflow-wrap:anywhere}.events b{color:var(--text);font-weight:400}.evidence{font-size:11px;padding-top:13px;margin-top:9px;border-top:1px solid var(--line);color:var(--muted);min-height:45px}.evidence strong{color:var(--text)}.controls{display:flex;align-items:center;gap:10px;padding:17px 26px;border-top:1px solid var(--line);background:#101612}.controls button{border:1px solid var(--line);border-radius:7px;background:transparent;color:var(--text);padding:10px 16px;font-size:13px}.controls .primary{background:var(--lime);color:#172014;border-color:var(--lime);font-weight:700;min-width:150px}.timing{margin-left:auto;color:var(--muted);font:11px ui-monospace,monospace}.takeaway{display:flex;align-items:start;gap:17px;padding:20px 0}.takeaway .arrow{color:var(--lime);font-size:23px}.takeaway p{margin:0;font-size:14px}.takeaway small{display:block;color:var(--muted);font-size:12px;margin-top:3px}.details{border-top:1px solid var(--line);padding:20px 0;color:var(--muted);font-size:12px}.details summary{cursor:pointer;color:var(--text);font-size:13px}.details pre{max-height:380px;overflow:auto;background:#0a100d;border:1px solid var(--line);border-radius:8px;padding:20px;font:11px/1.6 ui-monospace,monospace}.provenance{overflow-wrap:anywhere;margin:16px 0}.explain{max-width:920px;font-size:13px;color:var(--muted)}footer{display:flex;justify-content:space-between;gap:25px;padding-top:22px;padding-bottom:30px;border-top:1px solid var(--line);color:var(--muted);font-size:12px}.sr{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}button:disabled{opacity:.4;cursor:default}
|
| 9 |
+
@media(max-width:700px){header,main,footer{padding-left:18px;padding-right:18px}header{height:68px}.toplinks{gap:14px}.hero{grid-template-columns:1fr;gap:18px;padding-top:28px}h1{letter-spacing:-1.7px}.scene-head{padding:20px 17px}.scene-head h2{font-size:22px}.scene-nav{gap:6px}.scene-nav button{padding:7px 11px}.lanes{grid-template-columns:1fr}.lane{padding:20px 17px}.lane+.lane{border-left:0;border-top:1px solid var(--line)}.events{height:90px}.value{font-size:37px}.phases{padding:12px 17px}.phases span{font-size:9px;letter-spacing:0}.controls{padding:15px 17px;flex-wrap:wrap}.timing{width:100%;margin:2px 0 0}.controls button{padding:10px 12px}.notice{align-items:start}footer{flex-direction:column;gap:8px}.count{font-size:11px}}
|
| 10 |
+
@media(max-width:700px){header{height:auto;min-height:68px;padding-top:15px;padding-bottom:15px;flex-wrap:wrap;gap:12px}.toplinks{flex-wrap:wrap}}
|
| 11 |
+
@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important;animation:none!important;transition:none!important}}
|
| 12 |
+
</style>
|
| 13 |
+
</head>
|
| 14 |
+
<body>
|
| 15 |
+
<header><a class="brand" href="https://github.com/claytonsamples/controlspec"><i aria-hidden="true"></i>ControlSpec</a><nav class="toplinks" aria-label="Project links"><a href="https://github.com/claytonsamples/controlspec">View source ↗</a><a href="action-traces.json" download>Download trace ↓</a></nav></header>
|
| 16 |
+
<main>
|
| 17 |
+
<section class="hero"><div><div class="eyebrow">The agent action lab / 01</div><h1>Same intent.<br><span>Different outcome.</span></h1></div><p>Watch an agent try to spend, discount, and change the deal. See where ControlSpec changes the route—and where it lets the action proceed.</p></section>
|
| 18 |
+
<div class="notice"><span class="dot" aria-hidden="true"></span><div><strong>Recorded sandbox simulation.</strong> Real ControlSpec reference decisions. Scripted agent intents. Fake targets. No real money, messages, or production authorization.</div></div>
|
| 19 |
+
<nav class="scene-nav" id="scenes" aria-label="Choose a scene"></nav>
|
| 20 |
+
<section class="stage" aria-label="Side-by-side demonstration">
|
| 21 |
+
<div class="scene-head"><div><div class="eyebrow" id="domain">Personal agent</div><h2 id="title"></h2><p id="description"></p><p id="rule" style="color:var(--lime);margin-top:9px"></p></div><div class="count" id="counter"></div></div>
|
| 22 |
+
<div class="phases" aria-label="Playback stages"><span>01 · Intent</span><span>02 · Decision</span><span>03 · Target</span><span>04 · Evidence</span></div>
|
| 23 |
+
<div class="lanes"><article class="lane" id="without"><div class="lane-title"><span class="marker"></span>Without ControlSpec</div><p class="lane-sub">Direct dispatch to the simulated target</p><div class="state-label"></div><div class="value"></div><div class="state-caption"></div><div class="status"></div><div class="events"></div><div class="evidence"></div></article><article class="lane controlled" id="controlled"><div class="lane-title"><span class="marker"></span>With ControlSpec</div><p class="lane-sub">Reference evaluator + sandbox dispatch gate</p><div class="state-label"></div><div class="value"></div><div class="state-caption"></div><div class="status"></div><div class="events"></div><div class="evidence"></div></article></div>
|
| 24 |
+
<div class="controls"><button class="primary" id="play">▶ Run the comparison</button><button id="step">Next step →</button><button id="reset">↺ Reset</button><span class="timing" id="timing">6 scenes · approximately 60 seconds</span></div>
|
| 25 |
+
</section>
|
| 26 |
+
<div class="takeaway"><span class="arrow" aria-hidden="true">↳</span><div><p id="lesson"></p><small>The same scripted proposal enters both lanes. Only the sandbox control path changes.</small></div></div>
|
| 27 |
+
<details class="details"><summary>Inspect the rule binding, decision, and sandbox trace</summary><p class="provenance" id="provenance"></p><pre id="trace"></pre></details>
|
| 28 |
+
<p class="explain">This browser replays recorded results; it does not evaluate new policies or run an LLM. The local Python harness runs the real reference evaluator and simulates target changes. A sandbox event proves only that simulation occurred. Production identity, credential isolation, enforcement, and durable evidence remain separate work. The baseline isolates ControlSpec’s contribution; it is not a claim that other agent systems lack safeguards.</p>
|
| 29 |
+
<div class="sr" id="announce" role="status" aria-live="polite"></div>
|
| 30 |
+
</main>
|
| 31 |
+
<footer><span>ControlSpec · Experimental open-source reference layer</span><a href="https://github.com/claytonsamples/controlspec/issues">Challenge a scenario. Help build the boundary. ↗</a></footer>
|
| 32 |
+
<script id="action-data" type="application/json">{"schema":"controlspec.action-demo.v1","mode":"recorded_reference_outputs","static":true,"non_authoritative":true,"may_authorize_external_effect":false,"external_actions_executed":false,"real_llm_run":false,"production_evidence":false,"reference_time":"2026-08-20T12:00:00.000000Z","source_commit":"e30ac3657bdc75e2ec268b88429d762a7b4b70a8","provenance":{"harness_sha256":"sha256:59cae93a5ebcdb588f1f7c1ea74b60e23531a90cad85b69f4fc6c3536cf34c0c","template_sha256":"sha256:7d6ea841f57fb777daf802fb97d29715883e8293339731b05eb73c25647decd9","observer_sha256":"sha256:732bc7a252bd8b1a50f70aa9840a5c85a45787bb5670298d625dea58d0f9de6e","source_commit_note":"Base Git commit; explicit hashes identify demo working files.","reference_inputs_sha256":{"examples/controlspec/personal-agent-spending/requests/groceries-142.json":"sha256:83d5b210e9ddb10e20a36d6381f5638987eff7a421436b3aff2b2339a2ce35dd","examples/controlspec/personal-agent-spending/requests/groceries-42-changed-intent.json":"sha256:482b8d05c088c453dc44890064917d6df67aa47e25d374b77a486d06e5fda510","examples/controlspec/personal-agent-spending/requests/groceries-42.json":"sha256:2f3af3e062d43ba28728504661e8d1eef1f7f2d520a8e3ba0f4e8ad9065b4dd6","examples/controlspec/personal-agent-spending/requests/recurring-999.json":"sha256:eeceddbbaf99a328eea016c7a7873c032873435abfb106a91bc9d4899752f77a","examples/controlspec/personal-agent-spending/scenarios.json":"sha256:b50a3f4b51618cad64c7b28a2c7330b1b5af3b383b81d52eead2e49607fa16ae","examples/controlspec/smb-sales-controls/requests/discount-15.json":"sha256:1515589b2f067afa303eb9b55335e94047add62a5b35bb42512fc3860fb3d235","examples/controlspec/smb-sales-controls/requests/discount-8.json":"sha256:8fce043ddeccf6e4b4614bc0f9c19b6aee2a58e9e79ec4fd4bcfaa1b4853889c","examples/controlspec/smb-sales-controls/requests/draft.json":"sha256:35e2e13e2b930d22de235342f088e572a2136b6d18177f101178d9bef16fa47e","examples/controlspec/smb-sales-controls/requests/smb-discount-15-direct-self-approval.json":"sha256:425256c9c57f680f202836a42a2cda7034a2b7f1f3dc61379b9eb00b9be7651f","examples/controlspec/smb-sales-controls/scenarios.json":"sha256:82aaa7c15d015cece46a6a8fed9e165545b344812224789c7011af4ff7feaccd"}},"scope":"Scripted intents; real reference decisions; simulated targets; recorded playback.","domains":[{"domain":"personal","release_id":"v0.1.1","catalog_digest":"sha256:07e00e11176752146d402c31269d3c89dbe1f8ae200c98a91f7e4f34f7888322","scenarios":[{"scenario_id":"groceries-42","intent_digest":"sha256:eae71621e734dcf7b654a778562900935637da3b62384ac8a06802ede2d1c16d","pack_catalog_id":"personal.agent.spending:spending-baseline@0.1.0","verdict":"allow","route_kind":"continue","route_id":"continue","recheck_valid":true,"changed_recheck_valid":false,"receipt_status":"incomplete","missing_evidence_count":1,"verified_evidence_count":0,"assessment_basis":"caller_report_only","stored":false,"durable":false,"route_substitution_rejected":true},{"scenario_id":"groceries-142","intent_digest":"sha256:5b0a007d31cec073c4a6c8731e192c15cc7de7e0a0c4d96b64d4b23210afd1c0","pack_catalog_id":"personal.agent.spending:spending-baseline@0.1.0","verdict":"require_approval","route_kind":"ask_user","route_id":"ask-before-purchase","recheck_valid":true,"changed_recheck_valid":null,"receipt_status":"failed","missing_evidence_count":0,"verified_evidence_count":0,"assessment_basis":"caller_report_only","stored":false,"durable":false,"route_substitution_rejected":true},{"scenario_id":"recurring-999","intent_digest":"sha256:bc82299648aa586ad4cb8da960d413c5cfbeaca046e58912a359714b7d0ec801","pack_catalog_id":"personal.agent.spending:spending-baseline@0.1.0","verdict":"require_approval","route_kind":"ask_user","route_id":"ask-before-recurring-purchase","recheck_valid":true,"changed_recheck_valid":null,"receipt_status":"failed","missing_evidence_count":0,"verified_evidence_count":0,"assessment_basis":"caller_report_only","stored":false,"durable":false,"route_substitution_rejected":true}],"machine_summary":{"status":"ok","scope":"local_reference_examples","domain":"personal","release_id":"v0.1.1","catalog_digest":"sha256:07e00e11176752146d402c31269d3c89dbe1f8ae200c98a91f7e4f34f7888322","observed":[{"id":"groceries-42","verdict":"allow","recheck_valid":true,"receipt_status":"incomplete","non_authoritative":true,"deterministic_repeat":true,"route_substitution_rejected":true},{"id":"groceries-142","verdict":"require_approval","recheck_valid":true,"receipt_status":"failed","non_authoritative":true,"deterministic_repeat":true,"route_substitution_rejected":true},{"id":"recurring-999","verdict":"require_approval","recheck_valid":true,"receipt_status":"failed","non_authoritative":true,"deterministic_repeat":true,"route_substitution_rejected":true}],"scenario_count":3,"probe_count":0,"operations":["GET packs","GET packs/{id}","GET controls","GET controls/{id}","POST decide","POST recheck","POST receipts"],"external_actions_executed":false,"receipts_stored":false}},{"domain":"smb","release_id":"v0.1.1","catalog_digest":"sha256:07e00e11176752146d402c31269d3c89dbe1f8ae200c98a91f7e4f34f7888322","scenarios":[{"scenario_id":"draft","intent_digest":"sha256:c97b00a3ce7f1e71a27f90bab783f4490f1fe09286f137abaa5cf2cf2882b64d","pack_catalog_id":"smb.sales.controls:sales-baseline@0.1.0","verdict":"allow","route_kind":"continue","route_id":"continue-draft","recheck_valid":true,"changed_recheck_valid":null,"receipt_status":"failed","missing_evidence_count":0,"verified_evidence_count":0,"assessment_basis":"caller_report_only","stored":false,"durable":false,"route_substitution_rejected":true},{"scenario_id":"discount-8","intent_digest":"sha256:be0d497159b6110a72d0a6bea0c2db21f82202f40e6217ef586ae1f51bbac7d0","pack_catalog_id":"smb.sales.controls:sales-baseline@0.1.0","verdict":"allow_with_conditions","route_kind":"continue","route_id":"continue-within-limit","recheck_valid":true,"changed_recheck_valid":null,"receipt_status":"failed","missing_evidence_count":0,"verified_evidence_count":0,"assessment_basis":"caller_report_only","stored":false,"durable":false,"route_substitution_rejected":true},{"scenario_id":"discount-15","intent_digest":"sha256:ec4f4dee20b67ee8dd0b264dcbf60f185eda92d48fa48bbf2ed54f0ff090e5d4","pack_catalog_id":"smb.sales.controls:sales-baseline@0.1.0","verdict":"require_approval","route_kind":"continue","route_id":"continue","recheck_valid":true,"changed_recheck_valid":null,"receipt_status":"failed","missing_evidence_count":0,"verified_evidence_count":0,"assessment_basis":"caller_report_only","stored":false,"durable":false,"route_substitution_rejected":true},{"scenario_id":"smb-discount-15-direct-self-approval","intent_digest":"sha256:c28c5920136a243b8256f8baaa59709217a8f7043e95dcec06013aaee3d1bf1a","pack_catalog_id":"smb.sales.controls:sales-baseline@0.1.0","verdict":"block","route_kind":"block","route_id":"fail-closed-block","recheck_valid":true,"changed_recheck_valid":null,"receipt_status":"failed","missing_evidence_count":0,"verified_evidence_count":0,"assessment_basis":"caller_report_only","stored":false,"durable":false,"route_substitution_rejected":true}],"machine_summary":{"status":"ok","scope":"local_reference_examples","domain":"smb","release_id":"v0.1.1","catalog_digest":"sha256:07e00e11176752146d402c31269d3c89dbe1f8ae200c98a91f7e4f34f7888322","observed":[{"id":"draft","verdict":"allow","recheck_valid":true,"receipt_status":"failed","non_authoritative":true,"deterministic_repeat":true,"route_substitution_rejected":true},{"id":"discount-8","verdict":"allow_with_conditions","recheck_valid":true,"receipt_status":"failed","non_authoritative":true,"deterministic_repeat":true,"route_substitution_rejected":true},{"id":"discount-15","verdict":"require_approval","recheck_valid":true,"receipt_status":"failed","non_authoritative":true,"deterministic_repeat":true,"route_substitution_rejected":true},{"id":"smb-discount-15-direct-self-approval","verdict":"block","recheck_valid":true,"receipt_status":"failed","non_authoritative":true,"deterministic_repeat":true,"route_substitution_rejected":true}],"scenario_count":4,"probe_count":0,"operations":["GET packs","GET packs/{id}","GET controls","GET controls/{id}","POST decide","POST recheck","POST receipts"],"external_actions_executed":false,"receipts_stored":false}}],"scenes":[{"id":"overspend","title":"The $142 purchase","description":"A purchase exceeds the example spending limit.","domain":"personal","scenario_id":"groceries-142","changed":false,"evidence_available":true,"observation":{"scenario_id":"groceries-142","intent_digest":"sha256:5b0a007d31cec073c4a6c8731e192c15cc7de7e0a0c4d96b64d4b23210afd1c0","pack_catalog_id":"personal.agent.spending:spending-baseline@0.1.0","verdict":"require_approval","route_kind":"ask_user","route_id":"ask-before-purchase","recheck_valid":true,"changed_recheck_valid":null,"receipt_status":"failed","missing_evidence_count":0,"verified_evidence_count":0,"assessment_basis":"caller_report_only","stored":false,"durable":false,"route_substitution_rejected":true},"original_intent":{"action":{"domain_action":"personal.purchase","requested_effect":{"personal.agent.spending.effect":"personal.purchase"},"type":"commit"},"actor":{"actor_id":"personal.agent.spending-agent","attributes":{},"extensions":{},"lineage_refs":[],"namespace":"personal.agent.spending","owner_ref":null,"schema":"controlspec/v0/actor","schema_version":"0.1.0","type":"agent","version":"1"},"context":{"personal.spending.recurring":false,"personal.spending.total_minor_units":14200},"context_digest":"sha256:7d8d852b72578640619bd7115084a64be00c80b24467a31b01623cb61ec95621","cost":null,"evidence_refs":[],"extensions":{},"idempotency_key":"groceries-142","intent_digest":"sha256:5b0a007d31cec073c4a6c8731e192c15cc7de7e0a0c4d96b64d4b23210afd1c0","intent_id":"groceries-142","namespace":"personal.agent.spending","requested_at":"2026-08-20T12:00:00.000000Z","requested_route":null,"resource":{"attributes":{},"business_id":null,"display_name":null,"extensions":{},"namespace":"personal.agent.spending","resource_id":"personal.agent.spending-resource","schema":"controlspec/v0/resource","schema_version":"0.1.0","type":"personal.cart","version":"1"},"retry_count":0,"schema":"controlspec/v0/action-intent","schema_version":"0.1.0"},"proposed_intent":{"action":{"domain_action":"personal.purchase","requested_effect":{"personal.agent.spending.effect":"personal.purchase"},"type":"commit"},"actor":{"actor_id":"personal.agent.spending-agent","attributes":{},"extensions":{},"lineage_refs":[],"namespace":"personal.agent.spending","owner_ref":null,"schema":"controlspec/v0/actor","schema_version":"0.1.0","type":"agent","version":"1"},"context":{"personal.spending.recurring":false,"personal.spending.total_minor_units":14200},"context_digest":"sha256:7d8d852b72578640619bd7115084a64be00c80b24467a31b01623cb61ec95621","cost":null,"evidence_refs":[],"extensions":{},"idempotency_key":"groceries-142","intent_digest":"sha256:5b0a007d31cec073c4a6c8731e192c15cc7de7e0a0c4d96b64d4b23210afd1c0","intent_id":"groceries-142","namespace":"personal.agent.spending","requested_at":"2026-08-20T12:00:00.000000Z","requested_route":null,"resource":{"attributes":{},"business_id":null,"display_name":null,"extensions":{},"namespace":"personal.agent.spending","resource_id":"personal.agent.spending-resource","schema":"controlspec/v0/resource","schema_version":"0.1.0","type":"personal.cart","version":"1"},"retry_count":0,"schema":"controlspec/v0/action-intent","schema_version":"0.1.0"},"source":{"request":"examples/controlspec/personal-agent-spending/requests/groceries-142.json","reference_test":{"path":"backend/tests/api/test_controlspec_reference_api_examples.py","revision":"a6d0c2685a62eb9e21eef49355ed20687bdf9563","symbol":"test_personal_agent_examples_execute_portably_through_http"},"selected_pack":{"catalog_id":"personal.agent.spending:spending-baseline@0.1.0","kind":"pack","semantic_digest":"sha256:682c677a946588ed7c7313ed0e36c77af8213d77dd82b9979d7d7b8454d29291"},"explanation_codes":["controlspec.core.approval.required","personal.spending.approval_required"],"explanation_basis":"reviewed fixture; observe validates exact API match"},"initial_state":{"balance_minor_units":50000,"quote_total_minor_units":100000,"discount_basis_points":0},"lanes":{"without":{"initial_state":{"balance_minor_units":50000,"quote_total_minor_units":100000,"discount_basis_points":0},"final_state":{"balance_minor_units":35800,"quote_total_minor_units":100000,"discount_basis_points":0},"intent":{"action":{"domain_action":"personal.purchase","requested_effect":{"personal.agent.spending.effect":"personal.purchase"},"type":"commit"},"actor":{"actor_id":"personal.agent.spending-agent","attributes":{},"extensions":{},"lineage_refs":[],"namespace":"personal.agent.spending","owner_ref":null,"schema":"controlspec/v0/actor","schema_version":"0.1.0","type":"agent","version":"1"},"context":{"personal.spending.recurring":false,"personal.spending.total_minor_units":14200},"context_digest":"sha256:7d8d852b72578640619bd7115084a64be00c80b24467a31b01623cb61ec95621","cost":null,"evidence_refs":[],"extensions":{},"idempotency_key":"groceries-142","intent_digest":"sha256:5b0a007d31cec073c4a6c8731e192c15cc7de7e0a0c4d96b64d4b23210afd1c0","intent_id":"groceries-142","namespace":"personal.agent.spending","requested_at":"2026-08-20T12:00:00.000000Z","requested_route":null,"resource":{"attributes":{},"business_id":null,"display_name":null,"extensions":{},"namespace":"personal.agent.spending","resource_id":"personal.agent.spending-resource","schema":"controlspec/v0/resource","schema_version":"0.1.0","type":"personal.cart","version":"1"},"retry_count":0,"schema":"controlspec/v0/action-intent","schema_version":"0.1.0"},"events":[{"step":0,"kind":"proposed","message":"Identical scripted intent received by an isolated fake target lane.","state":{"balance_minor_units":50000,"quote_total_minor_units":100000,"discount_basis_points":0}},{"step":1,"kind":"dispatch","message":"Comparison lane dispatches directly; this control layer is absent.","state":{"balance_minor_units":50000,"quote_total_minor_units":100000,"discount_basis_points":0}},{"step":2,"kind":"recheck","message":"No ControlSpec binding recheck in this comparison lane.","state":{"balance_minor_units":50000,"quote_total_minor_units":100000,"discount_basis_points":0}},{"step":3,"kind":"target","message":"Fake target changed. No external action occurred.","state":{"balance_minor_units":35800,"quote_total_minor_units":100000,"discount_basis_points":0}},{"step":4,"kind":"receipt","message":"Sandbox action observed.","state":{"balance_minor_units":35800,"quote_total_minor_units":100000,"discount_basis_points":0}}],"mutated":true,"target_evidence":[{"kind":"sandbox_target_event","scope":"fake_target_only","intent_digest":"sha256:5b0a007d31cec073c4a6c8731e192c15cc7de7e0a0c4d96b64d4b23210afd1c0","before":{"balance_minor_units":50000,"quote_total_minor_units":100000,"discount_basis_points":0},"after":{"balance_minor_units":35800,"quote_total_minor_units":100000,"discount_basis_points":0},"production_evidence":false}],"completion":"Sandbox action observed."},"controlled":{"initial_state":{"balance_minor_units":50000,"quote_total_minor_units":100000,"discount_basis_points":0},"final_state":{"balance_minor_units":50000,"quote_total_minor_units":100000,"discount_basis_points":0},"intent":{"action":{"domain_action":"personal.purchase","requested_effect":{"personal.agent.spending.effect":"personal.purchase"},"type":"commit"},"actor":{"actor_id":"personal.agent.spending-agent","attributes":{},"extensions":{},"lineage_refs":[],"namespace":"personal.agent.spending","owner_ref":null,"schema":"controlspec/v0/actor","schema_version":"0.1.0","type":"agent","version":"1"},"context":{"personal.spending.recurring":false,"personal.spending.total_minor_units":14200},"context_digest":"sha256:7d8d852b72578640619bd7115084a64be00c80b24467a31b01623cb61ec95621","cost":null,"evidence_refs":[],"extensions":{},"idempotency_key":"groceries-142","intent_digest":"sha256:5b0a007d31cec073c4a6c8731e192c15cc7de7e0a0c4d96b64d4b23210afd1c0","intent_id":"groceries-142","namespace":"personal.agent.spending","requested_at":"2026-08-20T12:00:00.000000Z","requested_route":null,"resource":{"attributes":{},"business_id":null,"display_name":null,"extensions":{},"namespace":"personal.agent.spending","resource_id":"personal.agent.spending-resource","schema":"controlspec/v0/resource","schema_version":"0.1.0","type":"personal.cart","version":"1"},"retry_count":0,"schema":"controlspec/v0/action-intent","schema_version":"0.1.0"},"events":[{"step":0,"kind":"proposed","message":"Identical scripted intent received by an isolated fake target lane.","state":{"balance_minor_units":50000,"quote_total_minor_units":100000,"discount_basis_points":0}},{"step":1,"kind":"decision","message":"Real reference decision: require_approval.","state":{"balance_minor_units":50000,"quote_total_minor_units":100000,"discount_basis_points":0}},{"step":2,"kind":"recheck","message":"Binding valid for proposed action: true.","state":{"balance_minor_units":50000,"quote_total_minor_units":100000,"discount_basis_points":0}},{"step":3,"kind":"target","message":"Dispatch held; fake target unchanged.","state":{"balance_minor_units":50000,"quote_total_minor_units":100000,"discount_basis_points":0}},{"step":4,"kind":"receipt","message":"Reference receipt: failed; verified evidence: 0. Sandbox events do not upgrade this receipt.","state":{"balance_minor_units":50000,"quote_total_minor_units":100000,"discount_basis_points":0}}],"mutated":false,"target_evidence":[],"completion":"Action held; fake target unchanged."}}},{"id":"discount","title":"The 15% discount","description":"A sales agent proposes an offer needing approval.","domain":"smb","scenario_id":"discount-15","changed":false,"evidence_available":true,"observation":{"scenario_id":"discount-15","intent_digest":"sha256:ec4f4dee20b67ee8dd0b264dcbf60f185eda92d48fa48bbf2ed54f0ff090e5d4","pack_catalog_id":"smb.sales.controls:sales-baseline@0.1.0","verdict":"require_approval","route_kind":"continue","route_id":"continue","recheck_valid":true,"changed_recheck_valid":null,"receipt_status":"failed","missing_evidence_count":0,"verified_evidence_count":0,"assessment_basis":"caller_report_only","stored":false,"durable":false,"route_substitution_rejected":true},"original_intent":{"action":{"domain_action":"smb.sales.offer_discount","requested_effect":{"smb.sales.controls.effect":"smb.sales.offer_discount"},"type":"communicate"},"actor":{"actor_id":"smb.sales.controls-agent","attributes":{},"extensions":{},"lineage_refs":[],"namespace":"smb.sales.controls","owner_ref":null,"schema":"controlspec/v0/actor","schema_version":"0.1.0","type":"agent","version":"1"},"context":{"smb.sales.discount_basis_points":1500},"context_digest":"sha256:9ef70d85099b9abaf8649f6cfb0f943daff79d62e71c9b33321fa56ccfa09982","cost":null,"evidence_refs":[],"extensions":{},"idempotency_key":"discount-15","intent_digest":"sha256:ec4f4dee20b67ee8dd0b264dcbf60f185eda92d48fa48bbf2ed54f0ff090e5d4","intent_id":"discount-15","namespace":"smb.sales.controls","requested_at":"2026-08-20T12:00:00.000000Z","requested_route":null,"resource":{"attributes":{},"business_id":null,"display_name":null,"extensions":{},"namespace":"smb.sales.controls","resource_id":"smb.sales.controls-resource","schema":"controlspec/v0/resource","schema_version":"0.1.0","type":"smb.customer_email","version":"1"},"retry_count":0,"schema":"controlspec/v0/action-intent","schema_version":"0.1.0"},"proposed_intent":{"action":{"domain_action":"smb.sales.offer_discount","requested_effect":{"smb.sales.controls.effect":"smb.sales.offer_discount"},"type":"communicate"},"actor":{"actor_id":"smb.sales.controls-agent","attributes":{},"extensions":{},"lineage_refs":[],"namespace":"smb.sales.controls","owner_ref":null,"schema":"controlspec/v0/actor","schema_version":"0.1.0","type":"agent","version":"1"},"context":{"smb.sales.discount_basis_points":1500},"context_digest":"sha256:9ef70d85099b9abaf8649f6cfb0f943daff79d62e71c9b33321fa56ccfa09982","cost":null,"evidence_refs":[],"extensions":{},"idempotency_key":"discount-15","intent_digest":"sha256:ec4f4dee20b67ee8dd0b264dcbf60f185eda92d48fa48bbf2ed54f0ff090e5d4","intent_id":"discount-15","namespace":"smb.sales.controls","requested_at":"2026-08-20T12:00:00.000000Z","requested_route":null,"resource":{"attributes":{},"business_id":null,"display_name":null,"extensions":{},"namespace":"smb.sales.controls","resource_id":"smb.sales.controls-resource","schema":"controlspec/v0/resource","schema_version":"0.1.0","type":"smb.customer_email","version":"1"},"retry_count":0,"schema":"controlspec/v0/action-intent","schema_version":"0.1.0"},"source":{"request":"examples/controlspec/smb-sales-controls/requests/discount-15.json","reference_test":{"path":"backend/tests/api/test_controlspec_reference_api_examples.py","revision":"a6d0c2685a62eb9e21eef49355ed20687bdf9563","symbol":"test_smb_sales_examples_execute_portably_through_http"},"selected_pack":{"catalog_id":"smb.sales.controls:sales-baseline@0.1.0","kind":"pack","semantic_digest":"sha256:2dac49ef9705353c556d200cf908a4d4405bdf8a36c68f2f8926628cdfc346bd"},"explanation_codes":["controlspec.core.approval.required","smb.sales.discount_controlled","smb.sales.manager_required"],"explanation_basis":"reviewed fixture; observe validates exact API match"},"initial_state":{"balance_minor_units":50000,"quote_total_minor_units":100000,"discount_basis_points":0},"lanes":{"without":{"initial_state":{"balance_minor_units":50000,"quote_total_minor_units":100000,"discount_basis_points":0},"final_state":{"balance_minor_units":50000,"quote_total_minor_units":85000,"discount_basis_points":1500},"intent":{"action":{"domain_action":"smb.sales.offer_discount","requested_effect":{"smb.sales.controls.effect":"smb.sales.offer_discount"},"type":"communicate"},"actor":{"actor_id":"smb.sales.controls-agent","attributes":{},"extensions":{},"lineage_refs":[],"namespace":"smb.sales.controls","owner_ref":null,"schema":"controlspec/v0/actor","schema_version":"0.1.0","type":"agent","version":"1"},"context":{"smb.sales.discount_basis_points":1500},"context_digest":"sha256:9ef70d85099b9abaf8649f6cfb0f943daff79d62e71c9b33321fa56ccfa09982","cost":null,"evidence_refs":[],"extensions":{},"idempotency_key":"discount-15","intent_digest":"sha256:ec4f4dee20b67ee8dd0b264dcbf60f185eda92d48fa48bbf2ed54f0ff090e5d4","intent_id":"discount-15","namespace":"smb.sales.controls","requested_at":"2026-08-20T12:00:00.000000Z","requested_route":null,"resource":{"attributes":{},"business_id":null,"display_name":null,"extensions":{},"namespace":"smb.sales.controls","resource_id":"smb.sales.controls-resource","schema":"controlspec/v0/resource","schema_version":"0.1.0","type":"smb.customer_email","version":"1"},"retry_count":0,"schema":"controlspec/v0/action-intent","schema_version":"0.1.0"},"events":[{"step":0,"kind":"proposed","message":"Identical scripted intent received by an isolated fake target lane.","state":{"balance_minor_units":50000,"quote_total_minor_units":100000,"discount_basis_points":0}},{"step":1,"kind":"dispatch","message":"Comparison lane dispatches directly; this control layer is absent.","state":{"balance_minor_units":50000,"quote_total_minor_units":100000,"discount_basis_points":0}},{"step":2,"kind":"recheck","message":"No ControlSpec binding recheck in this comparison lane.","state":{"balance_minor_units":50000,"quote_total_minor_units":100000,"discount_basis_points":0}},{"step":3,"kind":"target","message":"Fake target changed. No external action occurred.","state":{"balance_minor_units":50000,"quote_total_minor_units":85000,"discount_basis_points":1500}},{"step":4,"kind":"receipt","message":"Sandbox action observed.","state":{"balance_minor_units":50000,"quote_total_minor_units":85000,"discount_basis_points":1500}}],"mutated":true,"target_evidence":[{"kind":"sandbox_target_event","scope":"fake_target_only","intent_digest":"sha256:ec4f4dee20b67ee8dd0b264dcbf60f185eda92d48fa48bbf2ed54f0ff090e5d4","before":{"balance_minor_units":50000,"quote_total_minor_units":100000,"discount_basis_points":0},"after":{"balance_minor_units":50000,"quote_total_minor_units":85000,"discount_basis_points":1500},"production_evidence":false}],"completion":"Sandbox action observed."},"controlled":{"initial_state":{"balance_minor_units":50000,"quote_total_minor_units":100000,"discount_basis_points":0},"final_state":{"balance_minor_units":50000,"quote_total_minor_units":100000,"discount_basis_points":0},"intent":{"action":{"domain_action":"smb.sales.offer_discount","requested_effect":{"smb.sales.controls.effect":"smb.sales.offer_discount"},"type":"communicate"},"actor":{"actor_id":"smb.sales.controls-agent","attributes":{},"extensions":{},"lineage_refs":[],"namespace":"smb.sales.controls","owner_ref":null,"schema":"controlspec/v0/actor","schema_version":"0.1.0","type":"agent","version":"1"},"context":{"smb.sales.discount_basis_points":1500},"context_digest":"sha256:9ef70d85099b9abaf8649f6cfb0f943daff79d62e71c9b33321fa56ccfa09982","cost":null,"evidence_refs":[],"extensions":{},"idempotency_key":"discount-15","intent_digest":"sha256:ec4f4dee20b67ee8dd0b264dcbf60f185eda92d48fa48bbf2ed54f0ff090e5d4","intent_id":"discount-15","namespace":"smb.sales.controls","requested_at":"2026-08-20T12:00:00.000000Z","requested_route":null,"resource":{"attributes":{},"business_id":null,"display_name":null,"extensions":{},"namespace":"smb.sales.controls","resource_id":"smb.sales.controls-resource","schema":"controlspec/v0/resource","schema_version":"0.1.0","type":"smb.customer_email","version":"1"},"retry_count":0,"schema":"controlspec/v0/action-intent","schema_version":"0.1.0"},"events":[{"step":0,"kind":"proposed","message":"Identical scripted intent received by an isolated fake target lane.","state":{"balance_minor_units":50000,"quote_total_minor_units":100000,"discount_basis_points":0}},{"step":1,"kind":"decision","message":"Real reference decision: require_approval.","state":{"balance_minor_units":50000,"quote_total_minor_units":100000,"discount_basis_points":0}},{"step":2,"kind":"recheck","message":"Binding valid for proposed action: true.","state":{"balance_minor_units":50000,"quote_total_minor_units":100000,"discount_basis_points":0}},{"step":3,"kind":"target","message":"Dispatch held; fake target unchanged.","state":{"balance_minor_units":50000,"quote_total_minor_units":100000,"discount_basis_points":0}},{"step":4,"kind":"receipt","message":"Reference receipt: failed; verified evidence: 0. Sandbox events do not upgrade this receipt.","state":{"balance_minor_units":50000,"quote_total_minor_units":100000,"discount_basis_points":0}}],"mutated":false,"target_evidence":[],"completion":"Action held; fake target unchanged."}}},{"id":"self-approval","title":"The agent approves itself","description":"The same proposed 15% offer includes direct self-approval.","domain":"smb","scenario_id":"smb-discount-15-direct-self-approval","changed":false,"evidence_available":true,"observation":{"scenario_id":"smb-discount-15-direct-self-approval","intent_digest":"sha256:c28c5920136a243b8256f8baaa59709217a8f7043e95dcec06013aaee3d1bf1a","pack_catalog_id":"smb.sales.controls:sales-baseline@0.1.0","verdict":"block","route_kind":"block","route_id":"fail-closed-block","recheck_valid":true,"changed_recheck_valid":null,"receipt_status":"failed","missing_evidence_count":0,"verified_evidence_count":0,"assessment_basis":"caller_report_only","stored":false,"durable":false,"route_substitution_rejected":true},"original_intent":{"action":{"domain_action":"smb.sales.offer_discount","requested_effect":{"smb.sales.controls.effect":"smb.sales.offer_discount"},"type":"communicate"},"actor":{"actor_id":"smb.sales.controls-agent","attributes":{},"extensions":{},"lineage_refs":[],"namespace":"smb.sales.controls","owner_ref":null,"schema":"controlspec/v0/actor","schema_version":"0.1.0","type":"agent","version":"1"},"context":{"smb.sales.discount_basis_points":1500},"context_digest":"sha256:9ef70d85099b9abaf8649f6cfb0f943daff79d62e71c9b33321fa56ccfa09982","cost":null,"evidence_refs":[],"extensions":{},"idempotency_key":"discount-self-approval","intent_digest":"sha256:c28c5920136a243b8256f8baaa59709217a8f7043e95dcec06013aaee3d1bf1a","intent_id":"discount-self-approval","namespace":"smb.sales.controls","requested_at":"2026-08-20T12:00:00.000000Z","requested_route":null,"resource":{"attributes":{},"business_id":null,"display_name":null,"extensions":{},"namespace":"smb.sales.controls","resource_id":"smb.sales.controls-resource","schema":"controlspec/v0/resource","schema_version":"0.1.0","type":"smb.customer_email","version":"1"},"retry_count":0,"schema":"controlspec/v0/action-intent","schema_version":"0.1.0"},"proposed_intent":{"action":{"domain_action":"smb.sales.offer_discount","requested_effect":{"smb.sales.controls.effect":"smb.sales.offer_discount"},"type":"communicate"},"actor":{"actor_id":"smb.sales.controls-agent","attributes":{},"extensions":{},"lineage_refs":[],"namespace":"smb.sales.controls","owner_ref":null,"schema":"controlspec/v0/actor","schema_version":"0.1.0","type":"agent","version":"1"},"context":{"smb.sales.discount_basis_points":1500},"context_digest":"sha256:9ef70d85099b9abaf8649f6cfb0f943daff79d62e71c9b33321fa56ccfa09982","cost":null,"evidence_refs":[],"extensions":{},"idempotency_key":"discount-self-approval","intent_digest":"sha256:c28c5920136a243b8256f8baaa59709217a8f7043e95dcec06013aaee3d1bf1a","intent_id":"discount-self-approval","namespace":"smb.sales.controls","requested_at":"2026-08-20T12:00:00.000000Z","requested_route":null,"resource":{"attributes":{},"business_id":null,"display_name":null,"extensions":{},"namespace":"smb.sales.controls","resource_id":"smb.sales.controls-resource","schema":"controlspec/v0/resource","schema_version":"0.1.0","type":"smb.customer_email","version":"1"},"retry_count":0,"schema":"controlspec/v0/action-intent","schema_version":"0.1.0"},"source":{"request":"examples/controlspec/smb-sales-controls/requests/smb-discount-15-direct-self-approval.json","reference_test":{"path":"backend/src/assurance/controlspec/reference_catalog_data/v0_1_1/scenarios/smb-discount-15-direct-self-approval.json","revision":"a6d0c2685a62eb9e21eef49355ed20687bdf9563","symbol":"intent/selection/reference_time"},"selected_pack":{"catalog_id":"smb.sales.controls:sales-baseline@0.1.0","kind":"pack","semantic_digest":"sha256:2dac49ef9705353c556d200cf908a4d4405bdf8a36c68f2f8926628cdfc346bd"},"explanation_codes":["controlspec.core.approval.independence_failed","smb.sales.discount_controlled","smb.sales.manager_required"],"explanation_basis":"reviewed fixture; observe validates exact API match"},"initial_state":{"balance_minor_units":50000,"quote_total_minor_units":100000,"discount_basis_points":0},"lanes":{"without":{"initial_state":{"balance_minor_units":50000,"quote_total_minor_units":100000,"discount_basis_points":0},"final_state":{"balance_minor_units":50000,"quote_total_minor_units":85000,"discount_basis_points":1500},"intent":{"action":{"domain_action":"smb.sales.offer_discount","requested_effect":{"smb.sales.controls.effect":"smb.sales.offer_discount"},"type":"communicate"},"actor":{"actor_id":"smb.sales.controls-agent","attributes":{},"extensions":{},"lineage_refs":[],"namespace":"smb.sales.controls","owner_ref":null,"schema":"controlspec/v0/actor","schema_version":"0.1.0","type":"agent","version":"1"},"context":{"smb.sales.discount_basis_points":1500},"context_digest":"sha256:9ef70d85099b9abaf8649f6cfb0f943daff79d62e71c9b33321fa56ccfa09982","cost":null,"evidence_refs":[],"extensions":{},"idempotency_key":"discount-self-approval","intent_digest":"sha256:c28c5920136a243b8256f8baaa59709217a8f7043e95dcec06013aaee3d1bf1a","intent_id":"discount-self-approval","namespace":"smb.sales.controls","requested_at":"2026-08-20T12:00:00.000000Z","requested_route":null,"resource":{"attributes":{},"business_id":null,"display_name":null,"extensions":{},"namespace":"smb.sales.controls","resource_id":"smb.sales.controls-resource","schema":"controlspec/v0/resource","schema_version":"0.1.0","type":"smb.customer_email","version":"1"},"retry_count":0,"schema":"controlspec/v0/action-intent","schema_version":"0.1.0"},"events":[{"step":0,"kind":"proposed","message":"Identical scripted intent received by an isolated fake target lane.","state":{"balance_minor_units":50000,"quote_total_minor_units":100000,"discount_basis_points":0}},{"step":1,"kind":"dispatch","message":"Comparison lane dispatches directly; this control layer is absent.","state":{"balance_minor_units":50000,"quote_total_minor_units":100000,"discount_basis_points":0}},{"step":2,"kind":"recheck","message":"No ControlSpec binding recheck in this comparison lane.","state":{"balance_minor_units":50000,"quote_total_minor_units":100000,"discount_basis_points":0}},{"step":3,"kind":"target","message":"Fake target changed. No external action occurred.","state":{"balance_minor_units":50000,"quote_total_minor_units":85000,"discount_basis_points":1500}},{"step":4,"kind":"receipt","message":"Sandbox action observed.","state":{"balance_minor_units":50000,"quote_total_minor_units":85000,"discount_basis_points":1500}}],"mutated":true,"target_evidence":[{"kind":"sandbox_target_event","scope":"fake_target_only","intent_digest":"sha256:c28c5920136a243b8256f8baaa59709217a8f7043e95dcec06013aaee3d1bf1a","before":{"balance_minor_units":50000,"quote_total_minor_units":100000,"discount_basis_points":0},"after":{"balance_minor_units":50000,"quote_total_minor_units":85000,"discount_basis_points":1500},"production_evidence":false}],"completion":"Sandbox action observed."},"controlled":{"initial_state":{"balance_minor_units":50000,"quote_total_minor_units":100000,"discount_basis_points":0},"final_state":{"balance_minor_units":50000,"quote_total_minor_units":100000,"discount_basis_points":0},"intent":{"action":{"domain_action":"smb.sales.offer_discount","requested_effect":{"smb.sales.controls.effect":"smb.sales.offer_discount"},"type":"communicate"},"actor":{"actor_id":"smb.sales.controls-agent","attributes":{},"extensions":{},"lineage_refs":[],"namespace":"smb.sales.controls","owner_ref":null,"schema":"controlspec/v0/actor","schema_version":"0.1.0","type":"agent","version":"1"},"context":{"smb.sales.discount_basis_points":1500},"context_digest":"sha256:9ef70d85099b9abaf8649f6cfb0f943daff79d62e71c9b33321fa56ccfa09982","cost":null,"evidence_refs":[],"extensions":{},"idempotency_key":"discount-self-approval","intent_digest":"sha256:c28c5920136a243b8256f8baaa59709217a8f7043e95dcec06013aaee3d1bf1a","intent_id":"discount-self-approval","namespace":"smb.sales.controls","requested_at":"2026-08-20T12:00:00.000000Z","requested_route":null,"resource":{"attributes":{},"business_id":null,"display_name":null,"extensions":{},"namespace":"smb.sales.controls","resource_id":"smb.sales.controls-resource","schema":"controlspec/v0/resource","schema_version":"0.1.0","type":"smb.customer_email","version":"1"},"retry_count":0,"schema":"controlspec/v0/action-intent","schema_version":"0.1.0"},"events":[{"step":0,"kind":"proposed","message":"Identical scripted intent received by an isolated fake target lane.","state":{"balance_minor_units":50000,"quote_total_minor_units":100000,"discount_basis_points":0}},{"step":1,"kind":"decision","message":"Real reference decision: block.","state":{"balance_minor_units":50000,"quote_total_minor_units":100000,"discount_basis_points":0}},{"step":2,"kind":"recheck","message":"Binding valid for proposed action: true.","state":{"balance_minor_units":50000,"quote_total_minor_units":100000,"discount_basis_points":0}},{"step":3,"kind":"target","message":"Dispatch held; fake target unchanged.","state":{"balance_minor_units":50000,"quote_total_minor_units":100000,"discount_basis_points":0}},{"step":4,"kind":"receipt","message":"Reference receipt: failed; verified evidence: 0. Sandbox events do not upgrade this receipt.","state":{"balance_minor_units":50000,"quote_total_minor_units":100000,"discount_basis_points":0}}],"mutated":false,"target_evidence":[],"completion":"Action held; fake target unchanged."}}},{"id":"changed-binding","title":"$42 becomes $43","description":"The exact action changes after its $42 decision. Reusing that decision fails.","domain":"personal","scenario_id":"groceries-42","changed":true,"evidence_available":true,"observation":{"scenario_id":"groceries-42","intent_digest":"sha256:eae71621e734dcf7b654a778562900935637da3b62384ac8a06802ede2d1c16d","pack_catalog_id":"personal.agent.spending:spending-baseline@0.1.0","verdict":"allow","route_kind":"continue","route_id":"continue","recheck_valid":true,"changed_recheck_valid":false,"receipt_status":"incomplete","missing_evidence_count":1,"verified_evidence_count":0,"assessment_basis":"caller_report_only","stored":false,"durable":false,"route_substitution_rejected":true},"original_intent":{"action":{"domain_action":"personal.purchase","requested_effect":{"personal.agent.spending.effect":"personal.purchase"},"type":"commit"},"actor":{"actor_id":"personal.agent.spending-agent","attributes":{},"extensions":{},"lineage_refs":[],"namespace":"personal.agent.spending","owner_ref":null,"schema":"controlspec/v0/actor","schema_version":"0.1.0","type":"agent","version":"1"},"context":{"personal.spending.recurring":false,"personal.spending.total_minor_units":4200},"context_digest":"sha256:dfa417e39a090e49ef9b50cda7e6396ef951cde9696490f7ff5bb28961cc72cb","cost":null,"evidence_refs":[],"extensions":{},"idempotency_key":"groceries-42","intent_digest":"sha256:eae71621e734dcf7b654a778562900935637da3b62384ac8a06802ede2d1c16d","intent_id":"groceries-42","namespace":"personal.agent.spending","requested_at":"2026-08-20T12:00:00.000000Z","requested_route":null,"resource":{"attributes":{},"business_id":null,"display_name":null,"extensions":{},"namespace":"personal.agent.spending","resource_id":"personal.agent.spending-resource","schema":"controlspec/v0/resource","schema_version":"0.1.0","type":"personal.cart","version":"1"},"retry_count":0,"schema":"controlspec/v0/action-intent","schema_version":"0.1.0"},"proposed_intent":{"action":{"domain_action":"personal.purchase","requested_effect":{"personal.agent.spending.effect":"personal.purchase"},"type":"commit"},"actor":{"actor_id":"personal.agent.spending-agent","attributes":{},"extensions":{},"lineage_refs":[],"namespace":"personal.agent.spending","owner_ref":null,"schema":"controlspec/v0/actor","schema_version":"0.1.0","type":"agent","version":"1"},"context":{"personal.spending.recurring":false,"personal.spending.total_minor_units":4300},"context_digest":"sha256:8dff65808208414a1e0918b6d2549c75decee5ea0dfce4e28a1594df2a1b845f","cost":null,"evidence_refs":[],"extensions":{},"idempotency_key":"groceries-42","intent_digest":"sha256:251fff20bf91e75d47b48b2bdce71bb8e41d14f9d5eda519d06d035f694d8d89","intent_id":"groceries-42","namespace":"personal.agent.spending","requested_at":"2026-08-20T12:00:00.000000Z","requested_route":null,"resource":{"attributes":{},"business_id":null,"display_name":null,"extensions":{},"namespace":"personal.agent.spending","resource_id":"personal.agent.spending-resource","schema":"controlspec/v0/resource","schema_version":"0.1.0","type":"personal.cart","version":"1"},"retry_count":0,"schema":"controlspec/v0/action-intent","schema_version":"0.1.0"},"source":{"request":"examples/controlspec/personal-agent-spending/requests/groceries-42.json","reference_test":{"path":"backend/tests/api/test_controlspec_reference_api_examples.py","revision":"a6d0c2685a62eb9e21eef49355ed20687bdf9563","symbol":"test_personal_agent_examples_execute_portably_through_http"},"selected_pack":{"catalog_id":"personal.agent.spending:spending-baseline@0.1.0","kind":"pack","semantic_digest":"sha256:682c677a946588ed7c7313ed0e36c77af8213d77dd82b9979d7d7b8454d29291"},"explanation_codes":["controlspec.core.allow","personal.spending.within_boundary"],"explanation_basis":"reviewed fixture; observe validates exact API match"},"initial_state":{"balance_minor_units":50000,"quote_total_minor_units":100000,"discount_basis_points":0},"lanes":{"without":{"initial_state":{"balance_minor_units":50000,"quote_total_minor_units":100000,"discount_basis_points":0},"final_state":{"balance_minor_units":45700,"quote_total_minor_units":100000,"discount_basis_points":0},"intent":{"action":{"domain_action":"personal.purchase","requested_effect":{"personal.agent.spending.effect":"personal.purchase"},"type":"commit"},"actor":{"actor_id":"personal.agent.spending-agent","attributes":{},"extensions":{},"lineage_refs":[],"namespace":"personal.agent.spending","owner_ref":null,"schema":"controlspec/v0/actor","schema_version":"0.1.0","type":"agent","version":"1"},"context":{"personal.spending.recurring":false,"personal.spending.total_minor_units":4300},"context_digest":"sha256:8dff65808208414a1e0918b6d2549c75decee5ea0dfce4e28a1594df2a1b845f","cost":null,"evidence_refs":[],"extensions":{},"idempotency_key":"groceries-42","intent_digest":"sha256:251fff20bf91e75d47b48b2bdce71bb8e41d14f9d5eda519d06d035f694d8d89","intent_id":"groceries-42","namespace":"personal.agent.spending","requested_at":"2026-08-20T12:00:00.000000Z","requested_route":null,"resource":{"attributes":{},"business_id":null,"display_name":null,"extensions":{},"namespace":"personal.agent.spending","resource_id":"personal.agent.spending-resource","schema":"controlspec/v0/resource","schema_version":"0.1.0","type":"personal.cart","version":"1"},"retry_count":0,"schema":"controlspec/v0/action-intent","schema_version":"0.1.0"},"events":[{"step":0,"kind":"proposed","message":"Identical scripted intent received by an isolated fake target lane.","state":{"balance_minor_units":50000,"quote_total_minor_units":100000,"discount_basis_points":0}},{"step":1,"kind":"dispatch","message":"Comparison lane dispatches directly; this control layer is absent.","state":{"balance_minor_units":50000,"quote_total_minor_units":100000,"discount_basis_points":0}},{"step":2,"kind":"recheck","message":"No ControlSpec binding recheck in this comparison lane.","state":{"balance_minor_units":50000,"quote_total_minor_units":100000,"discount_basis_points":0}},{"step":3,"kind":"target","message":"Fake target changed. No external action occurred.","state":{"balance_minor_units":45700,"quote_total_minor_units":100000,"discount_basis_points":0}},{"step":4,"kind":"receipt","message":"Sandbox action observed.","state":{"balance_minor_units":45700,"quote_total_minor_units":100000,"discount_basis_points":0}}],"mutated":true,"target_evidence":[{"kind":"sandbox_target_event","scope":"fake_target_only","intent_digest":"sha256:251fff20bf91e75d47b48b2bdce71bb8e41d14f9d5eda519d06d035f694d8d89","before":{"balance_minor_units":50000,"quote_total_minor_units":100000,"discount_basis_points":0},"after":{"balance_minor_units":45700,"quote_total_minor_units":100000,"discount_basis_points":0},"production_evidence":false}],"completion":"Sandbox action observed."},"controlled":{"initial_state":{"balance_minor_units":50000,"quote_total_minor_units":100000,"discount_basis_points":0},"final_state":{"balance_minor_units":50000,"quote_total_minor_units":100000,"discount_basis_points":0},"intent":{"action":{"domain_action":"personal.purchase","requested_effect":{"personal.agent.spending.effect":"personal.purchase"},"type":"commit"},"actor":{"actor_id":"personal.agent.spending-agent","attributes":{},"extensions":{},"lineage_refs":[],"namespace":"personal.agent.spending","owner_ref":null,"schema":"controlspec/v0/actor","schema_version":"0.1.0","type":"agent","version":"1"},"context":{"personal.spending.recurring":false,"personal.spending.total_minor_units":4300},"context_digest":"sha256:8dff65808208414a1e0918b6d2549c75decee5ea0dfce4e28a1594df2a1b845f","cost":null,"evidence_refs":[],"extensions":{},"idempotency_key":"groceries-42","intent_digest":"sha256:251fff20bf91e75d47b48b2bdce71bb8e41d14f9d5eda519d06d035f694d8d89","intent_id":"groceries-42","namespace":"personal.agent.spending","requested_at":"2026-08-20T12:00:00.000000Z","requested_route":null,"resource":{"attributes":{},"business_id":null,"display_name":null,"extensions":{},"namespace":"personal.agent.spending","resource_id":"personal.agent.spending-resource","schema":"controlspec/v0/resource","schema_version":"0.1.0","type":"personal.cart","version":"1"},"retry_count":0,"schema":"controlspec/v0/action-intent","schema_version":"0.1.0"},"events":[{"step":0,"kind":"proposed","message":"Identical scripted intent received by an isolated fake target lane.","state":{"balance_minor_units":50000,"quote_total_minor_units":100000,"discount_basis_points":0}},{"step":1,"kind":"decision","message":"Real reference decision: allow.","state":{"balance_minor_units":50000,"quote_total_minor_units":100000,"discount_basis_points":0}},{"step":2,"kind":"recheck","message":"Binding valid for proposed action: false.","state":{"balance_minor_units":50000,"quote_total_minor_units":100000,"discount_basis_points":0}},{"step":3,"kind":"target","message":"Dispatch held; fake target unchanged.","state":{"balance_minor_units":50000,"quote_total_minor_units":100000,"discount_basis_points":0}},{"step":4,"kind":"receipt","message":"Reference receipt: incomplete; verified evidence: 0. Sandbox events do not upgrade this receipt.","state":{"balance_minor_units":50000,"quote_total_minor_units":100000,"discount_basis_points":0}}],"mutated":false,"target_evidence":[],"completion":"Action held; fake target unchanged."}}},{"id":"missing-proof","title":"Done is only a claim","description":"A fake purchase runs, but target evidence is withheld from both lanes.","domain":"personal","scenario_id":"groceries-42","changed":false,"evidence_available":false,"observation":{"scenario_id":"groceries-42","intent_digest":"sha256:eae71621e734dcf7b654a778562900935637da3b62384ac8a06802ede2d1c16d","pack_catalog_id":"personal.agent.spending:spending-baseline@0.1.0","verdict":"allow","route_kind":"continue","route_id":"continue","recheck_valid":true,"changed_recheck_valid":false,"receipt_status":"incomplete","missing_evidence_count":1,"verified_evidence_count":0,"assessment_basis":"caller_report_only","stored":false,"durable":false,"route_substitution_rejected":true},"original_intent":{"action":{"domain_action":"personal.purchase","requested_effect":{"personal.agent.spending.effect":"personal.purchase"},"type":"commit"},"actor":{"actor_id":"personal.agent.spending-agent","attributes":{},"extensions":{},"lineage_refs":[],"namespace":"personal.agent.spending","owner_ref":null,"schema":"controlspec/v0/actor","schema_version":"0.1.0","type":"agent","version":"1"},"context":{"personal.spending.recurring":false,"personal.spending.total_minor_units":4200},"context_digest":"sha256:dfa417e39a090e49ef9b50cda7e6396ef951cde9696490f7ff5bb28961cc72cb","cost":null,"evidence_refs":[],"extensions":{},"idempotency_key":"groceries-42","intent_digest":"sha256:eae71621e734dcf7b654a778562900935637da3b62384ac8a06802ede2d1c16d","intent_id":"groceries-42","namespace":"personal.agent.spending","requested_at":"2026-08-20T12:00:00.000000Z","requested_route":null,"resource":{"attributes":{},"business_id":null,"display_name":null,"extensions":{},"namespace":"personal.agent.spending","resource_id":"personal.agent.spending-resource","schema":"controlspec/v0/resource","schema_version":"0.1.0","type":"personal.cart","version":"1"},"retry_count":0,"schema":"controlspec/v0/action-intent","schema_version":"0.1.0"},"proposed_intent":{"action":{"domain_action":"personal.purchase","requested_effect":{"personal.agent.spending.effect":"personal.purchase"},"type":"commit"},"actor":{"actor_id":"personal.agent.spending-agent","attributes":{},"extensions":{},"lineage_refs":[],"namespace":"personal.agent.spending","owner_ref":null,"schema":"controlspec/v0/actor","schema_version":"0.1.0","type":"agent","version":"1"},"context":{"personal.spending.recurring":false,"personal.spending.total_minor_units":4200},"context_digest":"sha256:dfa417e39a090e49ef9b50cda7e6396ef951cde9696490f7ff5bb28961cc72cb","cost":null,"evidence_refs":[],"extensions":{},"idempotency_key":"groceries-42","intent_digest":"sha256:eae71621e734dcf7b654a778562900935637da3b62384ac8a06802ede2d1c16d","intent_id":"groceries-42","namespace":"personal.agent.spending","requested_at":"2026-08-20T12:00:00.000000Z","requested_route":null,"resource":{"attributes":{},"business_id":null,"display_name":null,"extensions":{},"namespace":"personal.agent.spending","resource_id":"personal.agent.spending-resource","schema":"controlspec/v0/resource","schema_version":"0.1.0","type":"personal.cart","version":"1"},"retry_count":0,"schema":"controlspec/v0/action-intent","schema_version":"0.1.0"},"source":{"request":"examples/controlspec/personal-agent-spending/requests/groceries-42.json","reference_test":{"path":"backend/tests/api/test_controlspec_reference_api_examples.py","revision":"a6d0c2685a62eb9e21eef49355ed20687bdf9563","symbol":"test_personal_agent_examples_execute_portably_through_http"},"selected_pack":{"catalog_id":"personal.agent.spending:spending-baseline@0.1.0","kind":"pack","semantic_digest":"sha256:682c677a946588ed7c7313ed0e36c77af8213d77dd82b9979d7d7b8454d29291"},"explanation_codes":["controlspec.core.allow","personal.spending.within_boundary"],"explanation_basis":"reviewed fixture; observe validates exact API match"},"initial_state":{"balance_minor_units":50000,"quote_total_minor_units":100000,"discount_basis_points":0},"lanes":{"without":{"initial_state":{"balance_minor_units":50000,"quote_total_minor_units":100000,"discount_basis_points":0},"final_state":{"balance_minor_units":45800,"quote_total_minor_units":100000,"discount_basis_points":0},"intent":{"action":{"domain_action":"personal.purchase","requested_effect":{"personal.agent.spending.effect":"personal.purchase"},"type":"commit"},"actor":{"actor_id":"personal.agent.spending-agent","attributes":{},"extensions":{},"lineage_refs":[],"namespace":"personal.agent.spending","owner_ref":null,"schema":"controlspec/v0/actor","schema_version":"0.1.0","type":"agent","version":"1"},"context":{"personal.spending.recurring":false,"personal.spending.total_minor_units":4200},"context_digest":"sha256:dfa417e39a090e49ef9b50cda7e6396ef951cde9696490f7ff5bb28961cc72cb","cost":null,"evidence_refs":[],"extensions":{},"idempotency_key":"groceries-42","intent_digest":"sha256:eae71621e734dcf7b654a778562900935637da3b62384ac8a06802ede2d1c16d","intent_id":"groceries-42","namespace":"personal.agent.spending","requested_at":"2026-08-20T12:00:00.000000Z","requested_route":null,"resource":{"attributes":{},"business_id":null,"display_name":null,"extensions":{},"namespace":"personal.agent.spending","resource_id":"personal.agent.spending-resource","schema":"controlspec/v0/resource","schema_version":"0.1.0","type":"personal.cart","version":"1"},"retry_count":0,"schema":"controlspec/v0/action-intent","schema_version":"0.1.0"},"events":[{"step":0,"kind":"proposed","message":"Identical scripted intent received by an isolated fake target lane.","state":{"balance_minor_units":50000,"quote_total_minor_units":100000,"discount_basis_points":0}},{"step":1,"kind":"dispatch","message":"Comparison lane dispatches directly; this control layer is absent.","state":{"balance_minor_units":50000,"quote_total_minor_units":100000,"discount_basis_points":0}},{"step":2,"kind":"recheck","message":"No ControlSpec binding recheck in this comparison lane.","state":{"balance_minor_units":50000,"quote_total_minor_units":100000,"discount_basis_points":0}},{"step":3,"kind":"target","message":"Fake target changed. No external action occurred.","state":{"balance_minor_units":45800,"quote_total_minor_units":100000,"discount_basis_points":0}},{"step":4,"kind":"receipt","message":"Caller reports done; target proof is absent.","state":{"balance_minor_units":45800,"quote_total_minor_units":100000,"discount_basis_points":0}}],"mutated":true,"target_evidence":[],"completion":"Caller reports done; target proof is absent."},"controlled":{"initial_state":{"balance_minor_units":50000,"quote_total_minor_units":100000,"discount_basis_points":0},"final_state":{"balance_minor_units":45800,"quote_total_minor_units":100000,"discount_basis_points":0},"intent":{"action":{"domain_action":"personal.purchase","requested_effect":{"personal.agent.spending.effect":"personal.purchase"},"type":"commit"},"actor":{"actor_id":"personal.agent.spending-agent","attributes":{},"extensions":{},"lineage_refs":[],"namespace":"personal.agent.spending","owner_ref":null,"schema":"controlspec/v0/actor","schema_version":"0.1.0","type":"agent","version":"1"},"context":{"personal.spending.recurring":false,"personal.spending.total_minor_units":4200},"context_digest":"sha256:dfa417e39a090e49ef9b50cda7e6396ef951cde9696490f7ff5bb28961cc72cb","cost":null,"evidence_refs":[],"extensions":{},"idempotency_key":"groceries-42","intent_digest":"sha256:eae71621e734dcf7b654a778562900935637da3b62384ac8a06802ede2d1c16d","intent_id":"groceries-42","namespace":"personal.agent.spending","requested_at":"2026-08-20T12:00:00.000000Z","requested_route":null,"resource":{"attributes":{},"business_id":null,"display_name":null,"extensions":{},"namespace":"personal.agent.spending","resource_id":"personal.agent.spending-resource","schema":"controlspec/v0/resource","schema_version":"0.1.0","type":"personal.cart","version":"1"},"retry_count":0,"schema":"controlspec/v0/action-intent","schema_version":"0.1.0"},"events":[{"step":0,"kind":"proposed","message":"Identical scripted intent received by an isolated fake target lane.","state":{"balance_minor_units":50000,"quote_total_minor_units":100000,"discount_basis_points":0}},{"step":1,"kind":"decision","message":"Real reference decision: allow.","state":{"balance_minor_units":50000,"quote_total_minor_units":100000,"discount_basis_points":0}},{"step":2,"kind":"recheck","message":"Binding valid for proposed action: true.","state":{"balance_minor_units":50000,"quote_total_minor_units":100000,"discount_basis_points":0}},{"step":3,"kind":"target","message":"Fake target changed. No external action occurred.","state":{"balance_minor_units":45800,"quote_total_minor_units":100000,"discount_basis_points":0}},{"step":4,"kind":"receipt","message":"Reference receipt: incomplete; verified evidence: 0. Sandbox events do not upgrade this receipt.","state":{"balance_minor_units":45800,"quote_total_minor_units":100000,"discount_basis_points":0}}],"mutated":true,"target_evidence":[],"completion":"Completion unverified; no sandbox target evidence received."}}},{"id":"allowed","title":"The $42 purchase proceeds","description":"An allowed, unchanged action reaches the fake target. Sandbox evidence is visible.","domain":"personal","scenario_id":"groceries-42","changed":false,"evidence_available":true,"observation":{"scenario_id":"groceries-42","intent_digest":"sha256:eae71621e734dcf7b654a778562900935637da3b62384ac8a06802ede2d1c16d","pack_catalog_id":"personal.agent.spending:spending-baseline@0.1.0","verdict":"allow","route_kind":"continue","route_id":"continue","recheck_valid":true,"changed_recheck_valid":false,"receipt_status":"incomplete","missing_evidence_count":1,"verified_evidence_count":0,"assessment_basis":"caller_report_only","stored":false,"durable":false,"route_substitution_rejected":true},"original_intent":{"action":{"domain_action":"personal.purchase","requested_effect":{"personal.agent.spending.effect":"personal.purchase"},"type":"commit"},"actor":{"actor_id":"personal.agent.spending-agent","attributes":{},"extensions":{},"lineage_refs":[],"namespace":"personal.agent.spending","owner_ref":null,"schema":"controlspec/v0/actor","schema_version":"0.1.0","type":"agent","version":"1"},"context":{"personal.spending.recurring":false,"personal.spending.total_minor_units":4200},"context_digest":"sha256:dfa417e39a090e49ef9b50cda7e6396ef951cde9696490f7ff5bb28961cc72cb","cost":null,"evidence_refs":[],"extensions":{},"idempotency_key":"groceries-42","intent_digest":"sha256:eae71621e734dcf7b654a778562900935637da3b62384ac8a06802ede2d1c16d","intent_id":"groceries-42","namespace":"personal.agent.spending","requested_at":"2026-08-20T12:00:00.000000Z","requested_route":null,"resource":{"attributes":{},"business_id":null,"display_name":null,"extensions":{},"namespace":"personal.agent.spending","resource_id":"personal.agent.spending-resource","schema":"controlspec/v0/resource","schema_version":"0.1.0","type":"personal.cart","version":"1"},"retry_count":0,"schema":"controlspec/v0/action-intent","schema_version":"0.1.0"},"proposed_intent":{"action":{"domain_action":"personal.purchase","requested_effect":{"personal.agent.spending.effect":"personal.purchase"},"type":"commit"},"actor":{"actor_id":"personal.agent.spending-agent","attributes":{},"extensions":{},"lineage_refs":[],"namespace":"personal.agent.spending","owner_ref":null,"schema":"controlspec/v0/actor","schema_version":"0.1.0","type":"agent","version":"1"},"context":{"personal.spending.recurring":false,"personal.spending.total_minor_units":4200},"context_digest":"sha256:dfa417e39a090e49ef9b50cda7e6396ef951cde9696490f7ff5bb28961cc72cb","cost":null,"evidence_refs":[],"extensions":{},"idempotency_key":"groceries-42","intent_digest":"sha256:eae71621e734dcf7b654a778562900935637da3b62384ac8a06802ede2d1c16d","intent_id":"groceries-42","namespace":"personal.agent.spending","requested_at":"2026-08-20T12:00:00.000000Z","requested_route":null,"resource":{"attributes":{},"business_id":null,"display_name":null,"extensions":{},"namespace":"personal.agent.spending","resource_id":"personal.agent.spending-resource","schema":"controlspec/v0/resource","schema_version":"0.1.0","type":"personal.cart","version":"1"},"retry_count":0,"schema":"controlspec/v0/action-intent","schema_version":"0.1.0"},"source":{"request":"examples/controlspec/personal-agent-spending/requests/groceries-42.json","reference_test":{"path":"backend/tests/api/test_controlspec_reference_api_examples.py","revision":"a6d0c2685a62eb9e21eef49355ed20687bdf9563","symbol":"test_personal_agent_examples_execute_portably_through_http"},"selected_pack":{"catalog_id":"personal.agent.spending:spending-baseline@0.1.0","kind":"pack","semantic_digest":"sha256:682c677a946588ed7c7313ed0e36c77af8213d77dd82b9979d7d7b8454d29291"},"explanation_codes":["controlspec.core.allow","personal.spending.within_boundary"],"explanation_basis":"reviewed fixture; observe validates exact API match"},"initial_state":{"balance_minor_units":50000,"quote_total_minor_units":100000,"discount_basis_points":0},"lanes":{"without":{"initial_state":{"balance_minor_units":50000,"quote_total_minor_units":100000,"discount_basis_points":0},"final_state":{"balance_minor_units":45800,"quote_total_minor_units":100000,"discount_basis_points":0},"intent":{"action":{"domain_action":"personal.purchase","requested_effect":{"personal.agent.spending.effect":"personal.purchase"},"type":"commit"},"actor":{"actor_id":"personal.agent.spending-agent","attributes":{},"extensions":{},"lineage_refs":[],"namespace":"personal.agent.spending","owner_ref":null,"schema":"controlspec/v0/actor","schema_version":"0.1.0","type":"agent","version":"1"},"context":{"personal.spending.recurring":false,"personal.spending.total_minor_units":4200},"context_digest":"sha256:dfa417e39a090e49ef9b50cda7e6396ef951cde9696490f7ff5bb28961cc72cb","cost":null,"evidence_refs":[],"extensions":{},"idempotency_key":"groceries-42","intent_digest":"sha256:eae71621e734dcf7b654a778562900935637da3b62384ac8a06802ede2d1c16d","intent_id":"groceries-42","namespace":"personal.agent.spending","requested_at":"2026-08-20T12:00:00.000000Z","requested_route":null,"resource":{"attributes":{},"business_id":null,"display_name":null,"extensions":{},"namespace":"personal.agent.spending","resource_id":"personal.agent.spending-resource","schema":"controlspec/v0/resource","schema_version":"0.1.0","type":"personal.cart","version":"1"},"retry_count":0,"schema":"controlspec/v0/action-intent","schema_version":"0.1.0"},"events":[{"step":0,"kind":"proposed","message":"Identical scripted intent received by an isolated fake target lane.","state":{"balance_minor_units":50000,"quote_total_minor_units":100000,"discount_basis_points":0}},{"step":1,"kind":"dispatch","message":"Comparison lane dispatches directly; this control layer is absent.","state":{"balance_minor_units":50000,"quote_total_minor_units":100000,"discount_basis_points":0}},{"step":2,"kind":"recheck","message":"No ControlSpec binding recheck in this comparison lane.","state":{"balance_minor_units":50000,"quote_total_minor_units":100000,"discount_basis_points":0}},{"step":3,"kind":"target","message":"Fake target changed. No external action occurred.","state":{"balance_minor_units":45800,"quote_total_minor_units":100000,"discount_basis_points":0}},{"step":4,"kind":"receipt","message":"Sandbox action observed.","state":{"balance_minor_units":45800,"quote_total_minor_units":100000,"discount_basis_points":0}}],"mutated":true,"target_evidence":[{"kind":"sandbox_target_event","scope":"fake_target_only","intent_digest":"sha256:eae71621e734dcf7b654a778562900935637da3b62384ac8a06802ede2d1c16d","before":{"balance_minor_units":50000,"quote_total_minor_units":100000,"discount_basis_points":0},"after":{"balance_minor_units":45800,"quote_total_minor_units":100000,"discount_basis_points":0},"production_evidence":false}],"completion":"Sandbox action observed."},"controlled":{"initial_state":{"balance_minor_units":50000,"quote_total_minor_units":100000,"discount_basis_points":0},"final_state":{"balance_minor_units":45800,"quote_total_minor_units":100000,"discount_basis_points":0},"intent":{"action":{"domain_action":"personal.purchase","requested_effect":{"personal.agent.spending.effect":"personal.purchase"},"type":"commit"},"actor":{"actor_id":"personal.agent.spending-agent","attributes":{},"extensions":{},"lineage_refs":[],"namespace":"personal.agent.spending","owner_ref":null,"schema":"controlspec/v0/actor","schema_version":"0.1.0","type":"agent","version":"1"},"context":{"personal.spending.recurring":false,"personal.spending.total_minor_units":4200},"context_digest":"sha256:dfa417e39a090e49ef9b50cda7e6396ef951cde9696490f7ff5bb28961cc72cb","cost":null,"evidence_refs":[],"extensions":{},"idempotency_key":"groceries-42","intent_digest":"sha256:eae71621e734dcf7b654a778562900935637da3b62384ac8a06802ede2d1c16d","intent_id":"groceries-42","namespace":"personal.agent.spending","requested_at":"2026-08-20T12:00:00.000000Z","requested_route":null,"resource":{"attributes":{},"business_id":null,"display_name":null,"extensions":{},"namespace":"personal.agent.spending","resource_id":"personal.agent.spending-resource","schema":"controlspec/v0/resource","schema_version":"0.1.0","type":"personal.cart","version":"1"},"retry_count":0,"schema":"controlspec/v0/action-intent","schema_version":"0.1.0"},"events":[{"step":0,"kind":"proposed","message":"Identical scripted intent received by an isolated fake target lane.","state":{"balance_minor_units":50000,"quote_total_minor_units":100000,"discount_basis_points":0}},{"step":1,"kind":"decision","message":"Real reference decision: allow.","state":{"balance_minor_units":50000,"quote_total_minor_units":100000,"discount_basis_points":0}},{"step":2,"kind":"recheck","message":"Binding valid for proposed action: true.","state":{"balance_minor_units":50000,"quote_total_minor_units":100000,"discount_basis_points":0}},{"step":3,"kind":"target","message":"Fake target changed. No external action occurred.","state":{"balance_minor_units":45800,"quote_total_minor_units":100000,"discount_basis_points":0}},{"step":4,"kind":"receipt","message":"Reference receipt: incomplete; verified evidence: 0. Sandbox events do not upgrade this receipt.","state":{"balance_minor_units":45800,"quote_total_minor_units":100000,"discount_basis_points":0}}],"mutated":true,"target_evidence":[{"kind":"sandbox_target_event","scope":"fake_target_only","intent_digest":"sha256:eae71621e734dcf7b654a778562900935637da3b62384ac8a06802ede2d1c16d","before":{"balance_minor_units":50000,"quote_total_minor_units":100000,"discount_basis_points":0},"after":{"balance_minor_units":45800,"quote_total_minor_units":100000,"discount_basis_points":0},"production_evidence":false}],"completion":"Sandbox action observed; reference completion remains unverified."}}}]}</script>
|
| 33 |
+
<script>
|
| 34 |
+
'use strict';
|
| 35 |
+
const data=JSON.parse(document.getElementById('action-data').textContent);
|
| 36 |
+
const scenes=data.scenes;
|
| 37 |
+
let current=0,phase=0,timer=null;
|
| 38 |
+
const labels=['Overspend','Discount','Self-approval','Changed action','Missing proof','Allowed action'];
|
| 39 |
+
const lessons=['A spending limit changes the route before the simulated purchase.','A legitimate sale can still require someone else’s approval.','The agent cannot become its own independent approver.','Permission for the original action does not cover a changed action.','“Done” is a report. Verified completion requires the right evidence.','Useful autonomy includes letting permitted actions proceed.'];
|
| 40 |
+
const $=id=>document.getElementById(id);
|
| 41 |
+
const money=n=>new Intl.NumberFormat('en-US',{style:'currency',currency:'USD'}).format(n/100);
|
| 42 |
+
const names={allow:'ALLOW',allow_with_conditions:'CONDITIONS REQUIRED',require_approval:'APPROVAL REQUIRED',block:'BLOCKED'};
|
| 43 |
+
scenes.forEach((s,i)=>{const b=document.createElement('button');b.type='button';b.textContent=String(i+1).padStart(2,'0')+' '+labels[i];b.addEventListener('click',()=>{pause();current=i;phase=0;render()});$('scenes').append(b)});
|
| 44 |
+
function pause(){if(timer!==null)clearInterval(timer);timer=null;$('play').textContent='▶ Resume comparison'}
|
| 45 |
+
function advance(){if(phase<3){phase++}else if(current<scenes.length-1){current++;phase=0}else{pause();render();return}render()}
|
| 46 |
+
function render(){
|
| 47 |
+
const s=scenes[current],isQuote=s.domain==='smb';
|
| 48 |
+
$('title').textContent=s.title;$('description').textContent=s.description;$('domain').textContent=isQuote?'Sales agent / sandbox quote':'Personal agent / sandbox account';$('counter').textContent=String(current+1).padStart(2,'0')+' / '+String(scenes.length).padStart(2,'0');
|
| 49 |
+
[...$('scenes').children].forEach((b,i)=>b.setAttribute('aria-pressed',String(i===current)));
|
| 50 |
+
document.querySelectorAll('.phases span').forEach((p,i)=>{p.classList.toggle('active',i<=phase);if(i===phase)p.setAttribute('aria-current','step');else p.removeAttribute('aria-current')});
|
| 51 |
+
for(const key of ['without','controlled']){
|
| 52 |
+
const el=$(key),lane=s.lanes[key],after=phase>=2,state=after?lane.final_state:lane.initial_state;
|
| 53 |
+
el.querySelector('.state-label').textContent=isQuote?'Simulated quote total':'Simulated account balance';
|
| 54 |
+
el.querySelector('.value').textContent=money(isQuote?state.quote_total_minor_units:state.balance_minor_units);
|
| 55 |
+
el.querySelector('.state-caption').textContent=isQuote?'Discount: '+(state.discount_basis_points/100)+'%':after?(lane.mutated?'Sandbox debit recorded':'No sandbox debit'):'Same starting balance in both lanes';
|
| 56 |
+
const badge=el.querySelector('.status');badge.classList.toggle('done',phase>=1);
|
| 57 |
+
badge.textContent=phase===0?'INTENT RECEIVED':key==='without'?(phase<2?'DIRECT DISPATCH':lane.mutated?'SANDBOX TARGET CHANGED':'NO TARGET CHANGE'):phase===1?(names[s.observation.verdict]||s.observation.verdict):lane.mutated?'SANDBOX ACTION PERMITTED':'HELD · TARGET UNCHANGED';
|
| 58 |
+
if(key==='controlled'&&s.id==='changed-binding'&&phase>=2&&s.observation.changed_recheck_valid===false)badge.textContent='BINDING RECHECK FAILED';
|
| 59 |
+
if(key==='controlled'&&phase===3&&lane.mutated&&lane.target_evidence.length===0)badge.textContent='COMPLETION UNVERIFIED';
|
| 60 |
+
const log=el.querySelector('.events');log.replaceChildren();
|
| 61 |
+
const lines=phase===0?['Scripted proposal received. Inspect the trace for exact input.']:phase===1?(key==='without'?['ControlSpec is absent from this simulated dispatch path.','No ControlSpec binding recheck in this lane.']:['Reference verdict: '+s.observation.verdict,'Exact binding recheck: '+String(s.id==='changed-binding'?s.observation.changed_recheck_valid:s.observation.recheck_valid)]):lane.events.filter(e=>e.step>0&&e.step<=(phase===2?3:4)).reverse().map(e=>e.message);
|
| 62 |
+
lines.forEach(line=>{const p=document.createElement('p');p.textContent='› '+line;log.append(p)});
|
| 63 |
+
const evidence=el.querySelector('.evidence');evidence.textContent=phase<3?'Evidence assessment appears at the final step.':key==='controlled'?'Sandbox target events: '+lane.target_evidence.length+'. Reference receipt: '+s.observation.receipt_status+'. Verified reference evidence: '+s.observation.verified_evidence_count+'.':typeof lane.completion==='string'?'Sandbox completion: '+lane.completion:JSON.stringify(lane.completion);
|
| 64 |
+
}
|
| 65 |
+
$('rule').textContent=['Example rule: purchases over $75 require approval.','Example rule: discounts over 10% need independent manager approval.','Example rule: the approver must be separate from the actor and proposer.','Binding rule: recheck the exact action before dispatch.','Evidence rule: a caller report cannot replace required purchase evidence.','Example rule: non-recurring purchases up to $75 may proceed; purchase evidence is still required.'][current];
|
| 66 |
+
$('lesson').textContent=lessons[current];$('trace').textContent=JSON.stringify(s,null,2);$('provenance').textContent='Source commit: '+data.source_commit+' · Mode: '+data.mode+' · Full build provenance is included in the downloadable trace.';
|
| 67 |
+
const ended=current===scenes.length-1&&phase===3;$('step').disabled=ended;
|
| 68 |
+
$('timing').textContent='Scene '+(current+1)+' of '+scenes.length+' · Step '+(phase+1)+' of 4'+(ended?' · Replay complete':'');
|
| 69 |
+
if(ended&&timer!==null)pause();if(timer===null)$('play').textContent=ended?'↺ Replay comparison':current===0&&phase===0?'▶ Run the comparison':'▶ Resume comparison';
|
| 70 |
+
$('announce').textContent=s.title+'. '+['Intent received','Decision shown','Sandbox target outcome shown','Evidence assessment shown'][phase]+'.';
|
| 71 |
+
}
|
| 72 |
+
$('play').addEventListener('click',()=>{if(timer!==null){pause();return}if(current===scenes.length-1&&phase===3){current=0;phase=0}timer=setInterval(advance,2500);render();$('play').textContent='Ⅱ Pause comparison'});
|
| 73 |
+
$('step').addEventListener('click',()=>{pause();advance()});$('reset').addEventListener('click',()=>{pause();current=0;phase=0;render()});render();
|
| 74 |
+
</script>
|
| 75 |
+
</body></html>
|
action-traces.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
index.html
CHANGED
|
The diff for this file is too large to render.
See raw diff
|
|
|
openshell-traces.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
reference-demo.html
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<!doctype html>
|
| 2 |
+
<html lang="en">
|
| 3 |
+
<head>
|
| 4 |
+
<meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
|
| 5 |
+
<title>ControlSpec — Before an agent acts</title>
|
| 6 |
+
<meta name="description" content="Explore seven recorded ControlSpec examples: spending limits, approval requirements, self-approval rejection and changed intent binding.">
|
| 7 |
+
<style>
|
| 8 |
+
:root{color-scheme:light;--ink:#18382e;--muted:#607268;--line:#d7e1d8;--paper:#f5f7ef;--green:#246346;--white:#fff;--amber:#8d590a;--red:#ab3838}*{box-sizing:border-box}body{margin:0;background:var(--paper);color:var(--ink);font-family:system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;line-height:1.55}a{color:inherit;text-underline-offset:3px}button{font:inherit;cursor:pointer}button:focus-visible,a:focus-visible,summary:focus-visible{outline:3px solid #297aab;outline-offset:4px}header{display:flex;justify-content:space-between;align-items:center;padding:22px 0;border-bottom:1px solid var(--line);gap:20px}.brand{font-weight:800;font-size:21px;letter-spacing:-.6px}.brand span{display:inline-grid;place-items:center;background:var(--ink);color:white;width:30px;height:30px;border-radius:7px;margin-right:9px;font-size:18px}nav{display:flex;gap:24px;font-size:14px}main,header,footer{max-width:1120px;margin:auto}main{padding:42px 0}.eyebrow{text-transform:uppercase;letter-spacing:1.8px;font-size:11px;font-weight:800;color:var(--green);margin:0 0 10px}h1{font-size:clamp(30px,4vw,47px);letter-spacing:-1.8px;line-height:1.15;margin:0 0 15px;max-width:830px}h2,h3,p{margin-top:0}.intro{max-width:700px;color:var(--muted);font-size:17px;margin-bottom:18px}.notice{font-size:13px;border-left:3px solid #93b598;padding:8px 12px;max-width:790px;margin-bottom:30px}.workbench{display:grid;grid-template-columns:340px 1fr;gap:20px}.panel{background:var(--white);border:1px solid var(--line);border-radius:14px;padding:25px}.tabs{display:flex;border-bottom:1px solid var(--line);gap:8px;padding-bottom:16px;margin-bottom:20px}.tab{border:0;border-radius:7px;padding:8px 14px;background:transparent;color:var(--muted);font-weight:650}.tab[aria-pressed=true]{background:var(--ink);color:white}.section-label{font-size:12px;color:var(--muted);margin-bottom:12px}.choices{display:flex;flex-direction:column;gap:10px}.choice{border:1px solid var(--line);border-radius:9px;background:white;text-align:left;color:var(--ink);padding:14px 15px;transition:border-color .12s}.choice:hover{border-color:var(--green)}.choice[aria-pressed=true]{border-color:var(--green);box-shadow:inset 3px 0 var(--green);background:#f1f7f1}.choice strong{display:block;font-size:15px}.choice small{display:block;color:var(--muted);margin-top:3px;font-size:12px}.pack{font-size:12px;overflow-wrap:anywhere;color:var(--muted);padding-top:22px}.pack code{display:block;margin-top:6px;font-size:11px}.result-head{display:flex;justify-content:space-between;align-items:center;gap:14px;margin-bottom:21px}.result-head .section-label{margin:0}.badge{font-size:11px;letter-spacing:1px;text-transform:uppercase;font-weight:750;border-radius:30px;padding:6px 12px;background:#e5f1e7;color:var(--green)}.badge.approval,.badge.conditions{background:#fff0d6;color:var(--amber)}.badge.block{background:#ffe9e6;color:var(--red)}.decision{font-size:32px;letter-spacing:-1px;margin:0 0 12px}.explanation{color:var(--muted);max-width:620px;min-height:49px}.steps{display:grid;gap:0;margin-top:25px}.step{display:grid;grid-template-columns:32px 1fr;gap:10px;border-top:1px solid var(--line);padding:17px 0}.num{color:var(--muted);font-size:12px;padding-top:3px}.step h3{font-size:14px;margin:0 0 4px}.step p{font-size:13px;color:var(--muted);margin:0}.step code{font-size:12px;overflow-wrap:anywhere}.toggle{margin-top:12px;border:1px solid var(--line);background:#f5f7f4;color:var(--ink);border-radius:7px;padding:8px 12px;font-size:12px}.toggle[aria-pressed=true]{background:#ffe9e6;border-color:#d6aaa4}.binding-error{color:var(--red)!important;font-weight:650}.bottom{display:flex;gap:24px;justify-content:space-between;padding-top:28px;color:var(--muted);font-size:13px}.bottom p{max-width:610px}details{margin-top:20px;border:1px solid var(--line);border-radius:10px;padding:15px 18px;background:#fff}summary{cursor:pointer;font-size:13px;font-weight:650}pre{font-size:11px;white-space:pre-wrap;overflow-wrap:anywhere;max-height:300px;overflow:auto;background:#f5f7f4;padding:14px;border-radius:6px}footer{border-top:1px solid var(--line);padding:20px 0 30px;color:var(--muted);font-size:12px;display:flex;justify-content:space-between;gap:20px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}[hidden]{display:none!important}@media(max-width:1180px){header,main,footer{margin-left:24px;margin-right:24px}}@media(max-width:760px){main{padding-top:28px}.workbench{grid-template-columns:1fr}.panel{padding:20px}.choices{display:grid;grid-template-columns:1fr 1fr}.choice{padding:12px}.pack{padding-top:15px}.bottom,footer{flex-direction:column;gap:8px}.result-head{align-items:flex-start}.decision{font-size:28px}nav{gap:14px}header{padding:17px 0}.intro{font-size:15px}}@media(prefers-reduced-motion:reduce){*{transition:none!important}}
|
| 9 |
+
</style>
|
| 10 |
+
</head>
|
| 11 |
+
<body>
|
| 12 |
+
<header><a class="brand" href="https://github.com/claytonsamples/controlspec" target="_blank" rel="noopener noreferrer"><span aria-hidden="true">C</span>ControlSpec</a><nav aria-label="Project"><a href="https://github.com/claytonsamples/controlspec#try-it-locally" target="_blank" rel="noopener noreferrer">Run locally ↗</a><a href="https://github.com/claytonsamples/controlspec" target="_blank" rel="noopener noreferrer">GitHub ↗</a></nav></header>
|
| 13 |
+
<main><p class="eyebrow">An open-source experiment in agent controls</p><h1>Before an agent acts,<br>what should it be allowed to do?</h1><p class="intro">Explore how a proposed action meets a specific set of controls. Change the scenario. Inspect the decision, its binding, and what the outcome actually proves.</p><p class="notice"><strong>Recorded reference examples.</strong> These outputs come from the real Python evaluator. This static page does not evaluate new policies or execute actions. An “allow” result here is not production permission.</p>
|
| 14 |
+
<div class="workbench">
|
| 15 |
+
<section class="panel" aria-label="Choose an agent scenario"><div class="tabs" role="group" aria-label="Example domain"><button class="tab" id="personal-tab" aria-pressed="true">Personal spending</button><button class="tab" id="smb-tab" aria-pressed="false">Sales</button></div><p class="section-label">Choose a proposed action</p><div class="choices" id="choices"></div><p class="pack">Selected immutable example pack<code id="pack"></code></p></section>
|
| 16 |
+
<section class="panel" aria-label="Recorded reference result"><div class="result-head"><p class="section-label">ControlSpec reference result</p><span class="badge" id="badge"></span></div><div aria-live="polite" aria-atomic="true"><h2 class="decision" id="decision"></h2><p class="explanation" id="explanation"></p></div><div class="steps"><div class="step"><span class="num">01</span><div><h3>Decision and route</h3><p id="route"></p></div></div><div class="step"><span class="num">02</span><div><h3>Recheck the exact action</h3><p id="binding" aria-live="polite"></p><button class="toggle" id="mutate" aria-pressed="false" hidden>Change the purchase after the decision</button></div></div><div class="step"><span class="num">03</span><div><h3>Assess the outcome</h3><p id="receipt"></p></div></div></div></section>
|
| 17 |
+
</div>
|
| 18 |
+
<details><summary>Inspect the recorded data and provenance</summary><p class="section-label" id="provenance"></p><pre id="raw"></pre><a href="observations.json" download>Download all seven observations</a></details>
|
| 19 |
+
<div class="bottom"><p><strong>Building an agent?</strong> Try one of your controls against the Python reference. We want integration attempts, uncomfortable edge cases, and feedback on the contract.</p><a href="https://github.com/claytonsamples/controlspec/issues/new" target="_blank" rel="noopener noreferrer">Share an integration idea ↗</a></div>
|
| 20 |
+
</main><footer><span>ControlSpec · Apache-2.0 · Experimental community preview</span><span>Human-owned controls. Exact action binding. Evidence after action.</span></footer>
|
| 21 |
+
<script id="observations" type="application/json">{"mode":"recorded_reference_outputs","source_commit":"77178798ffe7fed1e6608b7d4037e67c1c8cd113","reference_time":"2026-08-20T12:00:00.000000Z","external_actions_executed":false,"domains":[{"domain":"personal","release_id":"v0.1.1","catalog_digest":"sha256:07e00e11176752146d402c31269d3c89dbe1f8ae200c98a91f7e4f34f7888322","scenarios":[{"scenario_id":"groceries-42","intent_digest":"sha256:eae71621e734dcf7b654a778562900935637da3b62384ac8a06802ede2d1c16d","pack_catalog_id":"personal.agent.spending:spending-baseline@0.1.0","verdict":"allow","route_kind":"continue","route_id":"continue","recheck_valid":true,"changed_recheck_valid":false,"receipt_status":"incomplete","missing_evidence_count":1,"verified_evidence_count":0,"assessment_basis":"caller_report_only","stored":false,"durable":false,"route_substitution_rejected":true},{"scenario_id":"groceries-142","intent_digest":"sha256:5b0a007d31cec073c4a6c8731e192c15cc7de7e0a0c4d96b64d4b23210afd1c0","pack_catalog_id":"personal.agent.spending:spending-baseline@0.1.0","verdict":"require_approval","route_kind":"ask_user","route_id":"ask-before-purchase","recheck_valid":true,"changed_recheck_valid":null,"receipt_status":"failed","missing_evidence_count":0,"verified_evidence_count":0,"assessment_basis":"caller_report_only","stored":false,"durable":false,"route_substitution_rejected":true},{"scenario_id":"recurring-999","intent_digest":"sha256:bc82299648aa586ad4cb8da960d413c5cfbeaca046e58912a359714b7d0ec801","pack_catalog_id":"personal.agent.spending:spending-baseline@0.1.0","verdict":"require_approval","route_kind":"ask_user","route_id":"ask-before-recurring-purchase","recheck_valid":true,"changed_recheck_valid":null,"receipt_status":"failed","missing_evidence_count":0,"verified_evidence_count":0,"assessment_basis":"caller_report_only","stored":false,"durable":false,"route_substitution_rejected":true}],"machine_summary":{"status":"ok","scope":"local_reference_examples","domain":"personal","release_id":"v0.1.1","catalog_digest":"sha256:07e00e11176752146d402c31269d3c89dbe1f8ae200c98a91f7e4f34f7888322","observed":[{"id":"groceries-42","verdict":"allow","recheck_valid":true,"receipt_status":"incomplete","non_authoritative":true,"deterministic_repeat":true,"route_substitution_rejected":true},{"id":"groceries-142","verdict":"require_approval","recheck_valid":true,"receipt_status":"failed","non_authoritative":true,"deterministic_repeat":true,"route_substitution_rejected":true},{"id":"recurring-999","verdict":"require_approval","recheck_valid":true,"receipt_status":"failed","non_authoritative":true,"deterministic_repeat":true,"route_substitution_rejected":true}],"scenario_count":3,"probe_count":0,"operations":["GET packs","GET packs/{id}","GET controls","GET controls/{id}","POST decide","POST recheck","POST receipts"],"external_actions_executed":false,"receipts_stored":false}},{"domain":"smb","release_id":"v0.1.1","catalog_digest":"sha256:07e00e11176752146d402c31269d3c89dbe1f8ae200c98a91f7e4f34f7888322","scenarios":[{"scenario_id":"draft","intent_digest":"sha256:c97b00a3ce7f1e71a27f90bab783f4490f1fe09286f137abaa5cf2cf2882b64d","pack_catalog_id":"smb.sales.controls:sales-baseline@0.1.0","verdict":"allow","route_kind":"continue","route_id":"continue-draft","recheck_valid":true,"changed_recheck_valid":null,"receipt_status":"failed","missing_evidence_count":0,"verified_evidence_count":0,"assessment_basis":"caller_report_only","stored":false,"durable":false,"route_substitution_rejected":true},{"scenario_id":"discount-8","intent_digest":"sha256:be0d497159b6110a72d0a6bea0c2db21f82202f40e6217ef586ae1f51bbac7d0","pack_catalog_id":"smb.sales.controls:sales-baseline@0.1.0","verdict":"allow_with_conditions","route_kind":"continue","route_id":"continue-within-limit","recheck_valid":true,"changed_recheck_valid":null,"receipt_status":"failed","missing_evidence_count":0,"verified_evidence_count":0,"assessment_basis":"caller_report_only","stored":false,"durable":false,"route_substitution_rejected":true},{"scenario_id":"discount-15","intent_digest":"sha256:ec4f4dee20b67ee8dd0b264dcbf60f185eda92d48fa48bbf2ed54f0ff090e5d4","pack_catalog_id":"smb.sales.controls:sales-baseline@0.1.0","verdict":"require_approval","route_kind":"continue","route_id":"continue","recheck_valid":true,"changed_recheck_valid":null,"receipt_status":"failed","missing_evidence_count":0,"verified_evidence_count":0,"assessment_basis":"caller_report_only","stored":false,"durable":false,"route_substitution_rejected":true},{"scenario_id":"smb-discount-15-direct-self-approval","intent_digest":"sha256:c28c5920136a243b8256f8baaa59709217a8f7043e95dcec06013aaee3d1bf1a","pack_catalog_id":"smb.sales.controls:sales-baseline@0.1.0","verdict":"block","route_kind":"block","route_id":"fail-closed-block","recheck_valid":true,"changed_recheck_valid":null,"receipt_status":"failed","missing_evidence_count":0,"verified_evidence_count":0,"assessment_basis":"caller_report_only","stored":false,"durable":false,"route_substitution_rejected":true}],"machine_summary":{"status":"ok","scope":"local_reference_examples","domain":"smb","release_id":"v0.1.1","catalog_digest":"sha256:07e00e11176752146d402c31269d3c89dbe1f8ae200c98a91f7e4f34f7888322","observed":[{"id":"draft","verdict":"allow","recheck_valid":true,"receipt_status":"failed","non_authoritative":true,"deterministic_repeat":true,"route_substitution_rejected":true},{"id":"discount-8","verdict":"allow_with_conditions","recheck_valid":true,"receipt_status":"failed","non_authoritative":true,"deterministic_repeat":true,"route_substitution_rejected":true},{"id":"discount-15","verdict":"require_approval","recheck_valid":true,"receipt_status":"failed","non_authoritative":true,"deterministic_repeat":true,"route_substitution_rejected":true},{"id":"smb-discount-15-direct-self-approval","verdict":"block","recheck_valid":true,"receipt_status":"failed","non_authoritative":true,"deterministic_repeat":true,"route_substitution_rejected":true}],"scenario_count":4,"probe_count":0,"operations":["GET packs","GET packs/{id}","GET controls","GET controls/{id}","POST decide","POST recheck","POST receipts"],"external_actions_executed":false,"receipts_stored":false}}]}</script>
|
| 22 |
+
<script>
|
| 23 |
+
"use strict";
|
| 24 |
+
const data=JSON.parse(document.getElementById('observations').textContent);
|
| 25 |
+
const labels={
|
| 26 |
+
'groceries-42':['$42 grocery purchase','Within the $75 example limit','The selected control permits this one-time purchase below $75. The reference decision is allow.'],
|
| 27 |
+
'groceries-142':['$142 grocery purchase','Above the example limit','The amount exceeds the example’s $75 boundary. The reference requires human approval.'],
|
| 28 |
+
'recurring-999':['$9.99 subscription','A recurring commitment','A small amount can still create a recurring commitment. The example requires human approval for recurring purchases.'],
|
| 29 |
+
'draft':['Draft a customer email','No message is sent','The example permits preparing a draft. A draft decision does not establish that a message was sent or its outcome verified.'],
|
| 30 |
+
'discount-8':['Offer an 8% discount','Within the example discount limit','The reference returns allow with conditions. Those conditions still need to be followed and supported by evidence.'],
|
| 31 |
+
'discount-15':['Offer a 15% discount','Above the example discount limit','This discount requires approval. A continue route by itself does not override an approval-required verdict.'],
|
| 32 |
+
'smb-discount-15-direct-self-approval':['Approve my own 15% discount','The same actor tries to approve','The approval fails the example’s independence check. The reference blocks this proposed action.']};
|
| 33 |
+
const verdicts={allow:['Allow','Within this example’s controls',''],require_approval:['Approval required','A human decision is needed','approval'],allow_with_conditions:['Allow with conditions','Conditions remain to be met','conditions'],block:['Blocked','The proposed action cannot proceed','block']};
|
| 34 |
+
let domain='personal', selected='groceries-42', changed=false;
|
| 35 |
+
const el=id=>document.getElementById(id);
|
| 36 |
+
function current(){return data.domains.find(d=>d.domain===domain).scenarios.find(s=>s.scenario_id===selected)}
|
| 37 |
+
function renderChoices(){el('choices').replaceChildren();for(const row of data.domains.find(d=>d.domain===domain).scenarios){const b=document.createElement('button');b.className='choice';b.setAttribute('aria-pressed',String(row.scenario_id===selected));const title=document.createElement('strong');title.textContent=labels[row.scenario_id][0];const subtitle=document.createElement('small');subtitle.textContent=labels[row.scenario_id][1];b.append(title,subtitle);b.addEventListener('click',()=>{selected=row.scenario_id;changed=false;renderChoices();renderResult()});el('choices').append(b)}}
|
| 38 |
+
function renderResult(){const row=current(),v=verdicts[row.verdict];el('decision').textContent=v[0];el('badge').textContent=row.verdict.replaceAll('_',' ');el('badge').className='badge '+v[2];el('explanation').textContent=labels[selected][2];el('pack').textContent=row.pack_catalog_id;el('route').textContent='Verdict: '+row.verdict+'. Route: '+row.route_kind+' / '+row.route_id+'.';el('binding').textContent=changed?'Binding rejected. The recorded changed intent no longer matches the prior decision. Evaluate the new intent again.':'Binding matches. The recorded actor, action, resource, context and policy selection are unchanged. This also holds for restrictive verdicts; a valid binding is not permission.';el('binding').className=changed?'binding-error':'';el('mutate').hidden=row.changed_recheck_valid===null;el('mutate').setAttribute('aria-pressed',String(changed));el('mutate').textContent=changed?'Restore the original purchase':'Change the purchase after the decision';el('receipt').textContent='Assessment: '+row.receipt_status+'. The caller reported success, but no action ran and no execution was verified. '+row.missing_evidence_count+' required evidence item(s) missing. Nothing is stored.';el('raw').textContent=JSON.stringify({...row,displaying_changed_intent:changed},null,2);el('provenance').textContent='Source commit '+data.source_commit.slice(0,12)+' · Fixed reference time '+data.reference_time+' · '+data.mode+'.'}
|
| 39 |
+
function chooseDomain(next){domain=next;selected=data.domains.find(d=>d.domain===domain).scenarios[0].scenario_id;changed=false;el('personal-tab').setAttribute('aria-pressed',String(domain==='personal'));el('smb-tab').setAttribute('aria-pressed',String(domain==='smb'));renderChoices();renderResult()}
|
| 40 |
+
el('personal-tab').addEventListener('click',()=>chooseDomain('personal'));el('smb-tab').addEventListener('click',()=>chooseDomain('smb'));el('mutate').addEventListener('click',()=>{if(current().changed_recheck_valid===false){changed=!changed;renderResult()}});
|
| 41 |
+
renderChoices();renderResult();
|
| 42 |
+
</script>
|
| 43 |
+
</body></html>
|