agentleFS
sunholo-datasunholo-data/ailang/.agents/skills/eval-gap-finder/SKILL.md

eval-gap-finder

Skill38 starsChanged 8 days agoApache-2.0View on GitHub

Find AILANG vs Python eval gaps and improve prompts/language. Use when user says 'find eval gaps', 'analyze benchmark failures', 'close Python-AILANG gap', or after running evals.

The file

Show its rules and text

We split this skill into the rules it gives an agent

18 rules. About 0 are common, 10 are distinctive, and 8 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈10

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 8

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    After running evals and seeing lower AILANG success

    line 32
  2. Very specific:

    Run full gap analysis on eval results.

    line 39
  3. Very specific:

    Test if an AILANG code example compiles and runs correctly.

    line 65
  4. Very specific:

    Run cheap/fast dev models first.

    line 85
  5. Distinctive:

    If not documented, add:

    line 123
  6. Distinctive:

    CRITICAL: Always test examples before adding to prompt!

    line 130
  7. Distinctive:

    If example fails, it reveals a language gap - create a design doc instead.

    line 140
  8. Distinctive:

    If testing reveals a language limitation:

    line 144
  9. Very specific:

    Create design doc: design_docs/planned/vX_Y_Z/m-<feature>.md

    line 146
  10. Distinctive:

    Add workaround to prompt with note

    line 152
  11. Very specific:

    After updates, re-run evals at the same tier used for analysis.

    line 156
  12. Distinctive:

    Before adding, removing, or proposing fixes for a benchmark, answer:

    line 207
  13. Very specific:

    Does it fill an under-covered tag?: Check ailang eval-matrix --by-tags.

    line 211
  14. Distinctive:

    When prompt changes fix a benchmark, that's a success — but record whether the benchmark also became *saturated*.

    line 214
  15. Distinctive:

    Always test examples before adding to prompt

    line 247
  16. Distinctive:

    Prefer fixing language over prompt workarounds

    line 248
  17. Distinctive:

    Create design docs for language limitations

    line 250
  18. Very specific:

    Update prompt hash in versions.json after changes

    line 251

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Eval Gap Finder

Automates the process of finding and closing the gap between Python and AILANG benchmark success rates. Identifies language limitations, prompt gaps, and missing stdlib functions.

Quick Start

Most common usage:

# User says: "Find eval gaps" or "Analyze benchmark failures"
# This skill will:
# 1. Run evals at the Core tier with dev models (resolved dynamically from
#    internal/eval_harness/models.yml — no hardcoded model lists)
# 2. Compare Python vs AILANG Core pass rates (the headline metric)
# 3. Identify benchmarks where Python passes but AILANG fails, and
#    AILANG-only wins (keep-candidates) vs saturated (demote-candidates)
# 4. Analyze error patterns and categorize them
# 5. Check if gaps are documented in prompt
# 6. Test proposed examples and add to prompt
# 7. Create design docs for language limitations

When to Use This Skill

Invoke this skill when:

  • User asks to "find eval gaps" or "close the Python-AILANG gap"
  • User wants to analyze benchmark failures
  • After running evals and seeing lower AILANG success
  • User says "why is AILANG failing?" or "improve AILANG benchmarks"
  • User wants to identify language limitations

Available Scripts

scripts/run_gap_analysis.sh [eval_dir] [--tier <tier>]

Run full gap analysis on eval results. Accepts --tier (default core); runs a fresh eval via dev_models_csv when no eval_dir is supplied.

# Analyse an existing baseline
.Codex/skills/eval-gap-finder/scripts/run_gap_analysis.sh eval_results/baselines/v0.14.0

# Or run a fresh core-tier eval against dev models resolved from models.yml
.Codex/skills/eval-gap-finder/scripts/run_gap_analysis.sh --tier core

scripts/identify_python_only.sh <eval_dir>

List benchmarks where Python passes but AILANG fails.

.Codex/skills/eval-gap-finder/scripts/identify_python_only.sh eval_results/baselines/v0.14.0

scripts/categorize_errors.sh <eval_dir>

Categorize AILANG failures by error type.

.Codex/skills/eval-gap-finder/scripts/categorize_errors.sh eval_results/baselines/v0.14.0

scripts/test_example.sh <code>

Test if an AILANG code example compiles and runs correctly.

.Codex/skills/eval-gap-finder/scripts/test_example.sh /tmp/test.ail

Workflow

1. Run Evals at the Core Tier With Dev Models

Dev models are resolved from internal/eval_harness/models.yml — never hardcode.

# Source the shared helper to resolve dev models dynamically
. .Codex/skills/_shared/scripts/eval_lib.sh

# Core tier is the headline metric; run it first
ailang eval-suite --models "$(dev_models_csv)" --tier core --output eval_results/gap-analysis

Run cheap/fast dev models first. If Core passes there, larger models should too. Only move to --tier stretch or --tier vision once Core is healthy — those tiers are expected to have mixed results and shouldn't drive prompt changes.

2. Generate Summary and Identify Gaps

ailang eval-summary eval_results/gap-analysis
.Codex/skills/eval-gap-finder/scripts/identify_python_only.sh eval_results/gap-analysis

Key Core-tier metrics (from latest.json aggregates or ailang eval-matrix):

  • AILANG Core pass rate — the headline number (Python is usually ~95%; gap is what we close)
  • Python-only wins — benchmarks we can likely fix with prompt or language work
  • AILANG-only wins — keep-candidates; evidence of AILANG value
  • Saturated (both ≥ 95%) — demote-candidates; not revealing anything

3. Analyze Error Patterns

For each Python-only pass, categorize the error:

CategoryPatternFix Approach
WRONG_LANGModel wrote Python syntaxStronger "NOT Python" in prompt
PAR_001Parse errors (syntax)Add more examples to prompt
Type errorsType unification failuresMay be language limitation
Logic errorsCompiles but wrong outputBetter examples or algorithm
EOF errorsIncomplete code generationModel limitation, not prompt

4. Check Prompt Coverage

For each gap, check if the pattern is documented in the current teaching prompt (find the active file with ls prompts/ | grep -E 'v0\.[0-9]+.*\.md'):

grep -n "pattern" prompts/v0.14.x.md

If not documented, add:

  • Working example to Quick Reference section
  • Entry in "What AILANG Does NOT Have" table (if limitation)
  • New section if pattern is complex

5. Test Examples Before Adding

CRITICAL: Always test examples before adding to prompt!

cat > /tmp/test.ail << 'EOF'
module benchmark/solution
-- Your example code here
EOF
ailang run --caps IO --entry main /tmp/test.ail

If example fails, it reveals a language gap - create a design doc instead.

6. Create Design Docs for Language Gaps

If testing reveals a language limitation:

  1. Create design doc: design_docs/planned/vX_Y_Z/m-<feature>.md
  2. Document:
    • Minimal reproduction
    • Error message
    • Workaround (for prompt)
    • Proposed fix
  3. Add workaround to prompt with note

7. Track Improvement

After updates, re-run evals at the same tier used for analysis. Dev models come from models.yml, so the command stays stable as the roster evolves:

(. .Codex/skills/_shared/scripts/eval_lib.sh && \
  ailang eval-suite --models "$(dev_models_csv)" --tier core --output eval_results/gap-analysis-v2)

Compare:

  • Core pass-rate improvement (Python vs AILANG gap)
  • Which previously Python-only benchmarks now pass in AILANG
  • Any regressions (previously-passing AILANG benchmarks now failing)
  • Whether saturated/AILANG-only sets shifted — a sprint that adds three new saturated benchmarks is less valuable than one that adds one AILANG-only win

Tier-First Workflow (v0.14.0+)

The v0.14.0 tier system lets us focus gap closing on where it matters. Walk through this loop every time, and skip any step that doesn't apply.

  1. Run at --tier core first. Core is the headline number. If Core is clean, stretch failures are expected and usually not worth prompt changes.
  2. Use DetectAILANGOnlyWins to identify keepers. Benchmarks where AILANG beats Python by ≥10pp are the skill's value evidence — protect them from regressions.
    ailang eval-matrix --ailang-wins
  3. Use DetectSaturation to identify demotion candidates. Benchmarks where both AILANG and Python hit ≥95% tell us nothing. They're not regression guards — a broken change will hit many benchmarks. Demote them to free up run time for signal.
    ailang eval-matrix --show-saturated
  4. Close gaps in Core before touching Stretch. A failing Stretch benchmark is allowed; a failing Core benchmark means we regressed on the headline metric.
  5. Check tag coverage. Gaps clustered in one tag (e.g., 4/5 failures in recursion) probably signal a language or prompt problem, not per-benchmark bugs.
    ailang eval-matrix --by-tags

This matches the skill's rotation philosophy below: close Core gaps, demote the obvious, protect the wins.

Benchmark Rotation Philosophy

The eval suite is curated, not accumulated. The goal is high-signal benchmarks — ones that tell us something about relative performance across AILANG, Python, and agent harnesses. Time-series continuity is secondary; a small core of stable benchmarks is retained for regression guarding, but the rest should rotate as signal changes.

Before adding, removing, or proposing fixes for a benchmark, answer:

  • Is it saturated? Both Python ≥ 95% AND AILANG ≥ 95% → demote to stretch or remove.
  • Is it an AILANG-only win? AILANG ≥ Python by ≥ 10pp → keep and cite as value evidence.
  • Does it fill an under-covered tag? Check ailang eval-matrix --by-tags; a new benchmark in a thin tag is more valuable than one more in a saturated tag.

When prompt changes fix a benchmark, that's a success — but record whether the benchmark also became saturated. If yes, it's done its job; rotate it out.

Error Categories Reference

ErrorMeaningFix
WRONG_LANGWrote Python insteadPrompt emphasis
PAR_001Parser errorSyntax examples
PAR_UNEXPECTED_TOKENWrong tokenSyntax examples
TC_*Type check errorType examples or design doc
"undefined variable"Missing import/letrecDocument pattern
EOF errorsIncomplete codeModel limitation
logic_errorWrong outputAlgorithm examples

Resources

Gap Analysis Template

See resources/gap_analysis_template.md for structured analysis format.

Common Patterns

See resources/common_patterns.md for frequently encountered gaps.

Progressive Disclosure

This skill loads information progressively:

  1. Always loaded: This SKILL.md file (workflow overview)
  2. Execute as needed: Scripts in scripts/ directory
  3. Load on demand: Resources for templates and patterns

Notes

  • Always test examples before adding to prompt
  • Prefer fixing language over prompt workarounds
  • Track improvements with before/after eval runs at the same tier
  • Create design docs for language limitations
  • Update prompt hash in versions.json after changes
  • Dev models come from internal/eval_harness/models.yml via .Codex/skills/_shared/scripts/eval_lib.sh — never hardcode model IDs
  • The eval suite is curated, not accumulated — see Benchmark Rotation Philosophy above

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.