heshamfs/materials-simulation-skills/simulation-validator
Claude Code and agent skill by heshamfs/materials-simulation-skills
- community
Checking that the SKILL.md file is still in the repository.
Validate simulations across three stages — run pre-flight checks on configuration files (parameter ranges, required fields, disk space), monitor runtime logs for residual growth, NaN/Inf, and adaptive dt collapse, and perform post-flight validation of results (physical bounds, mass/energy conservation, convergence). Diagnose failed simulations with probable-cause analysis and recommended fixes. Use when preparing to launch a simulation, checking whether a running job is healthy, verifying that finished results are trustworthy, or debugging a crash or blow-up, even if the user only says "my simulation crashed" or "can I trust these results."
Install
npx vskill@latest install heshamfs/materials-simulation-skills/simulation-validatorSKILL.md
Simulation Validator
Goal
Provide a three-stage validation protocol: pre-flight checks, runtime monitoring, and post-flight validation for materials simulations.
Requirements
- Python 3.10+
- No external dependencies (uses Python standard library only)
- Works on Linux, macOS, and Windows
Inputs to Gather
Before running validation scripts, collect from the user:
| Input | Description | Example | |
|---|---|---|---|
| Config file | Simulation configuration (JSON/YAML) | simulation.json | |
| Log file | Runtime output log | simulation.log | |
| Metrics file | Post-run metrics (JSON) | results.json | |
| Required params | Parameters that must exist | dt,dx,kappa | |
| Valid ranges | Parameter bounds | dt:1e-6:1e-2 |
Decision Guidance
When to Run Each Stage
Choosing Validation Thresholds
| Metric | Conservative | Standard | Relaxed | |
|---|---|---|---|---|
| Mass tolerance | 1e-6 | 1e-3 | 1e-2 | |
| Residual growth | 2x | 10x | 100x | |
| dt reduction | 10x | 100x | 1000x |
Script Outputs (JSON Fields)
| Script | Output Fields | |
|---|---|---|
scripts/preflight_checker.py | report.status, report.blockers, report.warnings | |
scripts/runtime_monitor.py | alerts, residual_stats, dt_stats (alerts include NaN/Inf/overflow detection, residual growth, and dt collapse) | |
scripts/result_validator.py | checks, confidence_score, failed_checks, status (PASS / FAIL / INSUFFICIENT_DATA); confidence_score is null when no check ran | |
scripts/failure_diagnoser.py | probable_causes, recommended_fixes |
Three-Stage Validation Protocol
Stage 1: Pre-flight (Before Simulation)
- Run
scripts/preflight_checker.py --config simulation.json - BLOCK status: Stop immediately, fix all blocker issues
- WARN status: Review warnings, document accepted risks
- PASS status: Proceed to simulation
Note:preflight_checker.pyvalidates required keys, numeric ranges,output-directory access, and disk space. It does not evaluate numericalstability (CFL / diffusion-Fourier). For explicit stability gating useskills/core-numerical/numerical-stability/scripts/cfl_checker.py.
Stage 2: Runtime (During Simulation)
- Run
scripts/runtime_monitor.py --log simulation.logperiodically - Configure alert thresholds based on problem type
- Stop simulation if critical alerts appear
Stage 3: Post-flight (After Simulation)
- Run
scripts/result_validator.py --metrics results.json - All checks PASS: Results are valid for analysis
- Any check FAIL: Do NOT use results, diagnose failure
For variational / gradient-flow models (Allen-Cahn, Cahn-Hilliard), add --variational to enforce a strict monotone non-increasing energy check.
Failure Diagnosis
When validation fails:
Conversational Workflow Example
User: My phase field simulation crashed after 1000 steps. Can you help me figure out why?
Agent workflow:
- First, check the log for obvious errors:
``bash python3 scripts/failure_diagnoser.py --log simulation.log --json ``
- If diagnosis suggests numerical blow-up, check runtime stats:
``bash python3 scripts/runtime_monitor.py --log simulation.log --json ``
- Recommend fixes based on findings:
- If residual grew rapidly → reduce time step
- If dt collapsed → check stability conditions
- If NaN detected → check initial conditions
Error Handling
| Error | Cause | Resolution | |
|---|---|---|---|
Config not found | File path invalid | Verify config path exists | |
Non-numeric value | Parameter is not a number | Fix config file format | |
out of range | Parameter outside bounds | Adjust parameter or bounds | |
Output directory not writable | Permission issue | Check directory permissions | |
Insufficient disk space at <path> | Disk nearly full on the output volume | Free up space or reduce output | |
Invalid parameter name | --required name has disallowed characters | Use only letters, digits, _, ., - | |
range max ... must be greater than min | Inverted/degenerate --ranges or bounds | Ensure max > min | |
must be a finite positive number | nan/inf/negative threshold supplied | Pass a finite positive value | |
Log file too large | Log exceeds the 500 MB parse cap | Truncate or pre-filter the log |
Interpretation Guidance
Status Meanings
| Status | Meaning | Action | |
|---|---|---|---|
| PASS | All checks passed | Proceed with confidence | |
| WARN | Non-critical issues found | Review and document | |
| BLOCK | Critical issues found | Must fix before proceeding |
Confidence Score Interpretation
| Score | Meaning | |
|---|---|---|
| 1.0 | All validation checks passed → proceed with confidence | |
| 0.75+ | Most checks passed, minor issues | |
| 0.5-0.75 | Significant issues, review carefully | |
| < 0.5 | Major problems, do not trust results | |
null (status INSUFFICIENT_DATA) | No recognized metrics fields; no check ran — NOT a pass. Inspect the metrics file. |
A requested bound (--bound-min/--bound-max) with no matching field_min/field_max in the metrics is reported as a failed bounds_unverifiable check, never a vacuous pass. For variational/gradient-flow runs, pass --variational (or set "energy_variational": true in the metrics) to enforce a strict monotone non-increasing energy check (energy_monotone); otherwise a weaker energy_net_decrease check is used, which does not detect mid-run spikes.
Common Failure Patterns
| Pattern in Log | Likely Cause | Recommended Fix | |
|---|---|---|---|
| NaN, Inf, overflow | Numerical instability | Reduce dt, increase damping | |
| max iterations, did not converge | Solver failure | Tune preconditioner, tolerances | |
| out of memory | Memory exhaustion | Reduce mesh, enable out-of-core | |
| dt reduced | Adaptive stepping triggered | May be okay if controlled |
Verification checklist
Do not trust a validation verdict until each applicable item below is satisfied with the concrete artifact named. Record these in your summary to the user.
- [ ] Ran
result_validator.py --jsonand confirmedresults.statusisPASS(notINSUFFICIENT_DATA) ANDresults.confidence_score == 1.0; anullscore orINSUFFICIENT_DATAmeans no check ran — treat as unverified, not as a pass. - [ ] Listed
results.checksand confirmed every requested check actually appears (e.g.mass_conserved,bounds_satisfied,no_nan, andenergy_monotone/energy_net_decrease); confirmedresults.failed_checksis empty and contains nobounds_unverifiableentry (which means a requested bound had nofield_min/field_maxto compare against). - [ ] For variational/gradient-flow models (Allen-Cahn, Cahn-Hilliard), passed
--variational(or set"energy_variational": true) soenergy_monotoneis enforced; recorded that the weakerenergy_net_decreasewas NOT relied on, since it cannot detect mid-run energy spikes. - [ ] Recorded the mass drift tolerance used (
--mass-tol, default1e-3) and confirmed it matches the Conservative/Standard/Relaxed column appropriate to the run; did not silently accept the default for a tight-conservation problem. - [ ] Ran
runtime_monitor.py --jsonand recordedresidual_stats(min/max/last) anddt_stats; confirmed there are noalertsfor NaN/Inf/overflow, residual growth above--residual-growth, or dt collapse below--dt-drop. - [ ] Confirmed numerical stability was gated separately via
core-numerical/numerical-stability/scripts/cfl_checker.py(CFL/Fourier limit) —preflight_checker.pydoes NOT evaluate CFL/Fourier and a PASS preflight says nothing about temporal/spatial stability. - [ ] On any
FAILor alert, ranfailure_diagnoser.py --jsonand recorded theprobable_causes/recommended_fixes, rather than reusing the results.
Common pitfalls & rationalizations
| Tempting shortcut | Why it's wrong / what to do | |
|---|---|---|
| "Preflight passed, so the run is numerically stable." | preflight_checker.py checks required keys, ranges, output-dir writability, and disk space only. It does NOT compute CFL/Fourier. Gate stability with cfl_checker.py separately. | |
"result_validator printed a confidence score, so results are good." | An empty or unrecognized metrics file returns confidence_score: null and status INSUFFICIENT_DATA — that is "no check ran", not a pass. Verify recognized fields are present and status == PASS. | |
| "Energy ends lower than it started, so the dissipative run is fine." | The default energy_net_decrease only compares first vs last and misses mid-run spikes. For gradient-flow models use --variational to enforce the strict monotone energy_monotone check. | |
"I asked for bounds and didn't get a bounds_satisfied: false, so bounds hold." | If field_min/field_max are absent the validator emits bounds_unverifiable (a FAILED check), never a vacuous pass. Ensure the metrics file actually carries the field extrema. | |
| "The simulation finished without crashing, so the results are trustworthy." | Run completion is not correctness. Verify mass conservation, energy behavior, physical bounds, and a clean runtime_monitor alert list before using results. | |
| "dt got smaller during the run, so the solver is failing." | runtime_monitor dt-collapse is direction-aware (running-max vs current) and only alerts past --dt-drop; a controlled adaptive ramp is expected. Check the actual dt_stats and whether an alert fired. | |
| "I'll just use the default thresholds." | Defaults (--mass-tol 1e-3, --residual-growth 10, --dt-drop 100) are the Standard column; a conservation-critical problem needs the Conservative tolerances. Pick thresholds for the physics, then record them. |
Security
This is the start of the file. Read the full SKILL.md on GitHub.
Security
- Security scanPassed, 95 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/simulation-workflow/simulation-validator/SKILL.md
Popularity
- Repository stars
- 40
- Repository forks
- 3
- 7-day trend score
- 19
Stars and forks are for the whole GitHub repository, not this skill alone. Refreshed 25 May 2026, 5 months ago.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/heshamfs/materials-simulation-skills/simulation-validator)