# Aero QA Stretch Solvers

> QA checklist for the TACS and SU2 stretch cross-checks in open-air. Use when editing or reviewing src/openair/structures/tacs_backend.py, _tacs_static.py, src/openair/validation/su2_backend.py, tacs.json, su2.json, or Gmsh meshing.

- Skill: `elodin-sys/aero-qa-stretch-solvers` (Agent Skill)
- Install (CLI): `npx skillmds@latest add elodin-sys/aero-qa-stretch-solvers`
- Raw SKILL.md: https://api.skillmd.com/api/skills/elodin-sys/aero-qa-stretch-solvers/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: elodin-sys (https://skillmd.com/u/elodin-sys)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/elodin-sys/aero-qa-stretch-solvers

---


# Stretch solver QA (TACS, SU2, Gmsh/meshio)

Read `docs/guidebook/05-tacs.md`, `06-gmsh-meshio.md`, `07-su2.md`; execute
their "Check your work" lists.

Non-negotiables for this repo:

- Stretch results are calibration data, never design evidence. They cannot
  pass or fail a prototype; they can only flag model disagreement.
- TACS: check `analysis.backend == "tacs"` (else the analytic fallback ran);
  KS failure < 1 means margin; hand-check shell mass = area × t × rho.
  Runs inside micromamba env `tacs` (`MAMBA_ROOT_PREFIX=tools/mamba`).
- SU2: `ok` means ran+parsed; **`converged`** (rms density drop) is the
  separate verdict — never conflate them. CFD Mach is floored at 0.30
  (compressible Euler is stiff below); the JSON records requested vs CFD
  Mach. Prebuilt 8.5 accepts only `MESH_FORMAT= SU2|CGNS`; `MUSCL_FLOW= NO`
  with JST.
- Gmsh meshes must carry physical groups for every boundary; verify marker
  element counts cover the boundary before blaming a solver.

