# Presentation Spec — Mixed-Stakeholder Deck

**The structure anchor for [`generated/plan-presentation.pptx`](generated/).** Every regeneration reads this file first and populates slides exactly as described below. Edit this file to change deck structure; do not edit prompts, do not edit the source plan files.

## Meta

| Property | Value |
|---|---|
| **Audience** | Mixed stakeholder — steering committee, leadership, build team leads, adjacent-initiative owners. Some execs, some technical. |
| **Total slides** | 18 |
| **Target read time** | 30–45 minutes walked through, ~10 minutes self-read |
| **Theme** | `document-skills:theme-factory` default professional theme. Clean, neutral, no custom branding on first pass. Override: add a `**Theme override:**` line here with the target preset if you want different. |
| **Body font** | Theme default sans-serif |
| **Accent color** | Theme default |
| **Source of truth for title** | "SCADA IT/OT Transformation — 3-Year Plan" |
| **Subtitle template** | "As of {{date}}" where `{{date}}` is the regeneration timestamp in `YYYY-MM-DD` form |

## Truncation rules (apply to every slide unless overridden per-slide)

- **Max 6 bullets per slide.** If the source section has more than 6 bullets of load-bearing content, pick the 6 most load-bearing and add a footer line: *"Full detail: `<source file> → <section name>`."*
- **Max ~12 words per bullet.** Aim for scan-ability, not completeness.
- **No nested bullets.** If the source has nested bullets, flatten to one level by merging or dropping sub-points.
- **Preserve source vocabulary.** Use the same words the plan uses (e.g., "OtOpcUa," "ScadaBridge," "SnowBridge," "pillar 3," "data locality," "single sanctioned crossing point") — don't paraphrase technical terms or the Vision line.
- **TBDs stay visible.** If a source section contains a `_TBD_` that is load-bearing for the slide's point, call it out explicitly: *"(TBD — see source.)"* Don't silently drop TBDs.
- **Overflow callout.** When content is truncated, the footer line *"Full detail: `<source file> → <section name>`"* appears in small text at the bottom of the slide.

## Layout fallbacks

If `document-skills:pptx` cannot render a requested layout:

- **3-column content → single column with visual separators.** Applies to slide 5 (Three Pillars).
- **2-column patterns → single column.** Applies to slide 16 (Digital Twin Scope) where the two access-control patterns are shown side-by-side; collapse to stacked patterns if the side-by-side layout doesn't fit at readable type size.
- **Diagram + caption → caption only with a "(Diagram not yet available — render `<path>.mmd` and re-run)" note.** Applies to slides 8 and 9 until the PNG files exist in `diagrams/`.
- **Multi-column table that overflows → split across two slides labeled "N/2" and "2/2".** Applies to slide 13 (Roadmap grid) if 7 rows × 3 columns doesn't fit one slide at readable type size.

---

## Slide 1 — Title

| Property | Value |
|---|---|
| **Layout** | Title |
| **Source** | — (no source file) |
| **Content** | Title: *"SCADA IT/OT Transformation"* · Subtitle: *"3-Year Plan"* · Footer: *"As of {{regeneration-date}}"* |
| **Rules** | No bullets, no extra content. Title slide is deliberately minimal. |

## Slide 2 — Executive Summary

| Property | Value |
|---|---|
| **Layout** | Content (bulleted) |
| **Source** | [`../goal-state.md`](../goal-state.md) → **Vision** + **Success Criteria** |
| **Population** | 5 bullets: (1) the Vision line verbatim, (2)–(4) one line per pillar (the binary success criterion, not the rationale), (5) a single line naming the key non-goals in the form *"Out of scope: operator UX modernization, licensing, VM-level DR, physical network segmentation."* |
| **Notes** | This slide is the TL;DR for anyone who reads only one slide. Keep it tight. |

## Slide 3 — Today's Reality

| Property | Value |
|---|---|
| **Layout** | Content (bulleted) |
| **Source** | [`../current-state.md`](../current-state.md) — synthesize from Systems & Interfaces and Equipment OPC UA sections |
| **Population** | 5 bullets describing the pain points of the current state: (1) split SCADA stack (Aveva + Ignition by purpose), (2) WAN-dependent central Ignition with direct OPC UA sessions to site equipment, (3) multiple concurrent OPC UA sessions to the same equipment, (4) legacy IT↔OT integrations outside ScadaBridge (3 of them), (5) fragmented data access and inconsistent values between consumers |
| **Notes** | The source file doesn't have a dedicated "pain points" section (it's a `_TBD_`). Synthesize from the inline observations in Systems & Interfaces and Equipment OPC UA. Don't invent pain points that aren't grounded in the source. |

## Slide 4 — Vision

| Property | Value |
|---|---|
| **Layout** | Big-text / quote layout |
| **Source** | [`../goal-state.md`](../goal-state.md) → **Vision** |
| **Population** | The Vision line ("stable, single point of integration between shopfloor OT and enterprise IT") as the centerpiece. 3 sub-bullets below it on what that means concretely — extracted from the paragraph that follows the Vision line in goal-state.md. |
| **Notes** | This slide repeats the Vision from slide 2 deliberately — slide 2 is the 30-second summary; slide 4 is where the Vision actually gets the airtime the conversation will return to. |

## Slide 5 — Three Pillars

| Property | Value |
|---|---|
| **Layout** | 3-column content (fallback: single column with visual separators) |
| **Source** | [`../goal-state.md`](../goal-state.md) → **Success Criteria** |
| **Population** | Column 1: Pillar 1 — Unification (100% of sites on standardized stack). Column 2: Pillar 2 — Analytics/AI Enablement (≤15-minute analytics SLO; one "not possible before" use case in production). Column 3: Pillar 3 — Legacy Retirement (inventory to zero). Each column: (a) title, (b) the binary criterion in one line, (c) one line of "what this means" context. |
| **Rules** | All three pillars must appear. Do not prioritize one over the others here — they are equal end-state criteria per the plan. |

## Slide 6 — Enterprise Layout

| Property | Value |
|---|---|
| **Layout** | Content (bulleted, grouped by tier) |
| **Source** | [`../current-state.md`](../current-state.md) → **Enterprise Layout** |
| **Population** | Grouped bullets: (a) Primary Data Center — South Bend. (b) Largest Sites — Warsaw West, Warsaw North (one cluster per building). (c) Other Integrated Sites — Shannon, Galway, TMT, Ponce (single cluster per site). (d) Not Yet Integrated — Berlin, Winterthur, Jacksonville (and others, with volatility note). |
| **Notes** | The volatility note about smaller sites changing belongs on the slide as a one-line disclaimer at the bottom. |

## Slide 7 — Today's Systems

| Property | Value |
|---|---|
| **Layout** | Content (bulleted) |
| **Source** | [`../current-state.md`](../current-state.md) → **Systems & Interfaces** |
| **Population** | 6 bullets, one line each: (1) Aveva System Platform — validated data collection; (2) Ignition SCADA — KPI monitoring (central, WAN-dependent); (3) ScadaBridge — in-house Akka.NET integration layer, already deployed; (4) LmxOpcUa — in-house OPC UA server exposing System Platform objects; (5) Camstar MES — sole enterprise MES; (6) Aveva Historian — sole historian, central-only, permanent retention. |
| **Notes** | Delmia DNC is mentioned as one of the two legacy Web API interfaces but does not need its own bullet here — it's captured on slide 15. |

## Slide 8 — Goal State: Layered Architecture

| Property | Value |
|---|---|
| **Layout** | Diagram + caption |
| **Source** | [`../goal-state.md`](../goal-state.md) → **Layered Architecture** + [`diagrams/architecture-layers.png`](diagrams/) |
| **Population** | Embed `diagrams/architecture-layers.png` as the centerpiece. Caption: one line per layer — *"Layer 1 Equipment · Layer 2 OtOpcUa (equipment + System Platform namespaces) · Layer 3 SCADA (System Platform + Ignition) · Layer 4 ScadaBridge (IT↔OT bridge)"*. Callout: *"ScadaBridge central is the sole IT↔OT crossing point."* |
| **Fallback** | If `architecture-layers.png` does not exist, render a placeholder box with the text *"Diagram not yet available — render `diagrams/architecture-layers.mmd` at https://mermaid.live and save PNG to `diagrams/architecture-layers.png`, then re-run `regenerate presentation`."* |

## Slide 9 — Goal State: End-to-End Data Flow

| Property | Value |
|---|---|
| **Layout** | Diagram + caption |
| **Source** | [`../goal-state.md`](../goal-state.md) → the tag-flow sentence (search for "A tag read from a machine in Warsaw West") + [`diagrams/end-to-end-flow.png`](diagrams/) |
| **Population** | Embed `diagrams/end-to-end-flow.png`. Caption: the tag-flow sentence from goal-state.md, verbatim or near-verbatim. |
| **Fallback** | Same fallback pattern as slide 8, but for `end-to-end-flow.mmd` / `.png`. |

## Slide 10 — OtOpcUa — the unification layer

| Property | Value |
|---|---|
| **Layout** | Content (bulleted) |
| **Source** | [`../goal-state.md`](../goal-state.md) → **OtOpcUa — the unified site-level OPC UA layer** |
| **Population** | 6 bullets: (1) single sanctioned OPC UA access point per site, one session per equipment; (2) two namespaces — equipment + System Platform (absorbs LmxOpcUa); (3) clustered, co-located on existing System Platform nodes; (4) hybrid driver strategy — proactive core library + on-demand long-tail; (5) OPC UA-native auth (UserName + standard security modes, inherited from LmxOpcUa); (6) tiered cutover — ScadaBridge → Ignition → System Platform IO across Years 1–3. |

## Slide 11 — Analytics Stack: SnowBridge + Snowflake

| Property | Value |
|---|---|
| **Layout** | Content (bulleted) |
| **Source** | [`../goal-state.md`](../goal-state.md) → **SnowBridge** + **Aveva Historian → Snowflake** + **Snowflake-side transform tooling** |
| **Population** | 6 bullets: (1) SnowBridge — custom-built .NET service owning **ingest + in-process transform + curated-table write** into Snowflake; (2) source abstraction — Aveva Historian SQL in Year 1, Redpanda/ScadaBridge in Year 2; (3) governed selection with blast-radius approval workflow; (4) **no dbt, no external orchestrator, no Snowflake landing tier** — transforms live in the service; (5) ≤15-minute analytics SLO; (6) one "not possible before" AI/analytics use case in production by end of plan (pillar 2 gate). |

## Slide 12 — Redpanda EventHub: the async backbone

| Property | Value |
|---|---|
| **Layout** | Content (bulleted) |
| **Source** | [`../goal-state.md`](../goal-state.md) → **Async Event Backbone** |
| **Population** | 6 bullets: (1) self-hosted, central in South Bend (single-cluster HA); (2) per-topic tiered retention — operational 7d / analytics 30d / compliance 90d; (3) bundled Schema Registry; (4) Protobuf schemas in central `schemas` repo with `buf` CI, `BACKWARD_TRANSITIVE` compatibility; (5) `{domain}.{entity}.{event-type}` topic naming, site identity in message not topic; (6) SASL/OAUTHBEARER auth + prefix ACLs. |

## Slide 13 — 3-Year Roadmap (workstreams × years)

| Property | Value |
|---|---|
| **Layout** | Table — 7 rows × 3 columns (+ workstream name column = 4 columns total) |
| **Source** | [`../roadmap.md`](../roadmap.md) → **The grid** |
| **Population** | Render the 6×3 roadmap grid as a PPTX table. **Truncate** each cell to the **single most important commitment** (not the full cell text, which would overflow). Workstream column: full name. Year columns: ~10-word headline per cell. Color-code cells by pillar if the theme supports it. |
| **Fallback** | If the 6×3 table doesn't fit one slide at readable type size, split across two slides: workstreams 1–3 on slide 13a (OtOpcUa, Redpanda, SnowBridge), workstreams 4–6 on slide 13b (ScadaBridge Extensions, Site Onboarding, Legacy Retirement). Label slides 13 and 14, renumber subsequent slides. |

## Slide 14 — Year 1 Focus

| Property | Value |
|---|---|
| **Layout** | Content (bulleted) |
| **Source** | [`../roadmap.md`](../roadmap.md) → the Year 1 column across all 6 workstreams |
| **Population** | 6 bullets, one per workstream, ordered by prerequisite position: (1) OtOpcUa — evolve LmxOpcUa, deploy to every site, begin tier-1 cutover, UNS hierarchy snapshot walk; (2) Redpanda — stand up central cluster, schema registry, initial topics, publish canonical model v1; (3) SnowBridge — design + first source adapter (Historian SQL) with filtered ingest + in-process transform + first curated tables aligned to canonical model; (4) ScadaBridge Extensions — deadband publishing + EventHub producer; (5) Site Onboarding — document lightweight onboarding pattern (no new sites Year 1); (6) Legacy Retirement — populate inventory (done), retire first integration as pattern-proving exercise. |
| **Rules** | **Exceeds the 6-bullet truncation rule.** 7 bullets here is intentional because each bullet represents one workstream's Year 1 commitment — dropping one would misrepresent the plan. Keep all 7, tighten wording to ≤10 words per bullet. |

## Slide 15 — Pillar 3: Legacy Retirement (3 → 0)

| Property | Value |
|---|---|
| **Layout** | Content (bulleted + callout) |
| **Source** | [`../current-state/legacy-integrations.md`](../current-state/legacy-integrations.md) → Current inventory |
| **Population** | 3 bullets — one per legacy integration: (1) **LEG-001** Aveva Web API → Delmia DNC (bidirectional orchestrated handshake; harder retirement — requires ScadaBridge scripts to re-implement System Platform parse logic). (2) **LEG-002** Aveva Web API ← Camstar MES (Camstar-initiated; easier retirement — ScadaBridge already has native Camstar path; requires Camstar-side reconfiguration). (3) **LEG-003** System Platform → custom email notification service (easier retirement — ScadaBridge native notifications already exist). Callout at bottom: *"Historian MSSQL reporting surface (BOBJ / Power BI) is explicitly carved out as not legacy — see `legacy-integrations.md` → Deliberately not tracked."* |

## Slide 16 — Digital Twin Scope

| Property | Value |
|---|---|
| **Layout** | Lede + 2-column pattern cards (fallback: stacked patterns) |
| **Source** | [`../goal-state.md`](../goal-state.md) → **Strategic Considerations → Digital Twin** |
| **Population** | **Lede:** scope is two access-control patterns — not a new component, not a new workstream — both delivered by already-committed architecture (OtOpcUa ACL model + canonical model + single-connection-per-equipment). **Pattern 1 card — Environment-lifecycle promotion:** promote between dev / staging / prod by flipping write-authority ACLs against stable equipment UUIDs; no client reconfiguration. **Pattern 2 card — Safe read-only consumption:** KPI / monitoring consumers get read-only grants with a structural zero-write-path guarantee — no equipment-side session for them to misuse. **Footnote:** physics simulation, FAT, commissioning emulation are out of scope; would be separate funded adjacent initiatives. |
| **Notes** | This is the deck's closing slide. It exists because digital-twin scope was the most contested decision in the plan; making the resolved scope concrete prevents the topic from re-opening unnecessarily. The previous BOBJ → Power BI column was removed when that coordination was transferred to another team (2026-04-30). The previous Non-Goals and Asks & Next Steps slides were removed in the same pass. |

---

## Editing this spec

- **Structural changes go here.** If you want to add, remove, reorder, or reshape a slide, edit this file. Don't edit the prompt ("regenerate presentation") and don't edit the source plan files.
- **Content changes go in the source.** If a slide's content is wrong because the plan itself is wrong, edit the source plan file (`current-state.md`, `goal-state.md`, `roadmap.md`, etc.) — the next regeneration will pick up the change automatically because this spec references the source file, not a snapshot.
- **Theme / visual changes go in the meta section at the top of this file.** Add a `**Theme override:**` line naming the target preset, or tweak the truncation rules. First regeneration uses theme-factory default; iterate from there.
- **Never edit `generated/plan-presentation.pptx` by hand.** Any hand-edits are overwritten on the next regeneration. If you find yourself wanting to hand-edit, the correct move is to edit this spec and regenerate.

## Slide-count budget

Current: **16 slides.** If additions push this above 22, reconsider whether the deck is still "mixed-stakeholder" or has quietly become a build-team deck. The mixed-stakeholder audience tops out around 20 slides before attention fragments; a build-team deck belongs in a separate spec file (`build-team-spec.md` or similar) feeding a second generated output.
