betterwithage Claude Opus 4.7 commited on
Commit
5fa6996
·
verified ·
1 Parent(s): 06fda08

deploy(hf): sync szl-holdings/a11oy@c735a0be78f11a56fd089ef76cbe7bf9b035ed10 derived COPY set

Browse files

Reusable Dockerfile-COPY-derived deploy from szl-holdings/a11oy c735a0be78f11a56fd089ef76cbe7bf9b035ed10.
Files: 1343 Pruned: 0
Derived from Dockerfile COPY sources (NO hand-maintained allowlist).

Signed-off-by: SZL Holdings <noreply@szlholdings.ai>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

console/3d/aegis-proof-cells.html ADDED
@@ -0,0 +1,157 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!doctype html>
2
+ <html lang="en" data-szl-public-experience-v3="true" data-aegis-proof-cells="v1">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width,initial-scale=1,viewport-fit=cover">
6
+ <meta name="description" content="Aegis Proof Cells: a governed, defensive, evidence-preserving investigation planner.">
7
+ <title>Aegis Proof Cells — SZL Holdings</title>
8
+ <link rel="stylesheet" href="/static/3d/aegis-proof-cells/styles.css?v=5b85354daf5fd09abea415bbad6a4c87f1c8a14f6cb7b62ded77637323461019">
9
+ <script type="module" src="/static/3d/aegis-proof-cells/app.mjs?v=ef16f51b2182701d9950c1ffa6dc22965f52df27f29a35a7fe7e67c433c20df9"></script>
10
+ </head>
11
+ <body>
12
+ <a class="skip" href="#main">Skip to Aegis Proof Cells</a>
13
+ <main id="main">
14
+ <header>
15
+ <div class="eyebrow">Aegis / Governed Defensive Operations</div>
16
+ <h1>Proof Cells</h1>
17
+ <p class="lede">
18
+ A coordinated defensive investigation workbench built around tenant isolation,
19
+ evidence continuity, explicit procedure capsules, analyst approval, and deterministic
20
+ Proof Chain receipts.
21
+ </p>
22
+ <div class="truth-banner" id="boot-state" role="status" aria-live="polite">
23
+ Original SZL/Aegis implementation. Bricklayer.ai public materials are architectural
24
+ references only. No Bricklayer source, prompts, site copy, visual identity, or private
25
+ implementation is included. External writes and effectors are disabled.
26
+ </div>
27
+ </header>
28
+
29
+ <section class="metrics" aria-label="Capability status">
30
+ <article class="metric">
31
+ <span class="metric-label">Proof cells</span>
32
+ <strong id="cell-count">11</strong>
33
+ </article>
34
+ <article class="metric">
35
+ <span class="metric-label">Procedure capsules</span>
36
+ <strong id="capsule-count">6</strong>
37
+ </article>
38
+ <article class="metric">
39
+ <span class="metric-label">Operating mode</span>
40
+ <strong id="mode">DEFENSIVE READ-ONLY</strong>
41
+ </article>
42
+ </section>
43
+
44
+ <section class="layout">
45
+ <article class="panel">
46
+ <div class="eyebrow">Investigation planner</div>
47
+ <h2>Evaluate a defensive case</h2>
48
+ <p>
49
+ The planner returns a deterministic cell sequence and decision state. It never
50
+ executes containment, remediation, credential access, or external writes.
51
+ </p>
52
+ <form id="case-form">
53
+ <label>
54
+ Tenant ID
55
+ <input name="tenant_id" value="tenant-demo" autocomplete="off" required>
56
+ </label>
57
+ <label>
58
+ Passport tenant ID
59
+ <input name="passport_tenant_id" value="tenant-demo" autocomplete="off" required>
60
+ </label>
61
+ <label>
62
+ Alert ID
63
+ <input name="alert_id" value="alert-001" autocomplete="off">
64
+ </label>
65
+ <label>
66
+ Source
67
+ <input name="source" value="SIEM" autocomplete="off">
68
+ </label>
69
+ <label>
70
+ Mission
71
+ <select name="mission">
72
+ <option value="alert-triage">Alert triage</option>
73
+ <option value="phishing">Phishing investigation</option>
74
+ <option value="endpoint">Endpoint investigation</option>
75
+ <option value="vulnerability">Vulnerability prioritization</option>
76
+ <option value="cloud">Cloud posture review</option>
77
+ <option value="threat-intel">Threat intelligence brief</option>
78
+ </select>
79
+ </label>
80
+ <label>
81
+ Requested action
82
+ <select name="requested_action">
83
+ <option value="investigate">Investigate</option>
84
+ <option value="draft-report">Draft report</option>
85
+ <option value="block-indicator">Block indicator</option>
86
+ <option value="isolate-host">Isolate host</option>
87
+ <option value="disable-account">Disable account</option>
88
+ <option value="purge-email">Purge email</option>
89
+ <option value="remediate">Remediate</option>
90
+ </select>
91
+ </label>
92
+ <label>
93
+ Severity
94
+ <select name="severity">
95
+ <option>LOW</option>
96
+ <option selected>MEDIUM</option>
97
+ <option>HIGH</option>
98
+ <option>CRITICAL</option>
99
+ </select>
100
+ </label>
101
+ <label>
102
+ Evidence atom count
103
+ <input name="evidence_count" type="number" min="0" max="1000" value="3">
104
+ </label>
105
+ <label class="checkbox">
106
+ <input name="evidence_fresh" type="checkbox" checked>
107
+ Evidence is current
108
+ </label>
109
+ <label class="checkbox">
110
+ <input name="human_approved" type="checkbox">
111
+ Human approval recorded
112
+ </label>
113
+ <button type="submit">Generate governed plan</button>
114
+ </form>
115
+ <div class="status">Decision: <strong id="decision-state">UNAVAILABLE</strong></div>
116
+ <pre id="case-result" aria-live="polite">Submit the case to generate a deterministic, effect-free plan.</pre>
117
+ </article>
118
+
119
+ <aside class="panel">
120
+ <div class="eyebrow">Evidence bus</div>
121
+ <h2>Read-only A11oy security context</h2>
122
+ <p>
123
+ These probes call same-origin defensive evidence routes. A failed source remains
124
+ <strong>UNAVAILABLE</strong>; it is never upgraded to live evidence.
125
+ </p>
126
+ <button id="refresh-evidence" type="button">Refresh evidence sources</button>
127
+ <div class="status" id="evidence-state">Not observed</div>
128
+ <pre id="evidence-output" aria-live="polite">Evidence sources have not been probed.</pre>
129
+ </aside>
130
+ </section>
131
+
132
+ <section aria-labelledby="cells-heading">
133
+ <div class="section-heading">
134
+ <div class="eyebrow">Specialist workforce</div>
135
+ <h2 id="cells-heading">Eleven bounded Proof Cells</h2>
136
+ <p class="lede">
137
+ Every cell receives the same Tenant Passport and accumulates typed Evidence Atoms.
138
+ Handoffs preserve source, freshness, procedure, hypothesis, decision, and outcome context.
139
+ </p>
140
+ </div>
141
+ <div class="cells" id="cells"></div>
142
+ </section>
143
+
144
+ <footer>
145
+ <p>
146
+ Registry SHA-256: <code>6dbffba48d8c1204f4c6586695705718f4d15b8232377606ff553230761c7880</code>. JavaScript SHA-256:
147
+ <code>ef16f51b2182701d9950c1ffa6dc22965f52df27f29a35a7fe7e67c433c20df9</code>. CSS SHA-256: <code>5b85354daf5fd09abea415bbad6a4c87f1c8a14f6cb7b62ded77637323461019</code>.
148
+ </p>
149
+ <p>
150
+ Defensive decision support only. No affiliation with Bricklayer AI. No production
151
+ action is authorized by this page or its MODELED score. Inspect the
152
+ <a href="/static/3d/aegis-proof-cells/registry.json">machine registry</a>.
153
+ </p>
154
+ </footer>
155
+ </main>
156
+ </body>
157
+ </html>
console/3d/aegis-proof-cells/app.mjs ADDED
@@ -0,0 +1,272 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ const ALLOWED_MISSIONS = new Set([
2
+ "alert-triage",
3
+ "phishing",
4
+ "endpoint",
5
+ "vulnerability",
6
+ "cloud",
7
+ "threat-intel",
8
+ ]);
9
+
10
+ const PROHIBITED_TOKENS = [
11
+ "exploit",
12
+ "exfiltrate",
13
+ "credential theft",
14
+ "steal credential",
15
+ "dump credential",
16
+ "deploy malware",
17
+ "ransomware",
18
+ "disable security",
19
+ "evade detection",
20
+ "persistence",
21
+ "lateral movement",
22
+ "destructive",
23
+ ];
24
+
25
+ const APPROVAL_ACTIONS = new Set([
26
+ "block-indicator",
27
+ "isolate-host",
28
+ "disable-account",
29
+ "purge-email",
30
+ "remediate",
31
+ ]);
32
+
33
+ export function canonicalJSONString(value) {
34
+ if (value === null || typeof value !== "object") {
35
+ return JSON.stringify(value);
36
+ }
37
+ if (Array.isArray(value)) {
38
+ return `[${value.map(canonicalJSONString).join(",")}]`;
39
+ }
40
+ const keys = Object.keys(value).sort();
41
+ return `{${keys.map((key) => `${JSON.stringify(key)}:${canonicalJSONString(value[key])}`).join(",")}}`;
42
+ }
43
+
44
+ export async function sha256Hex(text) {
45
+ const bytes = new TextEncoder().encode(text);
46
+ const digest = await globalThis.crypto.subtle.digest("SHA-256", bytes);
47
+ return Array.from(new Uint8Array(digest), (value) => value.toString(16).padStart(2, "0")).join("");
48
+ }
49
+
50
+ function normalizeText(value) {
51
+ return String(value ?? "").trim();
52
+ }
53
+
54
+ function normalizedBoolean(value) {
55
+ if (typeof value === "boolean") return value;
56
+ return ["1", "true", "yes", "on"].includes(normalizeText(value).toLowerCase());
57
+ }
58
+
59
+ function capsuleFor(registry, mission) {
60
+ return registry.procedure_capsules.find((item) => item.mission === mission) ?? null;
61
+ }
62
+
63
+ function prohibitedAction(action) {
64
+ const normalized = normalizeText(action).toLowerCase();
65
+ return PROHIBITED_TOKENS.some((token) => normalized.includes(token));
66
+ }
67
+
68
+ export function evaluateCase(input, registry) {
69
+ const tenantId = normalizeText(input.tenant_id);
70
+ const passportTenantId = normalizeText(input.passport_tenant_id);
71
+ const mission = normalizeText(input.mission).toLowerCase();
72
+ const requestedAction = normalizeText(input.requested_action).toLowerCase() || "investigate";
73
+ const alertId = normalizeText(input.alert_id) || "UNAVAILABLE";
74
+ const source = normalizeText(input.source) || "UNAVAILABLE";
75
+ const severity = normalizeText(input.severity).toUpperCase() || "UNAVAILABLE";
76
+ const evidenceCount = Number.parseInt(String(input.evidence_count ?? "0"), 10);
77
+ const evidenceFresh = normalizedBoolean(input.evidence_fresh);
78
+ const humanApproved = normalizedBoolean(input.human_approved);
79
+ const capsule = capsuleFor(registry, mission);
80
+
81
+ let state = "SANDBOX_PLAN";
82
+ let reason = "DEFENSIVE_PLAN_READY";
83
+
84
+ if (!tenantId || !passportTenantId) {
85
+ state = "DENIED";
86
+ reason = "TENANT_PASSPORT_REQUIRED";
87
+ } else if (tenantId !== passportTenantId) {
88
+ state = "DENIED";
89
+ reason = "CROSS_TENANT_SCOPE";
90
+ } else if (!ALLOWED_MISSIONS.has(mission) || capsule === null) {
91
+ state = "DENIED";
92
+ reason = "UNSUPPORTED_DEFENSIVE_MISSION";
93
+ } else if (prohibitedAction(requestedAction)) {
94
+ state = "DENIED";
95
+ reason = "PROHIBITED_ACTION";
96
+ } else if (!Number.isFinite(evidenceCount) || evidenceCount <= 0 || !evidenceFresh) {
97
+ state = "ABSTAINED";
98
+ reason = "EVIDENCE_NOT_FRESH";
99
+ } else if (APPROVAL_ACTIONS.has(requestedAction) && !humanApproved) {
100
+ state = "AWAITING_APPROVAL";
101
+ reason = "HUMAN_APPROVAL_REQUIRED";
102
+ }
103
+
104
+ const decisionGate = state === "DENIED" || state === "ABSTAINED" ? 0 : 1;
105
+ const evidenceScore = Math.max(0, Math.min(1, Number.isFinite(evidenceCount) ? evidenceCount / 5 : 0));
106
+ const freshnessScore = evidenceFresh ? 1 : 0;
107
+ const scopeScore = tenantId && tenantId === passportTenantId ? 1 : 0;
108
+ const procedureScore = capsule ? 1 : 0;
109
+ const quality = Math.pow(
110
+ Math.max(evidenceScore, 0.000001) ** 0.30
111
+ * Math.max(freshnessScore, 0.000001) ** 0.25
112
+ * Math.max(scopeScore, 0.000001) ** 0.25
113
+ * Math.max(procedureScore, 0.000001) ** 0.20,
114
+ 1,
115
+ );
116
+ const modeledScore = Math.min(0.97, quality * decisionGate);
117
+
118
+ const plan = capsule
119
+ ? capsule.cells.map((cellId, index) => {
120
+ const cell = registry.proof_cells.find((item) => item.id === cellId);
121
+ return {
122
+ sequence: index + 1,
123
+ cell_id: cellId,
124
+ cell_name: cell?.name ?? cellId,
125
+ objective: cell?.purpose ?? "UNAVAILABLE",
126
+ mode: "READ_ONLY_DEFENSIVE",
127
+ };
128
+ })
129
+ : [];
130
+
131
+ const derivation = {
132
+ schema: "szl.aegis-proof-cells.evaluation/v1",
133
+ input: {
134
+ tenant_id: tenantId || "UNAVAILABLE",
135
+ passport_tenant_id: passportTenantId || "UNAVAILABLE",
136
+ alert_id: alertId,
137
+ source,
138
+ severity,
139
+ mission: mission || "UNAVAILABLE",
140
+ requested_action: requestedAction,
141
+ evidence_count: Number.isFinite(evidenceCount) ? evidenceCount : 0,
142
+ evidence_fresh: evidenceFresh,
143
+ human_approved: humanApproved,
144
+ },
145
+ decision: {
146
+ state,
147
+ reason,
148
+ evidence_class: "MODELED",
149
+ score: Number(modeledScore.toFixed(8)),
150
+ trust_ceiling: 0.97,
151
+ production_authorization: false,
152
+ },
153
+ procedure_capsule: capsule?.id ?? "UNAVAILABLE",
154
+ plan,
155
+ context_contract: registry.context_types,
156
+ authority: {
157
+ default_effect: "DENY",
158
+ external_writes: "DISABLED",
159
+ effectors: [],
160
+ automatic_retries: 0,
161
+ credentials_accepted: false,
162
+ cross_tenant_access: "DENIED",
163
+ offensive_intrusion: "DENIED",
164
+ },
165
+ };
166
+
167
+ return derivation;
168
+ }
169
+
170
+ export async function evaluateCaseWithReceipt(input, registry) {
171
+ const result = evaluateCase(input, registry);
172
+ return {
173
+ ...result,
174
+ proof_chain: {
175
+ kind: "DETERMINISTIC_CLIENT_RECEIPT",
176
+ sha256: await sha256Hex(canonicalJSONString(result)),
177
+ signature_status: "UNAVAILABLE",
178
+ persisted: false,
179
+ },
180
+ };
181
+ }
182
+
183
+ function text(element, value) {
184
+ if (element) element.textContent = value;
185
+ }
186
+
187
+ function renderCells(registry) {
188
+ const grid = document.querySelector("#cells");
189
+ if (!grid) return;
190
+ grid.replaceChildren();
191
+ for (const cell of registry.proof_cells) {
192
+ const article = document.createElement("article");
193
+ article.className = "cell";
194
+ const label = document.createElement("div");
195
+ label.className = "cell-id";
196
+ label.textContent = cell.id;
197
+ const heading = document.createElement("h3");
198
+ heading.textContent = cell.name;
199
+ const paragraph = document.createElement("p");
200
+ paragraph.textContent = cell.purpose;
201
+ article.append(label, heading, paragraph);
202
+ grid.append(article);
203
+ }
204
+ }
205
+
206
+ async function readJson(path) {
207
+ const response = await fetch(path, {
208
+ cache: "no-store",
209
+ credentials: "same-origin",
210
+ redirect: "error",
211
+ headers: { Accept: "application/json" },
212
+ });
213
+ if (!response.ok) throw new Error(`${path} -> HTTP ${response.status}`);
214
+ return response.json();
215
+ }
216
+
217
+ async function refreshEvidence(registry) {
218
+ const output = document.querySelector("#evidence-output");
219
+ const summary = [];
220
+ for (const source of registry.live_read_only_sources) {
221
+ try {
222
+ const payload = await readJson(source.path);
223
+ summary.push({
224
+ id: source.id,
225
+ state: "AVAILABLE",
226
+ path: source.path,
227
+ observed_at: payload.observed_at ?? "UNAVAILABLE",
228
+ data_kind: payload.data_kind ?? payload.status ?? "REPORTED",
229
+ });
230
+ } catch (error) {
231
+ summary.push({
232
+ id: source.id,
233
+ state: "UNAVAILABLE",
234
+ path: source.path,
235
+ reason: error instanceof Error ? error.message : String(error),
236
+ });
237
+ }
238
+ }
239
+ if (output) output.textContent = JSON.stringify(summary, null, 2);
240
+ text(document.querySelector("#evidence-state"), `${summary.filter((row) => row.state === "AVAILABLE").length}/${summary.length} sources available`);
241
+ }
242
+
243
+ function readForm(form) {
244
+ const data = new FormData(form);
245
+ return Object.fromEntries(data.entries());
246
+ }
247
+
248
+ async function boot() {
249
+ const registry = await readJson("/static/3d/aegis-proof-cells/registry.json");
250
+ text(document.querySelector("#cell-count"), String(registry.proof_cells.length));
251
+ text(document.querySelector("#capsule-count"), String(registry.procedure_capsules.length));
252
+ text(document.querySelector("#mode"), registry.operating_mode);
253
+ renderCells(registry);
254
+
255
+ const form = document.querySelector("#case-form");
256
+ const result = document.querySelector("#case-result");
257
+ form?.addEventListener("submit", async (event) => {
258
+ event.preventDefault();
259
+ const evaluated = await evaluateCaseWithReceipt(readForm(form), registry);
260
+ if (result) result.textContent = JSON.stringify(evaluated, null, 2);
261
+ text(document.querySelector("#decision-state"), evaluated.decision.state);
262
+ });
263
+
264
+ document.querySelector("#refresh-evidence")?.addEventListener("click", () => refreshEvidence(registry));
265
+ await refreshEvidence(registry);
266
+ }
267
+
268
+ if (typeof document !== "undefined") {
269
+ boot().catch((error) => {
270
+ text(document.querySelector("#boot-state"), `UNAVAILABLE: ${error instanceof Error ? error.message : String(error)}`);
271
+ });
272
+ }
console/3d/aegis-proof-cells/registry.json ADDED
@@ -0,0 +1,321 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "authority": {
3
+ "automatic_retries": 0,
4
+ "credentials_accepted": false,
5
+ "cross_tenant_access": "DENIED",
6
+ "default_effect": "DENY",
7
+ "destructive_remediation": "DENIED",
8
+ "effectors": [],
9
+ "external_writes": "DISABLED",
10
+ "human_approval_required": true,
11
+ "offensive_intrusion": "DENIED",
12
+ "production_authorization": false,
13
+ "secrets_persisted": false
14
+ },
15
+ "bricklayer_boundary": {
16
+ "affiliation": "NONE",
17
+ "brand_identity_reused": false,
18
+ "classification": "REFERENCE_ONLY_CLEAN_ROOM",
19
+ "note": "Public product and engineering publications were used only to identify high-level operating patterns. The implementation, naming, data model, interface, policies, and code are original SZL/Aegis expression.",
20
+ "official_public_code_repository_found": false,
21
+ "proprietary_implementation_available": false,
22
+ "source_code_copied": false,
23
+ "visual_identity_copied": false,
24
+ "website_copy_copied": false
25
+ },
26
+ "context_types": [
27
+ "EVIDENTIARY",
28
+ "PROCEDURAL",
29
+ "INVESTIGATIVE",
30
+ "DECISION",
31
+ "OUTCOME"
32
+ ],
33
+ "evidence_class": "REPORTED_REFERENCE_ARCHITECTURE",
34
+ "live_read_only_sources": [
35
+ {
36
+ "claim": "CISA KEV-backed status when source is available",
37
+ "id": "kev",
38
+ "path": "/api/a11oy/v1/sec/kevgate"
39
+ },
40
+ {
41
+ "claim": "ATT&CK-oriented defensive context",
42
+ "id": "attack",
43
+ "path": "/api/a11oy/v1/sec/attack"
44
+ },
45
+ {
46
+ "claim": "Current A11oy threat context",
47
+ "id": "threats",
48
+ "path": "/api/a11oy/v1/sec/threats"
49
+ },
50
+ {
51
+ "claim": "Read-only threat graph context",
52
+ "id": "threatgraph",
53
+ "path": "/api/a11oy/v1/sec/threatgraph"
54
+ },
55
+ {
56
+ "claim": "CVE evidence surface",
57
+ "id": "cve",
58
+ "path": "/api/a11oy/v1/sec/cve"
59
+ }
60
+ ],
61
+ "observed_at": "2026-09-03",
62
+ "operating_mode": "DEFENSIVE_READ_ONLY_INVESTIGATION_PLANNER",
63
+ "procedure_capsules": [
64
+ {
65
+ "approval_required_for": [
66
+ "block-indicator",
67
+ "isolate-host",
68
+ "disable-account",
69
+ "purge-email",
70
+ "remediate"
71
+ ],
72
+ "cells": [
73
+ "signal-intake",
74
+ "identity-scope",
75
+ "asset-context",
76
+ "evidence-provenance",
77
+ "threat-context",
78
+ "incident-investigation",
79
+ "outcome-debrief"
80
+ ],
81
+ "id": "alert-triage-v1",
82
+ "mission": "alert-triage"
83
+ },
84
+ {
85
+ "approval_required_for": [
86
+ "block-indicator",
87
+ "disable-account",
88
+ "purge-email",
89
+ "remediate"
90
+ ],
91
+ "cells": [
92
+ "signal-intake",
93
+ "identity-scope",
94
+ "threat-context",
95
+ "incident-investigation",
96
+ "evidence-provenance",
97
+ "remediation-planning",
98
+ "outcome-debrief"
99
+ ],
100
+ "id": "phishing-investigation-v1",
101
+ "mission": "phishing"
102
+ },
103
+ {
104
+ "approval_required_for": [
105
+ "isolate-host",
106
+ "block-indicator",
107
+ "remediate"
108
+ ],
109
+ "cells": [
110
+ "signal-intake",
111
+ "identity-scope",
112
+ "asset-context",
113
+ "detection-engineering",
114
+ "threat-context",
115
+ "incident-investigation",
116
+ "evidence-provenance",
117
+ "remediation-planning",
118
+ "outcome-debrief"
119
+ ],
120
+ "id": "endpoint-investigation-v1",
121
+ "mission": "endpoint"
122
+ },
123
+ {
124
+ "approval_required_for": [
125
+ "remediate"
126
+ ],
127
+ "cells": [
128
+ "signal-intake",
129
+ "identity-scope",
130
+ "asset-context",
131
+ "exposure-analysis",
132
+ "threat-context",
133
+ "evidence-provenance",
134
+ "remediation-planning",
135
+ "outcome-debrief"
136
+ ],
137
+ "id": "vulnerability-prioritization-v1",
138
+ "mission": "vulnerability"
139
+ },
140
+ {
141
+ "approval_required_for": [
142
+ "disable-account",
143
+ "remediate"
144
+ ],
145
+ "cells": [
146
+ "signal-intake",
147
+ "identity-scope",
148
+ "asset-context",
149
+ "cloud-posture",
150
+ "exposure-analysis",
151
+ "evidence-provenance",
152
+ "remediation-planning",
153
+ "outcome-debrief"
154
+ ],
155
+ "id": "cloud-posture-review-v1",
156
+ "mission": "cloud"
157
+ },
158
+ {
159
+ "approval_required_for": [],
160
+ "cells": [
161
+ "signal-intake",
162
+ "identity-scope",
163
+ "threat-context",
164
+ "evidence-provenance",
165
+ "incident-investigation",
166
+ "outcome-debrief"
167
+ ],
168
+ "id": "threat-intelligence-brief-v1",
169
+ "mission": "threat-intel"
170
+ }
171
+ ],
172
+ "proof_cells": [
173
+ {
174
+ "id": "signal-intake",
175
+ "name": "Signal Intake",
176
+ "purpose": "Normalize defensive alerts without discarding source evidence."
177
+ },
178
+ {
179
+ "id": "identity-scope",
180
+ "name": "Identity & Scope",
181
+ "purpose": "Bind tenant, principal, mission, and permitted connector labels."
182
+ },
183
+ {
184
+ "id": "asset-context",
185
+ "name": "Asset Context",
186
+ "purpose": "Resolve affected assets, owners, and business criticality."
187
+ },
188
+ {
189
+ "id": "detection-engineering",
190
+ "name": "Detection Engineering",
191
+ "purpose": "Assess detection intent, logic, and evidence coverage."
192
+ },
193
+ {
194
+ "id": "threat-context",
195
+ "name": "Threat Context",
196
+ "purpose": "Map observed behavior to defensive threat knowledge."
197
+ },
198
+ {
199
+ "id": "exposure-analysis",
200
+ "name": "Exposure Analysis",
201
+ "purpose": "Prioritize material and exploitable exposure."
202
+ },
203
+ {
204
+ "id": "cloud-posture",
205
+ "name": "Cloud Posture",
206
+ "purpose": "Evaluate cloud configuration and identity-control evidence."
207
+ },
208
+ {
209
+ "id": "incident-investigation",
210
+ "name": "Incident Investigation",
211
+ "purpose": "Build a source-labelled timeline and test hypotheses."
212
+ },
213
+ {
214
+ "id": "evidence-provenance",
215
+ "name": "Evidence Provenance",
216
+ "purpose": "Maintain freshness, source, transformations, and confidence."
217
+ },
218
+ {
219
+ "id": "remediation-planning",
220
+ "name": "Remediation Planning",
221
+ "purpose": "Draft bounded defensive actions requiring human approval."
222
+ },
223
+ {
224
+ "id": "outcome-debrief",
225
+ "name": "Outcome & Debrief",
226
+ "purpose": "Record limitations, results, and reusable lessons."
227
+ }
228
+ ],
229
+ "public_architecture_observations": [
230
+ {
231
+ "abstract_pattern": "Specialized security roles coordinate under approved procedures with analyst oversight.",
232
+ "id": "coordinated-workforce",
233
+ "published_or_observed": "observed 2026-09-03",
234
+ "reuse_policy": "REFERENCE_ONLY",
235
+ "source": "https://www.bricklayer.ai/platform/",
236
+ "szl_transformation": "Aegis Proof Cells use Tenant Passports, Evidence Atoms, Procedure Capsules, and Decision Receipts."
237
+ },
238
+ {
239
+ "abstract_pattern": "Investigation context must accumulate across specialist handoffs.",
240
+ "id": "context-containers",
241
+ "published_or_observed": "2025-09-26",
242
+ "reuse_policy": "REFERENCE_ONLY",
243
+ "source": "https://www.bricklayer.ai/insights/multi-agent-context-engineering-mace-the-discipline-behind-investigative-artificial-intelligence-ai/",
244
+ "szl_transformation": "Aegis Evidence Groups preserve evidentiary, procedural, investigative, decision, and outcome context."
245
+ },
246
+ {
247
+ "abstract_pattern": "Structured, reusable investigation observations should replace unstructured handoff prose.",
248
+ "id": "insight-groups",
249
+ "published_or_observed": "2026-04-20",
250
+ "reuse_policy": "REFERENCE_ONLY",
251
+ "source": "https://www.bricklayer.ai/insights/introducing-insight-groups-structuring-context-for-the-coordinated-ai-soc/",
252
+ "szl_transformation": "Evidence Atoms are typed, source-labelled, freshness-bound records grouped into a Proof Chain."
253
+ },
254
+ {
255
+ "abstract_pattern": "Agent actions need an independent control layer and complete auditability.",
256
+ "id": "policy-enforcement",
257
+ "published_or_observed": "2026-03-24",
258
+ "reuse_policy": "REFERENCE_ONLY",
259
+ "source": "https://www.bricklayer.ai/insights/governing-ai-agents-announcing-our-first-patent-in-agentic-policy-enforcement/",
260
+ "szl_transformation": "Aegis applies deny-by-default Covenant Policy, hard-zero safety gates, human approvals, and effectors disabled."
261
+ },
262
+ {
263
+ "abstract_pattern": "Proven operational configurations should be packaged as governed reusable assets.",
264
+ "id": "shared-library",
265
+ "published_or_observed": "2026-06-03",
266
+ "reuse_policy": "REFERENCE_ONLY",
267
+ "source": "https://www.bricklayer.ai/insights/introducing-the-shared-agentic-library/",
268
+ "szl_transformation": "Versioned Procedure Capsules carry scope, prerequisites, cell graph, evidence contract, and approval requirements."
269
+ },
270
+ {
271
+ "abstract_pattern": "Multi-tenant procedures need explicit credential and environment segmentation.",
272
+ "id": "credential-segmentation",
273
+ "published_or_observed": "2025-02-21",
274
+ "reuse_policy": "REFERENCE_ONLY",
275
+ "source": "https://www.bricklayer.ai/insights/bricklayer-ai-introduces-credential-labels-and-azure-sentinel-support/",
276
+ "szl_transformation": "Tenant Passport labels select connector classes only; credentials are never accepted by this client-side workbench."
277
+ }
278
+ ],
279
+ "routes": {
280
+ "page": "/static/3d/aegis-proof-cells.html",
281
+ "registry": "/static/3d/aegis-proof-cells/registry.json",
282
+ "script": "/static/3d/aegis-proof-cells/app.mjs",
283
+ "styles": "/static/3d/aegis-proof-cells/styles.css"
284
+ },
285
+ "schema": "szl.aegis-proof-cells.registry/v1",
286
+ "standards_and_public_code": [
287
+ {
288
+ "license": "Apache-2.0",
289
+ "name": "Open Cybersecurity Schema Framework",
290
+ "repository": "https://github.com/ocsf/ocsf-schema",
291
+ "revision": "2c61b24c2f21d2ea316fca7d640bb37df3374011",
292
+ "source_code_copied": false,
293
+ "use": "Semantic reference for normalized defensive evidence."
294
+ },
295
+ {
296
+ "license": "TERMS_REVIEW_REQUIRED",
297
+ "name": "MITRE ATT&CK STIX Data",
298
+ "repository": "https://github.com/mitre-attack/attack-stix-data",
299
+ "revision": "6cda5ad8462c79e14fbb872f4e09059b18e0cfc4",
300
+ "source_code_copied": false,
301
+ "use": "Technique-oriented threat context reference."
302
+ },
303
+ {
304
+ "license": "Apache-2.0",
305
+ "name": "OpenTelemetry Specification",
306
+ "repository": "https://github.com/open-telemetry/opentelemetry-specification",
307
+ "revision": "eec6fadba46a5002f55ff88ce4405d58a1aa4aec",
308
+ "source_code_copied": false,
309
+ "use": "Trace and evidence-correlation semantic reference."
310
+ },
311
+ {
312
+ "license": "Apache-2.0",
313
+ "name": "Open Policy Agent",
314
+ "repository": "https://github.com/open-policy-agent/opa",
315
+ "revision": "92da7b47f05488487dcbdf1625e405d9141c6c38",
316
+ "source_code_copied": false,
317
+ "use": "Policy-decision architecture reference; no runtime dependency."
318
+ }
319
+ ],
320
+ "title": "Aegis Proof Cells"
321
+ }
console/3d/aegis-proof-cells/styles.css ADDED
@@ -0,0 +1,262 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ :root {
2
+ color-scheme: dark;
3
+ --bg: #05070a;
4
+ --panel: rgba(14, 19, 26, 0.86);
5
+ --panel-strong: #111722;
6
+ --line: #273444;
7
+ --text: #eef4fb;
8
+ --muted: #9aa9ba;
9
+ --signal: #78d5ff;
10
+ --good: #7ee7b6;
11
+ --warn: #ffd479;
12
+ --danger: #ff8c8c;
13
+ --radius: 18px;
14
+ }
15
+ *,
16
+ *::before,
17
+ *::after { box-sizing: border-box; }
18
+ html,
19
+ body {
20
+ margin: 0;
21
+ min-height: 100%;
22
+ max-width: 100%;
23
+ overflow-x: hidden;
24
+ }
25
+ html { scroll-behavior: smooth; }
26
+ body {
27
+ background:
28
+ radial-gradient(circle at 82% 2%, rgba(49, 148, 255, 0.15), transparent 32rem),
29
+ linear-gradient(rgba(255, 255, 255, 0.025) 1px, transparent 1px),
30
+ linear-gradient(90deg, rgba(255, 255, 255, 0.025) 1px, transparent 1px),
31
+ var(--bg);
32
+ background-size: auto, 32px 32px, 32px 32px, auto;
33
+ color: var(--text);
34
+ font: 15px/1.6 Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
35
+ }
36
+ a { color: var(--signal); }
37
+ a,
38
+ button,
39
+ input,
40
+ select {
41
+ min-height: 48px;
42
+ }
43
+ button,
44
+ input,
45
+ select {
46
+ max-width: 100%;
47
+ border: 1px solid var(--line);
48
+ border-radius: 10px;
49
+ background: #0c1118;
50
+ color: var(--text);
51
+ padding: 0.75rem 0.9rem;
52
+ font: inherit;
53
+ }
54
+ button {
55
+ cursor: pointer;
56
+ background: var(--text);
57
+ color: #05070a;
58
+ font-weight: 800;
59
+ }
60
+ button:hover { filter: brightness(0.92); }
61
+ button:focus-visible,
62
+ input:focus-visible,
63
+ select:focus-visible,
64
+ a:focus-visible {
65
+ outline: 3px solid var(--signal);
66
+ outline-offset: 3px;
67
+ }
68
+ .skip {
69
+ position: absolute;
70
+ left: 1rem;
71
+ top: -8rem;
72
+ z-index: 100;
73
+ padding: 0.75rem 1rem;
74
+ background: var(--text);
75
+ color: var(--bg);
76
+ }
77
+ .skip:focus { top: 1rem; }
78
+ main {
79
+ width: min(100%, 1240px);
80
+ margin: 0 auto;
81
+ padding: 2rem clamp(1rem, 3vw, 2.5rem) 5rem;
82
+ min-width: 0;
83
+ }
84
+ header {
85
+ display: grid;
86
+ gap: 1rem;
87
+ padding: clamp(2rem, 8vw, 6rem) 0 2rem;
88
+ }
89
+ .eyebrow,
90
+ .metric-label,
91
+ .cell-id {
92
+ color: var(--signal);
93
+ font: 700 0.75rem/1.4 ui-monospace, SFMono-Regular, Consolas, monospace;
94
+ letter-spacing: 0.13em;
95
+ text-transform: uppercase;
96
+ }
97
+ h1 {
98
+ margin: 0;
99
+ max-width: 13ch;
100
+ font-size: clamp(2.8rem, 10vw, 7.5rem);
101
+ line-height: 0.88;
102
+ letter-spacing: -0.065em;
103
+ overflow-wrap: anywhere;
104
+ }
105
+ .lede {
106
+ max-width: 72ch;
107
+ margin: 0;
108
+ color: var(--muted);
109
+ font-size: clamp(1rem, 2vw, 1.25rem);
110
+ }
111
+ .truth-banner {
112
+ border: 1px solid var(--line);
113
+ border-left: 4px solid var(--signal);
114
+ border-radius: 12px;
115
+ background: rgba(12, 17, 24, 0.9);
116
+ padding: 1rem 1.1rem;
117
+ overflow-wrap: anywhere;
118
+ }
119
+ .metrics,
120
+ .layout,
121
+ .cells {
122
+ display: grid;
123
+ min-width: 0;
124
+ }
125
+ .metrics {
126
+ grid-template-columns: repeat(3, minmax(0, 1fr));
127
+ gap: 0.8rem;
128
+ margin: 1.5rem 0 2.5rem;
129
+ }
130
+ .metric,
131
+ .panel,
132
+ .cell {
133
+ min-width: 0;
134
+ border: 1px solid var(--line);
135
+ border-radius: var(--radius);
136
+ background: var(--panel);
137
+ backdrop-filter: blur(12px);
138
+ }
139
+ .metric { padding: 1rem; }
140
+ .metric strong {
141
+ display: block;
142
+ margin-top: 0.4rem;
143
+ font-size: clamp(1.1rem, 3vw, 1.8rem);
144
+ overflow-wrap: anywhere;
145
+ }
146
+ .layout {
147
+ grid-template-columns: minmax(0, 1.15fr) minmax(0, 0.85fr);
148
+ gap: 1rem;
149
+ align-items: start;
150
+ }
151
+ .panel {
152
+ padding: clamp(1rem, 3vw, 1.5rem);
153
+ overflow: hidden;
154
+ }
155
+ .panel h2 { margin-top: 0; }
156
+ form {
157
+ display: grid;
158
+ grid-template-columns: repeat(2, minmax(0, 1fr));
159
+ gap: 0.85rem;
160
+ }
161
+ label {
162
+ display: grid;
163
+ gap: 0.4rem;
164
+ min-width: 0;
165
+ color: var(--muted);
166
+ font-weight: 650;
167
+ }
168
+ label.wide,
169
+ form button { grid-column: 1 / -1; }
170
+ .checkbox {
171
+ display: flex;
172
+ align-items: center;
173
+ gap: 0.7rem;
174
+ min-height: 48px;
175
+ }
176
+ .checkbox input {
177
+ width: 22px;
178
+ min-height: 22px;
179
+ height: 22px;
180
+ margin: 0;
181
+ }
182
+ pre {
183
+ width: 100%;
184
+ max-width: 100%;
185
+ max-height: 32rem;
186
+ overflow: auto;
187
+ margin: 1rem 0 0;
188
+ padding: 1rem;
189
+ border: 1px solid var(--line);
190
+ border-radius: 12px;
191
+ background: #070b10;
192
+ color: #cfe9ff;
193
+ white-space: pre-wrap;
194
+ overflow-wrap: anywhere;
195
+ word-break: break-word;
196
+ font: 0.78rem/1.55 ui-monospace, SFMono-Regular, Consolas, monospace;
197
+ }
198
+ .section-heading {
199
+ margin: 4rem 0 1rem;
200
+ }
201
+ .cells {
202
+ grid-template-columns: repeat(3, minmax(0, 1fr));
203
+ gap: 0.8rem;
204
+ }
205
+ .cell { padding: 1rem; }
206
+ .cell h3 { margin: 0.5rem 0; }
207
+ .cell p { margin: 0; color: var(--muted); }
208
+ .status {
209
+ display: inline-flex;
210
+ align-items: center;
211
+ gap: 0.5rem;
212
+ min-height: 48px;
213
+ color: var(--muted);
214
+ }
215
+ .status::before {
216
+ content: "";
217
+ width: 0.65rem;
218
+ height: 0.65rem;
219
+ border-radius: 50%;
220
+ background: var(--signal);
221
+ box-shadow: 0 0 1rem var(--signal);
222
+ }
223
+ footer {
224
+ margin-top: 4rem;
225
+ padding-top: 1.5rem;
226
+ border-top: 1px solid var(--line);
227
+ color: var(--muted);
228
+ }
229
+ @media (max-width: 820px) {
230
+ .layout,
231
+ .cells { grid-template-columns: minmax(0, 1fr); }
232
+ }
233
+ @media (max-width: 620px) {
234
+ .metrics,
235
+ form { grid-template-columns: minmax(0, 1fr); }
236
+ label.wide,
237
+ form button { grid-column: auto; }
238
+ h1 { font-size: clamp(2.65rem, 17vw, 5rem); }
239
+ }
240
+ @media (prefers-reduced-motion: reduce) {
241
+ *,
242
+ *::before,
243
+ *::after {
244
+ scroll-behavior: auto !important;
245
+ animation-duration: 0.01ms !important;
246
+ animation-iteration-count: 1 !important;
247
+ transition-duration: 0.01ms !important;
248
+ }
249
+ }
250
+ @media (prefers-contrast: more) {
251
+ :root {
252
+ --line: #a7dfff;
253
+ --muted: #d7e2ec;
254
+ }
255
+ }
256
+ @media (forced-colors: active) {
257
+ .metric,
258
+ .panel,
259
+ .cell,
260
+ .truth-banner { border: 1px solid CanvasText; }
261
+ .status::before { forced-color-adjust: none; }
262
+ }