I'm a software engineer building infrastructure for AI research. My focus is the layer under the experiments: environments that rebuild the same way every time, dependencies that are pinned and scanned, and CI that fails for the right reasons, so a result can be trusted and repeated.
Most of my public work is one connected system.
standards holds the engineering
rules and the reusable workflows that enforce them, called by link so a fix
lands once and reaches every repository.
path is the template new
repositories start from, and
markdown draws READMEs like this
one from data measured on a schedule.
- Working on: reproducible environments, supply-chain hygiene (pinned dependencies, secret scanning, CodeQL and SBOMs), and CI that fails for the right reasons.
- Building with: Python (standard library first), GitHub Actions, Bash and Make, plus dev containers and Codespaces so a Mac and a fresh container start from the same shell.
- How I work: standards a machine enforces, small reviewable changes, Conventional Commits, and signed commits on protected branches.
- Ask me about: reusable workflows, dependency pinning, release automation, and automating the chores nobody should do by hand.
Four games, Chess, Checkers, Pentago and Tic-Tac, with me on one side and everyone else on GitHub on the other. I always play White, and X in Tic-Tac.
- Pick a move from the list under a board. Chess is always in view, and the other three open with a click.
- Tick the box in the issue its link opens, then submit it, its title unchanged. The box agrees to the rules and to the games showing your move, username and avatar. The first move to reach the game is the one played.
- The Official Arbiter rules on it within a few minutes: it answers on
your issue, closes it as
playedorturned away, and redraws the board.
Each side has a week to move, or the Arbiter moves for it at random. A win counts for the player who makes the winning move, and the most wins top the Hall of Fame below.
📖 The rules and everything else are in Games and each game's guide: Chess, Checkers, Pentago and Tic-Tac.
♚ GitHub's Turn · 30 legal moves · open to choose one
♚ King · 1 move
| Move | In words | Play | |
|---|---|---|---|
| 🤴 | King Move Ke7 |
King from e8 to e7 | Play ↗ |
♛ Queen · 4 moves
| Move | In words | Play | |
|---|---|---|---|
| 👸 | Queen Move Qe7 |
Queen from d8 to e7 | Play ↗ |
| 👸 | Queen Move Qf6 |
Queen from d8 to f6 | Play ↗ |
| 👸 | Queen Move Qg5 |
Queen from d8 to g5 | Play ↗ |
| 👸 | Queen Move Qh4 |
Queen from d8 to h4 | Play ↗ |
♝ Bishop · 5 moves
| Move | In words | Play | |
|---|---|---|---|
| ⛪ | Bishop Move Ba3 |
Bishop from f8 to a3 | Play ↗ |
| ⛪ | Bishop Move Bb4 |
Bishop from f8 to b4 | Play ↗ |
| ⛪ | Bishop Move Bc5 |
Bishop from f8 to c5 | Play ↗ |
| ⛪ | Bishop Move Bd6 |
Bishop from f8 to d6 | Play ↗ |
| ⛪ | Bishop Move Be7 |
Bishop from f8 to e7 | Play ↗ |
♞ Knights · 5 moves
| Move | In words | Play | |
|---|---|---|---|
| 🐴 | Knight Move Na6 |
Knight from b8 to a6 | Play ↗ |
| 🐴 | Knight Move Nc6 |
Knight from b8 to c6 | Play ↗ |
| 🐴 | Knight Move Ne7 |
Knight from g8 to e7 | Play ↗ |
| 🐴 | Knight Move Nf6 |
Knight from g8 to f6 | Play ↗ |
| 🐴 | Knight Move Nh6 |
Knight from g8 to h6 | Play ↗ |
♟ Pawns · 15 moves
| Move | In words | Play | |
|---|---|---|---|
| ♟️ | Pawn Push a6 |
Pawn from a7 to a6 | Play ↗ |
| ♟️ | Double Pawn Push a5 |
Pawn from a7 to a5, two squares | Play ↗ |
| ♟️ | Pawn Push b6 |
Pawn from b7 to b6 | Play ↗ |
| ♟️ | Double Pawn Push b5 |
Pawn from b7 to b5, two squares | Play ↗ |
| ♟️ | Pawn Push c6 |
Pawn from c7 to c6 | Play ↗ |
| ♟️ | Double Pawn Push c5 |
Pawn from c7 to c5, two squares | Play ↗ |
| ♟️ | Pawn Push d6 |
Pawn from d7 to d6 | Play ↗ |
| ⚔️ | Pawn Takes Pawn exd5 |
Pawn from e6 takes the pawn on d5 | Play ↗ |
| ♟️ | Pawn Push e5 |
Pawn from e6 to e5 | Play ↗ |
| ♟️ | Pawn Push f6 |
Pawn from f7 to f6 | Play ↗ |
| ♟️ | Double Pawn Push f5 |
Pawn from f7 to f5, two squares | Play ↗ |
| ♟️ | Pawn Push g6 |
Pawn from g7 to g6 | Play ↗ |
| ♟️ | Double Pawn Push g5 |
Pawn from g7 to g5, two squares | Play ↗ |
| ♟️ | Pawn Push h6 |
Pawn from h7 to h6 | Play ↗ |
| ♟️ | Double Pawn Push h5 |
Pawn from h7 to h5, two squares | Play ↗ |
Anyone but @tannergolden can play on this turn, and the first pick in is played. The move is due by 7 Nov, 12:43 EST, or the Arbiter plays a random legal move.
🏁 Checkers
⛀ @tannergolden's Turn · 7 legal moves · only @tannergolden can play these
| Move | In words | Play | |
|---|---|---|---|
| 👣 | Man Move 19-15 |
Man from 19 to 15 | Play ↗ |
| 👣 | Man Move 21-17 |
Man from 21 to 17 | Play ↗ |
| 👣 | Man Move 22-17 |
Man from 22 to 17 | Play ↗ |
| 👣 | Man Move 22-18 |
Man from 22 to 18 | Play ↗ |
| 👣 | Man Move 23-18 |
Man from 23 to 18 | Play ↗ |
| 👣 | Man Move 27-24 |
Man from 27 to 24 | Play ↗ |
| 👣 | Man Move 28-24 |
Man from 28 to 24 | Play ↗ |
Only @tannergolden can play on this turn: a pick from anyone else is turned away with a comment on its issue. The move is due by 3 Nov, 16:19 EST, or the Arbiter plays a random legal move. A jump must be taken whenever there is one, and a man that reaches the far row is crowned.
🌀 Pentago
⚪ @tannergolden's Turn · 33 empty holes · only @tannergolden can play these
⚪ Upper Left Quarter · 7 moves
| Hole | In words | Then turn | |
|---|---|---|---|
| ⚪ | Corner Move a6 |
A white marble on a6, then a quarter turns | ↻ UL ↺ UL ↻ UR ↺ UR ↻ LL ↺ LL ↻ LR ↺ LR |
| ⚪ | Edge Move b6 |
A white marble on b6, then a quarter turns | ↻ UL ↺ UL ↻ UR ↺ UR ↻ LL ↺ LL ↻ LR ↺ LR |
| ⚪ | Corner Move c6 |
A white marble on c6, then a quarter turns | ↻ UL ↺ UL ↻ UR ↺ UR ↻ LL ↺ LL ↻ LR ↺ LR |
| ⚪ | Edge Move a5 |
A white marble on a5, then a quarter turns | ↻ UL ↺ UL ↻ UR ↺ UR ↻ LL ↺ LL ↻ LR ↺ LR |
| ⚪ | Edge Move c5 |
A white marble on c5, then a quarter turns | ↻ UL ↺ UL ↻ UR ↺ UR ↻ LL ↺ LL ↻ LR ↺ LR |
| ⚪ | Edge Move b4 |
A white marble on b4, then a quarter turns | ↻ UL ↺ UL ↻ UR ↺ UR ↻ LL ↺ LL ↻ LR ↺ LR |
| ⚪ | Corner Move c4 |
A white marble on c4, then a quarter turns | ↻ UL ↺ UL ↻ UR ↺ UR ↻ LL ↺ LL ↻ LR ↺ LR |
⚪ Upper Right Quarter · 9 moves
| Hole | In words | Then turn | |
|---|---|---|---|
| ⚪ | Corner Move d6 |
A white marble on d6, then a quarter turns | ↻ UL ↺ UL ↻ UR ↺ UR ↻ LL ↺ LL ↻ LR ↺ LR |
| ⚪ | Edge Move e6 |
A white marble on e6, then a quarter turns | ↻ UL ↺ UL ↻ UR ↺ UR ↻ LL ↺ LL ↻ LR ↺ LR |
| ⚪ | Corner Move f6 |
A white marble on f6, then a quarter turns | ↻ UL ↺ UL ↻ UR ↺ UR ↻ LL ↺ LL ↻ LR ↺ LR |
| ⚪ | Edge Move d5 |
A white marble on d5, then a quarter turns | ↻ UL ↺ UL ↻ UR ↺ UR ↻ LL ↺ LL ↻ LR ↺ LR |
| ⚪ | Centre Move e5 |
A white marble on e5, then a quarter turns | ↻ UL ↺ UL ↻ UR ↺ UR ↻ LL ↺ LL ↻ LR ↺ LR |
| ⚪ | Edge Move f5 |
A white marble on f5, then a quarter turns | ↻ UL ↺ UL ↻ UR ↺ UR ↻ LL ↺ LL ↻ LR ↺ LR |
| ⚪ | Corner Move d4 |
A white marble on d4, then a quarter turns | ↻ UL ↺ UL ↻ UR ↺ UR ↻ LL ↺ LL ↻ LR ↺ LR |
| ⚪ | Edge Move e4 |
A white marble on e4, then a quarter turns | ↻ UL ↺ UL ↻ UR ↺ UR ↻ LL ↺ LL ↻ LR ↺ LR |
| ⚪ | Corner Move f4 |
A white marble on f4, then a quarter turns | ↻ UL ↺ UL ↻ UR ↺ UR ↻ LL ↺ LL ↻ LR ↺ LR |
⚪ Lower Left Quarter · 8 moves
| Hole | In words | Then turn | |
|---|---|---|---|
| ⚪ | Corner Move a3 |
A white marble on a3, then a quarter turns | ↻ UL ↺ UL ↻ UR ↺ UR ↻ LL ↺ LL ↻ LR ↺ LR |
| ⚪ | Edge Move b3 |
A white marble on b3, then a quarter turns | ↻ UL ↺ UL ↻ UR ↺ UR ↻ LL ↺ LL ↻ LR ↺ LR |
| ⚪ | Corner Move c3 |
A white marble on c3, then a quarter turns | ↻ UL ↺ UL ↻ UR ↺ UR ↻ LL ↺ LL ↻ LR ↺ LR |
| ⚪ | Edge Move a2 |
A white marble on a2, then a quarter turns | ↻ UL ↺ UL ↻ UR ↺ UR ↻ LL ↺ LL ↻ LR ↺ LR |
| ⚪ | Centre Move b2 |
A white marble on b2, then a quarter turns | ↻ UL ↺ UL ↻ UR ↺ UR ↻ LL ↺ LL ↻ LR ↺ LR |
| ⚪ | Edge Move c2 |
A white marble on c2, then a quarter turns | ↻ UL ↺ UL ↻ UR ↺ UR ↻ LL ↺ LL ↻ LR ↺ LR |
| ⚪ | Corner Move a1 |
A white marble on a1, then a quarter turns | ↻ UL ↺ UL ↻ UR ↺ UR ↻ LL ↺ LL ↻ LR ↺ LR |
| ⚪ | Corner Move c1 |
A white marble on c1, then a quarter turns | ↻ UL ↺ UL ↻ UR ↺ UR ↻ LL ↺ LL ↻ LR ↺ LR |
⚪ Lower Right Quarter · 9 moves
| Hole | In words | Then turn | |
|---|---|---|---|
| ⚪ | Corner Move d3 |
A white marble on d3, then a quarter turns | ↻ UL ↺ UL ↻ UR ↺ UR ↻ LL ↺ LL ↻ LR ↺ LR |
| ⚪ | Edge Move e3 |
A white marble on e3, then a quarter turns | ↻ UL ↺ UL ↻ UR ↺ UR ↻ LL ↺ LL ↻ LR ↺ LR |
| ⚪ | Corner Move f3 |
A white marble on f3, then a quarter turns | ↻ UL ↺ UL ↻ UR ↺ UR ↻ LL ↺ LL ↻ LR ↺ LR |
| ⚪ | Edge Move d2 |
A white marble on d2, then a quarter turns | ↻ UL ↺ UL ↻ UR ↺ UR ↻ LL ↺ LL ↻ LR ↺ LR |
| ⚪ | Centre Move e2 |
A white marble on e2, then a quarter turns | ↻ UL ↺ UL ↻ UR ↺ UR ↻ LL ↺ LL ↻ LR ↺ LR |
| ⚪ | Edge Move f2 |
A white marble on f2, then a quarter turns | ↻ UL ↺ UL ↻ UR ↺ UR ↻ LL ↺ LL ↻ LR ↺ LR |
| ⚪ | Corner Move d1 |
A white marble on d1, then a quarter turns | ↻ UL ↺ UL ↻ UR ↺ UR ↻ LL ↺ LL ↻ LR ↺ LR |
| ⚪ | Edge Move e1 |
A white marble on e1, then a quarter turns | ↻ UL ↺ UL ↻ UR ↺ UR ↻ LL ↺ LL ↻ LR ↺ LR |
| ⚪ | Corner Move f1 |
A white marble on f1, then a quarter turns | ↻ UL ↺ UL ↻ UR ↺ UR ↻ LL ↺ LL ↻ LR ↺ LR |
Only @tannergolden can play on this turn: a pick from anyone else is turned away with a comment on its issue. The move is due by 3 Nov, 20:21 EST, or the Arbiter plays a random legal move. A move sets a marble, then turns any quarter a quarter turn; five in a row wins, for the other side if the turn makes five for it alone, and five for both or a full board is a draw.
❌ Tic-Tac
❌ @tannergolden's Turn · 9 open squares · only @tannergolden can play these
| Move | In words | Play | |
|---|---|---|---|
| 📐 | Corner Move Xd9 |
X takes the upper left corner of the top board | Play ↗ |
| 📏 | Edge Move Xe9 |
X takes the top edge of the top board | Play ↗ |
| 📐 | Corner Move Xf9 |
X takes the upper right corner of the top board | Play ↗ |
| 📏 | Edge Move Xd8 |
X takes the left edge of the top board | Play ↗ |
| 🔳 | Centre Move Xe8 |
X takes the centre of the top board | Play ↗ |
| 📏 | Edge Move Xf8 |
X takes the right edge of the top board | Play ↗ |
| 📐 | Corner Move Xd7 |
X takes the lower left corner of the top board | Play ↗ |
| 📏 | Edge Move Xe7 |
X takes the bottom edge of the top board | Play ↗ |
| 📐 | Corner Move Xf7 |
X takes the lower right corner of the top board | Play ↗ |
Only @tannergolden can play on this turn: a pick from anyone else is turned away with a comment on its issue. The move is due by 7 Nov, 12:43 EST, or the Arbiter plays a random legal move.
🏆 Leaderboard · @tannergolden · GitHub's players join with their first move
| Player | ♔♚ | ⛀⛂ | ⚪⚫ | ❌⭕ | Moves | Wins | |
|---|---|---|---|---|---|---|---|
| 🏠 | @tannergolden | 0 | 0 | 0 | 0 | 4 | 0 |
A win counts only for the player who makes the winning move: the checkmate in Chess, the move that leaves the other side no move in Checkers, the move that makes five in a row for its side in Pentago and the mark that wins a third board in a row in Tic-Tac. A move the Arbiter plays, for either side, counts for nobody, and a draw is nobody's win.
Follow the arrows from the rules to this page.
standards holds the rules and
the reusable workflows that enforce them, called by link and never copied, so
a fix lands once and reaches every repository pinned to it.
path is the template every new
repository starts from, already wired to those workflows. A repository that
wants a drawn README adds one
markdown stub. Once a day the kit
it calls measures the repository, or here the account, redraws what moved and
commits it as SVGs, header to footer in one commit, so nothing on this page
depends on a third-party service.
Achievements · 44 of 104 earned · next: Generous, 94%
Milestones
Craft
Rhythm
Community
Housekeeping
Secret
Maker
Refreshed daily by tannergolden/markdown · Every trophy and achievement, what it is for and how to earn it: the catalogue. Click any card for its entry.
The two repositories on this account that shipped most recently, each with its version, the day it went out and the major tag a stub pins to follow it. Superseded releases are pruned, so each one shown is its repository's current release. Redrawn every Wednesday.
Note
GitHub changelog · 26 Oct. GPT-6.1 Terra in GitHub Copilot
Tip
Professional · Architecture. Propagate a deadline rather than fixed per-hop timeouts: each service passes on the time remaining, so downstream work stops as soon as the original caller has given up.
Important
End of life · PostgreSQL 14. PostgreSQL 14 stops getting security fixes on 12 November 2026. Move to 18, the newest release.
Warning
Intermediate · Linux. GNU xargs runs the command once even when its input is empty, so find . -name '*.tmp' | xargs ls -l lists the current directory when nothing matches. Add -r to skip the run on empty input.
Caution
Actively exploited · CVE-2026-105133. Ahsay AhsayCBS: Ahsay AhsayCBS Improper Authentication Vulnerability. Apply mitigations in accordance with vendor instructions, ensuring compliance with CISA’s BOD 26-04 Prioritizing Security Updates Based on…
Redrawn every Monday, at random, from 5,000 curated notes and five open data sources. Week 44 of 2026. Open data this week: GitHub changelog, endoflife.date, CISA KEV.
The newest good first issue from each of the two most-starred projects that opened one lately, still open and unclaimed. Redrawn every Friday.



