Found while fixing #114 (PR #174). #114 removed the kiosk's hard-coded queue position, invented
team-mates and always-zero deadline. This is the same defect class on a different screen and was left
out because it needs a product decision rather than a data lookup.
What happens
src/modules/judging/frontend/[orgSlug]/portal/presentations/page.tsx:159-163:
{t('judging.portal.presentations.logisticsCopy', 'Teams {start}–{end} please report to Stage B holding area.', {
start: presenting ? presenting.presentation_order + 3 : '—',
end: presenting ? presenting.presentation_order + 7 : '—',
})}
The banner is styled as a Logistics Update in danger red, and the numbers in it are arithmetic on
the currently-presenting team's queue index. +3 and +7 are not derived from anything — not a
holding-area capacity, not a stage-B schedule, not a configured lead time. Participants are being
given a concrete instruction ("teams 14–18 report to Stage B") generated from an offset someone picked.
Nothing guarantees those positions exist (near the end of the queue it names teams that do not), and
nothing connects "Stage B holding area" to any configured venue.
Why it needs a decision, not just a fix
Three defensible outcomes, and the right one is an organiser's call:
- Make it real — let organisers configure a holding-area lead time (how many teams ahead to
call) and a location string per competition, and render from that.
- Make it an announcement — delete the hard-coded banner and let organisers push this through
the existing announcements mechanism, which already reaches the portal.
- Delete it — drop the banner entirely if nobody is actually running a Stage B.
Option 2 is probably the cheapest honest answer, since announcements already exist. Whichever is
chosen, the current behaviour — fabricated logistics presented as instruction — should not ship.
Found while fixing #114 (PR #174). #114 removed the kiosk's hard-coded queue position, invented
team-mates and always-zero deadline. This is the same defect class on a different screen and was left
out because it needs a product decision rather than a data lookup.
What happens
src/modules/judging/frontend/[orgSlug]/portal/presentations/page.tsx:159-163:The banner is styled as a
Logistics Updatein danger red, and the numbers in it are arithmetic onthe currently-presenting team's queue index.
+3and+7are not derived from anything — not aholding-area capacity, not a stage-B schedule, not a configured lead time. Participants are being
given a concrete instruction ("teams 14–18 report to Stage B") generated from an offset someone picked.
Nothing guarantees those positions exist (near the end of the queue it names teams that do not), and
nothing connects "Stage B holding area" to any configured venue.
Why it needs a decision, not just a fix
Three defensible outcomes, and the right one is an organiser's call:
call) and a location string per competition, and render from that.
the existing announcements mechanism, which already reaches the portal.
Option 2 is probably the cheapest honest answer, since announcements already exist. Whichever is
chosen, the current behaviour — fabricated logistics presented as instruction — should not ship.