Manages new dimension value mappings triggered by ICM AggreUnmatched alerts. Queries ClickHouse for unmatched values, classifies dimensions (Legacy vs Standard), routes to correct PM, computes MurmurHash3 keys via MCP, generates CSV updates, creates PRs in NitroUMDP/PLSCoreData, and verifies deployment. USE WHEN: user says 'unmatched dimension', 'new dimension value', 'AggreUnmatched ICM', 'dimension value management', 'EmptyCheck failure', 'snd_alert', 'dimension mapping', or references ICM with 'AggreUnmatched_' in title.
Telemetry: After reading this file, run:
npx -y bun .github/skills/telemetry/helix.ts send-telemetry --skill-name dimension-value-management --action read-skill
Automates new dimension value management for AggreUnmatched_* ICM alerts — from ClickHouse query to PR merge.
AggreUnmatched_ in title (team: Triage ODIN Infra)User: "Help me triage ICM 743924632"
→ Agent reads this skill → extracts ICM → queries ClickHouse → classifies dimension
→ sends PM email → updates CSV → creates PR → verifies in ClickHouse
mcp_icm_get_incident_details_by_id (preferred — mcp_icm_get_ai_summary often returns empty)AggreUnmatched_{DimensionName}_Merge_Activity → SND unmatched alert (proceed to Phase 2)DimValidation_{DimensionName}_Activity → DimValidation alert (different issue — see note below)mcp_icm_get_incident_details_by_id in parallel for all IDsDimValidation alerts indicate that a standard value in DimMapping CSV is missing from the PLSCoreData resource file. This is NOT an unmatched raw value problem. Action: check recent DimMapping CSV changes, identify the missing standard value, and add it to PLSCoreData. Mark as ❌ in review file.
Look up the dimension in references/dimension-config.md to get:
Query ClickHouse using the correct query pattern (see dimension-config.md for template):
__DUMMY__ rows (placeholder rows, not real unmatched values)mcp_alwayson-mcp_submit_clickhouse_query. Default database is ClickHouse WW (databaseId as 159, doraEndpoint as "Superset").For batch processing (multiple ICMs): query all dimensions in parallel, then proceed to Phase 2.5.
Why latest date? The snd_alert tables store rolling recent data. Querying only the latest date shows which values are currently unmatched. Values that appeared in older dates but not the latest may have already been resolved.
Before making ANY CSV edits or sending PM emails, generate a review file at .tmp/unmatched-review-{YYYY-MM-DD}.md.
📖 File format & template: See references/review-template.md
For each dimension:
STOP here — wait for user to review and confirm before proceeding.
After user confirms the review file:
📖 PM routing & email template: See references/pm-routing.md
When user returns with PM's reply (filled standard values), proceed to Phase 4.
After user confirms the review file and/or returns with PM's reply:
Look up dimension type in references/dimension-config.md:
File location: sources/dev/NitroUMDP/src/AlwaysOn/PipelineBuilders/Dimension/MappingFiles/DimMapping_{DimensionName}.csv
For each new mapping row from PM reply:
mcp_alwayson-mcp_get_dimension_long_key:
values: ["{raw_value}"]values: ["{col1}", "{col2}", "{col3}"], multiColumn: true-1values: ["{standard_value}"] → get keyPLSCoreData Resource Path column){PLSCoreData_repo_root}/sources/dev/PLSCoreDimensions/Dimensions/{resource_path} (or PLSCoreData root for Product dimension){hash_key}\t{raw_col1}\t...{raw_colN}\t{dimension_key}\t{standard_value}CSV column order — refer to references/dimension-config.md for each dimension's exact column structure.
File location: sources/dev/NitroUMDP/src/AlwaysOn/configs/StandardDimension/IDEAS{DimensionName}.csv
For each new mapping row:
mcp_alwayson-mcp_get_dimension_long_key with values: ["{standard_value}"]
-1{raw_value}\t{standard_value}\t{key}NitroUMDP PR (always needed):
docs/pull_request_template.md for PR templatenpx -y bun .github/skills/telemetry/helix.ts create-pr --title "[Dimension] Add {DimensionName} mappings for {date}" --description-file pr-desc.md
PLSCoreData PR (only for Legacy dimensions with NEW standard values):
Post-deployment verification (after PR merges and pipeline reruns):
.tmp/unmatched-review-*.md output formatsources/dev/Tools/DimensionResourceGenerator/MappingUpdate/DRG.pyhttps://o365exchange.visualstudio.com/O365%20Core/_git/PLSCoreDataThis skill should trigger when user mentions:
| Scenario | User Prompt | Expected Behavior |
|---|---|---|
| Single-column Legacy | "Triage ICM for AggreUnmatched_FeatureActionType" | Query ClickHouse snd_alert_featureactiontype (latest date, no __DUMMY__), single-value hash, update DimMapping CSV |
| Multi-column Legacy | "ICM for unmatched AppPlatform" | Query snd_alert_appplatform, multi-column hash with multiColumn: true, Group B self-lookup, update DimMapping CSV |
| Standard dimension | "Unmatched CopilotSurface values" | Query snd_alert_copilotsurface, update IDEASCopilotSurface.csv |
| DimValidation alert | "Triage ICM for DimValidation_Product" | Recognize as DimValidation (not AggreUnmatched), mark as ❌ investigate, advise checking PLSCoreData |
| Batch processing | "Handle these 12 ICMs: 746675592/746209944/..." | Get all ICM details in parallel, deduplicate dimensions, query ClickHouse for each, generate single review file |
| Non-ODIN team | "Triage ICM 12345 from SRE team" | Skip — not from Triage (ODIN Infra) |
mcp_icm_get_ai_summary often returns empty — use mcp_icm_get_incident_details_by_id as primary methodDimValidation_Product_Activity) are different from AggreUnmatched — they indicate PLSCoreData resource file gaps, not new raw values