fix: port bug fixes from hackutd-harp (check-in RSVP gate, decision emails, phone/draft/validation, mobile UI) - #165
Merged
Conversation
AdminLayout pins the admin shell to h-svh and hides its overflow, so a page that sizes to its own content is clipped with no way to reach the rest. FormDetail already scrolls per tab and ResponsesTable manages its own, but the overview and its loading skeleton returned a plain block, so anything past the fold was unreachable. Measured before: 1577px of content in a 520px viewport with maxScroll 0.
Contributor
Author
🤖 Devin AI EngineerI'll be helping with this pull request! Here's what you should know: ✅ I will automatically:
Note: I can only respond to comments from users who have write access to this repository. ⚙️ Control Options:
|
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
Ports the 11 bug-fix commits that landed on
hackutd/hackutd-harpbut never made it back to harp (cherry-picked with original authorship; Zero Day branding hunks dropped). Grouped by area:Check-in / scans
acceptedonly, not RSVP — a hacker who declined or never RSVP'd could still be checked in.POST /admin/scansnow usesApplication.GetCheckInEligibility(status +rsvp_status+walk_ins.promoted_atin one query) and refuses unlessrsvp_status = confirmedor the user is a promoted walk-in. Gated by a new super-admin settingcheck_in_requires_rsvp(defaulttrue,GET/PUT /superadmin/settings/check-in-requires-rsvp, toggle inPermissionsTab). Duplicate-scan409is now checked before eligibility so a re-scan of an already-checked-in hacker doesn't surface as a 403. 403 bodies carry amessagethe scanner UI shows ("rsvp declined — hacker gave up their spot", etc.).Decision emails
decision_email_sentbefore dispatch — a crash/redeploy mid-run left unsent hackers permanently skipped. Now each recipient is marked individually after the provider accepts the send (10s bounded write); failures stay unmarked and retryable. Adds anatomic.Boolin-flight guard (409on concurrent runs) and async.WaitGroupthatdrainBackgroundJobswaits on during graceful shutdown.Hacker application flow
^\+1\d{10}$) — newphone-input.tscountry-code picker + E.164 validation on both client and server (applications.go,rsvp.go,travelrsvp.go).validateResponsesno longer enforces option membership in draft mode;SchemaSelect/SchemaComboboxsurface obsolete values with a "Clear answer" affordance (getObsoleteOptions).ApplicationWizardreconciles the live schema from PATCH responses (draft.ts,OutdatedAnswersNotice), and 400s are attributed to the specific answers that were sent (application-regressions.test.mjs,npm run test:applications).mode: "onTouched"+ explicitonBluron custom triggers.FormItemgrid usesgrid-cols-[minmax(0,1fr)], summary/review rows wrap, and select/combobox text getsmin-w-0so long labels/answers/options can't force horizontal scroll. The fork's.zero-hacker-surface { overflow-x: clip }is replaced byoverflow-x-clipon harp'sHackerLayoutSidebarInset.Admin / infra
stampFieldsnow preservesdisplay_order.AdminLayout.AuthCallbackPageroutes them to the hacker app on< 768px.go mod downloadflaked on Cloud Build (HTTP/2 stream resets) —GODEBUG=http2client=0+GOMAXPROCS=4+ 3-attempt retry.Fork-only changes intentionally not ported: HackUTD/Zero Day branding,
data-hacker-form-dropdownhooks,claude.mdedits. Swagger docs regenerated (task gen-docs, no diff).Verified locally:
gofmt -l .,go vet ./...,go test ./cmd/api/ ./internal/..., and inclient/portal:npm run lint,npm run test:applications,npm run build— all green.Link to Devin session: https://app.devin.ai/sessions/39d24a258d914ea7963556448bfcd893
Open in Devin Desktop: https://app.devin.ai/desktop/session/39d24a258d914ea7963556448bfcd893?variant=devin
Requested by: @balebbae