From 730666a0033f8ed57496101e642cb7162656f94a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rama=20=E2=80=94=20Buttercode=20Systems?= Date: Thu, 12 Nov 2026 16:02:03 +0200 Subject: [PATCH 01/12] design: refresh AgentScope homepage visual system --- site/index.html | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/site/index.html b/site/index.html index d342167..6687758 100644 --- a/site/index.html +++ b/site/index.html @@ -21,6 +21,55 @@ @media(max-width:850px){header{grid-template-columns:1fr;gap:42px;padding-top:70px}.cards{grid-template-columns:1fr}.wrap{width:min(100% - 28px,1160px)}}@media(max-width:640px){nav .links a:not(.navcta){display:none}header{padding:58px 0 52px}h1{font-size:42px}section{padding:64px 0}.footer{display:block}.footer>*{display:block;margin:8px 0}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}} .skip-link{position:fixed;left:12px;top:12px;z-index:1000;transform:translateY(-160%);background:#fff;color:#0b0d10;padding:9px 12px;border:2px solid currentColor;border-radius:8px}.skip-link:focus{transform:translateY(0)} a:focus-visible,button:focus-visible{outline:3px solid currentColor;outline-offset:3px} + +/* AgentScope design system refresh */ +:root{--bg:#f4f5f1;--ink:#172019;--mut:#68736b;--line:#dce2d9;--card:#fff;--accent:#536f59;--dark:#172019;--good:#32704b} +body{font-family:Inter,ui-sans-serif,system-ui,-apple-system,"Segoe UI",sans-serif;letter-spacing:-.012em} +.wrap{width:min(1200px,calc(100% - 48px))} +nav{height:72px;border-bottom-color:var(--line)} +.wordmark{font:750 18px/1.1 Inter,ui-sans-serif,system-ui,sans-serif;letter-spacing:-.055em} +.wordmark i{width:10px;height:10px;background:var(--accent);box-shadow:0 0 0 4px #536f5918} +nav .links{gap:28px} +nav .links a{font:600 13px/1.2 Inter,ui-sans-serif,system-ui,sans-serif;color:#59655d;transition:color .18s ease} +nav .links a:hover{color:var(--accent)} +.links .navcta{background:var(--ink);border-radius:7px;padding:10px 15px;color:#fff} +header{padding:94px 0 82px;gap:72px} +.tag,.kicker{font:700 11px/1.3 Inter,ui-sans-serif,system-ui,sans-serif;letter-spacing:.13em;color:var(--accent)} +h1{font:750 clamp(44px,5.5vw,72px)/1.045 Inter,ui-sans-serif,system-ui,sans-serif;letter-spacing:-.067em} +h1 em{color:var(--accent)} +.hero-sub{font-size:18px;line-height:1.65;color:#667168;max-width:590px} +.btn{font:650 13px/1 Inter,ui-sans-serif,system-ui,sans-serif;padding:14px 18px;border-radius:7px;transition:transform .18s ease,background .18s ease,border-color .18s ease} +.btn:hover{background:#2b3a2e} +.btn-ghost{background:transparent;border-color:#cbd4ca;color:var(--ink)} +.btn-ghost:hover{background:#e9ede7;border-color:#aebcaf} +.microline{font-size:12px;color:#7b857d} +.stage{border-radius:12px;padding:17px;box-shadow:0 26px 70px #17201920} +.stage-kpis>div{border-radius:6px} +.stage-alert{border-radius:6px} +.stage-table{border-radius:6px} +section{padding:82px 0} +h2{font:720 clamp(30px,3.7vw,44px)/1.12 Inter,ui-sans-serif,system-ui,sans-serif;letter-spacing:-.055em} +.lede{font-size:16px;line-height:1.7;color:#68736b} +.cards{gap:16px;margin-top:34px} +.card{border-radius:9px;padding:25px 24px;border-color:#dfe4dc;box-shadow:0 2px 8px #17201905} +.card h3{font:680 16px/1.35 Inter,ui-sans-serif,system-ui,sans-serif;letter-spacing:-.025em;margin:26px 0 9px} +.card p{font-size:14px;line-height:1.7} +.story{border-left-color:#77917a} +.story p{font:500 clamp(20px,2.8vw,27px)/1.45 Inter,ui-sans-serif,system-ui,sans-serif;letter-spacing:-.025em} +.story .who{font:12px Inter,ui-sans-serif,system-ui,sans-serif} +.spec{font-size:14px} +.spec td:first-child{font:700 11px Inter,ui-sans-serif,system-ui,sans-serif;letter-spacing:.07em;color:#536f59} +pre{border-radius:8px;background:#18221b;border-color:#27382b;font-size:12px} +.dark{background:#172019;color:#f5f7f3;border-color:#26352a} +.dark .kicker{color:#a6c2a9} +.dark .lede{color:#b7c2b8} +.dark .card{background:#f8faf6;border-color:#e1e7df} +.end{padding-bottom:88px} +.footer{font-size:12px} +@media(max-width:850px){header{gap:38px;padding-top:66px}.wrap{width:min(100% - 32px,1200px)}} +@media(max-width:640px){header{padding:54px 0 50px}h1{font-size:clamp(39px,10vw,48px)}section{padding:60px 0}.cta-row .btn{flex:1 1 auto;justify-content:center}} +@media(max-width:360px){.wrap{width:calc(100% - 24px)}nav .wordmark{font-size:16px}.links .navcta{padding:9px 10px}.btn{padding:12px 13px;font-size:12px}} + From 01d9f094ae7a5aa6c8374e548ba50e339552b135 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rama=20=E2=80=94=20Buttercode=20Systems?= Date: Thu, 12 Nov 2026 16:02:06 +0200 Subject: [PATCH 02/12] design: unify live demo with AgentScope design system --- site/demo.html | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/site/demo.html b/site/demo.html index 2ce3f19..e003623 100644 --- a/site/demo.html +++ b/site/demo.html @@ -1,5 +1,57 @@ AgentScope Demo — Morning supervision scan
agentscopeview source ↗
interactive sample

Morning supervision scan

Sample data demonstrates the read-only experience. Use the filters below to see how a morning scan stays focused on signal instead of telemetry.

SAMPLE DATA · 08:02
8/10scheduled jobs on
2failed runs · 24h
46successful runs · 24h
14active sessions · 7d
Needs attention2 items
FAIL
Nightly enrichment is skipping

Model configuration drift was detected. The scheduler skipped the run.

WARN
Lead follow-up credentials rejected

Three recent attempts returned an authentication failure.

From 947b8de8c353c8c040fcbec199b902c65e234cf3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rama=20=E2=80=94=20Buttercode=20Systems?= Date: Thu, 12 Nov 2026 16:02:09 +0200 Subject: [PATCH 03/12] design: refresh proof explorer hierarchy and readability --- site/proofs.html | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/site/proofs.html b/site/proofs.html index 36dce38..21a8969 100644 --- a/site/proofs.html +++ b/site/proofs.html @@ -1,5 +1,36 @@ Evidence proofs — AgentScope

Habitat · portable evidence

Proof snapshots.

Historical Habitat proof exports copied into AgentScope. Each bundle is checked in your browser for its embedded SHA-256 content digest and claim/action consistency.

Important: a matching content hash detects changes to the exported bundle, but does not authenticate who published it. These are historical records, not live status. An unsigned proof does not independently establish that the claimed work happened in the outside world.
Loading proof index…
+:root{--bg:#f7f7f5;--ink:#0b0d10;--mut:#626a73;--line:#dedfdf;--card:#fff;--blue:#315cff;--green:#137a43;--amber:#8a5a12;--red:#a32929}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink);font:15px/1.6 system-ui,-apple-system,"Segoe UI",sans-serif}.wrap{width:min(920px,calc(100% - 32px));margin:auto}nav{height:72px;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between}nav a{color:inherit;text-decoration:none;font-weight:700}.mono{font:11px ui-monospace,monospace;letter-spacing:.08em;text-transform:uppercase;color:var(--blue)}h1{font:800 clamp(34px,6vw,56px)/1.05 ui-monospace,monospace;letter-spacing:-.06em;margin:54px 0 14px}.lede{color:var(--mut);max-width:700px}.notice{border:1px solid #e3d4b4;background:#fffaf0;padding:14px 16px;border-radius:9px;color:#604c2a;font-size:13px;margin:26px 0}.list{display:grid;gap:12px;margin:28px 0}.proof{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:20px}.proof h2{font:800 17px ui-monospace,monospace;margin:0 0 5px}.meta{color:var(--mut);font-size:12px;overflow-wrap:anywhere}.claim{margin:14px 0}.checks{display:flex;flex-wrap:wrap;gap:7px}.check{border:1px solid var(--line);border-radius:6px;padding:4px 8px;font:10px ui-monospace,monospace}.ok{color:var(--green);border-color:#b8ddc6}.warn{color:var(--amber);border-color:#e5d3ad}.bad{color:var(--red);border-color:#e6bcbc}.proof a{display:inline-block;margin-top:14px;color:var(--blue);font:700 12px ui-monospace,monospace}.empty{padding:20px;border:1px dashed var(--line);color:var(--mut)}footer{border-top:1px solid var(--line);padding:24px 0 40px;color:var(--mut);font-size:12px}a:focus-visible{outline:3px solid var(--blue);outline-offset:3px}@media(max-width:500px){.proof{padding:15px}.checks{gap:5px}} +/* Shared AgentScope interface system — proof explorer */ +:root{--bg:#f4f5f1;--ink:#172019;--mut:#68736b;--line:#dce2d9;--card:#fff;--blue:#536f59;--green:#32704b;--amber:#94651e;--red:#a8453d} +body{font-family:Inter,ui-sans-serif,system-ui,-apple-system,"Segoe UI",sans-serif;letter-spacing:-.012em} +.wrap{width:min(980px,calc(100% - 48px))} +nav{height:72px;border-color:var(--line)} +nav a{font-weight:700;text-decoration:none} +nav a:first-child{font:750 17px Inter,ui-sans-serif,system-ui,sans-serif;letter-spacing:-.05em} +nav a:last-child{font-size:13px;color:#536f59} +.mono{font:700 11px Inter,ui-sans-serif,system-ui,sans-serif;letter-spacing:.13em;color:#536f59} +h1{font:740 clamp(38px,5.5vw,56px)/1.05 Inter,ui-sans-serif,system-ui,sans-serif;letter-spacing:-.065em;margin:58px 0 16px} +.lede{font-size:16px;line-height:1.7;color:var(--mut)} +.notice{background:#f8f4e9;border-color:#e8dfc9;color:#665633;border-radius:7px;padding:16px 18px;line-height:1.65} +.list{gap:14px;margin:30px 0 40px} +.proof{border-radius:9px;padding:23px 24px;box-shadow:0 2px 10px #17201905;transition:border-color .18s ease,box-shadow .18s ease} +.proof:hover{border-color:#c4d1c2;box-shadow:0 8px 24px #1720190b} +.proof h2{font:680 17px Inter,ui-sans-serif,system-ui,sans-serif;letter-spacing:-.025em} +.meta{font:12px/1.6 Inter,ui-sans-serif,system-ui,sans-serif;color:#758078;overflow-wrap:anywhere} +.claim{font-size:14px;line-height:1.65;color:#2d3930} +.checks{gap:7px} +.check{border-radius:5px;padding:6px 9px;font:700 9px Inter,ui-sans-serif,system-ui,sans-serif;letter-spacing:.045em} +.ok{color:#376344;border-color:#c7d9c8;background:#edf4ed} +.warn{color:#87601f;border-color:#e7d9b8;background:#faf5e8} +.bad{color:#93433c;border-color:#e6c9c4;background:#fbefed} +.proof a{font:650 12px Inter,ui-sans-serif,system-ui,sans-serif;color:#536f59;text-decoration:none} +.proof a:hover{text-decoration:underline} +footer{font:12px Inter,ui-sans-serif,system-ui,sans-serif;color:#79837a} +footer a{color:#536f59} +a:focus-visible{outline:3px solid #789579;outline-offset:3px} +@media(max-width:500px){.wrap{width:calc(100% - 28px)}.proof{padding:17px}.checks{gap:6px}.check{font-size:8px;padding:5px 7px}h1{margin-top:44px}} + +

Habitat · portable evidence

Proof snapshots.

Historical Habitat proof exports copied into AgentScope. Each bundle is checked in your browser for its embedded SHA-256 content digest and claim/action consistency.

Important: a matching content hash detects changes to the exported bundle, but does not authenticate who published it. These are historical records, not live status. An unsigned proof does not independently establish that the claimed work happened in the outside world.
Loading proof index…
-""" +
""" d = os.path.dirname(out_path) if d: os.makedirs(d, exist_ok=True) From 9ee27957d71a9a4e7f3dad8abd957fccf724f647 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rama=20=E2=80=94=20Buttercode=20Systems?= Date: Thu, 12 Nov 2026 16:03:51 +0200 Subject: [PATCH 09/12] test: guard cohesive UI and generated dashboard accessibility --- test_generate.py | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/test_generate.py b/test_generate.py index fe4d20b..de4767f 100644 --- a/test_generate.py +++ b/test_generate.py @@ -174,5 +174,45 @@ def test_proof_index_wraps_long_digest_metadata(self): self.assertIn(".meta{color:var(--mut);font-size:12px;overflow-wrap:anywhere}", proofs) + def test_public_pages_share_the_product_design_system_and_accessibility(self): + root = Path(__file__).resolve().parent + index = (root / "site" / "index.html").read_text(encoding="utf-8") + demo = (root / "site" / "demo.html").read_text(encoding="utf-8") + proofs = (root / "site" / "proofs.html").read_text(encoding="utf-8") + + for page in (index, demo, proofs): + self.assertIn("--bg:#f4f5f1", page) + self.assertIn("--accent:#536f59", page) + self.assertIn("Inter,ui-sans-serif,system-ui", page) + self.assertIn("prefers-reduced-motion", page) + self.assertIn(":focus-visible", page) + + self.assertIn('href="#dashboard-main"', demo) + self.assertIn('id="dashboard-main"', demo) + self.assertIn('href="#proof-main"', proofs) + self.assertIn('id="proof-main"', proofs) + self.assertIn("data-days", demo) + self.assertIn("document.querySelectorAll('.filter')", demo) + self.assertIn("crypto.subtle.digest", proofs) + + def test_generated_dashboard_uses_shared_ui_and_keyboard_landmarks(self): + with tempfile.TemporaryDirectory() as td: + cfg = json.loads(json.dumps(generate.DEFAULT_CONFIG)) + cfg["sources"] = {key: None for key in cfg["sources"]} + cfg["sources"]["leads_label"] = "Active items" + output = Path(td) / "dashboard.html" + + generate.build(cfg, str(output)) + rendered = output.read_text(encoding="utf-8") + + self.assertIn("--bg:#f4f5f1", rendered) + self.assertIn("--acc:#536f59", rendered) + self.assertIn('class="skip-link"', rendered) + self.assertIn('id="dashboard-main"', rendered) + self.assertIn('role="group" aria-label="Time range filter"', rendered) + self.assertIn("Copy status summary", rendered) + self.assertIn("prefers-reduced-motion", rendered) + + if __name__ == "__main__": unittest.main() From b19f9c6b8cc5d66bcafafc4e967df6ecd4f91433 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rama=20=E2=80=94=20Buttercode=20Systems?= Date: Thu, 12 Nov 2026 16:04:42 +0200 Subject: [PATCH 10/12] test: assert shared sage token across page-specific variable names --- test_generate.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test_generate.py b/test_generate.py index de4767f..3522714 100644 --- a/test_generate.py +++ b/test_generate.py @@ -182,7 +182,7 @@ def test_public_pages_share_the_product_design_system_and_accessibility(self): for page in (index, demo, proofs): self.assertIn("--bg:#f4f5f1", page) - self.assertIn("--accent:#536f59", page) + self.assertIn("#536f59", page) self.assertIn("Inter,ui-sans-serif,system-ui", page) self.assertIn("prefers-reduced-motion", page) self.assertIn(":focus-visible", page) From d2bfd7858a9fc617e3181fff71526690bfa4aff4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rama=20=E2=80=94=20Buttercode=20Systems?= Date: Thu, 12 Nov 2026 16:05:11 +0200 Subject: [PATCH 11/12] a11y: respect reduced motion in demo --- site/demo.html | 1 + 1 file changed, 1 insertion(+) diff --git a/site/demo.html b/site/demo.html index 3aa5e70..d65337a 100644 --- a/site/demo.html +++ b/site/demo.html @@ -53,6 +53,7 @@ @media(max-width:360px){.act{grid-template-columns:50px minmax(0,1fr)}.act span:last-child{grid-column:2}.head{padding:14px}.issue{padding:13px 14px}} .skip-link{position:fixed;left:12px;top:12px;z-index:1000;transform:translateY(-160%);background:#fff;color:#172019;padding:10px 12px;border:2px solid currentColor;border-radius:6px;font:600 12px Inter,ui-sans-serif,system-ui,sans-serif}.skip-link:focus{transform:translateY(0)} +@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*::before,*::after{transition:none!important;animation:none!important}}
agentscopeview source ↗
interactive sample

Morning supervision scan

Sample data demonstrates the read-only experience. Use the filters below to see how a morning scan stays focused on signal instead of telemetry.

SAMPLE DATA · 08:02
8/10scheduled jobs on
2failed runs · 24h
46successful runs · 24h
14active sessions · 7d
Needs attention2 items
FAIL
Nightly enrichment is skipping

Model configuration drift was detected. The scheduler skipped the run.

WARN
Lead follow-up credentials rejected

Three recent attempts returned an authentication failure.

From 6e7cf8d13cd19f40dd6774891dd086999c1bb454 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rama=20=E2=80=94=20Buttercode=20Systems?= Date: Thu, 12 Nov 2026 16:05:14 +0200 Subject: [PATCH 12/12] a11y: respect reduced motion in proof explorer --- site/proofs.html | 1 + 1 file changed, 1 insertion(+) diff --git a/site/proofs.html b/site/proofs.html index 503d11b..ea427a3 100644 --- a/site/proofs.html +++ b/site/proofs.html @@ -31,6 +31,7 @@ @media(max-width:500px){.wrap{width:calc(100% - 28px)}.proof{padding:17px}.checks{gap:6px}.check{font-size:8px;padding:5px 7px}h1{margin-top:44px}} .skip-link{position:fixed;left:12px;top:12px;z-index:1000;transform:translateY(-160%);background:#fff;color:#172019;padding:10px 12px;border:2px solid currentColor;border-radius:6px;font:600 12px Inter,ui-sans-serif,system-ui,sans-serif}.skip-link:focus{transform:translateY(0)} +@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*::before,*::after{transition:none!important;animation:none!important}}

Habitat · portable evidence

Proof snapshots.

Historical Habitat proof exports copied into AgentScope. Each bundle is checked in your browser for its embedded SHA-256 content digest and claim/action consistency.

Important: a matching content hash detects changes to the exported bundle, but does not authenticate who published it. These are historical records, not live status. An unsigned proof does not independently establish that the claimed work happened in the outside world.
Loading proof index…