Skip to content

Prod - August 2026 Release 3 - #2158

Merged
jmgasper merged 71 commits into
masterfrom
dev
Aug 18, 2026
Merged

Prod - August 2026 Release 3#2158
jmgasper merged 71 commits into
masterfrom
dev

Conversation

jmgasper and others added 30 commits August 12, 2026 14:01
What was broken

Support ticket descriptions and replies displayed headings, emphasis, links, uploaded filenames, and lists with plain reset styling. Nested list items also inherited the conversation timeline rail and dot.

Root cause

The platform CSS reset removes default heading, link, and list presentation, while the Support Markdown renderer did not restore scoped styles. The ticket timeline selector targeted every descendant list item instead of only top-level messages.

What was changed

Added scoped Support Markdown styles for headings, bold and italic text, links, and ordered and unordered lists. Limited timeline styling to direct conversation children so Markdown lists render normally. Uploaded files remain safely stored as Markdown links and now render as visibly clickable attachments.

Any added/updated tests

Added MarkdownContent regression coverage for safe GFM configuration, attachment Markdown, required presentation rules, and direct-child timeline scoping. All 8 Support suites and 22 Support tests pass. The full repository suite retains the same unrelated 19 failing suites and 38 failing tests reproduced on an untouched origin/dev worktree.
What was broken
Ticket raisers could keep seeing an Unassigned label and stale ticket content after support staff updated the ticket.

Root cause
The ticket list and detail views disabled focus revalidation, while the asynchronous mark-read completion could replace fresh SWR data with a captured stale ticket snapshot.

What was changed
Enabled focus revalidation for ticket lists and details, and changed mark-read cache handling to update only hasUnread on the latest cached ticket.

Any added/updated tests
Added ticket-list cache freshness coverage and extended ticket-detail tests to verify focus revalidation and preserve fresh assignee data during the mark-read race.
What was broken
Support Team members could open the reply editor and submit a response without first assigning the ticket to themselves.

Root cause
The ticket detail page allowed replies based only on ticket status and ownership, ignoring the current support user's assignment.

What was changed
Hide the reply editor from unassigned non-owner support users, explain that assignment is required, and document the staff reply workflow.

Any added/updated tests
Added component coverage for blocked unassigned staff replies and allowed assigned staff replies while retaining the existing owner and closed-ticket cases.
PM-5844: Require assignment before support replies
PM-5850: restore support rich text formatting
What was broken

Platform UI disabled both launch entry points and rejected activation while a Fun challenge was pending budget approval.

Root cause

The page and form launch gates applied the manual budget-approval requirement to every challenge without considering the Fun challenge flag.

What was changed

Exempted Fun challenges from the UI budget-approval gates while preserving the existing billing-account launch checks. Updated the challenge editor documentation to describe the exception.

Any added/updated tests

Added page and form regressions covering enabled launch controls and a successful Active update for a pending Fun challenge. Updated shared launch fixtures to explicitly satisfy the existing approval and billing prerequisites.
What was broken
Support Team members saw unread badges and styling for tickets that were not assigned to them, including closed tickets.

Root cause
The ticket table applied the API's per-viewer hasUnread value directly without considering whether a Support Team viewer was assigned to the ticket.

What was changed
Derive the displayed unread state from both hasUnread and current-user assignment for Support Team viewers. Apply that state consistently to desktop and mobile badges, styling, and the desktop accessibility label while preserving ordinary member behavior.

Any added/updated tests
Added TicketsTable regression coverage for the assigned Support Team member, another Support Team member viewing a closed ticket, and an ordinary member.
PM-5194: Allow Fun challenges to launch without approval
PM-5845: Refresh support ticket assignments
PM-5851: Scope unread indicators to assigned support tickets
What was broken

After assigning a ticket from the Support ticket list, the detail screen could still show the ticket as unassigned and offer "Assign to me" until the page was refreshed.

Root cause

The asynchronous mark-read completion performed a data-bearing SWR mutation that could supersede an in-flight detail revalidation and preserve stale pre-assignment data.

What was changed

Changed the post-read cache update to a revalidation-only SWR mutation, ensuring the detail page reloads current server state without invalidating a concurrent assignment refresh.

Any added/updated tests

Updated the TicketDetailPage regression test to verify that completing the mark-read request triggers a zero-argument, revalidation-only mutation.
What was broken
Support Team members could close an unassigned ticket, and the closed-ticket detail did not identify who closed it.

Root cause
The close control checked only Support Team membership, and the UI contract omitted the closer ID already stored by the API.

What was changed
Disable closure unless the current Support Team user is assigned, accept the optional closer ID, and display the matching assignee handle with a stored-ID fallback.

Any added/updated tests
Updated TicketDetailPage coverage for unassigned and assigned closure access, closer-handle display, and legacy closer-ID fallback.
What was broken

Dashboard report tooltips listed each series value for a month but did not show the combined monthly total.

Root cause

The shared Highcharts configuration only defined the header and per-series rows. It had no formatter or footer that calculated a total, and stack totals would not cover the grouped Challenge Participation report.

What was changed

Extended the shared dashboard tooltip formatter to preserve the existing Highcharts content, sum every hovered series point, and append a comma-formatted Total row. Currency reports include the dollar prefix while count reports remain unit-free.

Any added/updated tests

Updated DashboardChart coverage for currency totals, stacked count totals, and grouped count totals. All 13 Reports suites (54 tests), lint, and the production build pass. The full repository test command was run twice and retains 18 unrelated failures in existing Work, Wallet Admin, Profiles, and Engagements tests.
…on-review-context

PM-5866 - allow user to manually create review context
What was broken

Copilot-only users editing Design Challenges saw the complete review configuration and had to assign checkpoint and final screeners independently.

Root cause

The Review section did not distinguish copilot-only Design Challenge editing from admin and manager configuration, and each screening reviewer synchronized only its own resource role.

What was changed

Show a single Screener selector for copilot-only Design Challenges while leaving the full interface for administrators and managers. Synchronize the selected member across Checkpoint Screener and Screener resources, preserve hidden reviewer defaults, and guard replacement, clearing, legacy assignments, request failures, and overlapping updates.

Any added/updated tests

Added coverage for role and challenge-type gating, simplified rendering, two-round and one-round assignment, replacement and clearing, legacy handle-only resources, fetch failures, in-flight locking, and preservation of reviewer configuration.
What was broken

The previous PM-5787 changes allowed the standard Screener assignment to be deferred, but an empty Checkpoint Screener assignment still blocked draft saves and launches.

Root cause

The shared optional-assignment helper matched only the exact Screening phase name and explicitly excluded Checkpoint Screening.

What was changed

Extended the optional member-assignment policy to both Screening and Checkpoint Screening while keeping their reviewer configurations and scorecards required. Updated the Challenge Editor documentation to describe both deferred roles.

Any added/updated tests

Updated schema, required-field, save, launch, resource-allocation, and hydration coverage for an unassigned Checkpoint Screener. The four focused suites pass with 124 tests; lint and the production build pass. The full repository run matches the clean dev baseline with 222 passing suites and 18 unrelated failing suites.
PM-5462 Preferred roles dropdown updates
What was broken

Late July 31 SFDC payments could render as August 1 when the report was viewed from a browser in a positive-offset timezone.

Root cause

The payment table formatted timestamps in the browser's local timezone even though SFDC payment reports use America/New_York calendar dates.

What was changed

Render SFDC payment timestamps explicitly in America/New_York while preserving the existing browser-local formatting for billing-account profile dates.

Any added/updated tests

Added a Reports page regression using the reported July 31 boundary in Asia/Colombo. The test also confirms billing-account profile dates keep their existing formatting.
What was broken
Review showed only the newest submission per member when a Design challenge allowed more than one. Work Manager could also reset the visible submission-limit selection after saving a draft when the save response omitted that metadata entry.

Root cause
Review reduced every finite limit to the API's single isLatest flag and grouped history without using the configured count or exact submission type. The draft editor trusted sparse save-response metadata when resetting the form.

What was changed
Resolve the same latest-X Design policy used by the backend, rank complete member/type history before phase eligibility, and display every eligible Screening and Review row within that window. Preserve unlimited Design behavior and Development's latest-one behavior. Retain the submitted submissionLimit value when a successful draft response omits that entry.

Any added/updated tests
Added and updated regression coverage for finite counts, unlimited and malformed metadata, independent contest/checkpoint histories, rank-before-eligibility, Review row forwarding, Screening selection, and Work Manager draft-save metadata preservation.
himaniraghav3 and others added 26 commits August 13, 2026 12:56
PM-5381 Add Member not found page for non existing handles
PM-5819 Fix engagement details styling
PM-5820 Show N/A daysLeftInEngagement for terminated assignments
PM-5755: Simplify design screener assignment
PM-5787: Allow deferred checkpoint screener assignment
PM-5839: Render SFDC payment dates consistently
PM-5758: finish design submission limit handling
Resolve the TicketDetailPage test conflict while preserving both reply-role labelling and the newer assignment/closure coverage. Fix stale deferred-screener fixture references exposed by the merged dev build.
PM-5857: Label support team replies
PM-5848: Refresh support ticket details after read
PM-5854: Make challenge link visually distinct
What was broken

QA re-tested the Design challenge Review section and still saw every reviewer
role (Checkpoint Review, Review, Approval, Checkpoint Screening, Screening)
instead of the single Screener selector requested on the ticket.

Root cause

The first fix gated the simplified Review section on the copilot-only billing
role check (isCopilot && !isAdmin && !isManager). QA and most Topcoder staff
accounts carry the administrator role, so the gate never evaluated to true for
them and the full tabbed configuration kept rendering. The Design track and
Challenge type parts of the gate were correct; only the role restriction was
wrong.

What was changed

The simplified Screener-only Review section now renders for every user editing
a Design Challenge, matching the ticket ("for the entire Review section we need
Screener + dropdown: Select user"). Administrators no longer lose the detailed
configuration: ReviewersField receives a canConfigureFullReview flag and, when
set, renders a "Show advanced review configuration" toggle that expands the
existing Human Review / AI Review / Review Context tabs on demand and collapses
back to the Screener selector. Copilots and managers only see the Screener
selector. The AI-gating "Manual review configuration is required" validation
stays suppressed while the simplified view is showing and re-applies as soon as
an administrator expands the advanced configuration. Challenge Editor
documentation was updated to describe the new behavior.

Any added/updated tests

ChallengeEditorForm.spec now asserts that administrators and managers also get
the simplified Design Challenge review section and that only administrators
receive the advanced-configuration capability. ReviewersField.spec adds cases
for the collapsed-by-default admin view, expanding and collapsing the advanced
configuration, the absence of the toggle for non-admins and non-Design
sections, and the suppressed AI-gating error in the simplified view. The
pre-existing AI-gating assertion in ReviewersField.spec was failing on dev
because the inline message is replaced by the registered form error once the
effect runs; it now asserts the registered reviewers form error instead, so the
suite is green.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
What was broken
The Work app in platform-ui had no control for the show_data_dashboard challenge
metadata flag, so copilots could not enable the data dashboard graph on a
Marathon Match challenge from the challenge editor. MM 166 launched without the
dashboard because the flag had to be set manually against challenge-api-v6.

Root cause
The flag was only ever consumed, never authored. community-app reads the
show_data_dashboard metadata entry to decide whether to render the challenge
dashboard tab, and challenge-api-v6 stores it as a generic key/value metadata
entry, but no editor field ever wrote it.

What was changed
- Added ShowDashboardField, a "Show Dashboard" checkbox that reads and writes the
  exact string-valued show_data_dashboard challenge metadata entry, following the
  existing StockArtsField/RegisteredMemberDownloadField metadata patterns.
- Rendered the checkbox in the challenge editor's Advanced Options section only
  for Marathon Match challenge types.
- Defaulted the checkbox to checked for fun challenges that have no saved
  show_data_dashboard value yet, and persisted that implied value so a save keeps
  the dashboard enabled. A saved value always wins, so the dashboard can be
  turned back off.
- Seeded show_data_dashboard during Marathon Match creation as true for fun
  challenges and false otherwise, so the default takes effect as soon as the
  challenge is set up.
- Documented the new field in the ChallengeEditorPage README.

No changes were needed in challenge-api-v6 or community-app: challenge metadata
is a generic name/value collection and community-app already renders the
dashboard tab from this flag.

Added/updated tests
- New ShowDashboardField.spec.tsx covering the standard Marathon Match default
  (unchecked, no metadata written), the fun-challenge default (checked and
  persisted as "true"), saved metadata winning over the fun-challenge default,
  and toggling persisting exact string booleans.
- New parameterized ChallengeEditorForm.spec.tsx case asserting that creating a
  Marathon Match sends show_data_dashboard "true" for fun challenges and "false"
  otherwise; the FunChallengeField mock now binds to the form so the fun flag can
  be toggled in tests.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
PM-5755: Show the simplified Design review section for every role
…r-defaults

PM-5755: Preserve hidden Design reviewer defaults
PM-5878: Add Show Dashboard flag to Marathon Match advanced settings
…r-defaults

PM-5755: Assign Design reviewers to the copilot
@jmgasper
jmgasper requested a review from kkartunov as a code owner August 18, 2026 04:02
@jmgasper
jmgasper merged commit 29b6483 into master Aug 18, 2026
9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants