FRC Team 8852's 2027 SystemCore swerve drive base. It uses WPILib 2027 alpha, Java 25, and Commands v3.
Read these before changing code:
CONTEXT.mddefines the project's special terms.docs/adr/records architecture decisions.docs/commands-v3-house-style.mdteaches this project's command style.docs/research/contains the measurements and source notes behind the ADRs.
- Install JDK 25 and the WPILib 2027 VSCode extension.
- Clone the repository and open it in VSCode.
- Run
./gradlew runto start the simulation. - Run
./gradlew testto run tests without hardware. - Run
./gradlew sysidLogwhen working on SysId. Its log describes the simulation, not the real robot. - Install
uvonly when working ontools/logtool, which is not built yet.
The project currently uses a local allwpilib checkout. See
ADR 0003 and
docs/research/systemcore-deploy.md.
- Never push directly to
main. Use a branch and pull request. - An agent may build, test, simulate, and deploy. A person must enable a real robot.
- No agent may commit to
main.
The required CI workflow protects main, including for administrators. During
competition, use a deliberate per-event branch if needed. See
ADR 0013.
Team-plan seats are for the mentor and students who are at least 18. Everyone else uses the reviewer. Anthropic requires users to be at least 18; team plans, school use, and mentor supervision do not change that. Details and sources are in issue #24.
The reviewer is a Claude Code session with a different opening prompt, reading
CLAUDE.md and the ADRs like any other session. It runs once a pull request's CI
run is green, and comments only on the field-only risks CI cannot detect. It is
not a replacement for student review. See
ADR 0013 and
issue #18.
Each run waits for a person. Its API key lives in the pr-review GitHub
Environment, and the job pauses on the run's page under Actions until the map
owner approves it — nothing is posted, and no key is injected, before that.
.claude/settings.json is checked in. It is a permission allowlist, so an agent
runs ./gradlew, read-only git, read-only gh issue, ssh systemcore@... and
uv run without asking. Claude Code ignores it until you accept the trust dialog
once, on the first run in a fresh clone. Your own approvals go in
.claude/settings.local.json, which is not checked in.
Use the VSCode deploy button or ./gradlew deploy. Deployment stops
robot.service, copies the robot files, and starts the service again.
Watch the robot journal with:
ssh systemcore@robot.local journalctl -u robot -fDo not use println in periodic code. It can exceed the loop budget.
If the robot restarts every three seconds, the SystemCore image and allwpilib checkout are incompatible. Update the Pi to the current image. See issue #51.
~/dev/allwpilibis the WPILib source reference. Check it before using online examples: 2027 APIs changed substantially.- The bench Pi is at
192.168.1.202orrobot.local. It has no CAN hardware, so hardware CI is advisory only. - The system journal is the console. WPILOG files are stored in
/u/logswith a USB stick or/home/systemcore/logsotherwise. Copy logs before the robot deletes old files. - The SystemCore image uses BusyBox. It does not include
timeout,pgrep, compilers,perf, orunzip. Usejcmd -linstead ofpgrep; use JFR for profiling.