Skip to content

Commit 57b03af

Browse files
Merge pull request #74 from OneFineStarstuff/genspark_ai_developer
feat(AGI-REG-RESILIENT-WP-038) v1.0.0 — Regulator-Resilient Enterprise AGI/ASI Governance Architecture for Fortune 500 / Global 2000 / G-SIFIs (2026-2030)
2 parents 6b552fc + cb0bf5a commit 57b03af

12 files changed

Lines changed: 7903 additions & 3 deletions

rag-agentic-dashboard/data/agi-regulator-resilient.json

Lines changed: 1735 additions & 0 deletions
Large diffs are not rendered by default.

rag-agentic-dashboard/data/gsifi-aims-blueprint.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1609,4 +1609,4 @@
16091609
"/m12"
16101610
]
16111611
}
1612-
}
1612+
}

rag-agentic-dashboard/data/inst-agi-master.json

Lines changed: 1377 additions & 0 deletions
Large diffs are not rendered by default.

rag-agentic-dashboard/gen-agi-regulator-resilient-html.py

Lines changed: 411 additions & 0 deletions
Large diffs are not rendered by default.

rag-agentic-dashboard/gen-agi-regulator-resilient.py

Lines changed: 1487 additions & 0 deletions
Large diffs are not rendered by default.

rag-agentic-dashboard/gen-gsifi-aims-blueprint.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1511,7 +1511,7 @@ def restore_lkg_bundle(*a, **k): ...
15111511
"code": """from fastapi import FastAPI, HTTPException, Depends
15121512
app = FastAPI(title="RSP Decision Traceability API")
15131513
1514-
def auth(spiffe_id: str = ""):
1514+
def auth(spiffe_id: str = ""):
15151515
if not spiffe_id.startswith("spiffe://supervisor."):
15161516
raise HTTPException(401, "Supervisor SPIFFE required")
15171517
return spiffe_id
Lines changed: 287 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,287 @@
1+
#!/usr/bin/env python3
2+
"""
3+
WP-039 — HTML dashboard renderer for Institutional-Grade AGI/ASI & Enterprise AI
4+
Governance Master Blueprint.
5+
6+
Reads data/inst-agi-master.json and writes public/inst-agi-master.html.
7+
"""
8+
import html
9+
import json
10+
from pathlib import Path
11+
12+
ROOT = Path(__file__).parent
13+
SRC = ROOT / "data" / "inst-agi-master.json"
14+
OUT = ROOT / "public" / "inst-agi-master.html"
15+
16+
MODULE_ORDER = [
17+
"M1_pillars", "M2_regulatory", "M3_architecture", "M4_workflowai",
18+
"M5_aims", "M6_creditUnderwriting", "M7_frontierSafety", "M8_globalLegal",
19+
"M9_commandCenter", "M10_supervisoryKpis", "M11_incident",
20+
"M12_querySimulation", "M13_maturityCodex", "M14_roadmap",
21+
]
22+
23+
24+
def esc(v):
25+
if v is None:
26+
return ""
27+
if isinstance(v, (dict, list)):
28+
return html.escape(json.dumps(v, indent=2, ensure_ascii=False))
29+
return html.escape(str(v))
30+
31+
32+
def render_value(v):
33+
if isinstance(v, list):
34+
if not v:
35+
return "<em>—</em>"
36+
if all(isinstance(x, str) for x in v):
37+
return "<ul>" + "".join(f"<li>{esc(x)}</li>" for x in v) + "</ul>"
38+
return "<ul>" + "".join(f"<li><pre class='inline'>{esc(x)}</pre></li>" for x in v) + "</ul>"
39+
if isinstance(v, dict):
40+
rows = "".join(f"<tr><th>{esc(k)}</th><td>{render_value(val)}</td></tr>"
41+
for k, val in v.items())
42+
return f"<table class='kv'>{rows}</table>"
43+
return esc(v)
44+
45+
46+
def render_section(s):
47+
sid = s.get("id", "")
48+
title = s.get("title", "")
49+
parts = [f"<div class='section' id='{esc(sid)}'>"
50+
f"<h4>{esc(sid)}{esc(title)}</h4>"]
51+
for k, v in s.items():
52+
if k in ("id", "title"):
53+
continue
54+
parts.append(f"<div class='field'><div class='fk'>{esc(k)}</div>"
55+
f"<div class='fv'>{render_value(v)}</div></div>")
56+
parts.append("</div>")
57+
return "".join(parts)
58+
59+
60+
def render_module(m):
61+
mid = m.get("id", "")
62+
title = m.get("title", "")
63+
summary = m.get("summary", "")
64+
sections = m.get("sections", [])
65+
body = "".join(render_section(s) for s in sections)
66+
return (f"<section class='module' id='{esc(mid)}'>"
67+
f"<h2>{esc(title)}</h2>"
68+
f"<p class='summary'>{esc(summary)}</p>{body}</section>")
69+
70+
71+
def main():
72+
data = json.loads(SRC.read_text())
73+
meta = data.get("meta", {})
74+
es = data.get("executiveSummary", {})
75+
76+
n_modules = sum(1 for k in MODULE_ORDER if k in data)
77+
n_sections = sum(len(data[k].get("sections", [])) for k in MODULE_ORDER if k in data)
78+
n_schemas = len(data.get("schemas", {}))
79+
n_code = len(data.get("codeExamples", []))
80+
n_cases = len(data.get("caseStudies", []))
81+
n_routes = len(data.get("apiEndpoints", []))
82+
83+
# TOC
84+
toc_items = "".join(
85+
f"<li><a href='#{esc(data[k]['id'])}'>{esc(data[k]['id'])} — "
86+
f"{esc(data[k]['title'].split(' — ', 1)[-1] if ' — ' in data[k]['title'] else data[k]['title'])}</a></li>"
87+
for k in MODULE_ORDER if k in data
88+
)
89+
90+
# Modules
91+
modules_html = "".join(render_module(data[k]) for k in MODULE_ORDER if k in data)
92+
93+
# Schemas
94+
schemas_html = "".join(
95+
f"<div class='card'><h4>{esc(name)}</h4>"
96+
f"<p>{esc(spec.get('title', ''))}</p>"
97+
f"<pre>{esc(spec.get('fields', []))}</pre></div>"
98+
for name, spec in data.get("schemas", {}).items()
99+
)
100+
101+
# Code examples
102+
code_html = "".join(
103+
f"<tr><td>{esc(c.get('id'))}</td><td>{esc(c.get('title'))}</td>"
104+
f"<td>{esc(c.get('language'))}</td><td>{esc(c.get('lines'))}</td></tr>"
105+
for c in data.get("codeExamples", [])
106+
)
107+
108+
# Case studies
109+
cases_html = "".join(
110+
f"<tr><td>{esc(c.get('id'))}</td><td>{esc(c.get('title'))}</td>"
111+
f"<td>{esc(c.get('outcome'))}</td></tr>"
112+
for c in data.get("caseStudies", [])
113+
)
114+
115+
# API routes
116+
routes_html = "".join(f"<li><code>{esc(r)}</code></li>" for r in data.get("apiEndpoints", []))
117+
118+
# Regulatory alignment
119+
reg_html = "".join(f"<li>{esc(r)}</li>" for r in meta.get("regulatoryAlignment", []))
120+
121+
# Synthesizes
122+
synth_html = "".join(f"<li>{esc(r)}</li>" for r in meta.get("synthesizes", []))
123+
124+
# Audience
125+
aud_html = "".join(f"<li>{esc(a)}</li>" for a in meta.get("audience", []))
126+
127+
# Outcomes
128+
outcomes_html = "".join(f"<li>{esc(o)}</li>" for o in es.get("keyOutcomes", []))
129+
principles_html = "".join(f"<li>{esc(p)}</li>" for p in es.get("designPrinciples", []))
130+
131+
page = f"""<!DOCTYPE html>
132+
<html lang="en">
133+
<head>
134+
<meta charset="UTF-8">
135+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
136+
<title>{esc(meta.get('docRef'))}{esc(meta.get('title'))}</title>
137+
<style>
138+
*{{box-sizing:border-box}}
139+
body{{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif;margin:0;padding:0;background:#0b1220;color:#e8edf5;line-height:1.5}}
140+
header{{background:linear-gradient(135deg,#0a2540 0%,#1a365d 100%);padding:32px 24px;border-bottom:3px solid #4f8af0}}
141+
h1{{margin:0 0 8px 0;font-size:1.8rem}}
142+
h2{{color:#7eb6ff;border-bottom:1px solid #2a3a5a;padding-bottom:6px;margin-top:32px}}
143+
h3{{color:#b9d3ff}}
144+
h4{{color:#c8dcff;margin:14px 0 6px 0}}
145+
.container{{max-width:1280px;margin:0 auto;padding:24px}}
146+
.badges{{margin-top:12px}}
147+
.badge{{display:inline-block;background:#1a365d;color:#cfe0ff;padding:4px 10px;border-radius:14px;font-size:0.78rem;margin:3px 4px 0 0;border:1px solid #4f8af0}}
148+
.kpi-grid{{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:12px;margin-top:16px}}
149+
.kpi-card{{background:#142037;border:1px solid #2a3a5a;border-radius:8px;padding:14px;text-align:center}}
150+
.kpi-num{{font-size:1.6rem;font-weight:700;color:#7eb6ff}}
151+
.kpi-label{{font-size:0.82rem;color:#a8b9d4;margin-top:4px}}
152+
.toc{{background:#142037;border:1px solid #2a3a5a;padding:16px 20px;border-radius:8px;margin:16px 0}}
153+
.toc ul{{margin:6px 0 0 0;padding-left:20px;columns:2}}
154+
.toc a{{color:#7eb6ff;text-decoration:none}}
155+
.toc a:hover{{text-decoration:underline}}
156+
.module{{background:#0f1a2e;border:1px solid #2a3a5a;border-radius:10px;padding:20px;margin:18px 0}}
157+
.section{{background:#142037;border-left:3px solid #4f8af0;border-radius:6px;padding:12px 14px;margin:10px 0}}
158+
.summary{{font-style:italic;color:#a8b9d4}}
159+
.field{{margin:8px 0}}
160+
.fk{{font-weight:600;color:#b9d3ff;font-size:0.86rem;text-transform:uppercase;letter-spacing:0.3px}}
161+
.fv{{margin-top:4px}}
162+
table{{border-collapse:collapse;width:100%;margin:8px 0}}
163+
table.kv th{{text-align:left;background:#1a2944;color:#cfe0ff;font-weight:600;padding:6px 10px;border:1px solid #2a3a5a;width:30%;vertical-align:top}}
164+
table.kv td{{padding:6px 10px;border:1px solid #2a3a5a;background:#0f1a2e;vertical-align:top}}
165+
table.std{{margin-top:10px}}
166+
table.std th, table.std td{{padding:8px 10px;border:1px solid #2a3a5a;text-align:left;background:#0f1a2e}}
167+
table.std th{{background:#1a2944;color:#cfe0ff}}
168+
ul{{margin:4px 0 4px 0;padding-left:20px}}
169+
pre{{background:#0a1426;border:1px solid #2a3a5a;padding:8px;border-radius:6px;overflow:auto;font-size:0.82rem;color:#cfe0ff}}
170+
pre.inline{{display:inline-block;padding:2px 6px;margin:0;font-size:0.8rem}}
171+
code{{background:#0a1426;padding:1px 6px;border-radius:4px;color:#7eb6ff;font-size:0.82rem}}
172+
.cards{{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:12px}}
173+
.card{{background:#142037;border:1px solid #2a3a5a;border-radius:8px;padding:12px}}
174+
.routes{{columns:2;list-style:none;padding-left:0}}
175+
.routes li{{margin:2px 0;break-inside:avoid}}
176+
footer{{text-align:center;padding:24px;color:#6b7a99;font-size:0.85rem;border-top:1px solid #2a3a5a;margin-top:32px}}
177+
</style>
178+
</head>
179+
<body>
180+
<header>
181+
<div class="container">
182+
<h1>{esc(meta.get('title'))}</h1>
183+
<p style="color:#cfe0ff;margin:6px 0 0 0">{esc(meta.get('subtitle'))}</p>
184+
<div class="badges">
185+
<span class="badge">{esc(meta.get('docRef'))}</span>
186+
<span class="badge">v{esc(meta.get('version'))}</span>
187+
<span class="badge">{esc(meta.get('horizon'))}</span>
188+
<span class="badge">{esc(meta.get('classification'))}</span>
189+
</div>
190+
<div class="badges" style="margin-top:8px">
191+
<span class="badge">EU AI Act 2026</span>
192+
<span class="badge">NIST AI RMF 1.0</span>
193+
<span class="badge">ISO/IEC 42001</span>
194+
<span class="badge">GDPR</span>
195+
<span class="badge">SR 11-7</span>
196+
<span class="badge">Basel III/IV</span>
197+
<span class="badge">PRA / FCA / MAS / HKMA</span>
198+
<span class="badge">SLSA L3 + Sigstore</span>
199+
</div>
200+
</div>
201+
</header>
202+
203+
<div class="container">
204+
205+
<div class="kpi-grid">
206+
<div class="kpi-card"><div class="kpi-num">{n_modules}</div><div class="kpi-label">Modules</div></div>
207+
<div class="kpi-card"><div class="kpi-num">{n_sections}</div><div class="kpi-label">Sections</div></div>
208+
<div class="kpi-card"><div class="kpi-num">8</div><div class="kpi-label">Architectural Planes</div></div>
209+
<div class="kpi-card"><div class="kpi-num">320</div><div class="kpi-label">Controls</div></div>
210+
<div class="kpi-card"><div class="kpi-num">18</div><div class="kpi-label">KPIs</div></div>
211+
<div class="kpi-card"><div class="kpi-num">{n_schemas}</div><div class="kpi-label">JSON Schemas</div></div>
212+
<div class="kpi-card"><div class="kpi-num">{n_code}</div><div class="kpi-label">Code Examples</div></div>
213+
<div class="kpi-card"><div class="kpi-num">{n_cases}</div><div class="kpi-label">Case Studies</div></div>
214+
<div class="kpi-card"><div class="kpi-num">{n_routes}</div><div class="kpi-label">API Routes</div></div>
215+
</div>
216+
217+
<h2>Executive Summary</h2>
218+
<div class="card">
219+
<h3>Purpose</h3>
220+
<p>{esc(es.get('purpose'))}</p>
221+
<h3>Scope</h3>
222+
<p>{esc(es.get('scope'))}</p>
223+
<h3>Design Principles</h3>
224+
<ul>{principles_html}</ul>
225+
<h3>Key Outcomes</h3>
226+
<ul>{outcomes_html}</ul>
227+
<h3>Board Narrative</h3>
228+
<p>{esc(es.get('boardNarrative'))}</p>
229+
</div>
230+
231+
<h2>Synthesizes (Workpackage Lineage)</h2>
232+
<ul>{synth_html}</ul>
233+
234+
<h2>Document Metadata</h2>
235+
<table class="kv">
236+
<tr><th>Owner</th><td>{esc(meta.get('owner'))}</td></tr>
237+
<tr><th>Audience</th><td><ul>{aud_html}</ul></td></tr>
238+
<tr><th>Subject System</th><td>{render_value(meta.get('subjectSystem') or {})}</td></tr>
239+
<tr><th>Deliverable Inventory</th><td>{render_value(meta.get('deliverableInventory') or {})}</td></tr>
240+
</table>
241+
242+
<h2>Regulatory Alignment</h2>
243+
<ul>{reg_html}</ul>
244+
245+
<h2>Table of Contents</h2>
246+
<div class="toc"><ul>{toc_items}</ul></div>
247+
248+
{modules_html}
249+
250+
<h2>JSON Schemas ({n_schemas})</h2>
251+
<div class="cards">{schemas_html}</div>
252+
253+
<h2>Code Examples ({n_code})</h2>
254+
<table class="std">
255+
<thead><tr><th>ID</th><th>Title</th><th>Language</th><th>Lines</th></tr></thead>
256+
<tbody>{code_html}</tbody>
257+
</table>
258+
259+
<h2>Case Studies ({n_cases})</h2>
260+
<table class="std">
261+
<thead><tr><th>ID</th><th>Title</th><th>Outcome</th></tr></thead>
262+
<tbody>{cases_html}</tbody>
263+
</table>
264+
265+
<h2>API Endpoints ({n_routes})</h2>
266+
<ul class="routes">{routes_html}</ul>
267+
268+
<footer>
269+
{esc(meta.get('docRef'))} v{esc(meta.get('version'))} · {esc(meta.get('horizon'))}<br>
270+
Synthesizes WP-035 + WP-036 + WP-037 + WP-038
271+
</footer>
272+
273+
</div>
274+
</body>
275+
</html>
276+
"""
277+
278+
OUT.parent.mkdir(parents=True, exist_ok=True)
279+
OUT.write_text(page)
280+
size_kb = OUT.stat().st_size / 1024
281+
print(f"[OK] Generated {OUT} ({size_kb:.1f} KB)")
282+
print(f" modules={n_modules} sections={n_sections} schemas={n_schemas} "
283+
f"code={n_code} cases={n_cases} routes={n_routes}")
284+
285+
286+
if __name__ == "__main__":
287+
main()

0 commit comments

Comments
 (0)