simulation-failure-triage — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited simulation-failure-triage (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Classify common simulation failure signatures and return immediate actions, retry ladders, and stop conditions.
| Input | Description | Example |
|---|---|---|
| Code | Simulation code | LAMMPS, VASP, MOOSE, QE |
| Stage | Setup, runtime, postprocess | runtime |
| Symptoms | Failure signs | nan,pressure-blowup |
| Log text or file | Error evidence | Lost atoms, ZBRENT |
| Recent change | Last modified setting | larger timestep |
scripts/failure_triage.py emits:
likely_causesimmediate_actionsretry_ladderstop_conditionsevidencepython3 skills/robustness/simulation-failure-triage/scripts/failure_triage.py \
--code LAMMPS \
--stage runtime \
--symptoms nan,pressure-blowup \
--recent-change "increased timestep" \
--jsonInvalid stages or oversized log files stop with exit code 2. Unknown symptoms are retained as custom evidence.
This skill gives first-response triage. It does not guarantee that a failed simulation can be repaired.
immediate_actions item) so the original failure is reproducible.evidence.log_excerpt (first 500 chars, original casing) captures it; re-run with --log-file/--log-text if the excerpt misses the root signature.likely_causes entry with its symptom, category, and first_action, and verified no real signature landed in the category: custom bucket because its keyword was absent from LOG_HINTS/PATTERNS.crash (not corrupted-output), and an OOM/bad_alloc/oom-kill maps to out-of-memory (not incomplete-run).retry_ladder strictly one change at a time, recording the single parameter changed and its effect at each rung (including the memory rung when memory-bound).stop_conditions entry and halted the retry loop instead of stacking arbitrary stabilizing tweaks when any condition is met (e.g. unverifiable potential/pseudopotential, results dependent on arbitrary stabilizers).simulation-validator skill for conservation / physical-bounds / "can I trust these results" checks rather than declaring success here.| Tempting shortcut | Why it's wrong / what to do |
|---|---|
| "The last line of the log is the error, so I'll fix that." | The final crash line is often a downstream symptom; the script's second immediate_actions item exists because the FIRST warning/error is the real cause. Capture it in evidence.log_excerpt and triage from there. |
| "It segfaulted, so it's a corrupted-output / disk issue." | A crash (SIGSEGV/signal 11/core dumped) is a memory-fault category pointing at out-of-bounds/null-pointer/ABI bugs and a gdb/valgrind/ASan repro — not I/O. Do not treat it as corrupted-output. |
| "The job got killed, so I'll just bump the walltime." | killed alone is genuinely ambiguous and stays incomplete-run; an OOM signature (bad_alloc, oom-kill, "out of memory") is a distinct out-of-memory cause needing memory reduction / --mem increase, not more walltime. |
| "I'll lower dt AND change the preconditioner AND adjust the barostat to get it running." | The retry ladder is one controlled change per rung; stacking fixes makes results "depend on arbitrary stabilizing changes" — an explicit stop_conditions trigger. Change one parameter, record its effect, then proceed. |
| "I added the missing PAIR coeff path and it ran, so the physics is fine." | A clean run after fixing missing-potential/bad-pseudopotential resolves setup, not validity; species mapping, valence, or functional may still be wrong. Run completion is not correctness. |
| "It runs now, triage is done." | Triage only restores execution. Conservation, physical bounds, and convergence are out of scope here — defer to simulation-validator before trusting any number. |
--stage is checked against a fixed allowlist (setup, runtime, postprocess, unknown); any other value exits with code 2.--code must be non-empty and at most 100 characters; an empty or oversized value exits with code 2.--symptoms are split on commas and capped at 50 entries, each at most 100 characters; exceeding either limit exits with code 2.custom evidence rather than silently dropped.--log-file path; when omitted, the script reads no files.stat; if it exceeds the 10 MB cap (MAX_LOG_SIZE) the script raises and exits with code 2. Both file content and --log-text are then truncated to 10 MB.--json, otherwise plain text).allowed-tools is Read, Bash, Write, Grep, Glob.Bash runs only the bundled scripts/failure_triage.py.Read opens the skill's own files and a user-provided log to inspect failure evidence; Grep/Glob locate log files, inputs, and prior output; Write records triage notes or preserved evidence at the user's direction. The bundled script itself does not write files.eval/exec and no dynamic code execution; log text is treated as data and never run.--json), making results machine-checkable.code and each symptom.references/failure_patterns.md for common failure signatures and retry ladders.Verification checklist (evidence-based checks tied to failure_triage.py outputs — preserved-evidence set, first-error excerpt, category-mislabel guards, one-change retry ladder, stop conditions, simulation-validator handoff) and Common pitfalls & rationalizations table covering last-line-only triage, segfault-as-I/O, OOM-vs-walltime, stacked stabilizing changes, and "it ran so it's valid".failure_triage.py JSON output via script_checks (specific category/first_action strings, log-hint symptom inference, fixed retry-ladder/stop-condition text, recent-change immediate action), so the suite measures the skill's actual output rather than generic triage knowledge.out-of-memory and crash (segfault) classifications; segfaults and OOM are no longer mislabeled as I/O or interrupted-execution. Preserve original-case log excerpt. Add input-validation caps (symptoms, code length). Sharpen description to defer deep validation to simulation-validator. Fix missing-potential eval token.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.