Skip to content

Add Authenticator app report to the OCE weekly telemetry skill, Fixes AB#3731627 - #455

Open
Shahzaib (shahzaibj) wants to merge 2 commits into
masterfrom
shjameel-microsoft-oce-authapp-report
Open

Add Authenticator app report to the OCE weekly telemetry skill, Fixes AB#3731627#455
Shahzaib (shahzaibj) wants to merge 2 commits into
masterfrom
shjameel-microsoft-oce-authapp-report

Conversation

@shahzaibj

@shahzaibj Shahzaib (shahzaibj) commented Aug 2, 2026

Copy link
Copy Markdown
Contributor

What

Extends the oncall-weekly-telemetry-report skill so one slash-command invocation produces the
weekly telemetry report for both the Android Broker and the Authenticator app.

Previously the skill covered Broker only. On-call engineers had no equivalent view of Authenticator
scenario health, and the obvious alternative — a second skill — would have meant two commands and
two chances to run them against different windows.

How

Two reports, one command, one window.

Mode Output
both (default) oncall-wow-report-<date>.html + authapp-wow-report-<date>.html + oce-index-<date>.html
broker Broker report only
authapp Authenticator report only

The reports stay separate files rather than one merged document — the two apps have different
audiences, different diagnostic ladders, and (critically) incompatible Kusto conventions. A
combined index page links them and surfaces both sets of headline KPIs.

SKILL.md becomes a router. It now only resolves the reporting window, picks the mode, and
stitches results together. All app-specific analysis moved into two playbooks:

  • assets/playbooks/broker.md — error codes/types, spike + code attribution, latency, version adoption
  • assets/playbooks/authapp.md — scenario funnels (Passkey / Entra MFA / Entra PSI / MSA NGC+SA),
    error reasons, abandonment, Broker API responsiveness, crash rate

In both mode the playbooks run as parallel sub-agents, so two reports cost roughly the
wall-clock of one. They are deliberately never read into the same context — the Broker's
"never sum(countDevices), always HLL" rule is actively wrong on the Authenticator side, where
sum(SucceededDCount) is correct. Keeping them isolated prevents cross-contamination.

Noise gating. New classify-novelty.js labels every key NEW / ACCELERATING / ONGOING /
VOLATILE / RECOVERY / IMPROVING / STABLE
against its own 7-week baseline. Only NEW +
ACCELERATING (plus at most 2 wins) render with charts; everything else collapses into a fold.
This replaces the previous volume-ranked attention list, where a flat-but-huge error code
outranked a genuine step change and buried it.

New assets

  • assets/playbooks/{broker,authapp}.md
  • assets/scripts/classify-novelty.js, assets/scripts/build-index.ps1
  • assets/templates/{authapp-report-template,index-template}.html
  • assets/queries/authapp/** + assets/docs/authapp-kusto-cheatsheet.md
  • bootstrap-report.ps1, run-kql.ps1, validate-report.ps1, find-suspect-prs.ps1 all gained
    an -App broker|authapp switch

Testing

Run end-to-end via the slash command against live Kusto for the 2026-08-01 window. Both reports
generated and passed their own validate-report.ps1 -App <app> profiles; the combined index built
from the two finished reports. AuthApp queries were validated against the live cluster
(idsharedeus2.eastus2.kusto.windows.net) before being committed.

Notes

  • Reports are written to $env:USERPROFILE\android-oce-reports\outside the workspace, so
    they can never be committed accidentally. Nothing generated is included here.
  • Scoped entirely to .github/skills/oncall-weekly-telemetry-report/. No product code touched.

⚠️ Stacked PR. A follow-up fixes a bug in the noise gate this PR introduces
(it graded Sunday-aligned calendar weeks while the report displays a rolling 7-day window).
That fix is split out for reviewability and targets this branch:
#459 — it will auto-retarget to master once this merges.

Fixes AB#3731627

@shahzaibj
Shahzaib (shahzaibj) requested a review from a team as a code owner August 2, 2026 01:14
@github-actions

github-actions Bot commented Aug 2, 2026

Copy link
Copy Markdown

❌ Work item link check failed. Description does not contain AB#{ID}.

Click here to Learn more.

Shahzaib (shahzaibj) and others added 2 commits August 18, 2026 00:18
Extends oncall-weekly-telemetry-report from a Broker-only skill into a
router that produces two reports plus a combined index from one slash
command, and reworks how findings are surfaced so on-call engineers can
tell a new regression from an ongoing known issue at a glance.

Authenticator support
- SKILL.md is now a thin router: resolve window and mode, then delegate.
  Modes: both (default), broker, authapp.
- App analysis moves into assets/playbooks/broker.md and authapp.md. The
  two apps' Kusto conventions are incompatible (Broker forbids
  sum(countDevices); AuthApp requires sum(*DCount)), so the playbooks run
  as parallel sub-agents and are never read into one context.
- Adds an 8-query AuthApp pack, a Kusto cheatsheet, an AuthApp report
  template, an index template, and build-index.ps1.
- bootstrap-report.ps1, run-kql.ps1, validate-report.ps1 and
  find-suspect-prs.ps1 take -App to select cluster, template and profile.

Noise reduction
The previous report ranked the attention section by volume, so a flat
but huge error code outranked a real step change, and 60-day trends were
a browsable catalog. A real run had 13 attention rows with zero charts
next to them, while 100 sparklines sat in tables below - 27 of 29 trend
rows duplicated content already shown elsewhere.

- classify-novelty.js labels each series against its own 7-week baseline
  (NEW / ACCELERATING / ONGOING / VOLATILE / RECOVERY / IMPROVING /
  STABLE) from the existing bucket-trends sidecar, so no new queries.
  attention = NEW + ACCELERATING; everything else collapses into a fold.
- Attention section is grouped New this week / Getting worse / Ongoing
  (folded), budgeted to 8 visible rows including at most 2 wins, and
  every visible row carries its own sparkline.
- 60-day section becomes a detector: only promoted slow burns render
  outside the fold.
- VOLATILE and RECOVERY rows drop the WoW chip for a vs-60d-median chip.
  A code once reported +398% WoW while sitting 94% below its own median.
- Quiet weeks publish short rather than backfilling filler.

Validation
- Adds checks 13-18: material lead-row delta, row-body specificity, no
  ratio artifacts in chips, a sparkline on every visible attention row,
  the visible-row budget, and an app-aware cap on unfolded 60-day charts
  (6 Broker / 16 AuthApp - AuthApp's scenario table is the scoreboard).
- Verified by generating both reports with sub-agents given only the
  playbooks and no hints about the redesign. Both passed every hard
  check: attention rows 13 -> 7 (Broker) and 4 (AuthApp), all charted,
  unfolded 60-day charts 38 -> 0.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
First full run of the router as an engineer invokes it: mode both, one
resolved window, two parallel sub-agents, combined index. Both reports
passed every hard check. The agents were given no hints about the report
shape, and were asked to report anything they had to guess at - that
question surfaced six real documentation defects.

Broker
- Coverage vs budget read as a contradiction: Step 5 mandates an
  attribution card for every regressed code and type, while Section 2
  caps visible rows at 8. They govern different things. Both sides now
  say so and cross-reference: the budget caps visibility, the coverage
  rule caps omission, and surplus cards go in a collapsed fold rather
  than being dropped. 12 mandated cards with 7 visible rows is correct.
- The two WoW bases were described but their division of labour was not.
  Adds a table: every number a reader sees comes from the rolling
  window; the calendar-week classifier contributes selection and
  narrative, never a figure.

Authenticator
- fetch-appcenter-crashes.js was documented as "--days 14". The script
  lives in the sibling release-monitoring-report skill and needs a
  subcommand plus --owner/--app/--version, so it could not be run as
  written. Replaced with the real invocation, the token resolution
  order, and a note that skipping the crash layer is expected.
- The novelty step said to classify "13 scenario success-rate series"
  while the same paragraph excludes push notifications. Only 9 outcome
  funnels are classifiable; 13 = 9 outcome funnels + 4 PN families.
- The scoreboard requires success/failure/unknown columns for all 13,
  but PN has no such model and Denied is a healthy outcome. PN rows now
  use completion/error with a literal n/a for unknown, never blank.
- run-kql.ps1's signature was never stated on the AuthApp side. It takes
  -Query with the query TEXT and -Out, not -File/-OutFile.

Verified: before-fixture still fails checks 15/16/18; both new reports
pass; index links resolve; both reports agree on the window.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@shahzaibj
Shahzaib (shahzaibj) force-pushed the shjameel-microsoft-oce-authapp-report branch from 362f0cb to 58d3485 Compare August 18, 2026 07:20
@shahzaibj Shahzaib (shahzaibj) changed the title Add Authenticator telemetry report to OCE skill; align noise gate to the rolling window Add Authenticator app report to the OCE weekly telemetry skill Aug 18, 2026
@github-actions

Copy link
Copy Markdown

✅ Work item link check complete. Description contains link AB#3731627 to an Azure Boards work item.

@github-actions

Copy link
Copy Markdown

❌ Invalid work item number: AB#3731627
. Work item number must be a valid integer.

Click here to learn more.

@github-actions github-actions Bot changed the title Add Authenticator app report to the OCE weekly telemetry skill Add Authenticator app report to the OCE weekly telemetry skill, Fixes AB#3731627 Aug 18, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant