feat: tournament onboarding, tracks, and forms edit lifecycle - #68
Merged
Conversation
…reordering, and removing onboarding steps
…nd block deleting onboarding-linked forms
…pover creation form
…y archive action in track rows
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
🚅 Deployed to the nexus-pr-68 environment in nexus
|
…ves cp1252 consoles
ethnjs
force-pushed
the
feat/tournament-onboarding
branch
from
August 31, 2026 01:46
5d99bae to
5cb197a
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Three features shipped on this branch since the forms builder merged:
event_preferencefield type and its write-through; prerequisites for standard (non-onboarding) forms.Plus a handful of unlisted dev-tooling and profile-completeness fixes picked up along the way (see below).
What changed
Tournament onboarding
TournamentForm: 1:1 companion row every tournament-scopedFormgets at creation.is_onboarding+orderdrive the sequence;form_idis its own primary key.TournamentMembership.onboarded_at: set once a member has answered every currently-onboarding-flagged published form; permanent once set — removing/archiving an onboarding form never unsets it, only adding a new one clears it tournament-wide.is_onboardingis blocked until it's removed from onboarding (_reject_if_onboardinginforms.py— the one place Forms references Onboarding).POST /tournaments/{id}/onboarding/progress/finds the next unanswered published onboarding form, snapshotsonboarded_atonce none remain./joinnow routes into/tournaments/{id}/onboarding, which resolves to the next required form and advances automatically on submit.backend/tests/api/tournament/test_onboarding.py.Tournament tracks
TournamentTrackcatalog model + management API + settings page (mirrors the invites page layout).TournamentMembershipTrackStatuswrite-through table, synced under a monotonic transition rule (a status can't regress once advanced) — supports the multiday interest/confirmed/declined progression per track.statusfield — members page now shows a list of per-track statuses (colored pill menu) instead of one status.backend/tests/api/tournament/test_tracks.py.Forms edit lifecycle & field types
FormResponsePendingUpdateand routed through a patch flow instead of a failing resubmit. TDs confirm which edits send questions back to previous responders before saving.event_preferencefield type: strict option validation,allow_duplicatesenforcement on ranked-choice, write-through to a newtournament_membership_event_preferencestable, invalidation clears write-through rows, grouped event preferences exposed on membership reads.EditableText/floating-action-bar/respondent-view components reused across invites, tracks, and forms; several option-row/preset UI fixes.Dev tooling (unlisted)
post-checkouthook, so parallel branches don't fight over one dev DB.fileConfigno longer disables uvicorn's loggers on startup.create_all).Profile completeness (unlisted)
Test plan
backend/tests/api/tournament/test_onboarding.py,test_tracks.py— new coverage for both features end to end.backend/tests/api/test_forms.py,backend/tests/core/test_form_changes.py,test_form_validation.py,test_form_write_through.py,test_forms.py,test_tournament_form_prerequisites.py— edit-classification, pending-update flagging, event_preference validation/write-through, prerequisite evaluation.backend/tests/core/test_profile_status.py— updated for the mandatory-field change.backend/tests/test_migrations.py— new coverage exercising the migration chain (tracks, onboarding, event preferences)./join, complete each onboarding form in order, confirmonboarded_atsnapshots and a later-added onboarding form clears it; create a track, set an outcome on an availability form, submit and confirm the member's track status advances; edit a published form's fields and confirm only affected responders get flagged.