Three tools for an adjudication core
Tester tracking, a public fold with a bracket simulator, and AI-consolidated judge feedback. They sit on top of Tabbycat, they read your tab and cannot write to it, and nothing about your tournament is written into them.
Two ways to read this site. The switch at the top right says Plain or Technical. Plain is enough to install everything and run it at your tournament. Technical adds how each part actually works — the data model, the checks, the API — for anyone who wants to change something or satisfy themselves it is safe. It is the same pages either way, so you can flip between them without losing your place.
Not affiliated with Tabbycat. Tabbycat is a separate project by other people, and all credit for the tab itself belongs to its team. This is a set of tools that reads a Tabbycat tab and never writes to one. The name says Tabbycat because that is what it reads, not because they endorse it.
The three tools
Tester tracking
Who in your judge pool has actually been watched, by whom, and in which position. Worked out from the live draw rather than typed into a spreadsheet twice — so it is never out of date and never disagrees with the tab.
The fold, and the simulator
The points stack folding into the break, the break itself, the break-round bracket — built strictly from what your tab has already made public. Spectators can click who they think goes through and watch the next round re-form.
Consolidated judge feedback
Every written comment about a judge turned into one coherent read they can act on. No scores, no round names, no teams, no quoted phrases, nothing that says which debate anything came from — and a person reviews it all before it goes out.
Who it is for, and who it is not for
Adjudication cores and tab teams. All three tools need a tab-side login — adjudication core or tabulation — because feedback, panels and unreleased draws simply are not visible to anybody else. If you do not have tab access at your tournament, these will not work for you.
That is a deliberate limit rather than an oversight. Two of these tools read things that are private until an adjudication core decides otherwise, and the third publishes judge feedback. Both of those are the CAP's to hold.
You will probably have to ask someone for an account. The page on getting access to your tab is written partly so you can send it to your tab director: it explains exactly what these tools read, and why they cannot write anything, in terms you can point at.
Try them before you install anything
All three samples below run on an invented tournament — invented teams, invented judges, invented motions, invented feedback. There is no real tournament data anywhere in them, and there is nothing to set up:
Tester tracking →
Open the Testing tab. That is the one that matters.
The fold →
Try the Simulator tab and pick some winners.
Judge feedback →
Three keys are offered at the bottom of the page.
If you would rather run them yourself, there is a fake Tabbycat in the repository, so you can put all three through their paces on your own machine before you point anything at a real tab. See try it without your tournament.
Nothing about your tournament is configured
You fill in one file. It holds your tab's web address, your tab slug, and what you want any published pages called. That is the whole of it.
Everything about the shape of your tournament is read from Tabbycat every time a tool runs — how many rounds you have, which are prelims and which are break rounds, your break categories and their sizes and names, how many teams are in a debate, your side names, your feedback scale, your panel sizes, and every public / silent / released switch. Change any of it mid-tournament and the tools follow on the next run.
That claim is worth being suspicious of, so the repository ships the means to check it: three deliberately different invented tournaments and one command that runs all three tools against all three. See what is read and what is configured.
What that looks like in practice Technical
$ python3 demo/verify.py --quick
Riverbend Open 2027 4 teams a debate · 9 prelims · 5 elim rounds · 2 break categories
Ashfield Invitational 2027 2 teams a debate · 5 prelims · 3 elim rounds · 1 break category
Kestrel Bay Novice Cup 4 teams a debate · 4 prelims · break not announced
Every tool ran against every tournament with no code changed.
The three shapes are chosen to break things: one has a sub-category whose break line does not fall at the top N of the points stack, one is a two-team format where British Parliamentary vocabulary would be nonsense, and one has no break yet, so every bracket view has to render an empty state rather than an error.
Read-only, and not just as a promise
The one piece of code that talks to Tabbycat refuses any request that is not a read, before it leaves your machine. There is no function in the toolkit that writes to a tab, and no setting that turns one on. The single exception is the login form, which is how you sign in at all.
Technical core/tabread.py
subclasses requests.Session and overrides
request(), the method every call in the library funnels through,
raising ReadOnlyViolation on anything outside
{GET, HEAD, OPTIONS}. The login POST runs on a separate,
throwaway session that is closed immediately; only its cookies are carried
into the read-only client. tests/test_release.py asserts this by
parsing every Python file in the repository for calls to
.post/.patch/.put/.delete — parsing rather than grepping, so
that the docstring which explains the guarantee does not itself trip the
check.
Everything on this site
Running it
- Set it up — the whole install, both ways
- With Claude Code — paste one thing
- By hand — the commands
- Without your tournament — the demo
- When it goes wrong
Your tab
- Getting access — and why there is no API key
- What to send your TD
- The private-URL warning