blob: d746652d7be508a82293d72b2f1da1b937cb0749 [file] [view]
# Skia Task Failure Analysis
This document contains instructions for agents to perform efficient and accurate
causal analysis of Skia task failures.
## General Rules
- Do **not** rely on task creation timestamps to establish chronological order.
Tasks may be backfilled or retried and therefore the only reliable source is
the Git commit history.
- Do **not** attempt to manually correlate large JSON dumps of raw database
objects.
- Do **not** try to use local Git history or search the local checkout unless
explicitly asked to do so.
To perform this analysis, employ a hierarchical approach:
## Phase 1: Find Failing Tasks
As the coordinator agent, your job is to identify which tasks are broken by
which commits.
Retrieve the recent task results, eg.
`sk agent tool get_task_health_report --limit=35 --revision=main --repo=https://skia.googlesource.com/skia.git`
**Result Format:** This returns a data set containing the following:
- **`Commits`:** The authoritative, chronologically ordered list of commits
(index 0 is newest).
- **`Task Results`:** A series of results for tasks whose result has changed
within the given commit range. Each line contains:
- **`commit`:** The commit hash at which the task ran.
- **`status`:** The result (`SUCCESS`, `FAILURE`, `MISHAP`).
- **`id`:** The database ID of the task.
## Phase 2: Find Culprit Commit(s)
To find the culprit commit(s), you MUST delegate the causal analysis for each
task from Phase 1 to a separate sub-agent (the "Task Specialist").
1. Invoke a sub-agent (e.g., `invoke_agent(agent_name="generalist", ...)`).
2. **Prompt the sub-agent with:**
- The specific section for a single task from the health report.
- **Instruction:** "Determine whether the failures of this task are _flaky_
or _persistent_. If _persistent_, find the culprit commit or range of
potential culprit commits. Return a report with your classification, any
culprit commits, and a rationale for your decision. You MUST base your
decision on the data presented to you. Do NOT attempt to collect any more
data by reading files, running commands or MCP server tools, etc."
## Phase 3: Aggregate
Once all Task Specialists have returned their findings, aggregate their reports.
- If multiple specialists point to the same culprit commit or overlapping commit
range (e.g., "Commit X broke both Task A and Task B"), the failures may be
related.
- If two or more tasks started failing within overlapping commit ranges and
those tasks look similar, you may be able to use the intersection of those
commit ranges to futher narrow down the culprit or isolate it altogether.
- Use the commit subjects found in Phase 1 to make an educated guess about which
suspect commit is most likely to be the culprit.
## Phase 4: Refinement and Further Analysis
If the results from Phase 3 are definitive, you might be able to stop there.
However, depending on what you were originally asked to do, you may need to
investigate further. Follow the instructions below.
### Persistent Failures
If you found a persistently-failing task, your first priority is to single out
the commit which caused it. If a single culprit has not already been found by
this point, start by retrieving the commit messages for the suspect commits. The
`gerrit_get_commit_message` tool from the pnd MCP server will be your best bet.
If that's not available, you can try using `git log` locally but you may not be
inside of a checkout of the correct repository. If all else fails, try using the
Gitiles HTTP API.
If the culprit is not obvious by correlating the name(s) of the failing
task(s) with the commit message, invoke a sub-agent to run
`sk agent workflow task_drilldown` and follow the instructions it returns.
**IMPORTANT:** Explicitly instruct the sub-agent that this is a log analysis
task and it MUST NOT attempt to read source code or debug the issue. Have the
sub-agent report the findings back to you so that you can aggregate them and
report them to the user.
### Flaky Tasks
These are generally lower priority than recent persistent failures, but they may
warrant investigation based on the original prompt. If so, invoke a sub-agent to
run `sk agent workflow task_drilldown` and follow the instructions it returns.
**IMPORTANT:** Explicitly instruct the sub-agent that this is a log analysis
task and it MUST NOT attempt to read source code or debug the issue.
## Phase 5: Report to the User
This somewhat depends on what was originally requested of you, but generally:
- **Active Persistent Failures:** For any tasks still failing at their most
recent run, group the failures by root cause and report the task name(s),
culprit commit (or suspect commit range), any error message you were able
to extract, and any summary or recommendations you were able to derive.
- **Resolved Persistent Failures:** Leave these out unless the user requested
to see even the resolved failures. If so, report them in the same way as
persistent failures.
- **Flaky Failures:** If you investigated these deeply in Phase 4, group them
by root cause or similar error message and report what you found. Otherwise,
simply present a list of the flakily-failing task names.