<< All versions
Skill v1.0.0
currentLLM-judged scan90/100wdm0006/elote/local-dev
──Details
PublishedOctober 22, 2026 at 02:38 AM
Content Hashsha256:a68359f0be0a76fb...
Git SHA68e016277ab4
──Files
Files (1 file, 3.2 KB)
SKILL.md3.2 KBactive
SKILL.md · 74 lines · 3.2 KB
version: "1.0.0" name: local-dev description: Stand up a working local dev environment for wdm0006/elote — uv + Python 3.11 venv, full test suite, lint, typecheck, and a primary-flow smoke test
local-dev — elote onboarding record
Durable record of the LOCAL-DEV onboarding run. Last verified 2026-09-06. Everything below was executed and observed in the repo sandbox, not inferred.
Environment facts
- Sandbox is Linux; system Python is 3.13 — do not use it for this project. Create the project venv with
uv venv --python=3.11(uv downloads CPython 3.11.16 automatically; matchesmake setup). - uv is not preinstalled —
pip install uvfirst (uv 0.12.10 verified). - No Docker, no databases, no services, no env vars, no ports. The "app" is the importable
elotepackage.
Setup steps (in order)
pip install uvuv venv --python=3.11uv pip install -e ".[dev,datasets]"
Notes:
- Do NOT run
make setupverbatim on Linux — itsbrew install libompline is macOS-only and fails there. The two uv lines above are the portable equivalent. - The
datasetsextra is required for the full suite (CI installs.[dev,datasets]).make install-devinstalls dev only.
Verification ladder (all must pass)
| Step | Command | Observed 2026-09-06 | |
|---|---|---|---|
| Tests | make test | 612 passed, 2 warnings, ~55s | |
| Lint | make lint | All checks passed | |
| Types | make typecheck | Success: no issues in 30 source files | |
| Primary flow | README quickstart (below) | EloCompetitor: Ada > Grace > Linus, GlickoCompetitor: Ada > Grace > Linus — matches README | |
| Serialization | export_state/initial_state, to_json/from_json | Round-trips OK | |
| Example | make run-example EXAMPLE=sample_bout.py | Exit 0 |
Primary-flow smoke script
bash
uv run python - <<'PY'from elote import EloCompetitor, GlickoCompetitor, LambdaArenapairs = [("Ada", "Grace"), ("Grace", "Linus"), ("Ada", "Linus"), ("Grace", "Linus")]for model in (EloCompetitor, GlickoCompetitor):arena = LambdaArena(lambda w, l: True, base_competitor=model)for winner, loser in pairs:arena.matchup(winner, loser)print(f"{model.__name__}: {' > '.join(r['competitor'] for r in arena.leaderboard())}")arena = LambdaArena(lambda w, l: True, base_competitor=EloCompetitor)arena.matchup("a", "b")restored = LambdaArena(lambda w, l: True, initial_state=arena.export_state())assert restored.leaderboard()[0]["competitor"] == "a"print("state round-trip OK")PY
Serialization gotcha: to_json()/from_json() are competitor methods; arenas use export_state() + LambdaArena(initial_state=...). LambdaArena has no to_json.
Known side effects (restore before committing)
make testregeneratesimages/bradley_terry_ratings.pngandimages/colley_matrix_ratings.png.uv runmay rewriteuv.lock.- Clean up with:
git checkout -- images/ uv.lock(.venv/is gitignored).
CI parity
PRs to master run .github/workflows/test-suite.yml (tox py310/py311/py312 with .[datasets], plus ruff lint) and test-docs-build.yml (Sphinx build). A green local make test && make lint && make typecheck on 3.11 is a good pre-push proxy.