Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
78 commits
Select commit Hold shift + click to select a range
3430207
Add readiness checks and modify settings.gradle to comment out unused…
p3dr0rv Jul 31, 2026
19688fd
Implement inter-process state locking for CLI commands to prevent rac…
p3dr0rv Aug 5, 2026
d5ea1d4
Ignore local pipeline and wiki repositories
p3dr0rv Aug 5, 2026
5c0c1e3
Merge branch 'master' into pedroro/release-scout
p3dr0rv Aug 5, 2026
dc5d8ab
release-agent: harden readiness gate + modularize the skill
p3dr0rv Aug 13, 2026
f5b315c
release-agent: force the checklist table into the attestation message
p3dr0rv Aug 13, 2026
b8cc7b7
release-agent: render readiness table once + never ask to run auto ch…
p3dr0rv Aug 13, 2026
1189c9a
Revert "release-agent: render readiness table once + never ask to run…
p3dr0rv Aug 13, 2026
c8c0e13
release-agent: weld attestation prompt into the checklist output (str…
p3dr0rv Aug 13, 2026
9f72a50
Revert "release-agent: weld attestation prompt into the checklist out…
p3dr0rv Aug 13, 2026
f08811a
release-agent: document the render-first invariant (why the table dis…
p3dr0rv Aug 13, 2026
dfc19fc
release-agent: weld attestation prompt onto render #2 (keep working t…
p3dr0rv Aug 13, 2026
e3136cf
release-agent: render the readiness table ONCE + a separate confirm b…
p3dr0rv Aug 13, 2026
1bd9921
release-agent: readiness gate — evaluate silently, then render the co…
p3dr0rv Aug 13, 2026
56a1896
release-agent: fix wide icon column in the status phase/step tables
p3dr0rv Aug 13, 2026
d845fec
release-agent: uniform step contract for Phase 0 + status render fixes
p3dr0rv Aug 14, 2026
bd224d7
release-agent: real-by-default runs, per-step mock overlay, step deta…
p3dr0rv Aug 17, 2026
46a1f39
release-agent: self-contained step modules — auto-discovery, no hand …
p3dr0rv Aug 17, 2026
8d43c03
Fix CG alerts URL and scout-step status labeling
p3dr0rv Aug 17, 2026
3bb4afd
Log CG remediation ownership: release owner creates the fix PR
p3dr0rv Aug 17, 2026
90f6b55
Journal step Q&A into the per-release event log
p3dr0rv Aug 17, 2026
50a58ac
Add Phase 1 (Code Complete Day) steps: final_reminder, pr_reminder, l…
p3dr0rv Aug 18, 2026
667a02c
Config-driven CCD automations with automation<->step traceability
p3dr0rv Aug 18, 2026
b2cf16a
Make automation kind (step-driving | release-level) first-class
p3dr0rv Aug 18, 2026
4838d24
Trim Phase 1 to reality: drop branch_cut, precheck_prs, verify_trigger
p3dr0rv Aug 18, 2026
1a18dc5
localization: full trigger->poll->complete/timeout workflow
p3dr0rv Aug 18, 2026
836fb33
localization: bake in the az read recipe + prefer the log's PR URL; d…
p3dr0rv Aug 18, 2026
f79c758
localization: @mention the release engineer in the PR post (merge bef…
p3dr0rv Aug 18, 2026
474d638
localization: add create_pr + send_to mock knobs for safe live testing
p3dr0rv Aug 18, 2026
ff3fbb1
Add Teams as a second delivery channel for the daily release digest
p3dr0rv Aug 18, 2026
c99e34e
notifications: deliver the Teams digest via the Scout bot, not the pe…
p3dr0rv Aug 18, 2026
6da0ae6
notifications: send Teams-bot digest as markdown (fix run-on rendering)
p3dr0rv Aug 18, 2026
6a25b18
Add teams_notify readiness item — bootstrap the Scout Teams digest ch…
p3dr0rv Aug 18, 2026
38a44db
Add the Agency Teams MCP to the entry-gate mcp_servers check + infra …
p3dr0rv Aug 18, 2026
642e516
Ship populated tools allowlists for the icm + kusto MCPs (fresh-machi…
p3dr0rv Aug 18, 2026
5bdc7cd
Notifications architecture cleanup (code-review follow-up)
p3dr0rv Aug 18, 2026
49bc912
Add entry-gate knowledge base + `gate-info` command
p3dr0rv Aug 18, 2026
8d849e3
Fix: scout steps stalled — expose scout_pending, keep them out of the…
p3dr0rv Aug 18, 2026
51e8d78
CCD reconciliation entry-gate item (Option B): block on pipeline mism…
p3dr0rv Aug 18, 2026
cc51a97
CCD gate now validates temporal viability (past = block, compressed =…
p3dr0rv Aug 18, 2026
8b67a18
Digest stays silent until the open phase's Scout steps have run
p3dr0rv Aug 18, 2026
e021fed
Autonomous push automation: run Scout's own steps headless + DM copy …
p3dr0rv Aug 19, 2026
2bf462b
CG knowledge: override to ship with a High/Critical alert needs manag…
p3dr0rv Aug 19, 2026
a5e5f8a
Render fix: scout steps in the current-phase table show "Scout runs t…
p3dr0rv Aug 19, 2026
21bf7e7
Fix: Phase 1 (Code Complete Day) ran a week early — anchor to CCD + g…
p3dr0rv Aug 19, 2026
41f1e95
Localization: always attach a proof link (pipeline run) to the step D…
p3dr0rv Aug 19, 2026
bda0af3
Event log: capture step outcomes structurally + trim rendered-status …
p3dr0rv Aug 19, 2026
d761f0b
Fix: CCD-day automations fired a week early ('every wednesday' -> nex…
p3dr0rv Aug 19, 2026
8898232
Provision CCD automations only after CCD is confirmed + re-pin them w…
p3dr0rv Aug 19, 2026
dff07c7
Phase 2 (build_verify): real RC-pipeline verification replacing the s…
p3dr0rv Aug 19, 2026
cd13d20
Add rc-report: on-demand Phase 2 RC-pipeline + test status report
p3dr0rv Aug 19, 2026
0657c30
Phase 2: persist RC pipeline ids + re-trigger-safe newest-run selection
p3dr0rv Aug 19, 2026
2292db2
Add release simulator (Option A + freeze): fast-forward the engine to…
p3dr0rv Aug 19, 2026
eea6094
Add build_verify_live scenario — test Phase 2 end-to-end against real…
p3dr0rv Aug 19, 2026
e1f2726
sim: add `sim status` to view the sandbox; clarify sim is isolated fr…
p3dr0rv Aug 19, 2026
a4985e9
sim: map natural-language 'test phase 2' to build_verify_live in SKIL…
p3dr0rv Aug 19, 2026
9dd15f5
sim: collapse the sandbox — seed the REAL release so the skill drives…
p3dr0rv Aug 19, 2026
e0c1bb7
Phase 2: CCD+1 anchor + rc_report email step before the go_test gate
p3dr0rv Aug 20, 2026
9c9219f
Cron-pin the push-reminder digest to workday-hourly (08:00-18:00 local)
p3dr0rv Aug 20, 2026
853866b
RC report: list individual failing tests per suite; merge duplicate s…
p3dr0rv Aug 20, 2026
1047800
Revert cron-pin of push reminders — back to 'every hour'
p3dr0rv Aug 20, 2026
f527692
Fix early-firing: owner-timezone due-ness + fire_at_local gating + tz…
p3dr0rv Aug 20, 2026
073d50d
RC report: classify tests (unit/instrumented/UI) + per-category failu…
p3dr0rv Aug 20, 2026
2a8c5fc
release-agent: document that _ccd_cron emits host-local wall-clock (s…
p3dr0rv Aug 20, 2026
545ad67
Implement RC report follow-up command and UI gate logic; enhance docu…
p3dr0rv Aug 20, 2026
4da6e02
Refactor Phase 2 RC verification process: remove go_test gate, implem…
p3dr0rv Aug 20, 2026
d124d90
release-agent: remove step-id coupling from the generic planner + render
p3dr0rv Aug 20, 2026
0c612f0
release-agent: store RC pipeline runs in state (nested schema) + reus…
p3dr0rv Aug 20, 2026
aa0b2ba
release-agent: apply the unit-test retry rule in the RC report (recov…
p3dr0rv Aug 20, 2026
82c2cc3
release-agent: arch review batch 1 — single-source ADO coords, one RC…
p3dr0rv Aug 20, 2026
01cad02
release-agent: arch review batch 2 — extract status views, dedupe ren…
p3dr0rv Aug 20, 2026
ea8ce7d
release-agent: status table — show engine-run agent steps as automati…
p3dr0rv Aug 20, 2026
40a3641
release-agent: phase map — only the frontier shows as 'current' (no f…
p3dr0rv Aug 20, 2026
44ed6ae
Phase 2: status-aware RC verify + in-flight state (no false-block on …
p3dr0rv Aug 20, 2026
d062451
Phase 2: `rc-retriggered` signal command (reopen RC steps for the new…
p3dr0rv Aug 20, 2026
012bad9
Phase 2: 30-min RC poller + 6h courtesy nudge (poll-rc + on-demand au…
p3dr0rv Aug 20, 2026
b519bd0
Phase 2: three-exit blocked message for the <90% RC UI gate
p3dr0rv Aug 20, 2026
32ed964
Registry per-release ownership + strip pre-prod legacy/back-compat code
p3dr0rv Aug 21, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 16 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ tsl
msalcpp
design-docs
1ES-Pipelines
AuthClientAndroidPipelines
IdentityWiki.wiki
nativeauthsample

# Gradle files
Expand Down Expand Up @@ -59,4 +61,17 @@ ehthumbs_vista.db

out/

plugins/buildsystem/bin
plugins/buildsystem/bin

ICM-investigation/
# Release Orchestrator generated run-state (per-release, ephemeral)
.release-runs/
.sim-runs/

# Python bytecode
__pycache__/
*.pyc


# Personal step-mock overrides for release-agent (local testing only)
release-agent/mocks.local.yaml
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ buildscript {
dependencies {
classpath "com.android.tools.build:gradle:${rootProject.ext.gradleVersion}"
classpath "org.javassist:javassist:${rootProject.ext.javaAssistVersion}"
classpath "com.microsoft.intune.mam:android-build-plugin:${rootProject.ext.intuneAppSdkVersion}"
// classpath "com.microsoft.intune.mam:android-build-plugin:${rootProject.ext.intuneAppSdkVersion}"
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:${rootProject.ext.kotlinVersion}"
// classpath "net.serenity-bdd:serenity-gradle-plugin:1.9.6"
// classpath 'com.google.gms:google-services:3.2.1'
Expand Down
66 changes: 66 additions & 0 deletions release-agent/EXTERNAL-REFERENCES.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
# External References

Everything the Release Orchestrator depends on that lives **outside this codebase**.
If any of these change (URL moved, DL renamed, pipeline re-IDed, template edited,
access revoked), the orchestrator can silently break — so they're catalogued here.
Review this list when something stops working or when onboarding a new release owner.

Legend for **Access**: `anon` = no auth · `az` = Azure CLI signed-in user ·
`AAD-SSO` = browser Microsoft sign-in · `MCP` = via an MCP server · `Google` = Google account (not automatable in Scout).

## Azure DevOps orgs & projects (we work across TWO)

| Project | Org | Host aliases | How we read it |
|---|---|---|---|
| **Engineering** | identitydivision | `identitydivision.visualstudio.com` = `dev.azure.com/identitydivision` | ADO **MCP** (bound here) or `az` |
| **One** | msazure | `msazure.visualstudio.com` = `dev.azure.com/msazure` | **`az` only** — the ADO MCP can't reach it |

> The ADO **MCP is bound to identitydivision/Engineering**. Calling it for project **One** fails with `TF200016: project does not exist`. Reads against **msazure/One** must use the **`az` CLI** (verified working as the signed-in user, no Conditional-Access 401): `az pipelines build show`, and `az devops invoke --area build --resource timeline|logs`. Engineering resources: pipeline 3038, build def 2828. One resources: pipeline 405133 (localization), build def 397224, CG repo 104410, the Auth App git repo.

## Systems of record (read/write)

| Ref | What | Used by | Access | Notes |
|---|---|---|---|---|
| ADO pipeline **3038** | "Code Complete Calendar Checker" — CCD source of record | CCD seed, `set-ccd`, `skip-release`, Phase-0 `cron` (verify scheduled) | az | org identitydivision / project Engineering. Real writes gated by --confirm. `cron` step verifies a recent `schedule`-reason run. |
| ADO pipeline **405133** | Localization build (org msazure / project One) | Phase-1 `localization` | MCP (ADO) / az | triggered at noon on CCD with `isCreatePrSelected=true`; polled every 10 min (3h timeout → email engineer); its **OneLocBuild@3** task logs `Pull request created with ID '<n>'` — that PR (`…/pullrequest/<n>`) is posted to the Code reviews chat for review |
| ADO build def **2828** | Auth Client Android build (org identitydivision / project Engineering) | readiness `build_access` | az | access check only |
| ADO build def **397224** | Android Build Release (org msazure / project One) | readiness `build_access` | az | access check only |
| ADO wiki **IdentityWiki.wiki** page **59148** | "Monthly Releases Payloads History" (parent) | Phase-0 `wiki` agent | az (`az devops wiki`) | child page `<Month> <Year> Release`; dup-safe numbering |
| **ICM team 78848** | "Auth Client Android Shield" on-call roster | readiness `oncall_now` | MCP (ICM) | primary = index 0 of currentOnCallContacts |
| **ADX cluster** idsharedeus2.eastus2 / db d496be22d62a46b0a3cf67ea2e736fd8 | release telemetry | readiness `adx_access` | MCP (Kusto) | `print 1` access probe |

## External web pages (scraped / linked)

| Ref | URL | Used by | Access | Notes |
|---|---|---|---|---|
| CCOA No-Fly Zones | https://prod.change-manager.msidentity.com/ccoa-periods | Phase-0 `lockdown` | AAD-SSO | scraped via browser; only Production-env periods block |
| **Component Governance alerts** (governed repo **104410** = AD-MFA-phonefactor-phoneApp-android, branch `working`) | https://msazure.governance.visualstudio.com/{One projId}/_apis/ComponentGovernance/GovernedRepositories/104410/Branches/working/Alerts | Phase-0 `cg` | az (`az rest`) | read-only report; active alerts by severity. projId=b32aa71e-…, resource=499b84ac-… |
| **`release` variable group 40** | https://identitydivision.visualstudio.com/Engineering/_library?...variableGroupId=40&path=release | Phase-0 `flight_reminder` (link only) | az/web | feature owners update local flights here — release engineer does NOT |
| Flight pre-mortem example doc | https://microsoft-my.sharepoint-df.com/:w:/p/rapong/cQpEZp0cXp1sQYo4A4M3PQWCEgUCDj364FJa-rq-msg59WlBsw | Phase-0 `flight_reminder` (link only) | AAD-SSO | example shared with feature owners |
| Localization instructions | https://eng.ms/docs/.../combined-release-checklist/localization | Phase-0 `flight_reminder` (link) · Phase-1 `localization` (manual-steps fallback + timeout email) | AAD-SSO | confirmed valid 2026-07-29 |
| **Teams chat: "Android Core Team"** | thread `19:976a859f167f44e59c4ceca8b1d23581@thread.v2` | Phase-0 `flight_reminder` target | MCP (WorkIQ) | real target; redirect for tests via the `send_to` mock knob |
| **Teams chat: "Code reviews"** | thread `19:meeting_Y2Y3OGRjZGMtZGVkYi00MTkzLThhZjktNDAxYWVkMjZlMmE3@thread.v2` | Phase-1 `pr_reminder` target | MCP (WorkIQ) | CCD PR-merge reminder; redirect for tests via the `send_to` mock knob |
| **CCD-delay / cherry-pick approver: Moumita Ghosh** | moghosh@microsoft.com | Phase-1 `pr_reminder` (named in message) | — | both a CCD delay and a post-CCD cherry-pick require her approval |
| **EcsFlight.kt** (Auth App ECS flights) | https://msazure.visualstudio.com/One/_git/AD-MFA-phonefactor-phoneApp-android?path=/.../ecs/entities/EcsFlight.kt&version=GBworking | Phase-0 `flight_reminder` bullet 4 (link only) | az/web | reviewers check its history since last code complete |
| Early code-complete notice template | https://eng.ms/docs/.../combined-release-checklist/early-code-complete-notice-email-template | Phase-0 `notice` | AAD-SSO | copied locally to `templates/early-code-complete-notice.md` — **re-sync if upstream edits** |
| Hotfix cherry-pick guide | https://eng.ms/docs/.../release/cherry-pick-to-hotfix-guidelines | link inside notice email body | AAD-SSO | referenced, not fetched |
| common-for-android changelog | https://raw.githubusercontent.com/AzureAD/microsoft-authentication-library-common-for-android/dev/changelog.txt | Phase-0 `breaking` | anon | breaking = `[MAJOR]` in `vNext` |
| Play Console vitals | (Google Play Console) | Phase-0 `vitals` (#8) | Google | **NOT automatable in Scout** (Google auth wall) |

## Outbound email recipients

> Runs are real — these recipients receive the notice. To test without emailing
> the DL, redirect with the `send_to` mock knob (`mocks.local.yaml`).

| Step | To | Notes |
|---|---|---|
| Phase-0 `notice` (early code-complete) | androididentity@microsoft.com ("Azure Identity Android SDK"), jialh@microsoft.com | provided by release owner 2026-07-29 |
| Phase-1 `final_reminder` (CCD-day code-complete) | androididentity@microsoft.com ("Azure Identity Android SDK"), jialh@microsoft.com | same DL as `notice`; CCD-day "update" variant |

## Tooling / infra (provisioned by bootstrap)

| Ref | What | Notes |
|---|---|---|
| Agency CLI | provides the **ICM** and **Kusto** MCP servers | `agency mcp icm` / `agency mcp kusto`; auto-registered into `~/.scout/m-mcp-servers.json` by `cli infra` |
| Azure CLI (`az`) + `azure-devops` extension | pipeline + wiki reads/writes | signed-in user is the release owner |
| Scout | host for the skill + automations | `~/.scout`; bootstrap checks presence |
Loading
Loading