Repository navigation
fix(convex): internalize operational and catalog endpoints - #43
Merged
Merged
Conversation
…ccess Internalize 36 maintenance, catalog, and transcription functions while preserving public reads and authenticated user APIs. Guard the reviewed modules with exact public-export allow-lists. Co-Authored-By: songscript-convex-authz running gpt-6.1-sol <noreply@openai.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
ⓘ Qodo reviews are paused because the subscription is no longer active. Ask your workspace admin to reactivate the subscription to resume reviews. Manage billing |
This branch was successfully deployed
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
Restrict 36 operational, catalog and transcription functions to Convex internal access. Public clients can no longer invoke user deletion, catalog changes, maintenance tools or raw transcription job reads. Public catalog reads, signup and authenticated progress APIs keep their existing registrations.
lyricscreate,createMany,updateTimestampsmigrationrunUserIdMigration,verifyUserProgressData,updateLyricsTimestampsoneTimeMigrationmigrateVisitorToUser,checkVisitorData,deleteUserRecord,deleteTestUserByEmail,listAllAppUsers,fixAppUserRecord,checkUserData,migrateVisitorIdToUserId,migrateUserId,listAllVisitorIdsseedseedBaraye,seedBarayeWordssongscreate,deleteSong,setVideoUrl,lockTimestamps,unlockTimestampstestDatacreateTestPracticeDatatranscriptioncreateJob,updateJobStatus,getJobStatus,getJobsByVisitor,importTranscriptionusersdebugAuthUserwordProgressmigrateAddPersian,deduplicateWordProgress,checkDuplicateswordscreate,createMany,clearForvoAudioUrlsCaller verification covered 344 regular source, E2E, script and documentation files. No public-client callers reference the converted functions. The catalog modules have only four client read references: songs.list/getById, lyrics.getBySong and words.getByLine. The Python pipeline and README use authenticated
npx convex runrecipes; internal functions retain that operator access. No deployed function was invoked for verification.The regression test checks exact public-export allow-lists for all ten changed modules, every registration’s visibility, and frontend references. New public exports in those modules fail by default. Handler bodies and validators are unchanged. The earlier ADMIN_USER_IDS follow-up is shelved because these administrative operations are now internal.
Validation
git diff --checkpassed. No hook bypass.Review and remaining qualifications
Loop-record: implementer=codex/gpt-6.1-sol/high reviewer=claude/opus-5.5 rounds=2/2 defects=2 role=worker
Claude review: CHANGES → applied (destructive cleanup internalized). Codex security scan: BLOCKING → fixed (requester job disclosure and public job-ID path internalized). Round-2 Codex security re-scan: PASS on the unchanged frozen hashes. The scans are manual static reviews; plugin initialization was not a sealed completed scan. Reported aggregate scan token use: unavailable, not estimated.
Non-blocking residuals:
users.checkEmailExistsremains an unauthenticated guessed-email membership oracle used by signup. Leaderboard display names, ranks, scores/streaks and languages remain intentionally public projections; that is cross-user information, not private-record isolation. Existing account-linking/logging and auth-trigger wiring caveats remain outside this registration-only patch. The allow-list test covers ten modules, not future modules or HTTP routes.Bot policy
Repository instructions read. The security lead routed the independent Claude review and Codex scan/re-scan; no worker-started reviewer or extra bot was invoked. Lead owns merge and deployment.
— songscript-convex-authz (worker) · codex/gpt-6.1-sol