Diagnoses GitHub Actions runs for the ASIM ingestion-time parser validation workflow. Use when a user provides a run URL or ID, asks why an ITP target was missed or failed, or needs exact evidence-based remediation without automatic code changes.
95%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
Low
Low-risk findings worth noting
Diagnose the Run ASIM ingest-time parser validation workflow from its run
metadata, job timing, artifacts, logs, and the exact pull-request revision that
was tested. Explain the root cause and recommend precise fixes. Do not edit,
commit, push, rerun, deploy, or modify Azure resources unless the user
explicitly asks in a later request.
Required:
Optional:
Use Azure/Azure-Sentinel as the repository unless the user explicitly names
another repository.
gh auth status succeeds.Use evidence in this order:
report.json, which provides the canonical ordered stage result.validation-result.json and nested Azure/provider diagnostics.static-validation.json, prepared-fixture.json, target.json,
discovery.json, and matrix.json.Do not diagnose from the PR's current Files changed view until comparing its current head SHA with the run head SHA. If they differ, state the timing difference and inspect the run SHA. A later fix must never be described as content that the earlier run tested.
Run:
.\.github\skills\asim-itp-validation-troubleshooter\scripts\Get-AsimItpValidationDiagnostics.ps1 `
-Run "<run URL or ID>"Optional parameters:
-Repository "Azure/Azure-Sentinel"
-Attempt <attempt number>
-OutputDirectory "<directory outside the repository>"
-IncludeSuccessfulTargetLogsAn /attempts/<N> run URL is recognized automatically. For an older attempt,
the collector uses attempt-specific metadata and logs and skips automatic
artifact download rather than mixing in artifacts from the latest attempt.
The script creates:
run.json — run, PR, job, step, and timing metadata.artifacts\ — downloaded asim-ingestion-* artifacts when available.logs\ — discovery/report logs plus failed or cancelled target logs.diagnostics.json — normalized diagnostic evidence.diagnostics.md — concise stage and failure summary.If artifact download fails because artifacts expired or were never produced, continue with job logs and explicitly state the evidence limitation.
Verify run identity
Inspect job and step timing
Inspect discovery
Compare changedPaths, changedParserPaths, indexErrors, and targets.
Validate exact, case-sensitive paths:
Parsers/ASim<Schema>/IngestTimeParsers/<Parser>.yamlZero targets with changed sample data commonly means a misspelled or mis-cased parser directory.
Inspect each target in report order
discovery
counterpart
template
fixture
filtering
parserDcr
parserIngestion
schema
data
*rawDcr
*rawIngestion
*qtpExecution
*parity
cleanupThe * stages are optional replay/parity stages. Use the artifact status,
not the asterisk alone, to determine whether a failure is required,
warning-only, blocked, skipped, or not run.
Find the earliest causal failure
InvalidTransformQuery,
InvalidStream, and exact KQL line/column diagnostics.Map the failure to source
ParserQuery from the exact run artifact.project, project-rename, extend,
parsing operators, and final projection.prepared-fixture.json.Recommend an exact fix
Read failure-catalog.md for stage semantics, common signatures, and remediation patterns.
EventVendor and EventProductFixture discovery requires one non-empty, filename-safe literal assignment for each field. The resolver examines every assignment. An earlier dynamic assignment still fails even when a later literal overwrites it:
| project-rename EventProduct = DeviceProduct
| extend EventProduct = "FortiGate"Recommend removing the dead dynamic assignment or otherwise making every assignment the same literal. Explain that this is conservative regex-based validation, not KQL last-write-wins analysis.
Report the exact required path from discoveryErrors or
fixtureResolution.path. Do not invent a differently cased vendor/product
name. The required format is:
Sample Data/ASIM/<EventVendor>_<EventProduct>_<Schema>_<SourceRawTable>_IngestedLogs.csvCheck whether an earlier project-rename or project removed the original
column:
| project-rename EventOriginalUid = CrowdStrikeId
| extend EventUid = CrowdStrikeIdAfter the rename, recommend using EventOriginalUid or creating EventUid
before the rename.
Use step timestamps and the exact git fetch command. If checkout uses
fetch-depth: 0 and fetches refs/heads/* plus refs/tags/*, identify the
full-repository fetch as the bottleneck. Do not attribute that time to Python
target discovery.
Always report both SHAs and the later commit time. Explain which findings are already fixed and which remain at the current head.
Lead with the causal outcome, then provide:
**Run:** <ID>, attempt <N>, head <SHA>
**Target:** <target ID or "discovery">
**Failure point:** <stage and step>
| Stage | Status | Evidence |
|---|---|---|
| ... | ... | ... |
**Root cause:** ...
**Exact fix:**
```kusto
<minimal correction when applicable>
```
**Consequences:** <stages skipped or blocked because of the root failure>For multi-target runs, use one compact row per target followed by details only for failed targets. Do not repeat large artifact payloads or fixture rows.
Azure/Azure-Sentinel
2985095
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.