Skill v1.0.0
currentAutomated scan100/100version: "1.0.0" name: ansi-analysis description: Analyze Gluten ANSI-mode test results (run dev/verify-ansi-expressions.sh, parse JSON tracker output, produce root-cause analysis and fix recommendations). Trigger on user requests like "analyze ANSI tests", "run ANSI matrix", "why is this ANSI test failing".
ANSI Test Analysis Skill
Step 0 — MUST READ FIRST: shared analysis prompt
Before doing anything else, read the shared prompt that defines the analysis output format and reference source locations:
.github/skills/ansi-analysis/shared.md
This file is the single source of truth — the same content is consumed by the CI Python pipeline (.github/skills/ansi-analysis/analyze-ansi.py --ai-analysis). Your output structure, reference source locations, and self-investigation steps MUST follow it. If the file is missing, STOP and tell the user the repo is in a broken state.
Step 1 — Decide entry point
Ask the user (or infer from request):
- Run new tests? → Step 2
- Re-analyze existing JSON in
target/ansi-offload/? → Step 3 - Diagnose a single test failure? → Step 4
Step 2 — Run the verification script
./dev/verify-ansi-expressions.sh <category> <spark41|spark40|all> [--clean]
Categories: cast | arithmetic | collection | datetime | math | decimal | string | aggregate | errors | all
Logs: /tmp/ansi-matrix/latest/ (bash logs). JSON: target/ansi-offload/*.json (written by GlutenExpressionOffloadTracker.scala, this is the structured input for analysis).
Notes from prior runs:
- Use
allmode in single JVM (~28 min) when full coverage is needed - After rebase / branch switch, run
./dev/builddep-veloxbe-inc.shfirst to refreshlibvelox.so/libgluten.so
Step 3 — Analyze JSON results
Two options:
3a. Local AI orchestration (this skill, recommended for interactive review)
- Read
.github/skills/ansi-analysis/shared.md(Step 0) - List
target/ansi-offload/*.json - Read each JSON; extract: suite name, total/passed/failed/ignored counts, per-test
failCause - Apply the analysis template from shared.md verbatim (sections, tables, constraints)
- For each failure: extract Velox file:line from
failCause, read those C++ files, verify root cause - Always grep
isAnsiSupportedinep/build-velox/build/velox_ep/velox/functions/sparksql/specialforms/SparkCastExpr.cppwhen the failure involves Cast — most NO_EXCEPTION/Cast failures stem from the small whitelist there - Output the markdown report
3b. Python script (CI / batch)
python3 .github/skills/ansi-analysis/analyze-ansi.py \--json-dir target/ansi-offload/ \--ai-analysis \--output ansi-report.md
The script loads the same shared prompt and calls the GitHub Models API.
Step 4 — Single-failure diagnosis
When the user pastes one failing test:
- Locate its JSON entry under
target/ansi-offload/ - Apply the self-investigation steps from shared.md (extract Velox file:line, check
isAnsiSupported, cross-checkwithAnsiEvalModein the shim) - Output: Symptom / Root Cause / Fix Point / Representative Tests / Estimated Impact
Step 5 — Optional PR comment
If the user wants the report posted to a PR:
gh pr comment <pr-number> --body-file ansi-report.md
(or use the GitHub MCP server tool when available)
Environment requirements
For Step 2 (running tests):
SPARK_ANSI_SQL_MODE=trueSPARK_TESTING=trueSPARK_SCALA_VERSION=2.13- JVM:
-Dspark.gluten.sql.ansiFallback.enabled=false - Maven profile: include
-Pdelta
What NOT to do
- Do NOT invent reference paths or line numbers — always grep / verify
- Do NOT skip Step 0 — drift between shared.md and your output is the failure mode this skill is designed to prevent
- Do NOT bypass the shared prompt by writing your own analysis structure