# 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** | "Shopfloor 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: `
`."* - **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: `
`"* 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 content → single column with a horizontal rule.** Applies to slide 16 (Open Coordination Items). - **Diagram + caption → caption only with a "(Diagram not yet available — render `.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: *"Shopfloor 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, dbt | 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 machine-data-to-Snowflake upload service; (2) source abstraction — Aveva Historian SQL in Year 1, Redpanda/ScadaBridge in Year 2; (3) governed selection with blast-radius approval workflow; (4) dbt curated layers, orchestrator out of scope; (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 7×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 7×3 table doesn't fit one slide at readable type size, split across two slides: workstreams 1–4 on slide 13a (OtOpcUa, Redpanda, SnowBridge, dbt), workstreams 5–7 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 7 workstreams | | **Population** | 7 bullets, one per workstream, ordered by prerequisite position: (1) OtOpcUa — evolve LmxOpcUa, protocol survey, deploy to every site, begin tier-1 cutover; (2) Redpanda — stand up central cluster, schema registry, initial topics; (3) SnowBridge — design + first source adapter (Historian SQL) with filtered flow; (4) dbt — scaffold project, first curated model; (5) ScadaBridge Extensions — deadband publishing + EventHub producer; (6) Site Onboarding — document lightweight onboarding pattern (no new sites Year 1); (7) 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 — Open Coordination Items | Property | Value | |---|---| | **Layout** | 2-column content (fallback: single column with horizontal rule) | | **Source** | [`../goal-state.md`](../goal-state.md) → **Strategic Considerations (Adjacent Asks)** | | **Population** | **Left column — Digital Twin:** 4 bullets: (1) Management ask, not a committed workstream; (2) Plan shaped to serve if it materializes (OtOpcUa, Redpanda, Snowflake); (3) 8 clarification questions + 4-bucket decision framework ready; (4) Next: schedule management conversation — brief at `goal-state/digital-twin-management-brief.md`. **Right column — BOBJ → Power BI:** 4 bullets: (1) In-flight reporting initiative, not owned by this plan; (2) Three consumption paths analyzed (Snowflake dbt / Historian direct / both); (3) Recommended position: Path C — hybrid, with Path A as strategic direction; (4) Next: schedule coordination conversation with reporting team — 8 questions ready in `goal-state.md`. | ## Slide 17 — Non-Goals | Property | Value | |---|---| | **Layout** | Content (bulleted) | | **Source** | [`../goal-state.md`](../goal-state.md) → **Non-Goals** | | **Population** | 6 bullets, one line each: (1) Operator UX modernization — deprioritized against the three pillars; (2) Support staffing decisions — other teams; (3) Licensing strategy — not tracked; (4) Self-hosted orchestrator selection — chosen outside this plan; (5) VM-level DR — out of scope for Redpanda; (6) Physical network segmentation — out of scope. | | **Notes** | This slide is important for managing stakeholder expectations — what the plan *does not* commit to is as load-bearing as what it does commit to. Do not drop this slide even if time is short. | ## Slide 18 — Asks & Next Steps | Property | Value | |---|---| | **Layout** | Content (bulleted) | | **Source** | [`../status.md`](../status.md) → **Top pending items** + inferred from [`../roadmap.md`](../roadmap.md) → Year 1 | | **Population** | 5 bullets: (1) Sponsor confirmation + Year 1 funding commitment; (2) Named owners for each of the 7 workstreams (build team alignment); (3) Digital Twin management conversation — schedule (see brief); (4) Power BI coordination conversation with reporting team — schedule; (5) Equipment protocol survey owner named (Q1 Year 1 prerequisite for OtOpcUa core driver library). | | **Notes** | This is the closer slide. Each bullet should be a discrete ask with a clear "who needs to do what" so the audience leaves with action. | --- ## 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: **18 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.