From 72d0b109bfc69b1555068013189bc32838c27be3 Mon Sep 17 00:00:00 2001 From: Haiyuan Cao Date: Fri, 1 May 2026 14:13:50 -0700 Subject: [PATCH 1/3] =?UTF-8?q?docs(decision-lineage):=20add=20SLIDES.md?= =?UTF-8?q?=20=E2=80=94=20Marp=20deck=20for=20leadership=20demos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `examples/decision_lineage_demo/SLIDES.md` — a 21-slide Marp deck that mirrors the 5-minute leadership pitch in DEMO_NARRATION.md and the five EU-compliance questions in DEMO_QUESTIONS.md. Built with Marp markdown so it ships as a single text file, version-controls cleanly, and renders to PDF / PPTX / HTML via: marp SLIDES.md --pdf marp SLIDES.md --pptx marp SLIDES.md --html Structure (21 slides): Title hero (EU AI Act framing + 7%-of-revenue penalty headline) Why this matters now — regulatory + product pressure side-by-side What we built — one-sentence pitch + pipeline diagram Section 1 — The data behind today's demo Six campaigns, six live agent runs (Nike Summer, Nike Winter, Adidas, Puma, Reebok, Lululemon) Three writers populate seven tables (BQ AA Plugin → SDK AI.GENERATE → SDK SQL DML) The graph the demo presents — 8 ads-domain node labels + 9 ads-domain edge labels (CampaignRun, AgentStep, MediaEntity, PlanningDecision, DecisionOption, DecisionCategory, OptionOutcome, DropReason; CampaignActivity, NextStep, DecidedAt, ConsideredEntity, CampaignDecision, WeighedOption, HasOutcome, RejectedBecause, InCategory) Section 2 — Five regulator-shaped questions, answered live Q1 Right to explanation (Art. 86 / GDPR Art. 22) Q2 Bias / fairness audit (Art. 10, Art. 71) Q3 Human-oversight trigger (Art. 14) — empty-result hero Q4 Decision reproducibility (Art. 12, Art. 13) Q5 Systemic / pattern audit (Art. 17, Art. 60) Section 3 — What this unlocks Three takeaways (queryable posture, generalizable schema, composes with existing platform) Compliance-anchor map (Q1-Q5 × EU AI Act / GDPR / DSA) How fast can we ship this — phase timings, cost ("cents") Section 4 — Where to go next Open source pointers + bundle file map Anticipated VP-level Q&A primer Q&A hero closer Theme: custom Marp theme on `gaia` base — Google Sans / Roboto typography, #1a73e8 accent palette (matches Google Cloud brand), gradient hero slides, code-block styling, two-column grids, stat cards. Footer + pagination on body slides; off on lead slides. README.md cross-references the new file from the docs-list and the file map. Same 5-EU-question framing as DEMO_NARRATION.md and DEMO_QUESTIONS.md so all three docs stay in lockstep. --- examples/decision_lineage_demo/README.md | 5 + examples/decision_lineage_demo/SLIDES.md | 644 +++++++++++++++++++++++ 2 files changed, 649 insertions(+) create mode 100644 examples/decision_lineage_demo/SLIDES.md diff --git a/examples/decision_lineage_demo/README.md b/examples/decision_lineage_demo/README.md index 95e596ca..9d260fe7 100644 --- a/examples/decision_lineage_demo/README.md +++ b/examples/decision_lineage_demo/README.md @@ -155,6 +155,10 @@ A talk track and a click-by-click walkthrough live alongside: `DecisionOption`, `OptionOutcome`, and `DropReason` included), step by step: [`DATA_LINEAGE.md`](DATA_LINEAGE.md) +- Leadership-ready slide deck (Marp; renders to PDF / PPTX / HTML + via `marp SLIDES.md --pdf`) covering the same 5-question + narrative with the ads-domain vocabulary: + [`SLIDES.md`](SLIDES.md) ## File map @@ -166,6 +170,7 @@ decision_lineage_demo/ ├── BQ_STUDIO_WALKTHROUGH.md # click-by-click in BQ Studio ├── DEMO_QUESTIONS.md # 5 EU-compliance questions: BQ CA vs. direct GQL ├── DATA_LINEAGE.md # canonical graph + richer demo graph lineage +├── SLIDES.md # Marp deck — leadership / Google-Next-style ├── setup.sh # one-shot bootstrap ├── reset.sh # tear down dataset + rendered files ├── render_queries.sh # sed-renders the .gql template diff --git a/examples/decision_lineage_demo/SLIDES.md b/examples/decision_lineage_demo/SLIDES.md new file mode 100644 index 00000000..a7ca4f86 --- /dev/null +++ b/examples/decision_lineage_demo/SLIDES.md @@ -0,0 +1,644 @@ + +--- +marp: true +title: Decision Lineage with BigQuery Context Graphs +description: A leadership-pitched deck that mirrors examples/decision_lineage_demo/. +author: BigQuery Agent Analytics SDK +theme: gaia +size: 16:9 +paginate: true +backgroundColor: "#ffffff" +color: "#202124" +style: | + /* Google-ish typography + accent palette */ + section { + font-family: "Google Sans", "Roboto", -apple-system, "Segoe UI", sans-serif; + font-size: 28px; + line-height: 1.35; + padding: 56px 64px; + } + section.lead { + background: linear-gradient(135deg, #1a73e8 0%, #174ea6 100%); + color: #ffffff; + text-align: left; + } + section.lead h1 { + font-size: 60px; + line-height: 1.1; + margin-bottom: 16px; + color: #ffffff; + } + section.lead h2 { + font-size: 26px; + font-weight: 400; + color: rgba(255,255,255,0.85); + border: none; + } + section.lead .footer-note { + font-size: 18px; + color: rgba(255,255,255,0.7); + margin-top: 48px; + } + section h1 { + color: #1a73e8; + border-bottom: 2px solid #e8eaed; + padding-bottom: 8px; + font-size: 38px; + } + section h2 { + color: #202124; + font-size: 26px; + margin-top: 0; + } + section h3 { + color: #1a73e8; + font-size: 22px; + margin-bottom: 4px; + } + section.section-divider { + background: #f8f9fa; + } + section.section-divider h1 { + color: #1a73e8; + border: none; + font-size: 56px; + } + section.section-divider .eyebrow { + color: #5f6368; + text-transform: uppercase; + letter-spacing: 4px; + font-size: 16px; + margin-bottom: 16px; + } + code { + background: #f1f3f4; + color: #202124; + border-radius: 4px; + padding: 2px 6px; + font-size: 0.9em; + } + pre { + background: #202124; + color: #e8eaed; + border-radius: 8px; + padding: 18px 22px; + font-size: 18px; + line-height: 1.4; + box-shadow: 0 2px 8px rgba(0,0,0,0.12); + } + pre code { background: transparent; color: inherit; padding: 0; } + table { + border-collapse: collapse; + margin: 12px 0; + font-size: 22px; + } + th { + background: #1a73e8; + color: #ffffff; + padding: 10px 14px; + text-align: left; + } + td { + border-bottom: 1px solid #e8eaed; + padding: 8px 14px; + } + blockquote { + border-left: 4px solid #1a73e8; + background: #e8f0fe; + color: #174ea6; + padding: 14px 22px; + margin: 12px 0; + font-style: normal; + font-size: 24px; + } + .pill { + display: inline-block; + background: #e8f0fe; + color: #1a73e8; + border-radius: 999px; + padding: 4px 14px; + font-size: 18px; + margin-right: 6px; + } + .grid-2 { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 32px; + align-items: start; + } + .stat { + font-size: 64px; + color: #1a73e8; + font-weight: 700; + line-height: 1; + } + .stat-label { + color: #5f6368; + font-size: 18px; + text-transform: uppercase; + letter-spacing: 2px; + } + footer { + color: #5f6368; + font-size: 14px; + } +footer: "Decision Lineage with BigQuery Context Graphs · examples/decision_lineage_demo" +--- + + + + +EU AI Act · GDPR · DSA + +# Decision Lineage with BigQuery Context Graphs + +## Unboxing the AI agent — every decision, every alternative, every reason, queryable in BigQuery. + + + + + +--- + +# Why this matters now + +
+ +
+ +### The regulatory pressure +- **EU AI Act** obligations are phasing in (high-risk-system rules from **2 Aug 2026**, full rollout **2 Aug 2027**) +- **GDPR Art. 22** — automated decisions affecting users must be explainable +- **DSA Art. 26** — advertising transparency + +
+ +
+ +### The product pressure +- Most agent demos produce an answer and ask you to **trust** it +- Compliance reviewers can't audit a screenshot +- Engineering can't reproduce a decision from chat logs + +
+ +
+ +> **Penalty ceiling: up to 7% of global revenue.** That's not a paperwork problem — that's a finance question. + + + +--- + +# What we built + +
+ +
+ +### One sentence +Take a real ADK agent, attach the **BigQuery Agent Analytics Plugin**, let `AI.GENERATE` extract every decision and every alternative the agent considered, and serve it as a **BigQuery Property Graph** you query with **GQL** in BigQuery Studio. + +### One promise +Every node and every edge in the graph traces back to a real plugin span. **No hand-baked seed data anywhere.** + +
+ +
+ +```text +┌──────────────────────┐ +│ Live ADK agent │ +│ (Gemini 2.5 Pro) │ +│ + BQ AA Plugin │ +└─────────┬────────────┘ + │ spans + ▼ +┌──────────────────────┐ +│ agent_events │ +│ (BigQuery) │ +└─────────┬────────────┘ + │ AI.GENERATE x2 + ▼ +┌──────────────────────┐ +│ Property Graph │ +│ agent_context_graph │ +│ + rich layer │ +└─────────┬────────────┘ + │ GQL + ▼ + BigQuery Studio +``` + +
+ +
+ +--- + + + +
Section 1 of 4
+ +# The data behind today's demo + +--- + +# Six campaigns, six live agent runs + +| Brand | Campaign | Budget | Audience | +|---|---|---:|---| +| Nike | Summer Run 2026 | $360K | Serious runners 18-35 | +| Nike | Winter Trail 2026 | $500K | Trail-runners & hikers 25-45 | +| Adidas | Track Season 2026 | $420K | NCAA & HS sprinters 16-22 | +| Puma | Soccer Cup 2026 | $280K | Soccer fans 18-30 | +| Reebok | CrossFit Open 2026 | $340K | Fitness pros 25-40 | +| Lululemon | Yoga Flow 2026 | $250K | Yoga practitioners 22-45 | + +Each row is one ADK invocation against `gemini-2.5-pro`. Each invocation produces **27 plugin-recorded spans**. + + + +--- + +# Three writers populate seven tables + +```text +┌──────────────────────────────────────────────────────────────────────┐ +│ WHO writes WHEN WHICH TABLE │ +├──────────────────────────────────────────────────────────────────────┤ +│ BQ AA Plugin run_agent.py agent_events │ +│ (live runner) │ +│ │ +│ SDK AI.GENERATE build_graph.py extracted_biz_nodes │ +│ (MERGE) │ +│ │ +│ SDK AI.GENERATE build_graph.py decision_points + candidates │ +│ (load job; idem- │ +│ potent on session) │ +│ │ +│ SDK SQL DML build_graph.py context_cross_links │ +│ made_decision_edges │ +│ candidate_edges │ +└──────────────────────────────────────────────────────────────────────┘ +``` + +`AI.GENERATE` runs **twice** across all sessions — once for business entities, once for decisions and the alternatives the agent considered. + +--- + +# The graph the demo presents + +The SDK ships a canonical 4-pillar graph. The demo adds a presentation layer with **ads-domain labels** so the BigQuery Studio Explorer reads in business language: + +
+ +
+ +### Nodes (8 labels) +- `CampaignRun` — one per agent invocation +- `AgentStep` — every plugin-recorded span +- `MediaEntity` — audiences, channels, creatives, budgets +- `PlanningDecision` — moments the agent committed +- `DecisionOption` — every alternative weighed +- `DecisionCategory` — audience / budget / creative / channel / schedule +- `OptionOutcome` — selected / dropped +- `DropReason` — distinct rejection rationales + +
+ +
+ +### Edges (9 labels) +- `CampaignActivity` — campaign → its spans +- `NextStep` — parent span → child span +- `DecidedAt` — span → decision it produced +- `ConsideredEntity` — span → entity it touched +- `CampaignDecision` — campaign → decision +- `WeighedOption` — decision → option +- `HasOutcome` — option → its outcome +- `RejectedBecause` — option → its reason +- `InCategory` — decision → its category + +
+ +
+ +--- + + + +
Section 2 of 4
+ +# Five regulator-shaped questions, answered live + +--- + +# Q1 — Right to explanation + +
EU AI Act Art. 86
GDPR Art. 22
+ +> *"For the Nike Summer Run campaign, what audience did the AI pick, what alternatives did it consider, and why did it reject the others?"* + +```sql +GRAPH `

..rich_agent_context_graph` +MATCH (cr:CampaignRun)-[:CampaignDecision]->(dp:PlanningDecision) + -[:WeighedOption]->(opt:DecisionOption) +WHERE cr.session_id = '' + AND LOWER(dp.decision_type) LIKE '%audience%' +RETURN DISTINCT opt.status, opt.name, opt.score, opt.rejection_rationale +ORDER BY opt.status DESC, opt.score DESC; +``` + +**Three rows.** Selected: *Serious Runners 18-35* @ 0.99. Dropped: *Casual Runners 25-45* (lower purchase intent), *Fitness Enthusiasts 18-35* (group too broad). **Every reason in the agent's own words.** + +--- + +# Q2 — Bias / fairness audit + +

EU AI Act Art. 10
EU AI Act Art. 71
+ +> *"Across our 2026 ad portfolio, did the AI ever reject a candidate based on age or demographic criteria?"* + +```sql +GRAPH `

..rich_agent_context_graph` +MATCH (dp:PlanningDecision)-[:WeighedOption]->(opt:DecisionOption) +WHERE opt.status = 'DROPPED' + AND (LOWER(opt.rejection_rationale) LIKE '%age %' + OR LOWER(opt.rejection_rationale) LIKE '%demographic%' + OR LOWER(opt.rejection_rationale) LIKE '%youth%') +RETURN DISTINCT dp.decision_type, opt.name, opt.rejection_rationale; +``` + +**Multiple matches.** *Youth Track & Field (13-15) — outside specified 16-22 range.* *Affluent Hikers (35-55) — age-range mismatch.* The graph surfaces specific rationales for **human review** — proxy or legitimate? Reviewer judges from data, not trust. + +--- + +# Q3 — Human-oversight trigger + +

EU AI Act Art. 14
+ +> *"Did the agent ever commit a decision below 0.7 confidence? Those should have triggered human review."* + +```sql +GRAPH `

..rich_agent_context_graph` +MATCH (dp:PlanningDecision)-[:WeighedOption]->(opt:DecisionOption) +WHERE opt.status = 'SELECTED' AND opt.score < 0.7 +RETURN DISTINCT dp.session_id, dp.decision_type, opt.name, opt.score +ORDER BY opt.score ASC; +``` + +

+
0
+
rows returned
+
+ +**The empty result is the audit artifact.** *"We ran the human-oversight predicate against the entire portfolio for this period. The trigger never fired."* Tighten the threshold to 0.85 → instant new at-risk list. + +--- + +# Q4 — Decision reproducibility + +
EU AI Act Art. 12
EU AI Act Art. 13
+ +> *"Subpoena: produce the full audit trail for the Adidas creative-theme decision."* + +```sql +GRAPH `

..rich_agent_context_graph` +MATCH (step:AgentStep)-[:DecidedAt]->(dp:PlanningDecision) + -[:WeighedOption]->(opt:DecisionOption) +WHERE dp.session_id = '' + AND LOWER(dp.decision_type) LIKE '%creative%' + AND step.event_type = 'LLM_RESPONSE' +RETURN DISTINCT dp.span_id, opt.status, opt.name, opt.score, opt.rejection_rationale +ORDER BY opt.status DESC, opt.score DESC; +``` + +**Three rows.** Selected: *"Built for a New Record"* @ 0.97. Two dropped with rationale, both pointing back to the same `evidence_span_id`. That span lives in `agent_events` with full content + timestamp + latency. **Article 12 record-keeping → one query.** + +--- + +# Q5 — Systemic / pattern audit + +

EU AI Act Art. 17
EU AI Act Art. 60
+ +> *"Where in our portfolio does the AI reject candidates least decisively?"* + +```sql +GRAPH `

..rich_agent_context_graph` +MATCH (dp:PlanningDecision)-[:WeighedOption]->(opt:DecisionOption) +WHERE opt.status = 'DROPPED' +RETURN dp.decision_type, COUNT(opt) AS rejections, AVG(opt.score) AS avg_dropped_score +GROUP BY dp.decision_type +ORDER BY rejections DESC LIMIT 5; +``` + +| decision_type | rejections | avg_dropped_score | +|---|---:|---:| +| Creative Theme Selection | 12 | 0.79 | +| Audience Selection | 12 | **0.66** ← lowest | +| Channel Strategy Selection | 6 | 0.77 | +| Placement Selection | 7 | 0.74 | + +**Audience Selection rejects with lowest confidence.** Loop to Q2 with this filter → continuous bias-monitoring **loop**, not a one-off. + +--- + + + +

Section 3 of 4
+ +# What this unlocks + +--- + +# Three takeaways for leadership + +
+ +
+ +### 1. Compliance posture as a query + +The audit surface for our agent platform is now a **live BigQuery query**, not a slide deck or quarterly review. + +### 2. The schema generalizes + +Brand-neutral, channel-neutral, decision-type-neutral. Drop **any** agent's traces in and the same five questions answer the same way. + +
+ +
+ +### 3. Composes with what we run + +- **BQ AA Plugin** — already on our prod path +- **SDK extraction** — one method call: `build_context_graph(use_ai_generate=True, include_decisions=True)` +- **BigQuery** — the warehouse you already pay for + +No new platform. No new on-call. + +
+ +
+ +--- + +# Compliance-anchor map + +| Question | EU AI Act | GDPR | DSA | +|---|---|---|---| +| **Q1** Right to explanation | Art. 86 | Art. 22 | Art. 26 | +| **Q2** Bias / fairness audit | Art. 10, Art. 71 | Art. 5(1)(d), Art. 22 | Art. 26 | +| **Q3** Human oversight | Art. 14 | Art. 22 | — | +| **Q4** Reproducibility | Art. 12, Art. 13 | Art. 30 | Art. 26 | +| **Q5** Systemic-pattern audit | Art. 17, Art. 60 | Art. 35 (DPIA) | Art. 26 | + +Five queries against one graph addresses the operative articles in **three** EU regulations — not as a compliance certification, but as the **audit evidence each article asks for**. + +--- + +# How fast can we ship this? + +
+ +
+ +### Setup, on a clean GCP project +```bash +cd examples/decision_lineage_demo +./setup.sh +``` + +| Phase | Wall time | +|---|---| +| Tooling + APIs + venv | ~30s | +| Live agent (6 sessions) | 3-7 min | +| `AI.GENERATE` extraction | 30-90s | +| Rich-graph projection | ~10s | +| Render BQ Studio queries | <1s | + +
+ +
+ +### Cost per setup run +- 6 live `gemini-2.5-pro` invocations +- 2 `AI.GENERATE` extraction queries +- A few hundred BQ rows + one property graph + +**Order of cents.** Demo queries against the prebuilt graph are near-free. + +### From zero to leadership demo +**Under 10 minutes**, fully reproducible, on any GCP project. + +
+ +
+ +--- + + + +
Section 4 of 4
+ +# Where to go next + +--- + +# Open source — try it on your project + +
+ +
+ +### Repository +[`GoogleCloudPlatform/BigQuery-Agent-Analytics-SDK`](https://github.com/GoogleCloudPlatform/BigQuery-Agent-Analytics-SDK) + +### The demo bundle +`examples/decision_lineage_demo/` + +### What ships in the bundle +- `setup.sh` / `reset.sh` — one-shot bootstrap + tear-down +- `agent/` + `campaigns.py` — real ADK agent + 6 briefs +- `run_agent.py` + `build_graph.py` + `build_rich_graph.py` +- `bq_studio_queries.gql` (rendered) — six GQL blocks +- `property_graph.gql` (rendered) — recreate-from-tables DDL + +
+ +
+ +### Documentation +- [`README.md`](README.md) — orientation +- [`SETUP_NEW_PROJECT.md`](SETUP_NEW_PROJECT.md) — clean-project reproduction +- [`DEMO_NARRATION.md`](DEMO_NARRATION.md) — 5-min leadership talk track +- [`BQ_STUDIO_WALKTHROUGH.md`](BQ_STUDIO_WALKTHROUGH.md) — click-by-click in BQ Studio +- [`DEMO_QUESTIONS.md`](DEMO_QUESTIONS.md) — the 5 EU questions with verified GQL +- [`DATA_LINEAGE.md`](DATA_LINEAGE.md) — how the 7 tables produce the graph +- [`SLIDES.md`](SLIDES.md) — this deck + +### License +Apache 2.0 + +
+ +
+ +--- + +# Anticipated questions + +| Q | Short answer | +|---|---| +| **How long to deploy?** | Plugin is on our prod path. SDK call is one method. DDL is committed. **Days, not quarters.** | +| **Other agents we haven't instrumented?** | Same plugin, same plug-in point. Schema doesn't care which agent wrote the spans. | +| **Cost?** | Two `AI.GENERATE` calls per build + standard BQ query cost. **Cents per build at our scale.** | +| **What if `AI.GENERATE` misses a decision?** | Build script reports per-session counts. Re-run extraction without re-running the agent. Talk track is count-agnostic by design. | +| **Does this expose PII?** | Stores the **agent's own reasoning text** about candidates. PII handling = `agent_events` retention policy, which we already control. | +| **Who operates this?** | The team that owns the agent platform. Plugin write path + SDK read path both already on-call. | + +--- + + + + +# Q&A + +## Decision Lineage with BigQuery Context Graphs + + + + From f3bb6433c4d11bb7317e22647bd23a0be0368663 Mon Sep 17 00:00:00 2001 From: Haiyuan Cao Date: Fri, 1 May 2026 14:43:13 -0700 Subject: [PATCH 2/3] docs(decision-lineage): polish leadership slide deck --- examples/decision_lineage_demo/README.md | 2 +- examples/decision_lineage_demo/SLIDES.md | 386 +++++++++++++++-------- 2 files changed, 250 insertions(+), 138 deletions(-) diff --git a/examples/decision_lineage_demo/README.md b/examples/decision_lineage_demo/README.md index 9d260fe7..2cac95ca 100644 --- a/examples/decision_lineage_demo/README.md +++ b/examples/decision_lineage_demo/README.md @@ -156,7 +156,7 @@ A talk track and a click-by-click walkthrough live alongside: step by step: [`DATA_LINEAGE.md`](DATA_LINEAGE.md) - Leadership-ready slide deck (Marp; renders to PDF / PPTX / HTML - via `marp SLIDES.md --pdf`) covering the same 5-question + via `marp SLIDES.md --html --pdf`) covering the same 5-question narrative with the ads-domain vocabulary: [`SLIDES.md`](SLIDES.md) diff --git a/examples/decision_lineage_demo/SLIDES.md b/examples/decision_lineage_demo/SLIDES.md index a7ca4f86..459664de 100644 --- a/examples/decision_lineage_demo/SLIDES.md +++ b/examples/decision_lineage_demo/SLIDES.md @@ -1,15 +1,3 @@ - --- marp: true title: Decision Lineage with BigQuery Context Graphs @@ -21,31 +9,35 @@ paginate: true backgroundColor: "#ffffff" color: "#202124" style: | - /* Google-ish typography + accent palette */ + /* Google-style typography, presentation rhythm, and executive-ready components. */ section { font-family: "Google Sans", "Roboto", -apple-system, "Segoe UI", sans-serif; - font-size: 28px; + font-size: 27px; line-height: 1.35; padding: 56px 64px; + letter-spacing: 0; } - section.lead { - background: linear-gradient(135deg, #1a73e8 0%, #174ea6 100%); + section.hero { + background-color: #174ea6 !important; + background-image: linear-gradient(135deg, #1a73e8 0%, #174ea6 58%, #202124 100%) !important; color: #ffffff; text-align: left; } - section.lead h1 { - font-size: 60px; + section.hero h1 { + font-size: 66px; line-height: 1.1; margin-bottom: 16px; color: #ffffff; + border: none; } - section.lead h2 { - font-size: 26px; + section.hero h2 { + font-size: 29px; font-weight: 400; color: rgba(255,255,255,0.85); border: none; + max-width: 920px; } - section.lead .footer-note { + section.hero .footer-note { font-size: 18px; color: rgba(255,255,255,0.7); margin-top: 48px; @@ -67,7 +59,8 @@ style: | margin-bottom: 4px; } section.section-divider { - background: #f8f9fa; + background: + linear-gradient(90deg, #f8fafd 0%, #ffffff 72%); } section.section-divider h1 { color: #1a73e8; @@ -81,6 +74,14 @@ style: | font-size: 16px; margin-bottom: 16px; } + .kicker { + color: #5f6368; + text-transform: uppercase; + letter-spacing: 2px; + font-size: 15px; + font-weight: 700; + margin-bottom: 10px; + } code { background: #f1f3f4; color: #202124; @@ -128,8 +129,9 @@ style: | color: #1a73e8; border-radius: 999px; padding: 4px 14px; - font-size: 18px; + font-size: 17px; margin-right: 6px; + font-weight: 600; } .grid-2 { display: grid; @@ -137,6 +139,91 @@ style: | gap: 32px; align-items: start; } + .grid-3 { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 18px; + align-items: stretch; + } + .compact { + font-size: 23px; + line-height: 1.28; + } + .compact li { + margin: 4px 0; + } + .card { + border: 1px solid #dadce0; + border-radius: 8px; + padding: 20px 22px; + background: #ffffff; + box-shadow: 0 1px 3px rgba(60,64,67,0.10); + } + .card h3 { + margin-top: 0; + } + .soft-card { + border-radius: 8px; + padding: 18px 22px; + background: #f8fafd; + border: 1px solid #d2e3fc; + } + .pipeline { + display: grid; + grid-template-columns: 1fr 40px 1fr 40px 1fr 40px 1fr; + align-items: center; + gap: 10px; + margin-top: 22px; + } + .pipeline .step { + border-radius: 8px; + padding: 18px 16px; + background: #ffffff; + border: 1px solid #dadce0; + min-height: 126px; + } + .pipeline .arrow { + color: #1a73e8; + font-size: 34px; + text-align: center; + } + .step-num { + display: inline-flex; + width: 28px; + height: 28px; + align-items: center; + justify-content: center; + border-radius: 50%; + background: #1a73e8; + color: #ffffff; + font-size: 16px; + font-weight: 700; + margin-bottom: 8px; + } + .metric-row { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 16px; + margin: 18px 0; + } + .mini-stat { + border-left: 5px solid #1a73e8; + background: #f8fafd; + padding: 14px 18px; + border-radius: 6px; + } + .mini-stat strong { + display: block; + color: #202124; + font-size: 32px; + line-height: 1.1; + } + .mini-stat span { + color: #5f6368; + font-size: 15px; + text-transform: uppercase; + letter-spacing: 1px; + } .stat { font-size: 64px; color: #1a73e8; @@ -149,21 +236,50 @@ style: | text-transform: uppercase; letter-spacing: 2px; } + .source-line { + color: #5f6368; + font-size: 14px; + margin-top: 14px; + } + .small { + color: #5f6368; + font-size: 20px; + } + .accent-blue { color: #1a73e8; } + .accent-green { color: #188038; } + .accent-yellow { color: #b06000; } + .accent-red { color: #d93025; } footer { color: #5f6368; font-size: 14px; } + section.hero footer { + color: rgba(255,255,255,0.70); + } footer: "Decision Lineage with BigQuery Context Graphs · examples/decision_lineage_demo" --- - + + + EU AI Act · GDPR · DSA -# Decision Lineage with BigQuery Context Graphs +# Decision Lineage for AI Agents -## Unboxing the AI agent — every decision, every alternative, every reason, queryable in BigQuery. +## Turn live agent behavior into queryable BigQuery evidence: decisions, options, outcomes, and rationale.