ff-oce-dashboard

$npx mdskill add microsoft/FluidFramework/ff-oce-dashboard

Gathers data from multiple MCP servers in parallel and presents a consolidated shift status dashboard. Best-effort — partial results are always shown.

SKILL.md

.github/skills/ff-oce-dashboardView on GitHub ↗
---
name: ff-oce-dashboard
description: "Generate the OCE shift status dashboard. Triggers on: 'generate shift dashboard', 'show dashboard', 'shift status', 'status dashboard', 'what's going on', or any request for a NON-SPECIFIC overview of current OCE status (incidents, pipelines, errors)."
version: 1.0.0
---

# OCE Shift Status Dashboard

Gathers data from multiple MCP servers in parallel and presents a consolidated shift status dashboard. Best-effort — partial results are always shown.

## Procedure

### Step 0: Confirm with the user

Before gathering any data, use the `ask_user` tool:

**Question:** "Would you like me to generate a shift status dashboard? This will query IcM, ADO, Kusto, Teams, and WorkIQ and may trigger auth prompts. Make sure you're connected to **VPN** first — it's required for Kusto and other internal services."

**Choices:** "Yes", "Yes, and write it to a file", "No"

- If **No**: respond "No problem — what can I help you with?" and stop.
- If **Yes**: proceed to Step 1. Present the dashboard in the console.
- If **Yes, and write it to a file**: proceed to Step 1. Write the dashboard to `oce-dashboard-<YYYYMMDD-HHmmss>.md` in the current working directory instead of printing it to the console. Just confirm the filename when done.

### Step 1: Launch 6 background agents in parallel

Use the `task` tool with `mode: "background"` for each. Instruct each agent to **always terminate** — either return its results or respond with "FAILED: \<reason\>" if the tool call errors or auth fails. Agents must never hang or retry indefinitely.

> **CRITICAL:** Background agents do **not** inherit the agent prompt context. Each sub-agent prompt must be **self-contained** with all IDs, parameters, and tool-call details it needs. Use the templates below — do not construct prompts from memory.

#### Agent 1 — IcM Incidents

Call `icm-search_incidents_by_owning_team_id` for each team: **98481** (FF Hot), **149377** (Fluid Framework Client), **98313** (Azure Fluid Relay Client). Only include **Active** and **Mitigated** incidents — exclude Resolved. Report ID, Sev, Title, Status, Team, Created date.

#### Agent 2 — ADO Pipeline Health

Call `ado-pipelines_get_builds` for each pipeline definition (**12** = Build, **56** = E2E, **63** = Stress) with `project: "internal"`, `branchName: "refs/heads/main"`, `statusFilter: "Completed"`, `top: 3`, `queryOrder: "FinishTimeDescending"`. Result codes: **2** = ✅, **4** = ⚠️, **8** = ❌. Report build ID, result, finish time, and overall trend.

#### Agent 3 — Loop-FF Integration Pipeline

Call `ado-office-pipelines_get_builds` with `project: "OC"`, `definitions: [29163]`, `top: 5`, `queryOrder: "FinishTimeDescending"`. **Important:** Use the `ado-office` MCP server tools (NOT the default `ado` tools) — this pipeline is in the `office` ADO org, not `fluidframework`. Result codes: **2** = ✅, **4** = ⚠️, **8** = ❌. Report build ID, result, finish time, branch, and build number. Flag any failures — a failing integration pipeline means the next FF bump to Loop will break.

#### Agent 4 — Kusto Error Rates

Do **not** load the ff-oce-kusto skill. Call `kusto-kusto_query` with `cluster_uri: "https://kusto.aria.microsoft.com"`, `database: "6a8929bcfc6d44e9b13fee392ada9cf0"`, and this query:

```kql
Office_Fluid_FluidRuntime_Error
| where Event_Time > ago(1h)
| summarize ErrorCount = count() by AppName = tostring(App_Name)
| order by ErrorCount desc
| take 15
```

If it fails, retry with a simple `summarize ErrorCount = count()` fallback (no `by` clause). Report as a table: Partner, Error Count.

#### Agent 5 — Teams Pipeline Alerts

Call `teams-ListChannelMessages` with teamId `9ce27575-2f82-4689-abdb-bcff07e8063b`, channelId `19:25dabf309c5c42a7abe4647c7c1b7990@thread.skype`, top 50, **and `expand: "replies"`** to fetch threaded replies inline. The `expand` parameter is **required** — without it, `replies` will be `null` and acknowledgment status cannot be determined. Filter for messages from Azure DevOps (check `from.displayName` contains "Azure DevOps") in the last 2 weeks. Classify each as **Acknowledged** (has a text reply or ✅/☑️/👍/👀 reaction), **Resolved** (reply confirming fix), or **Unacknowledged** (no replies, no meaningful reactions). Report: Date, Description, Status, Action Needed.

#### Agent 6 — WorkIQ

Call `workiq-ask_work_iq`: "Do I have any pending emails, action items, or meeting follow-ups related to Fluid Framework, FF Client, FF Hot, or Fluid Relay from the last week?" Summarize any actionable items.

### Step 2: Collect results with a 90-second timeout

Use `read_agent` with `wait: true, timeout: 90` for each agent, all in parallel.

**Hard cutoff:** After this single round of `read_agent` calls, you are **done collecting data**. Do not call `read_agent` again. Do not wait for agents that are still running. If an agent's status is anything other than "completed" with results, mark that section `⚠️ unavailable — timed out` and move on to Step 3 immediately. Agents left running can be ignored — they will clean up on their own.

### Step 3: Present the dashboard

```
## 🖥️ Shift Status Dashboard
Generated: <timestamp>

### 🚨 Active IcM Incidents
| ID | Sev | Title | Status | Team | Age |
| --- | --- | --- | --- | --- | --- |

### 🔧 Pipeline Health (main, last 3 runs)
| Pipeline | Run 1 | Run 2 | Run 3 | Trend |
| --- | --- | --- | --- | --- |

### 🔗 Loop-FF Integration Pipeline (last 5 runs)
| Build ID | Branch | Result | Finished | Build Number | Notes |
| --- | --- | --- | --- | --- | --- |

### 📊 Error Rates (last 1h)
| Partner | Error Count | Notes |
| --- | --- | --- |

### 🔔 Integration Pipeline Alerts (FF Client OCE channel, last 2 weeks)
| Date | Description | Status | Action Needed |
| --- | --- | --- | --- |

### 📋 WorkIQ
(summary)
```

For any section with no data, show "✅ None". For failed services, show "⚠️ [Service] unavailable — reason".

More from microsoft/FluidFramework

SkillDescription
api-changesUse when customer-facing API changes were made — i.e., API report .md files differ from main. Guides through release tag assignment, API Council review requirements, breaking change classification, deprecation process, and changeset guidance. Triggered automatically by ci-readiness-check when api-report diffs are detected.
brainstormingIMMEDIATELY USE THIS SKILL when creating or develop anything and before writing code or implementation plans - refines rough ideas into fully-formed designs through structured Socratic questioning, alternative exploration, and incremental validation
building-ui-uxUse when implementing user interfaces or user experiences - guides through exploration of design variations, frontend setup, iteration, and proper integration
ci-readiness-checkUse when the user explicitly asks for a CI check or to push their branch — e.g. "ci readiness", "check ci", "pre-push check", "ready for CI", "ci check", "ready to push", "push my changes", "push the branch", "let's push". Catches common CI failures before pushing — formatting, stale API reports, missing changesets, policy violations.
creating-debug-tests-and-iteratingUse this skill when faced with a difficult debugging task where you need to replicate some bug or behavior in order to see what is going wrong.
creating-skillsUse when you need to create a new custom skill for a profile - guides through gathering requirements, creating directory structure, writing SKILL.md, and optionally adding bundled scripts
ff-oce-kustoUse this skill for any Kusto query or telemetry investigation specifically related to Fluid Framework or its partners. Triggers include: writing or running a Kusto query against the Office Fluid database, investigating Fluid Framework telemetry or error rates, querying Office_Fluid_FluidRuntime_* tables, looking up a Fluid session by Session_Id or docId, investigating a Fluid-related error in Loop or Whiteboard telemetry, monitoring an FF bump or partner ring deployment, checking Fluid render reliability or Scriptor errors, or when the user mentions Fluid-specific tables (Office_Fluid_FluidRuntime_*, OwhLoads, HostTracker, Scriptor) or Fluid-specific error types (dataCorruptionError, dataProcessingError, DeltaConnectionFailureToConnect, ICE, ACE). Do NOT trigger for general Kusto questions that are not related to Fluid Framework.
finishing-a-development-branchUse this when you have completed some feature implementation and have written passing tests, and you are ready to create a PR.
fluid-prUse when creating a pull request in the Fluid Framework repo. Composes a PR title and body following Fluid Framework conventions, proposes them to the user, then pushes the branch and creates the PR on GitHub. Triggers on "create a PR", "make a PR", "open a PR", "submit a PR", or "push and create a PR".
fluid-pr-guideUse when composing, writing, drafting, or reviewing a PR title, PR description, or PR body in Fluid Framework — provides title style, body template, and section guidance.