Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
1fd1856
Teams Chatbot: onboard API Stewardship Board
JiaqiZhang-Dev Oct 14, 2026
6565d9a
Teams Chatbot: reuse SDK listeners for Stewardship dev and test
JiaqiZhang-Dev Oct 15, 2026
6eb1a30
Teams Chatbot: make Stewardship eval cases customer-facing
JiaqiZhang-Dev Oct 15, 2026
fa87d08
Teams Chatbot: clarify Stewardship review workflow and concise answers
JiaqiZhang-Dev Oct 20, 2026
11259b5
Teams Chatbot: scope Stewardship searches and tighten review responses
JiaqiZhang-Dev Oct 20, 2026
1d0debf
Teams Chatbot: shorten Stewardship request identification
JiaqiZhang-Dev Oct 20, 2026
774f9eb
Teams Chatbot: use service type terminology in Stewardship skill
JiaqiZhang-Dev Oct 20, 2026
dda8824
Teams Chatbot: refer ARM reviews to ARM Office Hours
JiaqiZhang-Dev Oct 20, 2026
3b1c02d
Teams Chatbot: simplify Stewardship tenant workflow
JiaqiZhang-Dev Oct 20, 2026
31e7400
Teams Chatbot: replace strict word limits with focused answer guidance
JiaqiZhang-Dev Oct 20, 2026
2b6befc
Teams Chatbot: keep Stewardship bullets and citations concise
JiaqiZhang-Dev Oct 20, 2026
9c760b9
Merge origin/main into jiaqizhang-dev-api-stewardship-chatbot
JiaqiZhang-Dev Oct 21, 2026
f173f1f
Consolidate Stewardship guidance and GitHub retrieval handling
JiaqiZhang-Dev Oct 22, 2026
6f4f77d
Refine Stewardship skill description and remove brevity instruction
JiaqiZhang-Dev Oct 22, 2026
781a6d4
Use channel routing for Stewardship evaluations
JiaqiZhang-Dev Oct 22, 2026
34aabb7
Keep PR responses focused and support self-service workflow access
JiaqiZhang-Dev Oct 22, 2026
d7ea416
Include workflow access request guidance when permissions are unknown
JiaqiZhang-Dev Oct 22, 2026
6a63501
Simplify workflow permission guidance to request access
JiaqiZhang-Dev Oct 22, 2026
55c77a0
Include public organization membership in workflow access guidance
JiaqiZhang-Dev Oct 22, 2026
745f73d
Prioritize PR investigation steps and allow irrelevant steps to be sk…
JiaqiZhang-Dev Oct 22, 2026
1407579
Short-circuit general draft PR reviews in the first step
JiaqiZhang-Dev Oct 22, 2026
2f3ad67
Keep Stewardship skill description focused on its core responsibility
JiaqiZhang-Dev Oct 22, 2026
021c69d
Keep PR answers focused on conclusions rather than status inventories
JiaqiZhang-Dev Oct 22, 2026
c97650a
Keep draft PR preflight replies brief and avoid unsupported wait advice
JiaqiZhang-Dev Oct 22, 2026
1694ef5
Keep workflow gate replies actionable without prescribing answer format
JiaqiZhang-Dev Oct 22, 2026
27ba859
Refine self-service access guidance and tenant skill routing
JiaqiZhang-Dev Oct 22, 2026
052d1a3
Scope chat agent instruction changes to PR review
JiaqiZhang-Dev Oct 22, 2026
9a40225
Prioritize resolution and KB guidance for pending PR checks
JiaqiZhang-Dev Oct 22, 2026
ff377aa
Condense PR review workflow while preserving safeguards
JiaqiZhang-Dev Oct 22, 2026
9bf171c
Use PR status and labels for flexible review triage
JiaqiZhang-Dev Oct 22, 2026
e7fdd0d
Improve PR failure diagnosis and Stewardship evaluations
JiaqiZhang-Dev Oct 22, 2026
31bae46
Prioritize evidence applicability in chat answers
JiaqiZhang-Dev Oct 22, 2026
185f708
Scope Stewardship evaluation references to customer questions
JiaqiZhang-Dev Oct 22, 2026
642c326
Merge origin/main into jiaqizhang-dev-api-stewardship-chatbot
JiaqiZhang-Dev Oct 23, 2026
28cb4de
Fix optional log iteration in GitHub MCP parser
JiaqiZhang-Dev Oct 23, 2026
f80eaae
Revert README changes from Stewardship onboarding PR
JiaqiZhang-Dev Oct 23, 2026
80b7977
Organize Stewardship guidance as a request workflow
JiaqiZhang-Dev Oct 23, 2026
2ff4b51
Include Actions check runs in PR review preflight
JiaqiZhang-Dev Oct 23, 2026
c0a2ae8
Share Azure SDK Logic App listeners in dev and test
JiaqiZhang-Dev Oct 23, 2026
a564eaa
Preserve expert answers in Stewardship evaluations
JiaqiZhang-Dev Oct 23, 2026
6dee091
Document upstream GitHub job-log tool naming
JiaqiZhang-Dev Oct 23, 2026
022edd8
Remove Stewardship engineering-doc title restriction
JiaqiZhang-Dev Oct 26, 2026
aac2cab
Remove API Spec Review engineering-doc title restriction
JiaqiZhang-Dev Oct 26, 2026
9317568
Chatbot: extract shared diagnostics and listener fixes
JiaqiZhang-Dev Oct 26, 2026
1fb7365
Merge shared chatbot fixes as Stewardship prerequisite
JiaqiZhang-Dev Oct 26, 2026
d69ee38
Merge main into API Stewardship chatbot onboarding
JiaqiZhang-Dev Nov 5, 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
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ class TenantID(str, Enum):
AZURE_SDK_ONBOARDING = "azure_sdk_onboarding"
AZURE_TYPESPEC_AUTHORING = "azure_typespec_authoring"
API_SPEC_REVIEW_BOT = "api_spec_review_bot"
API_STEWARDSHIP_BOARD_QA_BOT = "api_stewardship_board_qa_bot"
AZURE_MCP_SERVER = "azure_mcp_server"
AZSDK_TOOLS_AGENT_QA_BOT = "azsdk_tools_agent_qa_bot"
AZURE_SDK_QA_BOT = "azure_sdk_qa_bot"
Expand Down Expand Up @@ -66,6 +67,7 @@ class TenantID(str, Enum):
SRC_AZURE_REST_API_SPECS_WIKI = "azure_rest_api_specs_wiki"
SRC_AZURE_REST_API_SPECS_DOCS = "azure_rest_api_specs_docs"
SRC_AZURE_OPENAPI_DIFF_DOCS = "azure_openapi_diff_docs"
SRC_AZURE_AVOCADO_DOCS = "azure_avocado_docs"
SRC_STATIC_CPEX_DOCS = "static_cpex_docs"

# -- SDK language docs --
Expand Down Expand Up @@ -204,14 +206,19 @@ def _register(*sources: KnowledgeSource) -> None:
),
KnowledgeSource(
name=SRC_AZURE_REST_API_SPECS_DOCS,
description="Azure REST API specification documentation covering spec structure and conventions.",
description="Azure REST API specification guidance for CI checks, suppressions, breaking-change/OAD rules, ARM leases, and SDK package-name approval.",
base_url="https://github.com/Azure/azure-rest-api-specs/blob/main/",
),
KnowledgeSource(
name=SRC_AZURE_OPENAPI_DIFF_DOCS,
description="OpenAPI diff documentation for detecting and managing breaking changes in API specifications.",
base_url="https://github.com/Azure/openapi-diff/blob/main/",
),
KnowledgeSource(
name=SRC_AZURE_AVOCADO_DOCS,
description="Avocado validation rules, default-tag API coverage, known issues, and troubleshooting for Azure REST API specifications.",
base_url="https://github.com/Azure/avocado/blob/main/",
),
KnowledgeSource(
name=SRC_STATIC_CPEX_DOCS,
description="Cloud Product Excellence (CPEX) documentation covering Azure-branded product lifecycle management, breaking change policy and process guidance, API breaking changes, S360 KPI requirements, preview/GA readiness, and retirement guidance.",
Expand Down Expand Up @@ -652,6 +659,42 @@ def _sources(*names: str) -> list[KnowledgeSource]:
qa_guideline_files=["tenants/api_spec_review.md"],
enable_routing=True,
),
TenantID.API_STEWARDSHIP_BOARD_QA_BOT: TenantConfig(
display_name="API Stewardship Board - General",
skill_name="api-stewardship-board",
Comment thread
JiaqiZhang-Dev marked this conversation as resolved.
Resolved
scope="Data-plane API design and API Stewardship Board review guidance; advisory only, without approval authority.",
topics=[
"Data-plane REST and SDK design, endpoints, LROs, clients, packages, and naming",
"Internal API modeling, documentation/SDK exposure, and service-side access boundaries",
"Board review requests, readiness, async reviews, virtual Office Hours, and signoff process",
"REST versus SDK compatibility, preview/GA versioning, migration, and validation triage",
"API deprecation, retirement, affected versions, and customer-notification requirements",
"Safe review-scheduler troubleshooting and evidence-based operational referrals",
],
exclusions=[
"ARM/management-plane reviews — direct to ARM Office Hours: https://armwiki.azurewebsites.net/introduction/office_hours.html",
"Detailed TypeSpec authoring or emitter failures — use the TypeSpec skill",
"Detailed spec PR check investigation — use the API Spec Review skill",
"Breaking-change exception requests — use the API Spec Review skill for the applicable authorized-reviewer process",
"Release-plan lifecycle — use the SDK Onboarding skill",
"Language-specific SDK failures — use the corresponding language skill",
"Performing approvals, approval-label changes, merges, scheduler repairs, or permission changes",
],
sources=_sources(
SRC_AZURE_API_GUIDELINES,
SRC_TYPESPEC_DOCS,
SRC_TYPESPEC_AZURE_DOCS,
SRC_AZURE_SDK_GUIDELINES,
SRC_AZURE_SDK_DOCS_ENG,
SRC_AZURE_REST_API_SPECS_WIKI,
SRC_AZURE_REST_API_SPECS_DOCS,
SRC_AZURE_OPENAPI_DIFF_DOCS,
SRC_AZURE_AVOCADO_DOCS,
),
qa_guideline_files=["tenants/api_stewardship_board.md"],
enable_routing=True,
enable_wiki_cross_document_pages=False,
),
TenantID.AZURE_MCP_SERVER: TenantConfig(
display_name="Azure MCP Server",
skill_name="azure-mcp-server",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ parameters:
values:
- azure_sdk
- azure_mcp_server
- api_stewardship_board
Comment thread
JiaqiZhang-Dev marked this conversation as resolved.
Resolved
- name: environment
displayName: 'Target Environment'
type: string
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"logicAppName": {
"value": "api-stewardship-board-qabot-logicapp"
},
"workflowState": {
"value": "Disabled"
},
"teamsGroupId": {
"value": "1a10b50c-e870-4fe0-8483-bf5542a8d2d8"
},
"teamsChannelIds": {
"value": [
"19:3ebb18fded0e47938f998e196a52952f@thread.tacv2"
]
},
"serverBaseUrl": {
"value": "https://azuresdkqabot-server-c8czabhzhweadwgu.westus2-01.azurewebsites.net"
},
"serverAudience": {
"value": "899da762-d510-48f2-911a-db9ea0cc41fd"
},
"serverIdentityResourceId": {
"value": "/subscriptions/a18897a6-7e44-457d-9260-f2854c0aca42/resourceGroups/azure-sdk-qa-bot/providers/Microsoft.ManagedIdentity/userAssignedIdentities/azuresdkqabot-identity"
},
"botBaseUrl": {
"value": "https://azsdkqabot.azurewebsites.net"
},
"botAudience": {
"value": "ff836b38-c7d8-459a-a504-57b60b50b4eb"
},
"botIdentityResourceId": {
"value": "/subscriptions/a18897a6-7e44-457d-9260-f2854c0aca42/resourceGroups/azure-sdk-qa-bot/providers/Microsoft.ManagedIdentity/userAssignedIdentities/azsdkqabot"
},
"teamsConnectionResourceId": {
"value": "/subscriptions/a18897a6-7e44-457d-9260-f2854c0aca42/resourceGroups/azure-sdk-qa-bot/providers/Microsoft.Web/connections/teams"
},
"integrationAccountResourceId": {
"value": "/subscriptions/a18897a6-7e44-457d-9260-f2854c0aca42/resourceGroups/azure-sdk-qa-bot/providers/Microsoft.Logic/integrationAccounts/azuresdkqabot-ia"
},
"userAssignedIdentities": {
"value": {
"/subscriptions/a18897a6-7e44-457d-9260-f2854c0aca42/resourceGroups/azure-sdk-qa-bot/providers/Microsoft.ManagedIdentity/userAssignedIdentities/azsdkqabot": {},
"/subscriptions/a18897a6-7e44-457d-9260-f2854c0aca42/resourceGroups/azure-sdk-qa-bot/providers/Microsoft.ManagedIdentity/userAssignedIdentities/azuresdkqabot-identity": {}
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
"19:453ec446a66446589d764132f5cebb00@thread.tacv2",
"19:037246b9968445edb3a23612ea44524d@thread.tacv2",
"19:de16cb01a8a140678f02c3c1c8999756@thread.tacv2",
"19:17b23ff1d5d54cc293dcf673d32a5b7f@thread.tacv2",
"19:a357180f469c484db6890d8e35fe6a76@thread.tacv2"
]
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
"19:rMhMrxg7UjfwZmVoSeVvWvNQIfT_G6ds8napsytWqzw1@thread.tacv2",
"19:6adf8854b8bd4522ac917f1f5f21ff3c@thread.tacv2",
"19:bba4931857074014b3d8f1fd10662b36@thread.tacv2",
"19:1897c1bd6c6145efb62167733e1b8c82@thread.tacv2",
"19:9d05f1ee3cc2425ab86d4518f21fb1ec@thread.tacv2"
]
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,17 @@
"type": "string",
"defaultValue": "[resourceGroup().location]"
},
"workflowState": {
"type": "string",
"defaultValue": "Enabled",
"allowedValues": [
"Enabled",
"Disabled"
],
"metadata": {
"description": "Listener state; Board deployments default to Disabled"
}
},
"teamsGroupId": {
"type": "string",
"metadata": {
Expand Down Expand Up @@ -90,7 +101,7 @@
"userAssignedIdentities": "[parameters('userAssignedIdentities')]"
},
"properties": {
"state": "Enabled",
"state": "[parameters('workflowState')]",
"integrationAccount": {
"id": "[parameters('integrationAccountResourceId')]"
},
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
<!-- Copyright (c) Microsoft Corporation. -->
<!-- Licensed under the MIT License. -->

# Tenant: API Stewardship Board Assistant

## Scope

Help with data-plane API design and Board reviews. Give evidence-backed advice, not Board decisions. Do not repair infrastructure or prescribe resource-specific permission changes.

Direct ARM/management-plane reviews to [ARM Office Hours](https://armwiki.azurewebsites.net/introduction/office_hours.html) and stop this Board review workflow.

## 1. Understand the request

Use the latest confirmed thread resolution; distinguish proposals from decisions and preserve withdrawals.

## 2. Gather evidence

Load `pr-review` for check diagnosis, feedback and merge readiness. Treat bot summaries as starting evidence; verify blockers against live current-head state.

Retrieve maintained guidance for the unresolved question identified from the PR or request. Pass known `service_type="data-plane"` or `service_type="management-plane"` to `search_knowledge_base`, including the initial search; leave it unset when ambiguous or general. Use PR labels, paths or explicit wording, never the channel. `wiki_search` has no service-type filter.

## 3. Apply the relevant policy

As applicable:

- Keep REST signoff, breaking-change exceptions, SDK/API review and package-name approval separate. Verify live `.github/protected-labels.yml` for approval authority; approval does not transfer to another PR.
- Distinguish published-version edits from new versions, preview from GA, and REST from SDK compatibility. Verify the applicable baseline and policy; do not invent requirements for inaccessible material.
- Separate SDK/documentation visibility from service authorization. Verify preview classification from policy and availability, not AFEC alone.
- For retirement, verify affected versions, applicable notice requirements and approval evidence; do not generalize prior approvals.

## 4. Recommend the next action

Help the author take the next useful action from current evidence, rather than restart completed review work. Answer concisely; omit review checklists and repeated conclusions or links.

Use maintained Board guidance for async reviews, materials, lead times, Office Hours and support. Do not send users back to this channel to repeat their question.
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,9 @@

# Short descriptions for system-prompt advertisement
_SKILL_DESCRIPTIONS: dict[TenantID, str] = {
TenantID.API_STEWARDSHIP_BOARD_QA_BOT: (
"Data-plane API design and API Stewardship Board review guidance."
),
TenantID.API_SPEC_REVIEW_BOT: (
"Azure REST API specification authoring and PR review: requirements, "
"validation errors, LintDiff, Avocado, breaking changes, review status, "
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,14 @@ def test_azure_mcp_internal_docs_are_scoped_to_mcp_title_tokens():
)


def test_stewardship_internal_docs_keep_source_scope_without_title_restrictions():
got = _resolve_source_filters(
[SRC_AZURE_SDK_DOCS_ENG], TenantID.API_STEWARDSHIP_BOARD_QA_BOT.value
)
assert got[SRC_AZURE_SDK_DOCS_ENG] == "context_id eq 'azure-sdk-docs-eng'"
assert _wiki_page_filters(TenantID.API_STEWARDSHIP_BOARD_QA_BOT.value, got) == got


def test_combined_source_filters_keep_or_clauses_grouped():
got = combine_source_filters(
{
Expand Down
Loading
Loading