Plan A: Extend EGP PPMO+ into EnRoute Command Center

Authors: ExCom+ Unified (Betty chair, Willemena PPMO-HQ, Sade, Gemma, Vesta) with Clarise and Claudia review Marc-directive: 2026-05-18 PM, "How do we extend all things EGP PPMO+ into EnRoute Command Center" Status: Draft v1, awaiting Marc ratify Date: 2026-05-18 Jira candidate epic: SWAT-PPMO-CC-EXTEND-01

1. Executive Summary

EGP PPMO+ today runs as nine sub-organizations (HQ, KC, KP, OA, PI, CB, HK, LH, KCL) coordinated through local tools, launchd crons, and the GHL backend (rendered as EnRoute Command Center). Marc's directive is to lift the entire orchestration surface (workflows, dashboards, persona invocation, BUILD queue, ship audit log, recruiter and saved-jobs pipelines) into the Command Center UI so that one operator-facing screen reflects the full PPMO+ state and accepts directive input. The recommendation is Path E (Hybrid): a Custom Pages dashboard pane for read-heavy state and Custom Menu Links plus marketplace widgets for high-frequency actions, with the existing API and webhook layer kept as the system of record. Estimated runbook 28 working days, 4 sprints, with first visible operator value on day 7 (read-only PPMO+ activity pane live inside Command Center).

2. Current State

[Marc directive in chat]
        |
        v
[Persona (Willemena/Vesta/etc)] ---- tools/*.py ---- launchd crons
        |                                 |
        v                                 v
[Local outputs .md/.html/.pdf]      [GHL REST API]
        |                                 |
        v                                 v
[notifications.enroute.global]      [EnRoute Command Center UI (GHL render)]

3. Target State

[Marc directive in chat OR in Command Center directive widget]
        |
        v
[PPMO+ Orchestration Layer (Cody + persona crew + tools)]
        |
        +--> [GHL REST API] <----> [EnRoute Command Center UI]
        |                              |
        |                              +-- Pane 1: PPMO+ Activity Dashboard (Custom Page)
        |                              +-- Pane 2: BUILD Queue + Ship Log (Custom Page)
        |                              +-- Pane 3: Recruiter + Saved-Jobs Pipeline (native CRM filter)
        |                              +-- Pane 4: Directive Capture Widget (Custom Menu Link to mini-app)
        |                              +-- Pane 5: Persona Roster + Status (Custom Page)
        |
        +--> [CF Pages dashboards (dashboards.enroute.global)] embedded via iframe
        +--> [Mailgun, Confluence, Jira] linked via deep-link buttons

4. Runbook

Task Owner Effort (days) Dependencies Definition of Done
T-01 Inventory all PPMO+ state surfaces and map to Command Center pane Vesta 1 none Mapping CSV in registries
T-02 Stand up read-only PPMO+ Activity dashboard on CF Pages (dashboards.enroute.global/ppmo-activity) Gemma 2 T-01 URL live, JSON feed from ppmo-activities-registry.json
T-03 Embed Activity dashboard inside Command Center via Custom Page iframe Willemena 1 T-02 Pane visible to Marc on login
T-04 BUILD Queue feed: scrape DD owed BUILDs from MEMORY.md and render JSON endpoint Clarise 1 T-01 /api/ppmo/build-queue.json returns 200
T-05 Ship Log feed: aggregate daily ship emails into JSON Clarise 1 T-01 /api/ppmo/ship-log.json returns last 30 days
T-06 BUILD Queue + Ship Log Custom Page in Command Center Gemma 2 T-04, T-05 Pane live with filter and sort
T-07 Persona Roster pane (live status, last-touched, current task) Willemena 2 T-01 Pane live, refresh 60s
T-08 Directive Capture widget (Marc types directive, posts to Cody intake API) Claudia 3 T-01 End-to-end submit -> Cody acknowledges in chat
T-09 Recruiter and saved-jobs filter views inside native CRM Willemena 1 none 4 saved smart-lists live
T-10 Deep-link buttons (Mailgun, Confluence, Jira, GitHub) on Command Center home Vesta 1 none Buttons on home with auth pass-through
T-11 GHL Marketplace App skeleton (private app for EGP only) to bundle widgets Sade 4 T-02 through T-08 App installable on EGP location
T-12 Auth and SSO between Command Center and CF Pages (Cloudflare Access policy) Vesta 2 T-02 Single-sign-on, no second prompt
T-13 Telemetry: log every Marc click in Command Center to PostHog or self-hosted Clarise 1 T-11 Events flowing
T-14 Operator runbook + persona attribution rules for in-CC actions Betty 1 T-08 runbook-CC.md published
T-15 Acceptance test with Marc (45-min walk-through) Betty 0.5 all Marc sign-off recorded
T-16 Hardening: rate limits, error pages, fallback to local URLs Gemma 2 T-15 Chaos test passes
T-17 Production cutover + announcement Willemena 0.5 T-16 Email sent, Confluence page live
Slack budget n/a 2 n/a reserved

Total: 28 working days, 4 two-week sprints.

5. SWOT

Strengths Weaknesses
GHL already system of record for contacts, conversations, opportunities GHL Custom Page iframe sandbox limits some JS APIs
Cloudflare Pages already used for dashboards (cv, decks, strategy subdomains) Marketplace App approval not needed for private installs but still adds friction
Existing API client egp_command_center_api_client.py already wired Persona attribution rules not yet enforced in browser context
Prior DD242, DD254, DD257 prep work already complete Cookie refresh fragility (see egp_ghl_cookie_refresh.py)
Opportunities Threats
One-screen operator surface = compounding Marc productivity GHL UI redesigns can break iframes (mitigate with deep-links fallback)
Becomes the demo surface for the EGP AI Studio commercial pitch Whitelabel leakage risk if GHL strings render through iframe
Lays foundation for Plan B (Cody autonomous control) CSP and X-Frame-Options conflicts (mitigate with Cloudflare Workers proxy)

6. Five Solution Paths

Path A: Lightweight iframe embed

Path C: GHL Marketplace App build

Path D: White-label rebuild on top of GHL Custom Pages

7. Top-3 Risks (Path E)

  1. Cookie or auth drift in iframe context. Mitigation: Cloudflare Access policy with shared identity provider; nightly auth health check via egp_ghl_cookie_expiry_alert.py.
  2. GHL UI redesign breaks Custom Page positions. Mitigation: deep-link fallback registry (egp_command_center_deeplinks.json already exists); weekly synthetic test.
  3. Whitelabel leakage through iframe titles or URLs. Mitigation: _egp_vendor_name_leakage_lint.py (BUILD owed) scans every iframe payload pre-publish; CF Worker rewrites GHL strings if any leak through.

8. Jira Recommendation

9. Where We Left Off (Prior Work to Reference)

10. Persona Attribution