Skip to content

v2.71.0

Brinda Sasikumar edited this page Apr 27, 2026 · 3 revisions

Release v2.71.0

Date: 2026-04-28 Tag: v2.71.0 Commits since v2.70.0: 64 Version type: Minor bump (biweekly) — contains BREAKING schema changes


⚠️ GraphQL Breaking Changes

This release removes fields that were deprecated in v2.70.0 and restructures development program inputs. Any client query using the fields below will error after deploy.

Field / Type Change
AssessmentStep.assessmentResults Removed
Community.pools Removed
Community.developmentPrograms Removed (deprecated v2.70.0)
DevelopmentProgram.community Removed (deprecated v2.70.0)
DevelopmentProgram.name Nullable → non-null
DevelopmentProgram.descriptionForProfile Nullable → non-null
CreateCommunityInterestInput userId + community: CommunityBelongsTo!communityId: UUID!
CreateCommunityInterestInput.interestInDevelopmentPrograms Removed
UpdateCommunityInterestInput.interestInDevelopmentPrograms Removed
CreateDevelopmentProgramInterestInput Deleted
UpdateDevelopmentProgramInterestInput Deleted
CreateDevelopmentProgramInterestHasMany Deleted
UpdateDevelopmentProgramInterestHasMany Deleted

Deprecations (non-breaking):

  • CommunityInterest.interestInDevelopmentPrograms → use user.developmentProgramUserRecords
  • DevelopmentProgram.descriptionForNominations → replaced by pivot field on community_development_program_talent_nomination_event

Migration Rollback Safety

Referenced by the Rollback Procedure during incidents. Check this before running migrate:rollback.

Migration Safe to rollback? Notes
2026_04_16_165303_create_development_program_user ✅ Yes Drops development_program_user table — no user-facing data loss
2026_04_10_162756_update_development_program_nullable ✅ Yes Makes columns nullable again — safe
2026_04_10_141222_add_development_program_abbreviation ✅ Yes Drops column — data loss only if abbreviations were entered
2026_04_10_141210_add_development_program_information_url ✅ Yes Drops column — data loss only if URLs were entered
2026_04_10_171836_add_last_sign_in_iss ✅ Yes Drops column — non-critical data
2026_04_08_180346_update_development_program_interests ⚠️ Partial Drops community_development_program_id — any data written to it after deploy is permanently lost on rollback

🚚 Deployment Steps

Deployment order

1. Set Reverb env vars in IAC  ← before deploy
2. Deploy artifact
3. Run pre-flight SQL check    ← see below
4. php artisan migrate
5. php artisan db:seed --class=RolesAndPermissionsSeeder
6. Start / restart Reverb service

Pre-flight check — run before php artisan migrate on each environment

update_development_program_nullable will fail if any development_programs row has a null name or description_for_profile. Run this first:

SELECT id, name, description_for_profile
FROM development_programs
WHERE name IS NULL OR description_for_profile IS NULL;

Must return 0 rows. If rows are returned, fix the data before migrating.


PR #16438 — Development program create/update/view

Source: #16438 Label: deployment

php artisan db:seed --class=RolesAndPermissionsSeeder

PR #16290 — GraphQL Subscriptions (Laravel Reverb)

Source: #16290 Label: deployment

New WebSocket infrastructure — Reverb service must be running post-deploy.

New env vars required in IAC for each environment:

REVERB_APP_ID=gcdt
REVERB_APP_KEY=gcdt
REVERB_APP_SECRET=<generate random string per environment>
REVERB_HOST=<environment hostname>
REVERB_PORT=6001
REVERB_SCHEME=http
REVERB_SERVER_HOST=0.0.0.0
REVERB_SERVER_PORT=6001
VITE_REVERB_APP_KEY=gcdt
PUSHER_APP_CLUSTER=mt1

Note: PR #16290 used :truck: text shortcode instead of the 🚚 emoji in the deployment section header. The auto-labeler would miss this pattern — the deployment label was applied manually. Update the deployment-labeler.yml regex to handle both formats.


🧪 Test Plan

Pre-deploy checklist

  • Null check passed — development_programs has no null name or description_for_profile
  • Reverb env vars set in UAT IAC
  • Reverb service configured to start post-deploy

Deployment verification

  • php artisan migrate — 6 migrations applied cleanly
  • update_development_program_nullable ran without errors
  • RolesAndPermissionsSeeder ran — new development program permissions exist
  • Reverb WebSocket service is running and reachable on port 6001

Development programs

  • Admin can create a development program (name, description, abbreviation, information URL)
  • Admin can update a development program
  • Development programs table lists all programs
  • associatedDevelopmentPrograms on Community returns correct programs
  • Old developmentPrograms field on Community is gone — verify no active queries depend on it
  • Old community field on DevelopmentProgram is gone
  • User development program records accessible via developmentProgramUserRecords

Community interests refactor

  • CreateCommunityInterest mutation works with new communityId input
  • UpdateCommunityInterest mutation works
  • interestInDevelopmentPrograms deprecated field still returns data during transition period

GraphQL subscriptions

  • WebSocket connection established in browser (Network tab → WS)
  • Subscription events fire in real time
  • No Reverb/Pusher console errors on load

CanadaLogin continued

  • Account settings page loads and saves for CanadaLogin users
  • Government info form removed — no broken links or 404s
  • IAP sign-in/sign-up pages removed — redirects to default correctly

Auth improvements

  • Inactivity dialog appears after idle period and logs user out
  • Auth health check endpoint responds
  • last_sign_in_iss column populated on user login

Candidate navigation

  • Next / previous candidate links work in candidate review view
  • Navigation preserves pool and filter context

Regression

  • Application submission flow end-to-end
  • Talent nomination form submits correctly
  • Assessment plan visible on pool (verify assessmentResults removal has no visible regression)
  • Pool listings still work (verify Community.pools removal has no visible regression)
  • Search request table loads

📋 What's Changed

Features

  • [Feature] Professionalization component (#16566)
  • [Feature] Inactivity dialog (#16539)
  • [Feature] Auth health checks (#16563)
  • [Feature] CanadaLogin Account Settings Page (#16526)
  • [Feature] Verification steps on employee profile (#16443)
  • [Feature] Updates nomination form fields (#16468)
  • [Feature] Continued development program refactor (#16396)
  • [Feature] Adds development program create, update, view, table (#16438)
  • [Feature] Store last sign in ISS (#16439)
  • [Feature] Remove customized IAP signin/signup pages (#16588)
  • [Feature] Update sign in page (#16477)
  • [Feat] Implement graphql subscriptions (#16290)
  • [Feat] Full next/prev candidates links (#16587)
  • [Feat] Replace meta app url on post deploy (#16430)
  • [Feat] Updates to application success page (#16543)
  • [Feat] Manage CL link opens in new tab (#16611)

Refactor / Debt

  • [Refactor] Change how user's development programs work (#16523)
  • [Refactor] Remove government info form (#16557)
  • [Debt] Reduce can root usage (#16533)
  • [Debt] Vite 8 upgrade (#16429)
  • [Dep] TypeScript v6 upgrade (continued)

Bug Fixes

  • [Fix] Localized subfields in error summary (#16561)
  • [Fix] ResponsiveTable search param race condition (#16532)
  • [Fix] Skill breadcrumb text (#16487)
  • [Bug] Update register page FAQ headings (#16593)
  • [Bug] Make taken emails valid for API (#16442)

Copy

  • [Copy] Update sign-up/sign-in troubleshooting copy (#16562)
  • [Copy] Update sign out message (#16522)