Working with issues
Issues and recipes
One fault, across every run it appeared in, with what a fix needs.
From finding to issue
A finding gets a fingerprint built from what identifies the fault (its kind, its place, its channels), not from the run. The same fault in a later run lands on the same issue, so you see how often it came back and on which machines.
States
| State | Means |
|---|---|
| Open | Found and not yet worked on. |
| In repair | Someone claimed a repair: a person in the app, or a coding agent over MCP, with what changed. |
| Resolved | A verification passed. If the fault comes back, the issue opens again as regressed. |
| Ignored | Seen and set aside. It stays ignored when it comes back. |
The recipe
Every finding carries the same nine fields. A field that could not be filled says what is missing instead of disappearing.
| Field | What it holds |
|---|---|
| 1. Symptom | What the machine did. |
| 2. Causal chain | How that follows from the cause. |
| 3. Condition | The measured numbers this rests on. |
| 4. Change class | What kind of change is needed. |
| 5. Files and lines | Where to make it. |
| 6. Reference pattern | What the corrected form looks like. |
| 7. Acceptance criterion | The test that rejects a partial fix. |
| 8. Blast radius | What else the change touches. |
| 9. Effort | What it costs to do. |
trialone diagnose --json writes the recipes as JSON with exactly these fields, which is what the website shows and what a coding agent reads.
The incident page
A run and its issue share one page. At the top: the machine at the time (commit, configuration, devices, and what changed since the previous run), then four answers (what happened, why, the fix, what to check first), then the minute around the finding for every channel involved. All channels of the run can be scrubbed below.
Sharing
From an issue you can open a GitHub issue, share it to Slack or Discord, and open the recording in Foxglove when the machine uploads its recordings. Connect these under Settings, Integrations.
Something missing or wrong here? Tell us.