agentsclimarketplace

Source command megaminx eval v

Skill Erlemar/cayley-puzzles/.agents/skills/source-command-megaminx-eval-v

Strat-5 acceptance gate for a megaminx V model. Runs 51-pid stratified eval at beam 65k, compares to m05 baseline (50/51 / mean 89.4), reports pass/fail.From its SKILL.md

Install
npx -y skills add Erlemar/cayley-puzzles --skill source-command-megaminx-eval-v

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

2 things to look at

  • no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
  • 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

SKILL.md

4.8 KB, ~1.5k tokens by cl100k_base, as published. Nobody here has run it

source-command-megaminx-eval-v

Use this skill when the user asks to run the migrated source command megaminx-eval-v.

Command Template

/megaminx-eval-v

Standard strat-5 evaluation for a candidate V model. Encapsulates the canonical "is this V better than m05?" check we run after every retrain or recipe ablation.

Usage

/megaminx-eval-v <CHECKPOINT_PATH>

If the checkpoint is omitted, evaluate the production V (m05_bellman_warm) as a sanity check on the eval pipeline itself.

Acceptance gate (binding for any new V)

A new V counts as "an improvement worth trusting" only if all hold:

  1. Strat-5 solve count: ≥ +3 puzzles vs m05 on --stratified 5 --strat-seed 0 (51 puzzles).
  2. Path quality: mean model_avg ≤ 0.95 × m05's 89.4 = ≤ 84.9.
  3. No bucket regresses by more than 1 solve.

Failing any single criterion = not acceptable. If 2 of 3 pass, that's a TIE (or noise) — re-validate on a second seed (--strat-seed 1) before committing.

Execution

CKPT="${1:-megaminx/models/m05_bellman_warm/epoch_0499.pt}"
NAME="$(basename $(dirname $(dirname $CKPT)))_strat5"
OUT="megaminx/submissions/${NAME}.csv"
LOG="megaminx/submissions/${NAME}.log"

# Verify checkpoint exists
if [[ ! -f "$CKPT" ]]; then
    echo "ERROR: checkpoint not found: $CKPT"
    exit 1
fi

echo "=== Strat-5 eval ==="
echo "  checkpoint: $CKPT"
echo "  output:     $OUT"
echo ""

# Always launch with python -u to avoid stdout buffering when piped to nohup later
PYTHONUTF8=1 .venv/Scripts/python.exe -u megaminx/scripts/03_solve.py \
    --checkpoint "$CKPT" \
    --out "$OUT" \
    --beams 65536 --max-steps 150 \
    --stratified 5 --strat-seed 0 \
    --bf16 \
    2>&1 | tee "$LOG"

# Optional hard-tail variant — strat-5 on buckets 7-10 only (16 puzzles, where
# the model actually fails). Use when full strat-5 saturates on solve count.
# Add `--strat-buckets 7,8,9,10` to the command above.

# After completion, parse the final summary lines and compare to baseline
echo ""
echo "=== Acceptance gate vs m05 baseline (50/51 / mean 89.4) ==="
.venv/Scripts/python.exe -c "
import re, sys
from pathlib import Path
log = Path('$LOG').read_text()
m_solves = re.search(r'solved_by_model.*?(\d+).*?fallback.*?(\d+)', log)
m_total = re.search(r'total_moves.*?([\d,]+)', log)
m_buckets = re.findall(r'(\d+-\d+)\s+\d+\s+(\d+)/(\d+)\s+([\d.\-]+)', log)
if not m_solves or not m_total:
    print('Could not parse log; manual review required.')
    sys.exit(1)
solved = int(m_solves.group(1))
fallback = int(m_solves.group(2))
total_moves = int(m_total.group(1).replace(',', ''))
n_total = solved + fallback
# Mean model_avg over solved-by-model pids only:
solved_avgs = [float(b[3]) for b in m_buckets if int(b[1]) > 0 and b[3] != '-']
mean_avg = sum(solved_avgs) / max(len(solved_avgs), 1) if solved_avgs else 999
gate1 = solved >= 50 + 3        # >=+3 vs m05's 50
gate2 = mean_avg <= 84.9         # 0.95 * m05's 89.4
print(f'  solves: {solved}/{n_total} (m05: 50/51, +{solved - 50} delta)')
print(f'  mean model_avg: {mean_avg:.2f} (m05: 89.4, target <=84.9)')
print(f'  total_moves: {total_moves:,}')
print(f'  gate 1 (>=+3 solves): {\"PASS\" if gate1 else \"FAIL\"}')
print(f'  gate 2 (mean <=84.9): {\"PASS\" if gate2 else \"FAIL\"}')
print()
if gate1 and gate2:
    print('  >>> ACCEPTANCE GATE PASSED. Promote to production candidate.')
elif solved == 0:
    print('  >>> CATASTROPHIC FAIL. V is broken. Investigate recipe.')
else:
    print('  >>> NOT ACCEPTABLE. Either tie or regression vs m05.')
"

When to use

After every:

  • Bellman retrain or recipe ablation (m17, m22, m26..., m34, ...)
  • New V architecture trial (m18 transformer, m26b wider, ...)
  • New training data mixin (BFS-d6 anchoring, solver-trace mining, ...)
  • New optimizer (Muon experiments, ...)

Don't use for:

  • Inference-side mechanisms (sym-ensemble, qshort, beam tuning) — those need full-1001 to capture per-pid min-merge effects.
  • Q-shortlister recall checks — different metric, see 09_eval_q_recall.py (target ≥99% at chosen alpha).

Common results to expect

ModelStrat-5 resultNotes
m05 (production)50/51 / 89.4Reference baseline
m17 / m22 / m26 / m26b / m27 / m2851/51 / 91-97Cluster ceiling — same recipe family
m2951/51 / 88.98Only sub-89 result; n_back=4 walks
m31 (rotation aug)50/51 / 95.76Regresses — orbit dilution at 6M
m34 (soft-min + Polyak + solver-trace)0/51Catastrophic — recipe broke V

If a new model lands at 0/51, the recipe is fundamentally broken (not just a tuning issue) — usually a label-scale mismatch, target-net desync, or loss-formulation bug. Don't retrain; ablate.

What ships with it

Read from the repository

Just SKILL.md. No reference files, no scripts.

Keep looking

Skills are one crate of 325,949. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.