Live CTF round board for a team
One view of what the room has solved, what is being worked, and what nobody has opened - derived from shared flags and attempts rather than from a status anybody can overwrite.
Open in ctfpalThe two questions a team asks every hour of a round are the same two: what is already solved, and what is somebody else already on. Getting either wrong is expensive - two people burning an afternoon on the same challenge, or a category nobody opens until the last hour.
Why it does not read the status field
The peer-to-peer share is not a CRDT. When two people edit the same challenge, the fields merge by two different rules: flag candidates and attempt logs are unioned, so nothing anybody records is ever lost; title, notes and status are last-write-wins, so whichever clock was ahead decides. A board built on the status field would be showing one teammate's opinion and calling it the room's - and on a laptop whose clock is a few minutes fast, it would be showing the wrong teammate's.
So status here is derived from the evidence that survives a merge. A challenge is solved because somebody logged a flag; it is in progress because somebody logged an attempt. Both are facts about what was done, and neither can be silently overwritten by a merge.
- Solved, per category. Where the round actually stands, not where the ranking page says it does.
- Most worked, still unsolved. Attempts and time-in-challenge, so the challenge eating the room's afternoon is at the top rather than buried.
- Last technique tried. Pulled from the attempt log, which is the closest thing to "who is on what" that survives an offline peer.
- Untouched. The list that decides where the next free person goes.
When it disagrees with itself
A challenge marked solved with no flag anywhere in the union is called out rather than smoothed over. It means one of two things - somebody solved it and did not paste the flag, or somebody mis-clicked - and both are worth thirty seconds of somebody's attention before the last hour of a round.