Repository navigation
Tutorials: a first tactic, a first planner, debugging a moment, the field day rewritten; worktree and one-match fixes - #154
Merged
Conversation
Its colours claimed to match the dashboard but were still the dark theme's. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- first_tactic.md, part 2 of first_strategy: rookie gets ShadowAndMarkTactic for defence, a partitioner, a memory that stops the chaser switching, pure tests of both decisions, and the rule for moving a tactic into tactics/. - debug_a_moment.md: the open keeper bug (pendulum_vs_wolfpack, 3:54) from the replay, through replay_trace's numbers and goalkeep.py's 0.3 m/s threshold, to a test that fails; the fix is left to the reader, with what it must not break. With a GIF of the moment. - test_tutorial_code.py (was test_first_strategy_doc.py) runs every tutorial's code as pasted, its tests included, and fails once the keeper bug is fixed, so the page gets updated. - .gitignore keeps tutorial GIFs; evaluate.py's pointer to the tutorial's evaluation step fixed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…sl-vision field_day.md was the reference written as steps: every flag, number and exception inline. It is now short numbered steps in order (before the day, then on the day: network, vision, radio, one check, a drill, measuring a robot, after the day) and a table of what to do when something goes wrong. Vision is either ssl-vision or the team's TagVision; our side is the same for both. The detail moved to docs/real_robots.md, "Field-day reference": camera settings, the radio and lids, the demo panel, what calibrate measures and writes, --check, kicker charge. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…us as the fix to try A test match showed robots swapping between attack and defence three or four times a minute. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…linked
pixi 0.83 refuses an environment reached from another directory ("the environment directory has
moved"), so the .pixi symlink left `pixi run` unusable in every worktree: an agent following
AGENTS.md or the change-strategy skill could run no test or lint there. The script now replaces
that link with `pixi install` (about 2 min; 120 MB of real disk, the rest hardlinks into pixi's
cache), and links replays/ to the main checkout's, which the skill asked for by hand.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
replay_name took the path from REPLAY_BASE_PATH to the run folder without resolving either, so in a worktree whose replays/ links to the main checkout's, a run folder given by its real path gave a path that climbed out of the link: a test match's replay landed in ~/replays (2026-11-13). Both are resolved now; the test pins that case. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
No tool wrote a replay of a single match (debug_match.py and `pixi run main` write none), so the agent checking the tutorial's strategy had to script run_match itself. `pixi run python -m tools.evaluation.match A B [--duration 120] [--out DIR]` prints the score and the replay's path. AGENTS.md, docs/tools.md and the skills describe the new worktree setup. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The benchmark only accepted fpp, dwa and trajsample, so a new planner meant editing the benchmark as well as registering it. --schemes now takes any name in CONTROL_SCHEME_MAP; the default run is unchanged, and the three defaults keep their colours in the figures. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
beeline drives straight at its target, braking in time: faster than fpp on an open run, and it collides in 9 of the 29 scenarios. Steering round the first robot in the way brings that to 4, and breaks narrow_passage, which passed before: the reader's exercise. The page's code and its tests run in test_tutorial_code.py. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
find_bugs for what broke, the goals conceded on the dashboard for what cost goals; the explain-result skill for a whole evaluation. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
New members can now write a first strategy; these pages take them to the next steps: a tactic of their own, finding why a robot did something wrong, a motion planner, and a field day. An agent that followed the
change-strategyskill to check the tutorial also found three tooling problems, fixed here.Tutorials
tutorials/first_tactic.md(part 2 of first_strategy):rookiegetsShadowAndMarkTacticfor defence, a partitioner (split), a memory that stops the chaser job flipping (pick_chaser), pure tests of both, and the rule for moving a tactic intotactics/. A test match (rookie vs wolfpack, 120 s, 0-0): its two defenders stayed a median 1.6-1.8 m from goal; they also swapped with attackers 3-4 times a minute, which the page now sets as the reader's next exercise (previous).tutorials/debug_a_moment.md: the open keeper bug (pendulum_vs_wolfpack, 3:54, in the v2.6.0 replays) from a GIF, throughreplay_trace's numbers andgoalkeep.py's 0.3 m/s threshold, to a test that fails. The fix is left as a first PR.tutorials/field_day.mdrewritten in the tutorials' voice (short numbered steps, then a table of what to do when something goes wrong), with TagVision (First-Order-RoboCup-SSL/tagvision) beside ssl-vision: it sends the same packets, so the day is the same. The detail moved todocs/real_robots.md, "Field-day reference".tutorials/first_planner.md:beeline, a planner that drives straight at its target and brakes in time, scored on the benchmark againstfpp. It is faster on an open run (3.45 s vs 4.17 s) and collides in 9 of 29 scenarios. Steering round the first robot in the way brings that to 4, and breaksnarrow_passage, which passed before: the reader's exercise. To allow this,motion_planning_benchmark.py --schemesnow takes any registered planner (test included).debug_a_moment.mdends with where to find your own moment:find_bugs, and the goals conceded.test_tutorial_code.py(wastest_first_strategy_doc.py) runs every tutorial's code as pasted, tests included, and fails once the keeper bug is fixed so the page gets updated.render_clipdraws in the light dashboard's colours;.gitignorekeeps tutorial GIFs.Fixes
setup_worktree.sh: pixi 0.83 refuses a.pixisymlinked from the main checkout ("the environment directory has moved"), sopixi runfailed in every worktree. Each worktree now gets its own environment (pixi install, about 2 min, 120 MB real disk) and areplayslink.match.py: withreplaysa link, a run folder given by its real path sent the replay outside the repo (~/replays). Both paths are resolved now; regression test included.pixi run python -m tools.evaluation.match A B [--duration 120] [--out DIR]. No tool wrote one before.Tests
pixi run test: 13619 passed, 83 xfailed.pixi run lintclean. In a fresh worktree aftersetup_worktree.sh:pixi run pytestandpixi run lintpass.