Skip to content

Split capability taxonomy so every user-facing command has its own dashboard wedge (main-ca) - #299

Merged
amilandi merged 3 commits into
main-cafrom
amilandin/split-capability-taxonomy-per-command-ca
Sep 23, 2026
Merged

amilandi merged 3 commits into
main-cafrom
amilandin/split-capability-taxonomy-per-command-ca

Conversation

@amilandi

@amilandi amilandi commented Sep 22, 2026

Copy link
Copy Markdown
Contributor

Ports PR #259 (which targets main) to main-ca so CEA-agent installations get the same split-per-command adk_capability taxonomy.

Cherry-picked commits from amilandin/split-capability-taxonomy-per-command:

  • de7c946 — original split
  • 6818aaf — update taxonomy header comment for the new not in <blank> dashboard filter
  • fd89c19 — review-round-2 fixes: reverse capability check + fix wired comment group

Changes

Before After
evaluations evaluation_create, evaluation_update, evaluation_delete, evaluation_validate
publishing (push + publish) push (push.py) + publishing (publish.py)
(no wedge) onboarding, topic_review, topic_test, workflow_test

Conflict resolved during cherry-pick

src/skills/evaluations/update/SKILL.md — kept main-ca''s "workspace-only updates, do not require an agent checkpoint" note and the separate telemetry code block, applied the new evaluation_update label from #259.

Dashboard follow-up (already applied in prod)

The Aria "Capability Usage by Type" and "Capability Usage by Type Trend" tiles were switched from an explicit in {value-list} filter to not in <blank> on 2026-09-22 (all four tiles: ADK Platform + ADK Platform External, donut + trend). New capabilities from this PR — including push — auto-appear on the donut; verified with real emits from a maker environment.

Still to double-check: any Build Outcomes / Agent Deploy tile that filters specifically on adk_capability="publishing" should be extended to include "push" (or switched to not in <blank> too), since push.py events are now stamped "push" instead of "publishing".

Tests

  • New tests/test_adk_telemetry.py::test_every_canonical_capability_is_actually_emitted — reverse-direction check: fails on any canonical value with no emit site anywhere in the kit. Passes on main-ca (all values, including onboarding, are wired).
  • Existing test_wired_capabilities_are_in_canonical_list — updated comment groups to reflect that publish.py emits via the shim, not via emit_build_*.
  • pytest tests/test_adk_telemetry.py tests/scripts/test_push_scope.py -> 169 passed.

Companion PR on main

#259

ADO

https://o365exchange.visualstudio.com/O365%20Core/_workitems/edit/7830948

@daeunJe0ng Dawn Jeong (daeunJe0ng) left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[copilot-review]

Approve. Clean taxonomy split, and I verified it on the target branch: checked out the head (6818aaf) and ran pytest tests/test_adk_telemetry.py tests/scripts/test_push_scope.py, 168 passed. Confirmed publish.py emits publishing and push.py emits push on main-ca, so both wedges are populated and nothing is orphaned. Every canonical capability has a real emitter.

One follow-up to make sure doesn't get lost, since it lives outside this diff. Your commit message calls it out, but the PR description doesn't: the not in <blank> change only covers the Capability Usage donut. The Aria Build Outcomes and Agent Deploy tiles that filter on adk_capability = "publishing" still need updating, because push.py's emit_build_start / emit_build_complete / emit_agent_deploy events are now stamped push, not publishing. Until those tiles include push (or split into push vs publish), push build/deploy activity will silently drop off them. Worth adding to the PR description so a reviewer or dashboard owner picks it up.

Two optional nits, neither blocking:

  • In test_wired_capabilities_are_in_canonical_list, publishing is grouped under the emit_build_*/flightcheck_* comment, but after this change publishing only comes from publish.py's emit_capability.py shim. Moving it next to the shim group keeps the comment accurate.
  • The wired test asserts wired is a subset of canonical, so it won't catch a canonical value that no code emits. The #254 shim guard already covers arg drift, so this is just belt-and-suspenders.

@amilandi

Copy link
Copy Markdown
Contributor Author

Addressed the two nits in fd89c19:

  • Comment placement — moved publishing from the emit_build_*/flightcheck_* group to the shim group in the wired set; publish.py invokes the emit_capability.py shim via subprocess (publish.py:367-368), it doesn't call emit_build_* directly. Also added the same reverse-direction test as Split capability taxonomy so every user-facing command has its own dashboard wedge #259.
  • PR body — added a callout that any Build Outcomes / Agent Deploy tile filtering specifically on adk_capability="publishing" still needs "push" added (or the not in <blank> swap).

pytest tests/test_adk_telemetry.py tests/scripts/test_push_scope.py -> 169 passed.

@daeunJe0ng Dawn Jeong (daeunJe0ng) left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[copilot-review] Approve.

Re-reviewed at current head. Clean port of #259 to main-ca. Both prior nits (publishing comment grouping, reverse-direction test) are resolved in-diff. No code-side blockers.

Same operational follow-up as #259: reconcile any Aria Build Outcomes / Agent Deploy tile filtered on adk_capability="publishing" to include "push". Tracked separately since CI can't catch it.

amilandi added a commit that referenced this pull request Sep 23, 2026
The main-ca branch has a repository ruleset that requires four status
checks from ci.yml (Lint Python, Installer script smoke tests,
FlightCheck offline test suite, Product line gate), but ci.yml's
pull_request / push triggers only listed main and release/**. So the
required checks never ran on PRs targeting main-ca, and every PR to
main-ca is stuck in mergeStateStatus=BLOCKED — including #299, #292,
#312, #313 (and no main-ca PR has ever been merged).

Add main-ca to both branch filters so CI runs and unblocks the merge
queue for CEA-taxonomy work.

Co-authored-by: Avery Milandin <amilandin@microsoft.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 70ddf006-7f8d-48e7-9afa-3fbae73b3864
@amilandi amilandi closed this Sep 23, 2026
@amilandi amilandi reopened this Sep 23, 2026
amilandi added a commit that referenced this pull request Sep 23, 2026
The main-ca branch has a repository ruleset that requires four status
checks from ci.yml (Lint Python, Installer script smoke tests,
FlightCheck offline test suite, Product line gate), but ci.yml's
pull_request / push triggers only listed main and release/**. So the
required checks never ran on PRs targeting main-ca, and every PR to
main-ca is stuck in mergeStateStatus=BLOCKED — including #299, #292,
#312, #313 (and no main-ca PR has ever been merged).

Add main-ca to both branch filters so CI runs and unblocks the merge
queue for CEA-taxonomy work.

Co-authored-by: Avery Milandin <amilandin@microsoft.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 70ddf006-7f8d-48e7-9afa-3fbae73b3864
Avery Milandin and others added 3 commits September 23, 2026 14:53
…shboard wedge

The `adk_capability` value list on Aria was too coarse: a single
`evaluations` slice covered create/update/delete/validate, and a single
`publishing` slice covered both `push` (upload local edits to Dataverse)
and `publish` (make changes live). That hid the signal PMs actually
need — which specific action drove a change in usage — and it left
several user-facing skills (onboarding, topic review/test, workflow
test) with no wedge at all.

Split the taxonomy so every distinct user-facing ADK command gets its
own slice on the Capability Usage donut:

  evaluations   -> evaluation_create / evaluation_update /
                   evaluation_delete / evaluation_validate
  publishing    -> push (push.py) + publishing (publish.py, unchanged)
  (new wedges)  -> onboarding, topic_review, topic_test, workflow_test

Notes:

* push.py's `emit_build_start` / `emit_build_complete` /
  `emit_agent_deploy` events are re-stamped from
  `adk_capability="publishing"` to `"push"`, and push.py now emits a
  best-effort `emit_capability_use("push")` at the end of the flow so
  push gets a wedge on the Capability Usage donut (mirroring publish.py).
  Aria tiles that filter Build Outcomes / Agent Deploy on
  `adk_capability="publishing"` will need updating to include both
  values (or split into two tiles).
* `evaluate_evals.py` now emits `evaluation_validate` in-process
  (previously emitted `evaluations`).
* SKILL.md files for evaluations/{create,update,delete} switch their
  `emit_capability.py` argument to the new granular values.
* SKILL.md files for onboarding, topics/review, topics/test, and
  workflows/test gain a best-effort telemetry line following the
  troubleshoot/SKILL.md pattern.
* `discover` (owned by PR #238) and `planner` (owned by a separate
  feature branch) are intentionally not added here — their PRs will
  add their own taxonomy entries.
* `flightcheck` remains in the taxonomy but is not part of the
  Capability Usage donut split — it has dedicated FlightCheck tiles.
* Tests updated: `test_wired_capabilities_are_in_canonical_list` gains
  the new values; the happy-path emit test uses `evaluation_validate`.
  The `test_no_caller_passes_a_noncanonical_capability_to_the_shim`
  guard from PR #254 continues to catch drift automatically.

ADO: https://o365exchange.visualstudio.com/O365%20Core/_workitems/edit/7830948

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 70ddf006-7f8d-48e7-9afa-3fbae73b3864
The Aria 'Capability Usage by Type' tiles used to pin an explicit
`in {value-list}` filter on the `adk Capability` dimension, which
meant every new capability added to ADK_CAPABILITIES had to be added
manually to the dashboard filter before its wedge would render.

The tiles were switched to `not in <blank>` on 2026-09-22, so new
capabilities now auto-appear on the donut. Update the header comment
so future contributors don't chase the obsolete dashboard-edit step.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 70ddf006-7f8d-48e7-9afa-3fbae73b3864
- Move `publishing` in the `wired` set comment groups: publish.py emits
  it via the `emit_capability.py` shim (subprocess), not via the
  `emit_build_*` event families.
- Add `test_every_canonical_capability_is_actually_emitted`: reverse of
  the existing wired-set check. Scans `scripts/**/*.py` and
  `src/skills/**/SKILL.md` for shim, direct-call, and `adk_capability=`
  emit sites and fails on any canonical value that isn't wired anywhere.
  Passes on main-ca (`onboarding` is still wired here).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 70ddf006-7f8d-48e7-9afa-3fbae73b3864
@amilandi
amilandi force-pushed the amilandin/split-capability-taxonomy-per-command-ca branch from fd89c19 to dbe1da7 Compare September 23, 2026 21:53
@amilandi
amilandi merged commit 1b995f3 into main-ca Sep 23, 2026
7 checks passed
@amilandi
amilandi deleted the amilandin/split-capability-taxonomy-per-command-ca branch September 23, 2026 21:58
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.

2 participants