Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
72 commits
Select commit Hold shift + click to select a range
758e5c3
PM-3851 #time 5h Split reviews in 2 tabs: human & ai
vas3a Feb 17, 2026
4dfa263
PM-3851 #time 3h ai tab split into template, manual config
vas3a Feb 17, 2026
8c4214a
PM-3851 #time 4h mock reviewers API servies
vas3a Feb 18, 2026
4419e7b
PM-3851 #time 3h use template view
vas3a Feb 18, 2026
ff154a2
PM-3851 #3.5h manual config for ai reviewers
vas3a Feb 19, 2026
126a57a
PM-3851 - #4.5h start integration
vas3a Feb 20, 2026
da740a9
PM-3851 #time 2h refactor manual & template views
vas3a Feb 20, 2026
4fa4d79
PM-3851 #time 1h cleanup
vas3a Feb 20, 2026
1b601cf
PM-3851 #time 1h more cleanup
vas3a Feb 20, 2026
5a32ff8
PM-3851 #30m render ai & human reviewers tabs from start, to keep sta…
vas3a Feb 20, 2026
3f71798
PM-3851 #time 1h autosave ai review config
vas3a Feb 20, 2026
7e375bc
PM-3851 #time 4h work on integration
vas3a Feb 20, 2026
2cb88bd
small updates
vas3a Feb 20, 2026
ca0fcc0
PM-3851 #time 30m update weights validation
vas3a Feb 23, 2026
5cee3cb
PM-3851 - #time 1h review configuration summary (in readonly mode)
vas3a Feb 23, 2026
a4998fc
sast fix
vas3a Feb 23, 2026
d68e75b
deploy to dev
vas3a Feb 23, 2026
87bea15
Merge pull request #1733 from topcoder-platform/PM-3851_ai-review-con…
vas3a Feb 23, 2026
f9c8be2
PM-3851 lint & cleanup
vas3a Feb 23, 2026
819d894
fix api for templates fetching
vas3a Feb 23, 2026
69c9636
fetch templates: track to uppercase
vas3a Feb 24, 2026
a9c64a3
PM-4040 #time 30m update summary render for human reviewers
vas3a Feb 24, 2026
71dfee2
PM-4037 #time 30m review summary: update how we preview legacy ai wor…
vas3a Feb 24, 2026
54ade78
PM-4030 #time 10m When Ch already has a submission, AI config must no…
vas3a Feb 24, 2026
2fb7a4c
PM-4028 #time 5m Weight Validation message does not display all weights
vas3a Feb 24, 2026
d4c4f25
lint
vas3a Feb 24, 2026
6e4fe99
PM-4016 #time 1h fix saving member reviewer
vas3a Feb 24, 2026
e102a09
Fix human review asignment
vas3a Feb 24, 2026
a94041a
lint
vas3a Feb 24, 2026
2eac344
Merge branch 'develop' of github.com:topcoder-platform/work-manager i…
vas3a Feb 25, 2026
928f7da
PM-4030 #time 30m update ai config state for existing challenges
vas3a Feb 25, 2026
75b447d
PM-4040 #time 30m show assigned members for human review
vas3a Feb 25, 2026
2220084
lint
vas3a Feb 25, 2026
251f32b
Merge branch 'develop' of github.com:topcoder-platform/work-manager i…
vas3a Mar 11, 2026
3ea0d0b
fix circleci
vas3a Mar 11, 2026
0b47944
lint
vas3a Mar 11, 2026
912cbc6
PM-4275 Integrate engagement description auto rewrite
himaniraghav3 Mar 12, 2026
aeaedd0
Make button full width
himaniraghav3 Mar 12, 2026
805d7ee
Add prod env var
himaniraghav3 Mar 12, 2026
dab30b5
Merge pull request #1738 from topcoder-platform/PM-4275
himaniraghav3 Mar 12, 2026
985b313
PM-3926 #time 45m show "virtual" ai screening phase when ai config is…
vas3a Mar 12, 2026
66c3571
PM-3813 #time 1h PR feedback
vas3a Mar 12, 2026
fd20bf8
lint
vas3a Mar 12, 2026
077ba98
Merge pull request #1737 from topcoder-platform/PM-3813_ai-reviewer-c…
kkartunov Mar 12, 2026
ee522ee
Merge pull request #1739 from topcoder-platform/PM-3926_show-ai-phase
kkartunov Mar 12, 2026
3c4ef0c
Update Trivy action version to 0.35.0
kkartunov Mar 12, 2026
6936cdd
PM-4309 #time 30m remove ai reviewers when removing config
vas3a Mar 16, 2026
fdcc4f0
Merge pull request #1740 from topcoder-platform/PM-4302_ai-config-fixes
vas3a Mar 16, 2026
faf1577
show virtual ai screening phase after checkpoint submission
vas3a Mar 16, 2026
74ac44f
Merge pull request #1741 from topcoder-platform/PM-4302_ai-config-fixes
vas3a Mar 16, 2026
1546cf8
render ai screening phase in form editor
vas3a Mar 16, 2026
0df49af
Disable "ai only" for review config
vas3a Mar 17, 2026
86fa6ce
Merge pull request #1742 from topcoder-platform/PM-4302_ai-config-fixes
vas3a Mar 17, 2026
a5a1ef9
Fixes for PM vs TM handling
jmgasper Mar 19, 2026
1a98258
Merge branch 'develop' into permissions-hotfix
jmgasper Mar 19, 2026
db9c6c1
Merge pull request #1745 from topcoder-platform/permissions-hotfix
jmgasper Mar 19, 2026
fd50d60
PM-4438 - Update infographic when ai is gating
vas3a Mar 23, 2026
d335e87
Merge pull request #1749 from topcoder-platform/PM-4438_infographic-w…
vas3a Mar 23, 2026
322c44a
fix missing box
vas3a Mar 23, 2026
330376b
Merge pull request #1750 from topcoder-platform/PM-4438_infographic-w…
vas3a Mar 23, 2026
52ff694
Bad condition
vas3a Mar 23, 2026
66aa88c
Merge pull request #1751 from topcoder-platform/PM-4438_infographic-w…
vas3a Mar 23, 2026
f8ed7fa
Engagements v4 updates
jmgasper Mar 23, 2026
468c44c
Add missing file
jmgasper Mar 23, 2026
6e2014f
Merge branch 'develop' of github.com:topcoder-platform/work-manager i…
jmgasper Mar 24, 2026
bb3d775
Date selector fix on engagement assignment popup
jmgasper Mar 24, 2026
c32e587
Ability for talent managers to edit engagements
jmgasper Mar 24, 2026
bc81268
Edit assignment tweak for billing start date
jmgasper Mar 24, 2026
ccb0c9c
Tweak to popup date format when editing assignment
jmgasper Mar 24, 2026
25a5d2a
Engagements v4 QA updates
jmgasper Mar 24, 2026
b979c86
Tweak for editing assignment date format
jmgasper Mar 25, 2026
e1e0f92
Support decimal hours per week in engagement agreement PM-4497
jmgasper Mar 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,7 @@ workflows:
context: org-global
filters: &filters-dev
branches:
only: ["develop", "pm-2917", "points", "pm-3270", "permissions-hotfix"]
only: ["develop", "pm-2917", "points", "pm-3270", "projects-api-v6", "PM-3813_ai-reviewer-configs"]

# Production builds are exectuted only on tagged commits to the
# master branch.
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/trivy.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ jobs:
uses: actions/checkout@v4

- name: Run Trivy scanner in repo mode
uses: aquasecurity/trivy-action@0.33.1
uses: aquasecurity/trivy-action@0.35.0
with:
scan-type: "fs"
ignore-unfixed: true
Expand Down
1 change: 1 addition & 0 deletions config/constants/development.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ module.exports = {
TC_FINANCE_API_URL: process.env.TC_FINANCE_API_URL || `${API_V6}/finance`,
TC_AI_API_BASE_URL: process.env.TC_AI_API_BASE_URL || `${API_V6}/ai`,
TC_AI_SKILLS_EXTRACTION_WORKFLOW_ID: process.env.TC_AI_SKILLS_EXTRACTION_WORKFLOW_ID || 'skillExtractionWorkflow',
TC_AI_AUTOWRITE_WORKFLOW_ID: process.env.TC_AI_AUTOWRITE_WORKFLOW_ID || 'jdAutowriteWorkflow',
CHALLENGE_DEFAULT_REVIEWERS_URL: `${DEV_API_HOSTNAME}/v6/challenge/default-reviewers`,
CHALLENGE_API_VERSION: '1.1.0',
CHALLENGE_TIMELINE_TEMPLATES_URL: `${DEV_API_HOSTNAME}/v6/timeline-templates`,
Expand Down
1 change: 1 addition & 0 deletions config/constants/local.js
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ module.exports = {
ENGAGEMENTS_ROOT_API_URL: `${LOCAL_CHALLENGE_API}/engagements`,
APPLICATIONS_API_URL: `${LOCAL_CHALLENGE_API}/engagements/applications`,
TC_FINANCE_API_URL: process.env.TC_FINANCE_API_URL || 'http://localhost:3009/v6/finance',
TC_AI_AUTOWRITE_WORKFLOW_ID: process.env.TC_AI_AUTOWRITE_WORKFLOW_ID || 'jdAutowriteWorkflow',
CHALLENGE_DEFAULT_REVIEWERS_URL: `${LOCAL_CHALLENGE_API.replace(/\/v6$/, '')}/v6/challenge/default-reviewers`,
CHALLENGE_API_VERSION: '1.1.0',
CHALLENGE_TIMELINE_TEMPLATES_URL: `${LOCAL_CHALLENGE_API}/timeline-templates`,
Expand Down
5 changes: 3 additions & 2 deletions config/constants/production.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ module.exports = {
TC_FINANCE_API_URL: process.env.TC_FINANCE_API_URL || `${API_V6}/finance`,
TC_AI_API_BASE_URL: process.env.TC_AI_API_BASE_URL || `${API_V6}/ai`,
TC_AI_SKILLS_EXTRACTION_WORKFLOW_ID: process.env.TC_AI_SKILLS_EXTRACTION_WORKFLOW_ID || 'skillExtractionWorkflow',
TC_AI_AUTOWRITE_WORKFLOW_ID: process.env.TC_AI_AUTOWRITE_WORKFLOW_ID || 'jdAutowriteWorkflow',
CHALLENGE_DEFAULT_REVIEWERS_URL: `${PROD_API_HOSTNAME}/v6/challenge/default-reviewers`,
CHALLENGE_API_VERSION: '1.1.0',
CHALLENGE_TIMELINE_TEMPLATES_URL: `${PROD_API_HOSTNAME}/v6/timeline-templates`,
Expand All @@ -37,9 +38,9 @@ module.exports = {
RESOURCE_ROLES_API_URL: `${PROD_API_HOSTNAME}/v6/resource-roles`,
SUBMISSIONS_API_URL: `${PROD_API_HOSTNAME}/v6/submissions`,
REVIEW_TYPE_API_URL: `${PROD_API_HOSTNAME}/v6/reviewTypes`,
REVIEWS_API_URL: `${PROD_API_HOSTNAME}/v6/reviews`,
REVIEWS_API_URL: `${PROD_API_HOSTNAME}/v6/reviews`,
SCORECARDS_API_URL: `${PROD_API_HOSTNAME}/v6/scorecards`,
WORKFLOWS_API_URL: `${PROD_API_HOSTNAME}/v6/workflows`,
WORKFLOWS_API_URL: `${PROD_API_HOSTNAME}/v6/workflows`,
SUBMISSION_REVIEW_APP_URL: `https://submission-review.${DOMAIN}/challenges`,
STUDIO_URL: `https://studio.${DOMAIN}`,
CONNECT_APP_URL: `https://connect.${DOMAIN}`,
Expand Down
8 changes: 5 additions & 3 deletions src/actions/engagements.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import {
fetchEngagement,
createEngagement as createEngagementAPI,
updateEngagement as updateEngagementAPI,
patchEngagement,
deleteEngagement as deleteEngagementAPI
} from '../services/engagements'
import { fetchSkillsByIds } from '../services/skills'
Expand Down Expand Up @@ -345,7 +344,10 @@ export function updateEngagementDetails (engagementId, engagementDetails, projec
}

/**
* Partially updates engagement details
* Partially updates engagement details.
*
* The engagements API currently accepts partial engagement payloads through the
* `PUT :id` update route rather than a dedicated `PATCH :id` handler.
* @param {String|Number} engagementId
* @param {Object} partialDetails
* @param {String|Number} projectId
Expand All @@ -358,7 +360,7 @@ export function partiallyUpdateEngagementDetails (engagementId, partialDetails,
})

try {
const response = await patchEngagement(engagementId, partialDetails)
const response = await updateEngagementAPI(engagementId, partialDetails)
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[❗❗ correctness]
The change from patchEngagement to updateEngagementAPI implies that the API endpoint for partial updates is the same as for full updates. Ensure that the updateEngagementAPI function is capable of handling partial updates correctly, as this could lead to unintended data overwrites if not properly managed.

const [hydratedEngagement] = await hydrateEngagementSkills([_.get(response, 'data', {})])
const updatedDetails = normalizeEngagement(hydratedEngagement || {})
return dispatch({
Expand Down
6 changes: 6 additions & 0 deletions src/actions/payments.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ const ENGAGEMENT_PAYMENT_STATUS = 'ON_HOLD_ADMIN'
* @param {String} remarks
* @param {String|Number} agreementRate
* @param {String|Number} amount
* @param {String|Number} hoursWorked
* @param {String|Number} billingAccountId
* @param {String} paymentStatus
*/
Expand All @@ -30,6 +31,7 @@ export function createMemberPayment (
remarks,
agreementRate,
amount,
hoursWorked,
billingAccountId,
paymentStatus = ENGAGEMENT_PAYMENT_STATUS
) {
Expand All @@ -39,6 +41,7 @@ export function createMemberPayment (
})

const parsedAmount = Number(amount)
const parsedHoursWorked = Number(hoursWorked)
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[⚠️ correctness]
Consider adding validation to ensure hoursWorked is a valid number before parsing. This will prevent potential issues if hoursWorked is not a number or is an unexpected type.

const trimmedTitle = typeof paymentTitle === 'string'
? paymentTitle.trim()
: (paymentTitle != null ? String(paymentTitle) : '')
Expand All @@ -60,6 +63,9 @@ export function createMemberPayment (
description: trimmedTitle,
externalId: String(assignmentId),
attributes,
...(Number.isFinite(parsedHoursWorked) && parsedHoursWorked > 0
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[⚠️ correctness]
The condition Number.isFinite(parsedHoursWorked) && parsedHoursWorked > 0 is used to determine if hoursWorked should be included in the payload. Ensure that this logic aligns with business requirements, as it currently excludes zero and negative values. If zero is a valid input, this condition may need adjustment.

? { hoursWorked: parsedHoursWorked }
: {}),
...(paymentStatus ? { status: paymentStatus } : {}),
details: [
{
Expand Down
Loading
Loading