diff --git a/assets/tokens/colors.css b/assets/tokens/colors.css index 6179e05..3d8b0b9 100644 --- a/assets/tokens/colors.css +++ b/assets/tokens/colors.css @@ -30,7 +30,12 @@ Every state also owns a glyph and a stroke behaviour: see tokens/grammar.css. Never ship a state as colour only. */ --il-state-local: oklch(0.58 0.005 240); /* @kind color */ /* LOCALLY VALID */ - --il-state-coupled: oklch(0.58 0.130 250); /* @kind color */ /* COUPLED */ + /* L was 0.58, which measured 4.01:1 against the light sunken surface — + under the 4.5:1 floor for the 8.5-10px label and chip text that carries + this state. L 0.52 measures 5.15:1 on sunken and 5.48:1 on card. Hue and + chroma are unchanged, so the state reads the same; the dark peer below + is already ~8.6:1 and is deliberately untouched. */ + --il-state-coupled: oklch(0.52 0.130 250); /* @kind color */ /* COUPLED */ --il-state-blocked: oklch(0.58 0.150 28); /* @kind color */ /* BLOCKED */ --il-state-review: oklch(0.62 0.130 78); /* @kind color */ /* JOINT REVIEW */ --il-state-authorized: oklch(0.56 0.130 150); /* @kind color */ /* AUTHORIZED */ diff --git a/media/hac-334/evidence/visual-model.json b/media/hac-334/evidence/visual-model.json index e6f5d0e..5e88393 100644 --- a/media/hac-334/evidence/visual-model.json +++ b/media/hac-334/evidence/visual-model.json @@ -370,7 +370,7 @@ }, { "n": 6, - "label": "ALLOW + authorization receipt", + "label": "ALLOW + receipt", "role": "decision" }, { @@ -505,7 +505,7 @@ { "zone": "DECISION / RECEIPT", "nodes": [ - "ALLOW + authorization receipt" + "ALLOW + receipt" ] }, { diff --git a/media/hac-334/exports/IL-DIAG-011-cloud-participation-1200x675-runilkhac340cloud1786730369123.png b/media/hac-334/exports/IL-DIAG-011-cloud-participation-1200x675-runilkhac340cloud1786730369123.png index 3cfd457..7785866 100644 Binary files a/media/hac-334/exports/IL-DIAG-011-cloud-participation-1200x675-runilkhac340cloud1786730369123.png and b/media/hac-334/exports/IL-DIAG-011-cloud-participation-1200x675-runilkhac340cloud1786730369123.png differ diff --git a/media/hac-334/exports/IL-DIAG-011-cloud-participation-1280x720-runilkhac340cloud1786730369123.png b/media/hac-334/exports/IL-DIAG-011-cloud-participation-1280x720-runilkhac340cloud1786730369123.png index cdc7a5a..65bed0f 100644 Binary files a/media/hac-334/exports/IL-DIAG-011-cloud-participation-1280x720-runilkhac340cloud1786730369123.png and b/media/hac-334/exports/IL-DIAG-011-cloud-participation-1280x720-runilkhac340cloud1786730369123.png differ diff --git a/media/hac-334/exports/IL-DIAG-011-cloud-participation-1920x1080-runilkhac340cloud1786730369123.pdf b/media/hac-334/exports/IL-DIAG-011-cloud-participation-1920x1080-runilkhac340cloud1786730369123.pdf index bf5974b..e22a4da 100644 Binary files a/media/hac-334/exports/IL-DIAG-011-cloud-participation-1920x1080-runilkhac340cloud1786730369123.pdf and b/media/hac-334/exports/IL-DIAG-011-cloud-participation-1920x1080-runilkhac340cloud1786730369123.pdf differ diff --git a/media/hac-334/exports/IL-DIAG-011-cloud-participation-1920x1080-runilkhac340cloud1786730369123.png b/media/hac-334/exports/IL-DIAG-011-cloud-participation-1920x1080-runilkhac340cloud1786730369123.png index e0fb82d..74d835c 100644 Binary files a/media/hac-334/exports/IL-DIAG-011-cloud-participation-1920x1080-runilkhac340cloud1786730369123.png and b/media/hac-334/exports/IL-DIAG-011-cloud-participation-1920x1080-runilkhac340cloud1786730369123.png differ diff --git a/media/hac-334/exports/IL-DIAG-011-cloud-participation-2400x1350-runilkhac340cloud1786730369123.png b/media/hac-334/exports/IL-DIAG-011-cloud-participation-2400x1350-runilkhac340cloud1786730369123.png index c419bf8..ebbddb5 100644 Binary files a/media/hac-334/exports/IL-DIAG-011-cloud-participation-2400x1350-runilkhac340cloud1786730369123.png and b/media/hac-334/exports/IL-DIAG-011-cloud-participation-2400x1350-runilkhac340cloud1786730369123.png differ diff --git a/media/hac-334/exports/IL-DIAG-011-cloud-participation-brief-1920x1080-runilkhac340cloud1786730369123.png b/media/hac-334/exports/IL-DIAG-011-cloud-participation-brief-1920x1080-runilkhac340cloud1786730369123.png index 830663d..dfa8acd 100644 Binary files a/media/hac-334/exports/IL-DIAG-011-cloud-participation-brief-1920x1080-runilkhac340cloud1786730369123.png and b/media/hac-334/exports/IL-DIAG-011-cloud-participation-brief-1920x1080-runilkhac340cloud1786730369123.png differ diff --git a/media/hac-334/exports/IL-DIAG-012-deployment-trust-boundaries-1200x675-runilkhac340cloud1786730369123.png b/media/hac-334/exports/IL-DIAG-012-deployment-trust-boundaries-1200x675-runilkhac340cloud1786730369123.png index 6382b8f..d25dd12 100644 Binary files a/media/hac-334/exports/IL-DIAG-012-deployment-trust-boundaries-1200x675-runilkhac340cloud1786730369123.png and b/media/hac-334/exports/IL-DIAG-012-deployment-trust-boundaries-1200x675-runilkhac340cloud1786730369123.png differ diff --git a/media/hac-334/exports/IL-DIAG-012-deployment-trust-boundaries-1920x1080-runilkhac340cloud1786730369123.pdf b/media/hac-334/exports/IL-DIAG-012-deployment-trust-boundaries-1920x1080-runilkhac340cloud1786730369123.pdf index 31d8058..5d1e211 100644 Binary files a/media/hac-334/exports/IL-DIAG-012-deployment-trust-boundaries-1920x1080-runilkhac340cloud1786730369123.pdf and b/media/hac-334/exports/IL-DIAG-012-deployment-trust-boundaries-1920x1080-runilkhac340cloud1786730369123.pdf differ diff --git a/media/hac-334/exports/IL-DIAG-012-deployment-trust-boundaries-1920x1080-runilkhac340cloud1786730369123.png b/media/hac-334/exports/IL-DIAG-012-deployment-trust-boundaries-1920x1080-runilkhac340cloud1786730369123.png index 639e82c..e471504 100644 Binary files a/media/hac-334/exports/IL-DIAG-012-deployment-trust-boundaries-1920x1080-runilkhac340cloud1786730369123.png and b/media/hac-334/exports/IL-DIAG-012-deployment-trust-boundaries-1920x1080-runilkhac340cloud1786730369123.png differ diff --git a/media/hac-334/exports/IL-DIAG-012-deployment-trust-boundaries-2400x1350-runilkhac340cloud1786730369123.png b/media/hac-334/exports/IL-DIAG-012-deployment-trust-boundaries-2400x1350-runilkhac340cloud1786730369123.png index 4eaa085..75735f9 100644 Binary files a/media/hac-334/exports/IL-DIAG-012-deployment-trust-boundaries-2400x1350-runilkhac340cloud1786730369123.png and b/media/hac-334/exports/IL-DIAG-012-deployment-trust-boundaries-2400x1350-runilkhac340cloud1786730369123.png differ diff --git a/media/hac-334/exports/render-manifest.json b/media/hac-334/exports/render-manifest.json index b0f73a5..f11b5bd 100644 --- a/media/hac-334/exports/render-manifest.json +++ b/media/hac-334/exports/render-manifest.json @@ -104,7 +104,7 @@ "asset": "IL-DIAG-011", "export": "IL-DIAG-011-cloud-participation-1920x1080-runilkhac340cloud1786730369123.png", "master": "IL-DIAG-011-cloud-participation-runilkhac340cloud1786730369123.svg", - "masterSha256": "f1dec84d88f37ffc3e45b13dae2af9c12493cbc081f99c7034c40a532099566b", + "masterSha256": "5329723377bee3640fcdd7900beae9e955a98d9de3a4902967abf5d68bf8485a", "width": 1920, "height": 1080 }, @@ -112,7 +112,7 @@ "asset": "IL-DIAG-011", "export": "IL-DIAG-011-cloud-participation-2400x1350-runilkhac340cloud1786730369123.png", "master": "IL-DIAG-011-cloud-participation-runilkhac340cloud1786730369123.svg", - "masterSha256": "f1dec84d88f37ffc3e45b13dae2af9c12493cbc081f99c7034c40a532099566b", + "masterSha256": "5329723377bee3640fcdd7900beae9e955a98d9de3a4902967abf5d68bf8485a", "width": 2400, "height": 1350 }, @@ -120,7 +120,7 @@ "asset": "IL-DIAG-011", "export": "IL-DIAG-011-cloud-participation-1280x720-runilkhac340cloud1786730369123.png", "master": "IL-DIAG-011-cloud-participation-runilkhac340cloud1786730369123.svg", - "masterSha256": "f1dec84d88f37ffc3e45b13dae2af9c12493cbc081f99c7034c40a532099566b", + "masterSha256": "5329723377bee3640fcdd7900beae9e955a98d9de3a4902967abf5d68bf8485a", "width": 1280, "height": 720 }, @@ -128,7 +128,7 @@ "asset": "IL-DIAG-011", "export": "IL-DIAG-011-cloud-participation-1200x675-runilkhac340cloud1786730369123.png", "master": "IL-DIAG-011-cloud-participation-runilkhac340cloud1786730369123.svg", - "masterSha256": "f1dec84d88f37ffc3e45b13dae2af9c12493cbc081f99c7034c40a532099566b", + "masterSha256": "5329723377bee3640fcdd7900beae9e955a98d9de3a4902967abf5d68bf8485a", "width": 1200, "height": 675 }, @@ -136,7 +136,7 @@ "asset": "IL-DIAG-011", "export": "IL-DIAG-011-cloud-participation-brief-1920x1080-runilkhac340cloud1786730369123.png", "master": "IL-DIAG-011-cloud-participation-brief-runilkhac340cloud1786730369123.svg", - "masterSha256": "39c15db99a7e74c694a966f2b5d8c145c29f7437cfd4f735697fe7874e8c7238", + "masterSha256": "8d5e8fcd7ae9ae7294db370789a313bf8c7103d7200f1f8c7e803638e7f42104", "width": 1920, "height": 1080, "presentationRole": "5s" @@ -145,7 +145,7 @@ "asset": "IL-DIAG-012", "export": "IL-DIAG-012-deployment-trust-boundaries-1920x1080-runilkhac340cloud1786730369123.png", "master": "IL-DIAG-012-deployment-trust-boundaries-runilkhac340cloud1786730369123.svg", - "masterSha256": "1e4006c0764476256c332371bce3814a9cd1d6a54819bf1d84c1a1facd6e43b2", + "masterSha256": "b4e1d9f305ea8a956e593c043921b22fad3120d8d090e1c65462dec7d9089f92", "width": 1920, "height": 1080 }, @@ -153,7 +153,7 @@ "asset": "IL-DIAG-012", "export": "IL-DIAG-012-deployment-trust-boundaries-2400x1350-runilkhac340cloud1786730369123.png", "master": "IL-DIAG-012-deployment-trust-boundaries-runilkhac340cloud1786730369123.svg", - "masterSha256": "1e4006c0764476256c332371bce3814a9cd1d6a54819bf1d84c1a1facd6e43b2", + "masterSha256": "b4e1d9f305ea8a956e593c043921b22fad3120d8d090e1c65462dec7d9089f92", "width": 2400, "height": 1350 }, @@ -161,7 +161,7 @@ "asset": "IL-DIAG-012", "export": "IL-DIAG-012-deployment-trust-boundaries-1200x675-runilkhac340cloud1786730369123.png", "master": "IL-DIAG-012-deployment-trust-boundaries-runilkhac340cloud1786730369123.svg", - "masterSha256": "1e4006c0764476256c332371bce3814a9cd1d6a54819bf1d84c1a1facd6e43b2", + "masterSha256": "b4e1d9f305ea8a956e593c043921b22fad3120d8d090e1c65462dec7d9089f92", "width": 1200, "height": 675 }, diff --git a/media/hac-334/masters/IL-DIAG-011-cloud-participation-brief-runilkhac340cloud1786730369123.svg b/media/hac-334/masters/IL-DIAG-011-cloud-participation-brief-runilkhac340cloud1786730369123.svg index 62001b2..14ec854 100644 --- a/media/hac-334/masters/IL-DIAG-011-cloud-participation-brief-runilkhac340cloud1786730369123.svg +++ b/media/hac-334/masters/IL-DIAG-011-cloud-participation-brief-runilkhac340cloud1786730369123.svg @@ -1 +1 @@ - + diff --git a/media/hac-334/masters/IL-DIAG-011-cloud-participation-runilkhac340cloud1786730369123.svg b/media/hac-334/masters/IL-DIAG-011-cloud-participation-runilkhac340cloud1786730369123.svg index 3e7ba95..6227dd5 100644 --- a/media/hac-334/masters/IL-DIAG-011-cloud-participation-runilkhac340cloud1786730369123.svg +++ b/media/hac-334/masters/IL-DIAG-011-cloud-participation-runilkhac340cloud1786730369123.svg @@ -1 +1 @@ - + diff --git a/media/hac-334/masters/IL-DIAG-012-deployment-trust-boundaries-runilkhac340cloud1786730369123.svg b/media/hac-334/masters/IL-DIAG-012-deployment-trust-boundaries-runilkhac340cloud1786730369123.svg index b9ac333..7aa0325 100644 --- a/media/hac-334/masters/IL-DIAG-012-deployment-trust-boundaries-runilkhac340cloud1786730369123.svg +++ b/media/hac-334/masters/IL-DIAG-012-deployment-trust-boundaries-runilkhac340cloud1786730369123.svg @@ -1 +1 @@ - + diff --git a/media/hac-335/bin/capture-cockpit.mjs b/media/hac-335/bin/capture-cockpit.mjs index 3bf85d7..d54df82 100644 --- a/media/hac-335/bin/capture-cockpit.mjs +++ b/media/hac-335/bin/capture-cockpit.mjs @@ -115,7 +115,7 @@ const CAPTURES = [ 'Google ADK 1.35.1', 'Cloud Run-hosted agent', 'Interlock MCP proxy', - 'ALLOW + authorization receipt', + 'ALLOW + receipt', 'EXECUTED', 'OBSERVED', 'alpha=45', diff --git a/media/hac-335/captures/IL-COCK-010-run-local-treatment-1440x566-runhac330local.png b/media/hac-335/captures/IL-COCK-010-run-local-treatment-1440x566-runhac330local.png deleted file mode 100644 index af2ffd7..0000000 Binary files a/media/hac-335/captures/IL-COCK-010-run-local-treatment-1440x566-runhac330local.png and /dev/null differ diff --git a/media/hac-335/captures/IL-COCK-010-run-local-treatment-1440x724-runhac330local.png b/media/hac-335/captures/IL-COCK-010-run-local-treatment-1440x724-runhac330local.png index 50cf2e8..a1c3c83 100644 Binary files a/media/hac-335/captures/IL-COCK-010-run-local-treatment-1440x724-runhac330local.png and b/media/hac-335/captures/IL-COCK-010-run-local-treatment-1440x724-runhac330local.png differ diff --git a/media/hac-335/captures/IL-COCK-010-run-local-treatment-1440x900-runhac330local.png b/media/hac-335/captures/IL-COCK-010-run-local-treatment-1440x900-runhac330local.png deleted file mode 100644 index 27abb63..0000000 Binary files a/media/hac-335/captures/IL-COCK-010-run-local-treatment-1440x900-runhac330local.png and /dev/null differ diff --git a/media/hac-335/captures/IL-COCK-011-run-local-perturbed-1440x702-runhac330local.png b/media/hac-335/captures/IL-COCK-011-run-local-perturbed-1440x702-runhac330local.png deleted file mode 100644 index e5e390a..0000000 Binary files a/media/hac-335/captures/IL-COCK-011-run-local-perturbed-1440x702-runhac330local.png and /dev/null differ diff --git a/media/hac-335/captures/IL-COCK-011-run-local-perturbed-1440x866-runhac330local.png b/media/hac-335/captures/IL-COCK-011-run-local-perturbed-1440x866-runhac330local.png index a399150..c9c5fa1 100644 Binary files a/media/hac-335/captures/IL-COCK-011-run-local-perturbed-1440x866-runhac330local.png and b/media/hac-335/captures/IL-COCK-011-run-local-perturbed-1440x866-runhac330local.png differ diff --git a/media/hac-335/captures/IL-COCK-012-run-cloud-overview-1440x645-runilkhac340cloud1786730369123.png b/media/hac-335/captures/IL-COCK-012-run-cloud-overview-1440x645-runilkhac340cloud1786730369123.png deleted file mode 100644 index cc111fa..0000000 Binary files a/media/hac-335/captures/IL-COCK-012-run-cloud-overview-1440x645-runilkhac340cloud1786730369123.png and /dev/null differ diff --git a/media/hac-335/captures/IL-COCK-012-run-cloud-overview-1440x653-runilkhac340cloud1786730369123.png b/media/hac-335/captures/IL-COCK-012-run-cloud-overview-1440x653-runilkhac340cloud1786730369123.png index 7e94db5..3e9dfe8 100644 Binary files a/media/hac-335/captures/IL-COCK-012-run-cloud-overview-1440x653-runilkhac340cloud1786730369123.png and b/media/hac-335/captures/IL-COCK-012-run-cloud-overview-1440x653-runilkhac340cloud1786730369123.png differ diff --git a/media/hac-335/captures/IL-COCK-013-run-cloud-evidence-1440x804-runilkhac340cloud1786730369123.png b/media/hac-335/captures/IL-COCK-013-run-cloud-evidence-1440x804-runilkhac340cloud1786730369123.png deleted file mode 100644 index ed95aad..0000000 Binary files a/media/hac-335/captures/IL-COCK-013-run-cloud-evidence-1440x804-runilkhac340cloud1786730369123.png and /dev/null differ diff --git a/media/hac-335/captures/IL-COCK-013-run-cloud-evidence-1440x817-runilkhac340cloud1786730369123.png b/media/hac-335/captures/IL-COCK-013-run-cloud-evidence-1440x817-runilkhac340cloud1786730369123.png new file mode 100644 index 0000000..1f80405 Binary files /dev/null and b/media/hac-335/captures/IL-COCK-013-run-cloud-evidence-1440x817-runilkhac340cloud1786730369123.png differ diff --git a/media/hac-335/devpost/screenshot-order.json b/media/hac-335/devpost/screenshot-order.json index c6de29c..1822f0a 100644 --- a/media/hac-335/devpost/screenshot-order.json +++ b/media/hac-335/devpost/screenshot-order.json @@ -70,7 +70,7 @@ { "order": 7, "assetId": "IL-COCK-013", - "file": "media/hac-335/captures/IL-COCK-013-run-cloud-evidence-1440x804-runilkhac340cloud1786730369123.png", + "file": "media/hac-335/captures/IL-COCK-013-run-cloud-evidence-1440x817-runilkhac340cloud1786730369123.png", "proofClass": "B", "judgeQuestion": "Where is the immutable evidence, and what is withheld?", "caption": "Evidence pinned to a commit rather than a branch, transport provenance kept separate from application provenance, and the runtime source URL rendered as unavailable / non-public rather than fabricated." diff --git a/media/hac-335/evidence/asset-registry.json b/media/hac-335/evidence/asset-registry.json index 5e74c92..f2aa547 100644 --- a/media/hac-335/evidence/asset-registry.json +++ b/media/hac-335/evidence/asset-registry.json @@ -193,7 +193,7 @@ "file": "media/hac-334/exports/IL-DIAG-011-cloud-participation-1280x720-runilkhac340cloud1786730369123.png", "width": 1280, "height": 720, - "sha256": "6b4f285b0671a26a1198ae882fc4a26a855022495e392d510e5652bfc31589ae", + "sha256": "2720b308afcbe9aad4362337cabd03e6ceb51b4ad6d966f2a7c565b4cb07f717", "presentationRole": null }, { @@ -201,7 +201,7 @@ "file": "media/hac-334/exports/IL-DIAG-011-cloud-participation-1200x675-runilkhac340cloud1786730369123.png", "width": 1200, "height": 675, - "sha256": "a7690f3aac276a80206657f53c664653daf436cc67e3f9771c7922cf6992b330", + "sha256": "5ff9fe713cde70cd7737407dbc4a154dec9be50d8f422790f4ba3aeb7400b587", "presentationRole": null } ], @@ -259,7 +259,7 @@ "file": "media/hac-334/exports/IL-DIAG-012-deployment-trust-boundaries-1920x1080-runilkhac340cloud1786730369123.png", "width": 1920, "height": 1080, - "sha256": "e7e54989d6906885aa4bbfaa28b694472fa8657230d207c55b082c5724147c21", + "sha256": "b10a7951f77fec87df22f48b6da0609539cd551c5f88b29c6bd859f9c00380ea", "presentationRole": null }, { @@ -267,7 +267,7 @@ "file": "media/hac-334/exports/IL-DIAG-012-deployment-trust-boundaries-1920x1080-runilkhac340cloud1786730369123.png", "width": 1920, "height": 1080, - "sha256": "e7e54989d6906885aa4bbfaa28b694472fa8657230d207c55b082c5724147c21", + "sha256": "b10a7951f77fec87df22f48b6da0609539cd551c5f88b29c6bd859f9c00380ea", "presentationRole": null }, { @@ -275,7 +275,7 @@ "file": "media/hac-334/exports/IL-DIAG-012-deployment-trust-boundaries-1200x675-runilkhac340cloud1786730369123.png", "width": 1200, "height": 675, - "sha256": "f0a6032332dd9091e5533203ea07bfd5453f0bf54b5f3c36a9266154abdbb584", + "sha256": "8edbd3dd9692c93348a265f5d96ce7a4d8c14632a3ba69ecb8ef635475844d85", "presentationRole": null } ], @@ -496,7 +496,7 @@ "canonicalMasterIssue": null, "authoredBy": "HAC-335", "capturedFrom": "HAC-341 merged cockpit", - "capturedFromSha": "0fb79458c5a1eb40fa147d27d75a0fb2f10b4547", + "capturedFromSha": "2f742a42fbb1410fa47ec6a0e758be2c12818ec1", "sourceUrl": "/media/hac-341/cockpit.html?run=hac330-local&proof=local&state=run.local.treatment&static=1", "sourceFormat": "live surface (html)", "exportFormat": "png", @@ -506,7 +506,7 @@ "file": "media/hac-335/captures/IL-COCK-010-run-local-treatment-1440x724-runhac330local.png", "width": 1440, "height": 724, - "sha256": "66b04d62a174081478e890b8d683461dafc9019e8d3f56269b40b4b08efddc34", + "sha256": "1c629a77a3753d81abb61a2855bd0491cebb396a5772b8cc60e58841debb923c", "cropAnchor": "main#app", "cropRule": "measured bounding box of the rendered content; unused canvas only" } @@ -540,7 +540,7 @@ "canonicalMasterIssue": null, "authoredBy": "HAC-335", "capturedFrom": "HAC-341 merged cockpit", - "capturedFromSha": "0fb79458c5a1eb40fa147d27d75a0fb2f10b4547", + "capturedFromSha": "2f742a42fbb1410fa47ec6a0e758be2c12818ec1", "sourceUrl": "/media/hac-341/cockpit.html?run=hac330-local&proof=local&state=run.local.perturbed&static=1", "sourceFormat": "live surface (html)", "exportFormat": "png", @@ -550,7 +550,7 @@ "file": "media/hac-335/captures/IL-COCK-011-run-local-perturbed-1440x866-runhac330local.png", "width": 1440, "height": 866, - "sha256": "4b5637bc7f11fe0165529f2cc39edab7f7fe9e0369702b06bf8e61f76d4ef1b2", + "sha256": "87257c8bd33cfbba447ba500665b04b99c59d8fb3db2487262460d2126511b84", "cropAnchor": "main#app", "cropRule": "measured bounding box of the rendered content; unused canvas only" } @@ -584,7 +584,7 @@ "canonicalMasterIssue": null, "authoredBy": "HAC-335", "capturedFrom": "HAC-341 merged cockpit", - "capturedFromSha": "0fb79458c5a1eb40fa147d27d75a0fb2f10b4547", + "capturedFromSha": "2f742a42fbb1410fa47ec6a0e758be2c12818ec1", "sourceUrl": "/media/hac-341/cockpit.html?run=hac340-cloud&proof=cloud&state=run.cloud.overview&static=1", "sourceFormat": "live surface (html)", "exportFormat": "png", @@ -594,7 +594,7 @@ "file": "media/hac-335/captures/IL-COCK-012-run-cloud-overview-1440x653-runilkhac340cloud1786730369123.png", "width": 1440, "height": 653, - "sha256": "f7e997fec739a856f56bd4a33c00a558df949187df4701b2fad0ee3e78bfa627", + "sha256": "bb17de71f12be372b75eb2bcfe4f6512d607a1ad6bd0ed96910cbd37db916802", "cropAnchor": "main#app", "cropRule": "measured bounding box of the rendered content; unused canvas only" } @@ -644,17 +644,17 @@ "canonicalMasterIssue": null, "authoredBy": "HAC-335", "capturedFrom": "HAC-341 merged cockpit", - "capturedFromSha": "0fb79458c5a1eb40fa147d27d75a0fb2f10b4547", + "capturedFromSha": "2f742a42fbb1410fa47ec6a0e758be2c12818ec1", "sourceUrl": "/media/hac-341/cockpit.html?run=hac340-cloud&proof=cloud&state=run.cloud.overview&static=1", "sourceFormat": "live surface (html)", "exportFormat": "png", "exports": [ { "surface": "devpost-screenshot", - "file": "media/hac-335/captures/IL-COCK-013-run-cloud-evidence-1440x804-runilkhac340cloud1786730369123.png", + "file": "media/hac-335/captures/IL-COCK-013-run-cloud-evidence-1440x817-runilkhac340cloud1786730369123.png", "width": 1440, - "height": 804, - "sha256": "b8af720d00aefc6fa14b5bee4396570c73b37c2951c2ed3b71f26155f8a27830", + "height": 817, + "sha256": "bb24f64ec7c5ecfc909de64b328954d5e83d987e63564a880b215f082ba8a84e", "cropAnchor": "union:main#app,aside#drawer", "cropRule": "measured bounding box of the rendered content; unused canvas only" } diff --git a/media/hac-335/evidence/capture-manifest.json b/media/hac-335/evidence/capture-manifest.json index a2a7e8a..3b82bcb 100644 --- a/media/hac-335/evidence/capture-manifest.json +++ b/media/hac-335/evidence/capture-manifest.json @@ -2,11 +2,11 @@ "manifestId": "HAC-335-capture-manifest", "issue": "HAC-335", "generator": "media/hac-335/bin/capture-cockpit.mjs", - "capturedFromSha": "0fb79458c5a1eb40fa147d27d75a0fb2f10b4547", + "capturedFromSha": "2f742a42fbb1410fa47ec6a0e758be2c12818ec1", "capturedSurface": "media/hac-341/cockpit.html (merged executable surface)", "servedFrom": "repository root — the cockpit resolves shared identity from /assets", "viewport": "1440x900", - "captureSourceDigest": "efdf457d6a32c96803c6c7b5e87d2de312fa9048d74c4f18250e36609ea48bf9", + "captureSourceDigest": "250cb8e7b0eb84faf3ae1ee384092ddadac30fb50f3d9be225b84d0bb9aa66ba", "captureSourceFiles": [ "assets/fonts/geist-mono-variable.woff2", "assets/fonts/geist-variable.woff2", @@ -27,7 +27,7 @@ { "assetId": "IL-COCK-010", "file": "media/hac-335/captures/IL-COCK-010-run-local-treatment-1440x724-runhac330local.png", - "sha256": "66b04d62a174081478e890b8d683461dafc9019e8d3f56269b40b4b08efddc34", + "sha256": "1c629a77a3753d81abb61a2855bd0491cebb396a5772b8cc60e58841debb923c", "judgeQuestion": "Can I verify the causal claim myself?", "proofClass": "A", "proofClassLabel": "CONTROLLED LOCAL EXPERIMENT", @@ -69,7 +69,7 @@ { "assetId": "IL-COCK-011", "file": "media/hac-335/captures/IL-COCK-011-run-local-perturbed-1440x866-runhac330local.png", - "sha256": "4b5637bc7f11fe0165529f2cc39edab7f7fe9e0369702b06bf8e61f76d4ef1b2", + "sha256": "87257c8bd33cfbba447ba500665b04b99c59d8fb3db2487262460d2126511b84", "judgeQuestion": "What happens if the evidence changes?", "proofClass": "A", "proofClassLabel": "CONTROLLED LOCAL EXPERIMENT", @@ -105,7 +105,7 @@ { "assetId": "IL-COCK-012", "file": "media/hac-335/captures/IL-COCK-012-run-cloud-overview-1440x653-runilkhac340cloud1786730369123.png", - "sha256": "f7e997fec739a856f56bd4a33c00a558df949187df4701b2fad0ee3e78bfa627", + "sha256": "bb17de71f12be372b75eb2bcfe4f6512d607a1ad6bd0ed96910cbd37db916802", "judgeQuestion": "What actually ran on Google Cloud?", "proofClass": "B", "proofClassLabel": "GOOGLE CLOUD PARTICIPATION", @@ -128,7 +128,7 @@ "Google ADK 1.35.1", "Cloud Run-hosted agent", "Interlock MCP proxy", - "ALLOW + authorization receipt", + "ALLOW + receipt", "EXECUTED", "OBSERVED", "alpha=45", @@ -148,8 +148,8 @@ }, { "assetId": "IL-COCK-013", - "file": "media/hac-335/captures/IL-COCK-013-run-cloud-evidence-1440x804-runilkhac340cloud1786730369123.png", - "sha256": "b8af720d00aefc6fa14b5bee4396570c73b37c2951c2ed3b71f26155f8a27830", + "file": "media/hac-335/captures/IL-COCK-013-run-cloud-evidence-1440x817-runilkhac340cloud1786730369123.png", + "sha256": "bb24f64ec7c5ecfc909de64b328954d5e83d987e63564a880b215f082ba8a84e", "judgeQuestion": "Where is the immutable evidence, and what is withheld?", "proofClass": "B", "proofClassLabel": "GOOGLE CLOUD PARTICIPATION", @@ -160,7 +160,7 @@ "sourceUrl": "/media/hac-341/cockpit.html?run=hac340-cloud&proof=cloud&state=run.cloud.overview&static=1", "viewport": "1440x900", "width": 1440, - "height": 804, + "height": 817, "cropAnchor": "union:main#app,aside#drawer", "reducedMotion": true, "staticCapture": true, diff --git a/media/hac-341/README.md b/media/hac-341/README.md index f31afdb..8bcc6f4 100644 --- a/media/hac-341/README.md +++ b/media/hac-341/README.md @@ -232,6 +232,29 @@ the identity port — and driving it from `WITHHOLD_SERIALIZE`, which withholds, would imply a lifecycle this run does not have. The unreachable `[data-gate="open"]` rule it left behind has been removed. +## Two documented colour limitations + +**Decision and Effect share the executed hue** in the cloud class. The frozen +grammar has no ALLOW hue, and the only unused candidate is the authorization +green — which would assert a lifecycle these packets never emitted, and which +`verify-cockpit.mjs` refuses outright. The label, the glyph and the card order +carry the distinction instead. This is a limitation, recorded here rather than +resolved by inventing a semantic colour; `EXECUTED` and `OBSERVED` remain +separate fields and separate states regardless. + +**The light COUPLED state was under the text contrast floor.** At L 0.58 it +measured **4.01:1** against the sunken light surface, below the 4.5:1 floor for +the 8.5–10px label and chip text that carries it. It is now L 0.52, measuring +**5.15:1** on sunken and **5.48:1** on card, with hue and chroma unchanged so +the state still reads as the same blue. The dark peer was already ~8.6:1 and was +left alone. `check-identity.mjs` pins the lightness and fails if hue or chroma +move without a fresh browser measurement, and fails if the cockpit's own +re-declaration drifts from the token. + +Redundant glyph and stroke channels do not excuse insufficient text contrast — +the three-channel rule exists so state survives greyscale, not so colour can be +unreadable. + ## Accessibility Skip link; focusables in reading order, each with an accessible name; H1 → H2 → diff --git a/media/hac-341/bin/build-view-model.mjs b/media/hac-341/bin/build-view-model.mjs index 81fd578..3c0d892 100644 --- a/media/hac-341/bin/build-view-model.mjs +++ b/media/hac-341/bin/build-view-model.mjs @@ -157,7 +157,7 @@ const cloudRun = { hop(3, `Vertex AI ${cloud.resources.vertexLocation} access`, 'model-access'), hop(4, `Cloud Run-hosted agent · ${cloud.resources.region}`, 'host'), hop(5, 'Interlock MCP proxy', 'control'), - hop(6, 'ALLOW + authorization receipt', 'decision', cloud.receiptDigest), + hop(6, 'ALLOW + receipt', 'decision', cloud.receiptDigest), hop(7, 'Protected target mutation', 'effect', cloud.protectedMutation.status), hop(8, 'Independently authenticated read-back', 'observation', `alpha=${cloud.observation.state.services.alpha}`), hop(9, 'Cloud Logging correlated by run id', 'correlation', logEntry.resource.labels.revision_name), diff --git a/media/hac-341/bin/verify-cockpit.mjs b/media/hac-341/bin/verify-cockpit.mjs index 52e2a68..db99bfd 100644 --- a/media/hac-341/bin/verify-cockpit.mjs +++ b/media/hac-341/bin/verify-cockpit.mjs @@ -215,6 +215,61 @@ if (/\bdata-il-motion\b/.test(cockpit) && !/il-step-in/.test(cockpit)) { fail('cockpit animates without using a frozen motion keyframe'); } +/* --- the cloud L1 must not read as a bounded-outcome experiment --------- */ + +/** + * `effect.invariant` is real evidence: the protected target's own recorded + * bound. Rendering it in cloud L1 put an inequality against the same bound 130 + * directly beneath EXECUTED, one proof-class switch away from the local class's + * `120 <= 130`. A reader scanning quickly can chain the two into "same + * experiment, confirmed on cloud" — exactly the reading the claim boundary + * denies, and the one SB-06 works hardest to prevent. + * + * The check asks *where the field is consumed*, not what its current value is, + * so changing the number cannot evade it. The value stays reachable in L2. + */ +function fnSource(src, name) { + const start = src.indexOf(`function ${name}(`); + if (start < 0) return ''; + const rest = src.slice(start); + const end = rest.slice(1).search(/\n(?:function |const [A-Za-z]|\/\* -)/); + return end < 0 ? rest : rest.slice(0, end + 1); +} +const cloudL1 = fnSource(cockpit, 'renderCloud'); +if (!cloudL1) { + fail('cannot locate renderCloud; the cloud L1 bounded-outcome check cannot run'); +} else if (/effect\.invariant/.test(cloudL1)) { + fail('cloud L1 renders the protected-mutation invariant; an inequality against the same bound as the HAC-330 joint constraint reads as a continuation of that experiment'); +} +// It is recorded evidence, so demoting it must not mean deleting it. +if (!/effect\.invariant/.test(cockpit)) { + fail('the protected-mutation invariant is rendered nowhere; it is recorded evidence and belongs in L2 or L3'); +} + +/* --- one name for the decision artifact --------------------------------- */ + +/** + * The adapter labelled hop 6 "ALLOW + authorization receipt" while the decision + * card and the storyboard both said "ALLOW + receipt". The longer phrase is not + * false — the receipt genuinely is an authorization receipt, and + * `src/authorization/receipt.ts` calls it that — but two names for one artifact + * on one surface invites reading the longer one as a lifecycle state this run + * never emitted. Prose describing the artifact is unaffected; this governs + * rendered labels. + */ +const decisionHop = cloud.events.find((e) => e.role === 'decision'); +const expectedLabel = `${cloud.decision.value} + receipt`; +if (!decisionHop) fail('the cloud path records no decision hop'); +else if (decisionHop.label !== expectedLabel) { + fail(`the cloud decision hop is labelled "${decisionHop.label}"; it must read "${expectedLabel}", matching the decision card and the storyboard`); +} +const storyboardHtml = readFileSync(join(repoRoot, 'media', 'hac-333', 'storyboard.html'), 'utf8'); +for (const [name, src] of Object.entries({ cockpit, 'storyboard.html': storyboardHtml })) { + if (/authorization receipt/i.test(src)) { + fail(`${name} names the decision artifact "authorization receipt"; both rendered surfaces use "${expectedLabel}"`); + } +} + /* --- class B derives from the published packet ------------------------- */ if (cloud.decision.value !== cloudPacket.decision) fail('cloud decision does not match the published packet'); diff --git a/media/hac-341/cockpit.html b/media/hac-341/cockpit.html index 83d42a3..4962a43 100644 --- a/media/hac-341/cockpit.html +++ b/media/hac-341/cockpit.html @@ -35,7 +35,10 @@ --n00:#fff;--n05:#f7f8f8;--n10:#eef0f0;--n20:#dde0e0;--n30:#c2c7c7;--n40:#9ba2a2; --n50:#737b7b;--n60:#515858;--n70:#343a3a;--n80:#1e2323;--n90:#141818;--n95:#0f1212; --ink:#0b0d0e;--paper:#fbfbfa; - --coupled:oklch(0.58 0.130 250);--blocked:oklch(0.58 0.150 28); + /* COUPLED measured 4.01:1 on the sunken light surface at L=0.58, under the + 4.5:1 floor for 8.5-10px label text. L=0.52 measures 5.15:1. Hue and chroma + are unchanged; the dark peer below is already ~8.6:1 and is left alone. */ + --coupled:oklch(0.52 0.130 250);--blocked:oklch(0.58 0.150 28); --executed:oklch(0.52 0.130 300);--observed:oklch(0.60 0.100 205); --failed:oklch(0.46 0.170 22); /* Surfaces, so a panel reads as an object rather than an outline on a field. */ @@ -692,6 +695,12 @@
${esc(run.applicationProvenance.note)}
+The protected target's own recorded bound. It is not the HAC-330 joint bound, and this run does not reproduce that experiment.
The frozen architecture visual bound to this run. Architecture verifies the result; it is never the first comprehension layer.