Conversation
PM- 5030 Fix task description in wallet admin UI
Updates for history display on profiles page
Marathon match scoring display fix
What was broken Marathon matches and development challenges were always treated as rated from the work app because the challenge editor did not expose an opt-out control. Root cause (if identifiable) Member API already honors challenge metadata named isRated with value false, but platform-ui never let users set or clear that metadata during challenge setup. What was changed Added a Rate this challenge checkbox in Advanced Options for marathon match and development challenge forms. The checkbox defaults to checked, writes metadata isRated=false when unchecked, and removes that metadata when checked again so rated remains the default. Any added/updated tests Added RateChallengeField tests covering the default checked state, writing isRated=false when unchecked, and removing the metadata when rechecked.
What was broken The Topgear submission reprocess icon in the review app sent the reprocess request immediately when clicked. Root cause The click handler directly called the Topgear reprocess service without a confirmation step. What was changed Added a confirmation dialog that asks whether to reprocess the selected Topgear submission, with Yes continuing the reprocess request and No closing the dialog. Any added/updated tests Added a focused TabContentSubmissions component test covering that the dialog opens, No does not reprocess, and Yes calls the reprocess service.
System admin AI Management
PM-5105: Add rated challenge toggle
PM-5104: Add TG reprocess confirmation
What was broken The Work app submissions table could show an older raw Marathon Match score while community-app showed the updated relative provisional score. Root cause The Work app score helper returned the first matching Review API summation, and legacy nested scores were preferred before summations, so later relative-score rewrites could be ignored. What was changed Marathon provisional and system score helpers now pick the latest valid matching review summation by timestamp and use legacy nested scores only as a fallback. Any added/updated tests Added regression coverage for provisional and system scores where a later relative summation must override a stale raw score.
What was broken Marathon Match review rows displayed scorecard-derived review scores, so submitters could see 0.00 and a Fail result after winners were announced even when review summations had the final aggregate score. Root cause The review app's shared review table helpers preferred per-review scorecard averages over submission aggregate scores, and the score cell always linked through the scorecard path. Marathon Match system reviews do not have a scorecard to open. What was changed Added Marathon Match challenge detection in the review app and routed review tables to prefer review summation aggregate scores for Marathon Match submissions. The Review Score and Score cells now display the aggregate score as plain text for Marathon Match rows, and pass/fail resolution can use the aggregate score before scorecard averages. Any added/updated tests Added tests for Marathon Match challenge detection, aggregate-score pass/fail resolution, and aggregate score rendering without a scorecard link.
PM-5113: Use marathon aggregate review scores
PM-5112: show latest relative marathon scores
…ayment-cycles PM-4669 engagements payment cycles
What was broken Challenge prize amount inputs could lose focus after a digit was entered, interrupting continuous typing in the Work Manager challenge editor. Root cause Prize row updates are driven through React Hook Form as nested prize values change. The active placement-prize input was not tracked or restored when those controlled updates re-rendered the row. What was changed Track the active placement-prize row in ChallengePrizesField and allow PrizeInput to restore focus and caret position for that active row after value updates. Updated the challenge editor documentation for the focus-preservation behavior. Any added/updated tests Updated the ChallengePrizesField test to exercise the real PrizeInput and added coverage for continuously typing multiple digits into an empty prize input.
PM-5116: Preserve challenge prize input focus
What was broken The Work app could become unresponsive after closing the public review opportunity and adjusting the reviewer count, because that count directly controlled how many member assignment selectors were rendered. Root cause (if identifiable) Manual reviewer count input only stripped non-digits and had no upper bound. Large values could flow into the form state and force the human review tab to render an unbounded number of controlled autocomplete fields. What was changed Added a shared maximum manual reviewer count, clamped the Work human-review count input and rendered assignment slots to that limit, added min/max support to the shared text field, and applied the same limit in reviewer validation, reviewer cost, summary, and launch validation paths. Any added/updated tests Added HumanReviewTab coverage for capped closed-opportunity assignment fields and schema coverage for rejecting counts above the manual reviewer limit.
What was broken Project invitation email links can open /projects/:projectId/invitation/accepted or /projects/:projectId/invitation/refused, but the work app only routed the plural invitations path and older accept/decline links with invite IDs. Those email links landed on an empty partially loaded page and never updated the invite. Root cause The work app route table did not include the legacy singular invitation URL shape emitted by the email flow. What was changed Added the singular /projects/:projectId/invitation/:action? route to the work app and routed it to the existing ProjectInvitationsPage flow so it can resolve the current user's pending invite and update its status. Any added/updated tests Added a ProjectInvitationsPage spec covering the refused email route with source=email and verifying the current user's pending invite is updated to refused.
What was broken TM/PM users could see pending budget approval challenges for projects where their project membership was copilot-only. Root cause BudgetApprovalsPage treated both manager and copilot project memberships as full-write access when scoping non-admin budget approval queries. What was changed Non-admin budget approval project scoping now includes only manager project memberships. Copilot and customer/write memberships are excluded from project options and challenge query projectIds. Any added/updated tests Added BudgetApprovalsPage coverage for a project manager with manager, copilot, and customer memberships to verify only the manager project is queried.
PM-5048: Support project invitation email routes
PM-5121: Cap manual reviewer count
PM-5103: Restrict budget approvals to full-access projects
What was broken The review table rendered the current reviewer action only on the first reviewer row for a submission. When a copilot reviewer was the second reviewer, Complete Review appeared beside the other reviewer. Root cause The actions cell looked up the current user's review across the whole submission while the table only rendered actions for the first flattened reviewer row. What was changed Reviewer-owned actions now resolve against the flattened row's reviewer index, so Complete Review, Review Complete, and Reopen Review render on the row for the matching reviewer resource. Submission-level actions still render only on the first row to avoid duplicates. Any added/updated tests Added regression coverage for a two-reviewer row set where the current reviewer is not first, ensuring only that reviewer row is action-eligible.
What was broken Project edit passed a project id into the billing-account selector, which made typed searches filter only the project-scoped billing-account list. Billing accounts created in system admin and granted to the user could be selected during project creation, but disappeared from edit search after the project billing account was cleared. Root cause Create and edit were using different billing-account sources. Create searched the Billing Accounts API by user id, while edit searched only the legacy project-scoped list when a project id was present. What was changed Updated the billing-account autocomplete so a user-scoped selector preloads and searches the Billing Accounts API, including edit flows. The project-scoped list remains as a fallback when no user id is available. Any added/updated tests Updated the autocomplete spec to verify edit mode with both project id and user id searches the user-scoped Billing Accounts API and returns matching billing accounts.
PM-4836: Place review action on reviewer row
PM-5027: Search user billing accounts in project edit
What was broken The prior PM-5121 fix capped large reviewer counts, but the Work app could still freeze after the public review opportunity was closed and the Reviewer Count native stepper was decremented. Root cause (if identifiable) Closed-opportunity member selectors can leave blank additionalMemberIds slots registered in react-hook-form. When the count dropped, the trimming effect wrote those blank slots back during validation instead of unregistering them, allowing the form watcher to re-enter the same cleanup path. What was changed Unregistered additional member fields that are no longer visible when reviewer count shrinks, and only write/delete additional members when an actual assigned member value is being removed or preserved. Any added/updated tests Added HumanReviewTab coverage for decreasing reviewer count with a blank extra assignment slot and asserting no reviewer resource deletion is attempted.
PM-5121: Stop reviewer count stepper loop
Pm 5137 - Wallet Admin UI fixes
PM-5173 Wallet admin UI fix
What was broken After closing the public review opportunity, clicking the Reviewer Count down stepper could leave a hidden blank additional member slot in form state and the Work app could become unresponsive. Root cause (if identifiable) The prior follow-up unregistered hidden blank additional member fields but returned before clearing the parent additionalMemberIds value. React Hook Form could keep the stale blank array value watched by the reviewer cleanup effect, allowing that cleanup path to run repeatedly. What was changed The reviewer-count shrink cleanup now always writes the trimmed additionalMemberIds value back to the form so hidden blank slots are removed from state. Resource deletion remains gated to cases where an actual assigned member id was removed. Any added/updated tests Updated the HumanReviewTab regression to follow QA's public-opportunity toggle path, decrease the reviewer count, assert the hidden blank slot is cleared from form state, and confirm no reviewer resource deletion is attempted for blank slots.
PM-5121: Clear hidden reviewer slots
Fix cancelled status Ui
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.
Related JIRA Ticket:
https://topcoder.atlassian.net/browse/
What's in this PR?