Conversation
What was broken BA summary divided challenge line-item amounts by markup before displaying Member Payments, so a challenge with $50 in member payments and 33% markup showed $37.59 member payments and $12.40 fee instead of $50.00 and $16.50. Root cause Challenge billing-account rows already expose the member-payment subtotal for manager/admin challenge rows, but the modal treated every non-copilot row as a ledger total that still needed markup removed. What was changed Use the raw challenge line-item amount as manager/admin member payments and calculate the challenge fee from markup. Keep the existing reverse-markup behavior for engagement ledger rows and copilot fallback responses. Any added/updated tests Updated BillingAccountLineItemsModal coverage for the PM-4970 challenge split and added an assertion that engagement rows still reverse-calculate payment and fee amounts.
What was broken Work Manager users with global Copilot, Project Manager, or Talent Manager access could open a project users URL directly and still get member-management controls for a project they could not manage. Root cause (if identifiable) The users page enabled add, invite, remove, and role-edit controls from global Work Manager role flags instead of requiring manage access to the loaded project. What was changed The users page now derives member-management permission from the existing project management access helper for the loaded project. The same permission guards the header actions, editable member cards, and add/invite modal rendering. Any added/updated tests Added a UsersManagementPage regression test that verifies a global Project Manager who cannot manage the loaded project does not see add, invite, or edit controls. Validation note The focused UsersManagementPage test, lint, and build pass. The full test command still fails in an unrelated wallet-admin PaymentView spec that also fails when run by itself.
What was broken The previous PM-4393 fixes blocked unauthorized project challenge list and challenge detail URLs, but other project workspace URLs still mounted for users who were not members of the project. QA found TM, PM, and copilot users could open project engagement, engagement detail, users, and asset library URLs and in some cases add project members. Root cause The existing project access check was applied inside challenge pages only. Project-scoped route entries for engagements, users, and assets rendered their child pages before confirming project membership, allowing those pages to fetch and display child project data. What was changed Added a reusable ProjectRouteAccessGuard that checks the current route project with checkProjectAccess before rendering protected route content. Wrapped the project engagement list/detail/application/assignment/feedback/experience routes, project users route, and project asset library route so unauthorized users see the required project access message. Any added/updated tests Added ProjectRouteAccessGuard tests covering allowed access, loading, denied membership, and failed project fetches.
PM-4961 View Billing Account details
PM-4973: Restrict project user management actions
PM-4970: Correct BA challenge fee split
PM-4393: Guard project workspace routes
…M-4684_challenge-approval-flow
What was broken The Work app used the broader project management access helper for project detail editing, so copilot project members could see edit links and open the project editor for projects where they had copilot access. Root cause The existing helper intentionally allows copilot membership for general project write flows, but project detail editing needs a narrower Full Access check. What was changed Added a project-detail edit helper that requires admin access or manager-tier user access plus Full Access project membership. Updated the projects list edit affordance and project editor route guard to use the narrower helper while leaving other copilot write flows on the existing helper. Any added/updated tests Added permission utility coverage for Full Access project detail edits, including denial for copilot project membership and allowance for admins.
PM-4988: Hide project detail editing for copilots
…M-4684_challenge-approval-flow
…roval-flow PM-4684 challenge approval flow
PM-4961 Fix reset in BA accounts view
What was broken Unauthorized Work project access messages displayed support@topcoder.com as plain text, so users could not click it to contact support. Root cause The shared Work ErrorMessage component rendered message text as plain content and did not link the support email used by PM-4393 denial copy. What was changed Updated ErrorMessage to convert support@topcoder.com in plain text messages into a standard mailto:support@topcoder.com link while preserving the existing message text and styling. Updated ProjectRouteAccessGuard expectations for the split text/link rendering. Any added/updated tests Added ErrorMessage coverage for the mailto support link and updated ProjectRouteAccessGuard denial tests to assert the support link href.
What was broken Copilot users with displayMemberPaymentDetailsToCopilots disabled no longer saw inline member payment balances, but the billing account details icon still rendered on project rows and project detail pages. Root cause The prior PM-4954 fix gated payment amounts with the project flag, but the modal entry points still only checked the global billing details feature flag and a billing account id. What was changed Gate both project-list and project-detail billing account details buttons with the same per-project payment visibility decision used for copilot amounts. Prevent hidden modal entry points from fetching or rendering billing account details when the project flag is off for restricted copilot users. Leave admin, manager, and flag-enabled copilot visibility unchanged. Any added/updated tests Updated ProjectsTable and ProjectBillingAccountExpiredNotice coverage so flag-off copilots no longer see or open the billing account details modal.
What was broken The earlier PM-4988 fix hid project edit affordances in the projects list and blocked the edit route, but copilot users could still see the pencil edit link in project-scoped page headers such as Challenges, Users, and Assets. Root cause Those header title actions still used the broader project management permission check. Copilot project membership is allowed by that helper for other write flows, but project detail editing requires the narrower Full Access edit check. What was changed Updated the project header edit links on the Challenges, Users, and Assets tabs to render only when the loaded project passes checkCanEditProjectDetails. Kept the existing broader manage permission for non-detail workflows such as member, asset, challenge, and billing notice behavior. Any added/updated tests Added page coverage for hiding the project header edit link when a copilot can manage the project but cannot edit project details, and for keeping the link visible when detail editing is allowed.
PM-4999 Persist match state on clearing filter
Patch lost commits from 5014
What was broken Completed challenge billing rows displayed the billing ledger amount as member payments, so the challenge fee was calculated again on top of an amount that already included markup. Root cause The billing account modal assumed challenge line items already exposed the member-payment subtotal for privileged users, but the billing ledger row amount includes member payments plus markup. What was changed The billing account modal now derives the visible member-payment amount from the ledger amount and billing markup before calculating the challenge fee column, while still preferring API-provided member payment values when present. Any added/updated tests Updated BillingAccountLineItemsModal coverage to assert a $13.30 ledger row with 33% markup renders as $10.00 member payments and a $3.30 challenge fee, not a $4.39 fee.
What was broken Copilots viewing billing account details saw challenge member payment rows with a markup-adjusted amount, such as $6.88, instead of the challenge cost shown in challenge billing, such as $9.15. Root cause The billing account line item modal used `memberPaymentAmount` before checking the external entry type. Challenge rows can include a `memberPaymentAmount` alias that has markup math applied even though the challenge row `amount` is already the visible challenge cost. What was changed Challenge line items now always use the raw challenge row amount for the displayed Member Payments value. Engagement rows still use API-provided member payment amounts when available and retain the existing markup fallback behavior. Any added/updated tests Added a PM-5038 regression test covering a challenge row where `amount` is 9.15 and `memberPaymentAmount` is 6.88, and updated the API-provided member payment test to cover engagement rows.
…roval-flow PM-4684 challenge approval flow
PM-5043: Correct billing line item member payments
PM-5038: Fix copilot challenge member payment rows
PM-4802: Review App-Page misaligned in mobile view
PM-5032 Wallet Admin updates
…roval-flow PM-4684 challenge approval flow
…roval-flow Always show approval status & reason
Fix skill deletedAt prop
PM-5052 - launch btn fix
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?