Skip to content

Host competitions students enter, sit and hand in - #392

Merged
PatrikBak merged 2 commits into
mainfrom
patrik/competition-backend
Aug 25, 2026
Merged

Host competitions students enter, sit and hand in#392
PatrikBak merged 2 commits into
mainfrom
patrik/competition-backend

Conversation

@PatrikBak

Copy link
Copy Markdown
Owner

A hosted group is a batch of competitions declared from a manifest: when it opens, how long the clock runs, whether a student may come back for another go. A student spends one entry per competition, either by sitting it or by giving it up, and the entry carries its own clock, so the group's opening does not have to be the student's.

Declaring a group is a CLI job rather than an endpoint, since it is authored alongside the problems it names. MathComps.Cli.Competitions reads the manifest, links the rounds, and reports what it created against what it revised.

A defense used to be held against a handout environment and nothing else. It now carries one of two targets, the handout environment or an archive problem, so a student can argue a competition problem the same way. The two arms are kept exclusive by check constraints and composite foreign keys rather than by the code that writes them.

The competition area on the front end drops its mock services and talks to the real endpoints. What a student still owes before entering (a username, the graduation answer, an email) is read from the backend rather than guessed at, and the e2e suite gains a fake backend so the entry, clock and hand-in flows are covered end to end.

🤖 Generated with Claude Code

A hosted group is a batch of competitions declared from a manifest: when
it opens, how long the clock runs, whether a student may come back for
another go. A student spends one entry per competition, either by sitting
it or by giving it up, and the entry carries its own clock so the group's
opening does not have to be the student's.

Declaring a group is a CLI job rather than an endpoint, since it is
authored alongside the problems it names. MathComps.Cli.Competitions reads
the manifest, links the rounds, and reports what it created against what
it revised.

A defense used to be held against a handout environment and nothing else.
It now carries one of two targets, the handout environment or an archive
problem, so a student can argue a competition problem the same way. The
two arms are kept exclusive by check constraints and composite foreign
keys rather than by the code that writes them.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@vercel

vercel Bot commented Aug 25, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
math-comps Ready Ready Preview Aug 25, 2026 11:18pm

The clock hands out hundred-nanosecond ticks and a stored timestamp holds
whole microseconds, so an entry's start as the write returned it did not
equal the same entry read back. A Mac's clock is already microsecond
coarse, which is why only the CI runner ever saw it.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@PatrikBak
PatrikBak merged commit e238190 into main Aug 25, 2026
5 checks passed
@PatrikBak
PatrikBak deleted the patrik/competition-backend branch August 25, 2026 23:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant