Skip to content
Merged

Test #2525

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
227 commits
Select commit Hold shift + click to select a range
bc5b766
Upgrade to .NET 10 + ABP 10.3 + Mapperly migration
AndreGAot Apr 28, 2026
473d06c
Merge remote-tracking branch 'origin/dev' into upgrade-to-NET10
AndreGAot Apr 28, 2026
e6c8f71
Merge remote-tracking branch 'origin/dev' into upgrade-to-NET10
AndreGAot Apr 28, 2026
b033e1c
More .NET10 upgrade
AndreGAot Apr 29, 2026
c456495
Merge origin/dev into feature/AB#32683-net10-upgrade
AndreGAot Apr 30, 2026
7b37191
Clean up build warnings: 869 RMG020 + 156 NU1510 -> 0
AndreGAot Apr 30, 2026
e75e1a5
AB#32683 warnings and error fixes
AndreGAot May 1, 2026
7a49c1f
Merge remote-tracking branch 'origin/dev' into feature/AB#32683-net10…
AndreGAot May 1, 2026
809904d
AB#32683 fix issue with identity roles
AndreGAot May 1, 2026
f0c2658
AB#32683 address copilot feedback
AndreGAot May 1, 2026
3873546
AB#32683 js fixes
AndreGAot May 2, 2026
0ccbc87
AB#32683 more mapperly warning
AndreGAot May 4, 2026
0fe229c
AB#32683 update docker cli in dockerimage
AndreGAot May 4, 2026
e2aa494
AB#32683 fix warning and document updates
AndreGAot May 4, 2026
9012d68
AB#32683 add explicit update to account coding for mapper
AndreGAot May 4, 2026
73dce77
AB#32683 fixes to configurations section
AndreGAot May 4, 2026
631add4
AB#32683 comment out dev-certs
AndreGAot May 4, 2026
520ea20
AB#32683 fixes after merge
AndreGAot May 5, 2026
e8a23dd
AB#32683 add custom permission check and mapper updates
AndreGAot May 6, 2026
c1b950c
AB#32684: Register AmazonS3Client as singleton for reusability
aurelio-aot May 6, 2026
1accd3d
Merge remote-tracking branch 'origin/dev' into feature/AB#32683-net10…
AndreGAot May 6, 2026
1b7d26f
Merge remote-tracking branch 'origin/dev' into feature/AB#32683-net10…
AndreGAot May 6, 2026
bb7c7f6
AB#32452 remove prompt tools panel
jacobwillsmith May 7, 2026
e97cbc5
AB#32452 fix scoring queue proxy
jacobwillsmith May 7, 2026
b1051ad
Merge pull request #2410 from bcgov/feature/AB#32683-net10-upgrade
JamesPasta May 7, 2026
8af8b95
Merge pull request #2413 from bcgov/feature/AB#32452-delete-prompt-to…
JamesPasta May 7, 2026
e5f2a8b
Merge branch 'dev' into bugfix/AB#32684-Refactor-AmazonS3Client-Usage
aurelio-aot May 7, 2026
2e39540
AB#32451 fix queued scoring authorization
jacobwillsmith May 6, 2026
8d6b84e
AB#32451 restore chefs attachment selection behavior
jacobwillsmith May 7, 2026
e39a301
AB#32451 simplify chefs summary toggle
jacobwillsmith May 7, 2026
ec9b4ea
AB#32684: Fix sonarqube issues
aurelio-aot May 7, 2026
6185b87
Merge pull request #2406 from bcgov/bugfix/AB#32684-Refactor-AmazonS3…
aurelio-aot May 7, 2026
7724076
AB#32310 Support configurable AI execution modes for multi-step flows
jacobwillsmith Apr 30, 2026
971d83c
AB#32310 clarify AI execution modes
jacobwillsmith May 6, 2026
ec69f88
AB#32310 simplify scoring answer copy
jacobwillsmith May 6, 2026
662eea1
AB#32310 default AI execution to sequential
jacobwillsmith May 6, 2026
eaac541
AB#32310 keep attachment summaries sequential
jacobwillsmith May 7, 2026
63901e7
Column index generation created across main tables to support the Gra…
DavidBrightBcGov May 7, 2026
1a7b57c
Merge branch 'dev' into feature/AB#32084-app-list-performance-indexes
DavidBrightBcGov May 7, 2026
7a95f7e
Merge pull request #2415 from bcgov/feature/AB#32310-support-ai-execu…
JamesPasta May 7, 2026
022cda6
Merge pull request #2414 from bcgov/feature/AB#32451-ai-generation-po…
JamesPasta May 7, 2026
c50db46
Merge pull request #2422 from bcgov/dev
JamesPasta May 7, 2026
9fb6053
AB#32290 throttle AI analysis with per-user 60s cooldown
jacobwillsmith Apr 30, 2026
837bead
AB#32290 simplify AI generation throttling
jacobwillsmith May 2, 2026
6581544
AB#32290 start cooldown after AI generation completes
jacobwillsmith May 5, 2026
5d6eb6e
AB#32290 clean up AI generation cooldown flow
jacobwillsmith May 6, 2026
8d4db65
AB#32290 carry requester through AI jobs
jacobwillsmith May 6, 2026
d80943c
AB#32290 harden AI generation cooldown
jacobwillsmith May 7, 2026
40249eb
AB#32892 centralize AI feature-disabled checks
jacobwillsmith May 1, 2026
dcc2d6e
AB#32890 remove dead AI completion code path
jacobwillsmith May 1, 2026
e63dd94
Optimized the main GrantApplications table to only pull necessary col…
DavidBrightBcGov May 7, 2026
330f19c
AB#32545: Update Assessment Buttons Styling, Order, and Text
aurelio-aot May 7, 2026
7764f6b
Merge pull request #2409 from bcgov/feature/AB#32290-throttle-ai-anal…
JamesPasta May 7, 2026
120b053
Merge branch 'dev' into bugfix/AB#32545-AssessmentTable-Text-ButtonsS…
aurelio-aot May 7, 2026
d372c91
AB#32683 report history mapping
AndreGAot May 7, 2026
7406cfe
AB#32903 simplify AI provider payload validator helpers
jacobwillsmith May 1, 2026
fb2fcdc
AB#32898 consolidate AI JSON serializer defaults
jacobwillsmith May 1, 2026
9536fac
Merge pull request #2430 from bcgov/bugfix/AB#32683-applicanthistory-…
AndreGAot May 7, 2026
28021f4
AB#32902 add AI runtime validation tests
jacobwillsmith May 1, 2026
04101fb
Merge pull request #2421 from bcgov/feature/AB#32084-app-list-perform…
DavidBrightBcGov May 8, 2026
5d7c21f
Apply suggestions from code review
DavidBrightBcGov May 8, 2026
d9f4c07
Merge pull request #2425 from bcgov/feature/AB#32688-app-list-perform…
DavidBrightBcGov May 8, 2026
73ad3f8
Pre-warm EF Core, DataTable perf, config & secrets update
DavidBrightBcGov May 8, 2026
adc0669
Merge branch 'dev' into feature/AB#32781-app-list-performance-code-up…
DavidBrightBcGov May 8, 2026
a014b5a
Apply suggestions from code review
DavidBrightBcGov May 8, 2026
110e110
As per Copilot flag, added configurable DB warmup: options, limits, a…
DavidBrightBcGov May 8, 2026
11c53ba
Merge pull request #2432 from bcgov/feature/AB#32781-app-list-perform…
DavidBrightBcGov May 8, 2026
a01fe02
Merge pull request #2427 from bcgov/bugfix/AB#32545-AssessmentTable-T…
JamesPasta May 8, 2026
7fea040
AB#32543 move AI reporting into AI module
jacobwillsmith May 8, 2026
3731840
Merge pull request #2423 from bcgov/feature/AB#32890-remove-dead-ai-c…
JamesPasta May 8, 2026
e4c283e
Merge pull request #2431 from bcgov/feature/AB#32903-ai-provider-payl…
JamesPasta May 8, 2026
fd76048
Merge pull request #2433 from bcgov/feature/AB#32543-integrate-ai-rep…
JamesPasta May 8, 2026
5aa6f2c
Merge pull request #2429 from bcgov/feature/AB#32902-ai-runtime-valid…
JamesPasta May 8, 2026
dd1d005
Merge pull request #2424 from bcgov/feature/AB#32892-centralize-ai-fe…
JamesPasta May 8, 2026
8cce699
Merge pull request #2426 from bcgov/feature/AB#32898-consolidate-ai-j…
JamesPasta May 8, 2026
d655cba
AB#32900 make AI generation runtime cancellation-ready
jacobwillsmith May 1, 2026
ee662a0
Merge pull request #2428 from bcgov/feature/AB#32900-ai-generation-ru…
JamesPasta May 8, 2026
01e9b34
Merge pull request #2434 from bcgov/dev
JamesPasta May 8, 2026
13beb4f
bugfix/AB#32921-AccountCoding
JamesPasta May 11, 2026
2551191
Merge pull request #2435 from bcgov/bugfix/AB#32921-AccountCoding
JamesPasta May 11, 2026
29eff70
AB#29181: Make arrow white for dark accordion
aurelio-aot May 11, 2026
dcc4694
AB#29181: Center Accordion Text and Arrow
aurelio-aot May 11, 2026
aae8581
AB#32745 - Fixed header menu highlight on detail and configuration pages
hasanpour May 11, 2026
ffedb6b
AB#29181: Removed mistakenly committed files
aurelio-aot May 11, 2026
1a429ae
Ensure the attribute always renders.
hasanpour May 11, 2026
3a77566
Merge pull request #2437 from bcgov/feature/AB#32745-Header-Menue-Hig…
JamesPasta May 11, 2026
3eadeef
Merge pull request #2436 from bcgov/bugfix/AB#29181-card-header-styli…
JamesPasta May 12, 2026
a8ea24f
bugfix/AB#32921-AccountCoding-remove js debug
JamesPasta May 12, 2026
b558262
Merge pull request #2439 from bcgov/bugfix/AB#32921-AccountCoding
JamesPasta May 12, 2026
d24d000
Merge pull request #2438 from bcgov/dev
JamesPasta May 12, 2026
7a34319
AB#32591 persist scoresheet panel state
jacobwillsmith May 8, 2026
1f434bf
AB#31762: Remove database columns not already being used
aurelio-aot May 12, 2026
fc86f0b
Merge pull request #2442 from bcgov/feature/AB#31762-Remove-RenderedH…
JamesPasta May 12, 2026
913b4f5
AB#32683 - address stricter .net10 json handling
AndreGAot May 13, 2026
bfad74a
AB#32898 fix AI JSON defaults readonly initialization
jacobwillsmith May 13, 2026
c3aca03
AB#32290 fix AI cooldown endpoint wiring
jacobwillsmith May 13, 2026
7882dfe
Merge pull request #2449 from bcgov/bugfix/AB#32683-fix-portal-integr…
AndreGAot May 13, 2026
bc30f75
AB#32290 move AI cooldown config under Azure
jacobwillsmith May 13, 2026
b78a985
AB#28985 adjust worksheet styling
AndreGAot May 13, 2026
e46b8ba
Merge pull request #2453 from bcgov/feature/AB#28985-worksheet-alignm…
JamesPasta May 13, 2026
f1583c7
Merge pull request #2452 from bcgov/feature/AB#32898-consolidate-ai-j…
JamesPasta May 13, 2026
d80b050
Matched scoresheet configuration to worksheet configuration to includ…
DavidBrightBcGov May 13, 2026
7323042
Merge pull request #2440 from bcgov/feature/AB#32591-persist-ui-panel…
JamesPasta May 13, 2026
db402ac
Merge pull request #2451 from bcgov/feature/AB#32290-throttle-ai-anal…
JamesPasta May 13, 2026
4e55e66
Merge pull request #2456 from bcgov/feature/AB#32883-button-standardi…
DavidBrightBcGov May 13, 2026
858f233
AB#32986 make AI runtime configuration explicit
jacobwillsmith May 13, 2026
e9359a8
Merge pull request #2454 from bcgov/feature/AB#32986-strict-ai-runtim…
JamesPasta May 14, 2026
90a401c
AB#33006 enable GPT-5 mini profile compatibility
jacobwillsmith May 8, 2026
a8876e5
Merge pull request #2457 from bcgov/feature/AB#33006-enable-gpt5-mini…
JamesPasta May 14, 2026
2efd25d
Merge pull request #2459 from bcgov/dev
JamesPasta May 14, 2026
34976b6
AB#32589 - Implemented backend
hasanpour May 14, 2026
ee10a29
AB#32589 - Implemented the UI for delete comment.
hasanpour May 14, 2026
53455d8
AB#32589 - Added tests.
hasanpour May 14, 2026
7123193
Merge pull request #2466 from bcgov/feature/AB#32589-Delete-Own-Comment
JamesPasta May 14, 2026
43bc3c8
AB#32957 fix certain duplicated elements in submission render
AndreGAot May 14, 2026
2fd8487
AB#32957 reduce nesting
AndreGAot May 14, 2026
603be65
Merge pull request #2468 from bcgov/bugfix/AB#32957-formio-duplicates
JamesPasta May 14, 2026
0ebe0f0
AB#32957 defensive suggestions
AndreGAot May 14, 2026
f4d3df8
Merge pull request #2470 from bcgov/bugfix/AB#32957-formio-duplicates
AndreGAot May 14, 2026
9080c29
AB#33053 fix AI cooldown wait state
jacobwillsmith May 15, 2026
235e031
AB#33047 collapse dismissed AI analysis sections
jacobwillsmith May 15, 2026
113cd56
AB#33047 collapse dismissed AI analysis sections
jacobwillsmith May 15, 2026
ee139ad
AB#31228 - Added today date to email template.
hasanpour May 15, 2026
a3661fd
AB#32619 update datagrid editor to open modal with fields in table order
AndreGAot May 15, 2026
acc8db9
Using newline safe pattern for the span
hasanpour May 15, 2026
db34d3e
Merge pull request #2474 from bcgov/feature/AB#31228-Add-Today-Date-V…
JamesPasta May 15, 2026
4bb323e
Merge pull request #2472 from bcgov/bugfix/AB#33053-ai-cooldown-wait-…
jacobwillsmith May 15, 2026
81b2c63
Merge pull request #2473 from bcgov/bugfix/AB#33047-collapse-dismisse…
jacobwillsmith May 15, 2026
bcd44bc
Merge pull request #2475 from bcgov/bugfix/AB#32619-datagrid-edit-fie…
JamesPasta May 15, 2026
b2f1fe7
Merge pull request #2476 from bcgov/dev
JamesPasta May 15, 2026
e92a491
AB#31883 improve timezone offset
AndreGAot May 15, 2026
069bdbe
AB#27996: Refactor CreatePaymentRequests to Create Reusable Service C…
aurelio-aot May 15, 2026
2d29595
AB#31883 copilot feedback
AndreGAot May 15, 2026
c9badb7
AB#31883 more copilot suggestions
AndreGAot May 15, 2026
e65494c
Potential fix for pull request finding 'CodeQL / Cookie 'Secure' attr…
AndreGAot May 15, 2026
45c2ece
Merge pull request #2477 from bcgov/bugfix/AB#31883-comment-timestamp
AndreGAot May 15, 2026
c911592
AB#27996: Create Historical Payments - Initial Draft
aurelio-aot May 16, 2026
c2ec744
AB#27996: Fix bug and address sonarqube issues
aurelio-aot May 19, 2026
66f9d01
AB#27996: Fix failing unit tests
aurelio-aot May 19, 2026
d6553de
AB#27996: Fix button alignment
aurelio-aot May 20, 2026
5832c69
AB#27996: Move Warning Inside Historical payment dialog box. Add Site…
aurelio-aot May 20, 2026
1d56015
AB#27996: Fix Invoice and Amounts validation
aurelio-aot May 20, 2026
9767a8c
AB#27996: AccountCoding is not required for Historical Payments
aurelio-aot May 20, 2026
39d4a1f
AB#32881 submissions and description
AndreGAot May 21, 2026
e186d32
AB#33055 fix AI generate cooldown wait state
jacobwillsmith May 15, 2026
64f3f4b
AB#33055 sync AI generate button state
jacobwillsmith May 20, 2026
45e6f4b
AB#31474: Fix lastUpdatedinCAS=infinity in both Supplier and Site
aurelio-aot May 21, 2026
5b5caba
AB#27996: Add Note for missing Site in Historical Payments
aurelio-aot May 21, 2026
7eeaae4
AB#32881 layout improvements
AndreGAot May 22, 2026
ce48de5
AB#32881 reduce cognitive complexity
AndreGAot May 22, 2026
fc558ba
AB#32218 convert to as single query explicit for app attachments
AndreGAot May 22, 2026
29dbfff
feature/AB#32203-FixMappingArchive
JamesPasta May 22, 2026
465ad27
Merge pull request #2482 from bcgov/feature/AB#32203-FixArchive
JamesPasta May 22, 2026
67cc58a
Merge pull request #2478 from bcgov/feature/AB#27996-Add-Historical-P…
JamesPasta May 22, 2026
5d14237
Merge pull request #2480 from bcgov/bugfix/AB#31474-Infinity-In-LastU…
JamesPasta May 22, 2026
ef2c95b
Merge pull request #2481 from bcgov/bugfix/AB#32218-intermittent-fail…
JamesPasta May 22, 2026
8ad818d
Merge pull request #2479 from bcgov/bugfix/AB#33055-ai-generate-butto…
JamesPasta May 22, 2026
a61d79f
AB#32611: Additional Columns In Audit History
aurelio-aot May 22, 2026
21c5323
Merge pull request #2483 from bcgov/feature/AB#32611-Audit-History-En…
JamesPasta May 22, 2026
6bc921c
feature/AB#33117-FixScribian
JamesPasta May 22, 2026
3c5b8bd
Merge pull request #2484 from bcgov/feature/AB#33117-FixScribian7.1.0
JamesPasta May 22, 2026
1f7a014
Merge pull request #2485 from bcgov/dev
JamesPasta May 22, 2026
d70b683
AB#32881 update version handling duplicate keys
AndreGAot May 25, 2026
2f6ec38
AB#33124: Bugfix: Note in Historical Payments is treated as error
aurelio-aot May 25, 2026
aa73292
Merge pull request #2489 from bcgov/bugfix/AB#33124-HistoricalPayment…
JamesPasta May 25, 2026
889970a
AB#29743: Select All Intakes in Dashboard By Default
aurelio-aot May 25, 2026
75f4191
AB#32881 sonarQ cleanup
AndreGAot May 25, 2026
de77a56
AB#32881 copilot suggestions
AndreGAot May 25, 2026
495b1c6
feature/AB#32841-AddQRandPaymentDescription
JamesPasta May 25, 2026
ec90ef5
AB#32881 fix incorrect function name call
AndreGAot May 25, 2026
ec0a9f5
Merge pull request #2492 from bcgov/feature/AB#32841-CASPaymentQualit…
JamesPasta May 25, 2026
2baa5e3
Merge pull request #2491 from bcgov/feature/AB#29743-Dashboard-Select…
JamesPasta May 25, 2026
40bafbc
Merge pull request #2493 from bcgov/dev
JamesPasta May 25, 2026
973b8f7
AB#32881 warning banner updates
AndreGAot May 26, 2026
92ce7af
AB#32881 update documentation
AndreGAot May 26, 2026
9a3e9e4
AB#32881 copilot feedback fixes
AndreGAot May 26, 2026
9c04bb0
AB#30755: Change Applicant Status to Inactive/Active
aurelio-aot May 26, 2026
2f15dc0
AB#32881 sonarQ cleanup
AndreGAot May 26, 2026
9098487
feature/AB#32841-AddQRandPaymentDescription-Fixes
JamesPasta May 26, 2026
99e2102
feature/AB#32841-AddQRandPaymentDescription-Fixes
JamesPasta May 26, 2026
7087b7e
Merge pull request #2495 from bcgov/feature/AB#32841-CASPaymentQualit…
JamesPasta May 26, 2026
658d870
Merge pull request #2494 from bcgov/feature/AB#30755-Applicant-Status…
JamesPasta May 26, 2026
c34fa85
Merge pull request #2490 from bcgov/feature/AB#32881-reporting-consol…
JamesPasta May 26, 2026
97f11a0
Merge pull request #2496 from bcgov/dev
JamesPasta May 26, 2026
6b00f88
feature/AB#32841-AddQRandPaymentDescription-Fixes remove logging on r…
JamesPasta May 27, 2026
418d9b9
Merge pull request #2497 from bcgov/feature/AB#32841-CASPaymentQualit…
JamesPasta May 27, 2026
693aac3
Merge pull request #2498 from bcgov/dev
JamesPasta May 27, 2026
dcd8156
feature/AB#32841-AddQRandPaymentDescription-Fixes remove logging on r…
JamesPasta May 27, 2026
6b6ffc9
Merge pull request #2499 from bcgov/feature/AB#32841-CASPaymentQualit…
JamesPasta May 27, 2026
5dda93f
Merge pull request #2500 from bcgov/dev
JamesPasta May 27, 2026
16fc446
feature/AB#32841-AddQRandPaymentDescription-Fixes remove logging on r…
JamesPasta May 27, 2026
3074420
Merge pull request #2501 from bcgov/feature/AB#32841-CASPaymentQualit…
JamesPasta May 27, 2026
85e16bf
Merge pull request #2502 from bcgov/dev
JamesPasta May 27, 2026
f841476
AB#32696: Applicant Profile - Payments Tab
aurelio-aot May 27, 2026
4319403
[AB#32785] Fix tag menu slider overflow and height issues
plavoie-BC May 28, 2026
f8a8802
[AB#32785] Refactor tag menu slider styles for consistency
plavoie-BC May 28, 2026
6dc7f8e
[AB#32785] Consolidate tag table selectors
plavoie-BC May 28, 2026
025a1de
Merge pull request #2503 from bcgov/bugfix/AB#32785-tag-menu-slider
JamesPasta May 28, 2026
1b88e93
AB#32218 split out attachments query
AndreGAot May 28, 2026
e7eeb74
Merge pull request #2504 from bcgov/bugfix/AB#32218-err-incomplete-chunk
AndreGAot May 28, 2026
ed4b260
[AB#32773] Rename PaymentTagsInput for namespace conflict
plavoie-BC May 28, 2026
480b2a1
AB#33235 Replace GH_API_TOKEN → GITHUB_TOKEN
DarylTodosichuk May 28, 2026
68e2673
AB#33235 Switch sonarsource-scan.yml java-version distribution to tem…
DarylTodosichuk May 28, 2026
440b52b
Merge pull request #2505 from bcgov/feature/AB#33235-Replace-GH_API_T…
DarylTodosichuk May 28, 2026
d53c020
[AB#32773] Tag Input SonarQube fixes
plavoie-BC May 28, 2026
e8a5613
initial commit
May 28, 2026
14fe289
[AB#32773] Refactor event listeners to use arrow functions
plavoie-BC May 28, 2026
2bee953
AB#33254 Fix chefs smoke test to validate pre-auth DOM only
May 28, 2026
c768f2a
AB#32696: Fix bug on export button
aurelio-aot May 29, 2026
86a855e
AB#32696: Fix sonarqube issues
aurelio-aot May 29, 2026
c10cfd3
[AB#32773] Update modal save button based on permissions
plavoie-BC May 29, 2026
3d627aa
Merge branch 'dev' into bugfix/AB#32773-tag-modal-permission
plavoie-BC May 29, 2026
4ee7948
AB#33235 Apply token GH_API_TOKEN at PushVariables job level
DarylTodosichuk May 29, 2026
f5d89a9
Merge pull request #2509 from bcgov/feature/AB#33235-Replace-GH_API_T…
DarylTodosichuk May 29, 2026
7aec920
Merge pull request #2507 from bcgov/feature/AB#33254_fix_chefs_dev
DarylTodosichuk May 29, 2026
2f0e663
Merge pull request #2508 from bcgov/feature/AB#32696-ApplicantProfile…
JamesPasta May 29, 2026
74bbde8
Merge pull request #2506 from bcgov/bugfix/AB#32773-tag-modal-permission
JamesPasta May 29, 2026
5fe1bec
Merge pull request #2510 from bcgov/dev
JamesPasta May 29, 2026
f91b744
bugfix/AB#33258-Refactor Payment Requests table rendering and update …
JamesPasta May 29, 2026
1250c14
Merge pull request #2511 from bcgov/bugfix/AB#33258-FixExportCSVPayments
JamesPasta May 29, 2026
1c92216
Merge pull request #2512 from bcgov/dev
JamesPasta May 29, 2026
16263c0
htofix/AB#FixTestConflicts
JamesPasta Jun 3, 2026
426f085
htofix/AB#FixTestConflicts
JamesPasta Jun 3, 2026
d56d98f
htofix/AB#FixTestConflicts
JamesPasta Jun 3, 2026
ff48fda
htofix/AB#FixTestConflicts
JamesPasta Jun 3, 2026
d9a8d55
htofix/AB#FixTestConflicts
JamesPasta Jun 3, 2026
97ff2ae
Merge pull request #2527 from bcgov/hotfix/AB#FixTestConflicts
JamesPasta Jun 3, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
8 changes: 4 additions & 4 deletions .github/copilot-instructions.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@

## Project Summary

Unity is a **grant management portal** for the Province of British Columbia, built on **ABP Framework 9.1.3** with **.NET 9.0**, targeting **PostgreSQL 17**. The primary application code lives in `applications/Unity.GrantManager/`.
Unity is a **grant management portal** for the Province of British Columbia, built on **ABP Framework 10.3** with **.NET 10.0**, targeting **PostgreSQL 17**. The primary application code lives in `applications/Unity.GrantManager/`.

**Key stack:** .NET 9 · ABP 9.1.3 · EF Core 9.0 · PostgreSQL 17 · Redis · RabbitMQ · xUnit · Shouldly · NSubstitute · AutoMapper · Cypress (E2E)
**Key stack:** .NET 10 · ABP 10.3 · EF Core 10.0 · PostgreSQL 17 · Redis · RabbitMQ · xUnit · Shouldly · NSubstitute · Mapperly · Cypress (E2E)

## Repository Structure

Expand All @@ -21,7 +21,7 @@ documentation/ ← Technical docs
## Key Conventions

- **ABP Framework** modular monolith with DDD layered architecture
- **AutoMapper** for DTO mapping (not Mapperly)
- **Mapperly** for DTO mapping (not AutoMapper)
- **Razor Pages** UI with custom ABP theme (Unity.Theme.UX2)
- Multi-tenant architecture with separate host/tenant database contexts
- `dev` → `test` → `main` branch promotion flow
Expand All @@ -39,6 +39,6 @@ All PRs must pass `dotnet build` and `dotnet test` before merge. The CI runs all

## Do NOT

- Use Mapperly patterns — this project uses AutoMapper
- Use AutoMapper patterns — this project uses Mapperly
- Create repositories for child entities — only aggregate roots get repositories
- Put business logic in application services — use domain entities/services
4 changes: 3 additions & 1 deletion .github/workflows/manual-trigger.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ on:
type: string
env:
TARGET_ENV: ${{ inputs.name }}
GH_TOKEN: ${{secrets.GH_API_TOKEN}}
GH_TOKEN: ${{secrets.GITHUB_TOKEN}}
OC_CLUSTER: ${{ vars.OPENSHIFT_CLUSTER }}
OC_REGISTRY: ${{ vars.OPENSHIFT_REGISTRY }}
OC_AUTH_TOKEN: ${{ secrets.OPENSHIFT_TOKEN }}
Expand Down Expand Up @@ -89,6 +89,8 @@ jobs:
permissions:
actions: write
contents: read
env:
GH_TOKEN: ${{ secrets.GH_API_TOKEN }}
steps:
- name: Checkout repository
uses: actions/checkout@v6
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/sonarsource-scan.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ jobs:
uses: actions/setup-java@v5
with:
java-version: 17
distribution: 'zulu'
distribution: 'temurin'

- uses: actions/checkout@v6
with:
Expand Down
23 changes: 16 additions & 7 deletions applications/Unity.AutoUI/cypress/e2e/library/chefs.cy.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,17 @@
describe('Chefs Login and Logout', () => {
describe("Chefs Login and Logout", () => {
it("Verify that Chefs is online.", () => {
cy.getChefsDetail("chefsBaseURL").then((baseURL) => {
cy.visit(baseURL);

it('Verify that Chefs is online.', () => {
cy.chefsLogin();
cy.contains("My Forms").should('exist').click();
cy.chefsLogout();
})
})
cy.contains("button, a, [role='button']", /log\s*in|login/i)
.should("exist")
.click({ force: true });

cy.location("pathname").should("include", "/app/login");
cy.contains("button, a, [role='button']", /IDIR/i).should("exist");
cy.contains("button, a, [role='button']", /BC Services Card/i).should(
"exist",
);
});
});
});
214 changes: 122 additions & 92 deletions applications/Unity.AutoUI/cypress/support/commands.ts
Original file line number Diff line number Diff line change
Expand Up @@ -143,15 +143,39 @@ Cypress.Commands.add("getChefsDetail", (key: string) => {
Cypress.Commands.add("chefsLogin", () => {
cy.getChefsDetail("chefsBaseURL").then((baseURL) => {
cy.visit(baseURL); // Visit the URL fetched from chefs.json
cy.get("#app > div > main > header > header > div > div.d-print-none")
.should("exist")
.click(); // click the login button
cy.get("body").then(($body) => {
// Prefer resilient text-based selectors over brittle full DOM paths.
if ($body.find("button:contains('LOGIN'), a:contains('LOGIN')").length) {
cy.contains("button, a", /^LOGIN$/i)
.first()
.click({ force: true });
} else if (
$body.find(
"#app > div > main > header > header > div > div.d-print-none",
).length
) {
cy.get("#app > div > main > header > header > div > div.d-print-none")
.should("exist")
.click({ force: true });
}
});
cy.wait(1000);
cy.get(
"#app > div > main > div.v-container.v-locale--is-ltr.text-center.main > div > div:nth-child(2) > div > button",
)
.should("exist")
.click(); // click the idir buttton
cy.get("body").then(($body) => {
// Some pages show an IDIR choice button before the credential form.
if ($body.find("button:contains('IDIR'), a:contains('IDIR')").length) {
cy.contains("button, a", /IDIR/i).first().click({ force: true });
} else if (
$body.find(
"#app > div > main > div.v-container.v-locale--is-ltr.text-center.main > div > div:nth-child(2) > div > button",
).length
) {
cy.get(
"#app > div > main > div.v-container.v-locale--is-ltr.text-center.main > div > div:nth-child(2) > div > button",
)
.should("exist")
.click({ force: true });
}
});
cy.wait(1000);
cy.get("body").then(($body) => {
// Check if you're already logged in.
Expand Down Expand Up @@ -246,11 +270,14 @@ function fetchGrantApplications(): Cypress.Chainable<GrantApplication[]> {
.then((response) => {
if (response.status !== 200) {
throw new Error(
`API request failed with status ${response.status}: ${JSON.stringify(response.body)}`
`API request failed with status ${response.status}: ${JSON.stringify(response.body)}`,
);
}
const data = response.body as GrantApplicationResponse;
Cypress.log({ name: "fetch", message: `📋 Fetched ${data.items?.length || 0} applications` });
Cypress.log({
name: "fetch",
message: `📋 Fetched ${data.items?.length || 0} applications`,
});
return data.items || [];
});
});
Expand All @@ -262,89 +289,92 @@ Cypress.Commands.add(
return fetchGrantApplications().then((allApplications) => {
let applications = allApplications;

Cypress.log({ name: "fetch", message: `📋 Fetched ${applications.length} applications from API` });

// Filter by category if specified (e.g., 'Data Seeder')
if (options.categoryFilter) {
applications = applications.filter((app) =>
app.category === options.categoryFilter
);
Cypress.log({
name: "filter",
message: `📋 Filtered to ${applications.length} applications with category: ${options.categoryFilter}`,
});
}

// Filter by status if specified (e.g., 'Submitted', 'Under Assessment', 'Approved')
if (options.statusFilter && options.statusFilter.length > 0) {
applications = applications.filter((app) =>
options.statusFilter!.includes(app.status)
);
Cypress.log({
name: "filter",
message: `📋 Filtered to ${applications.length} applications with status: ${options.statusFilter.join(", ")}`,
});
}

// Filter by max age if specified
if (options.maxAge) {
const cutoffDate = new Date();
cutoffDate.setDate(cutoffDate.getDate() - options.maxAge);
applications = applications.filter((app) => {
const submissionDate = new Date(app.submissionDate);
return submissionDate >= cutoffDate;
});
Cypress.log({
name: "filter",
message: `📋 Filtered to ${applications.length} applications within ${options.maxAge} days`,
});
}

if (applications.length === 0) {
throw new Error(
"No applications found matching the specified criteria"
);
}

// Sort applications (default: by submissionDate descending for latest first)
const sortBy = options.sortBy || 'submissionDate';
const sortOrder = options.sortOrder || 'desc';
applications.sort((a, b) => {
let aVal: number | string;
let bVal: number | string;

if (sortBy === 'submissionDate') {
aVal = new Date(a.submissionDate).getTime();
bVal = new Date(b.submissionDate).getTime();
} else {
aVal = a[sortBy] as number;
bVal = b[sortBy] as number;
}

if (sortOrder === 'desc') {
return bVal > aVal ? 1 : bVal < aVal ? -1 : 0;
} else {
return aVal > bVal ? 1 : aVal < bVal ? -1 : 0;
}
});

// Get the submission at the specified index (default: 0 = first/latest)
const index = options.index || 0;
if (index >= applications.length) {
throw new Error(
`Index ${index} out of range. Only ${applications.length} applications available.`
);
}

const selectedApp = applications[index];
Cypress.log({
name: "selected",
message: `✅ Selected submission: ${selectedApp.referenceNo} (Status: ${selectedApp.status}, Category: ${selectedApp.category})`,
});

return selectedApp.referenceNo;
Cypress.log({
name: "fetch",
message: `📋 Fetched ${applications.length} applications from API`,
});

// Filter by category if specified (e.g., 'Data Seeder')
if (options.categoryFilter) {
applications = applications.filter(
(app) => app.category === options.categoryFilter,
);
Cypress.log({
name: "filter",
message: `📋 Filtered to ${applications.length} applications with category: ${options.categoryFilter}`,
});
}

// Filter by status if specified (e.g., 'Submitted', 'Under Assessment', 'Approved')
if (options.statusFilter && options.statusFilter.length > 0) {
applications = applications.filter((app) =>
options.statusFilter!.includes(app.status),
);
Cypress.log({
name: "filter",
message: `📋 Filtered to ${applications.length} applications with status: ${options.statusFilter.join(", ")}`,
});
}

// Filter by max age if specified
if (options.maxAge) {
const cutoffDate = new Date();
cutoffDate.setDate(cutoffDate.getDate() - options.maxAge);
applications = applications.filter((app) => {
const submissionDate = new Date(app.submissionDate);
return submissionDate >= cutoffDate;
});
}
Cypress.log({
name: "filter",
message: `📋 Filtered to ${applications.length} applications within ${options.maxAge} days`,
});
}

if (applications.length === 0) {
throw new Error(
"No applications found matching the specified criteria",
);
}

// Sort applications (default: by submissionDate descending for latest first)
const sortBy = options.sortBy || "submissionDate";
const sortOrder = options.sortOrder || "desc";
applications.sort((a, b) => {
let aVal: number | string;
let bVal: number | string;

if (sortBy === "submissionDate") {
aVal = new Date(a.submissionDate).getTime();
bVal = new Date(b.submissionDate).getTime();
} else {
aVal = a[sortBy] as number;
bVal = b[sortBy] as number;
}

if (sortOrder === "desc") {
return bVal > aVal ? 1 : bVal < aVal ? -1 : 0;
} else {
return aVal > bVal ? 1 : aVal < bVal ? -1 : 0;
}
});

// Get the submission at the specified index (default: 0 = first/latest)
const index = options.index || 0;
if (index >= applications.length) {
throw new Error(
`Index ${index} out of range. Only ${applications.length} applications available.`,
);
}

const selectedApp = applications[index];
Cypress.log({
name: "selected",
message: `✅ Selected submission: ${selectedApp.referenceNo} (Status: ${selectedApp.status}, Category: ${selectedApp.category})`,
});

return selectedApp.referenceNo;
});
},
);

/**
Expand Down
2 changes: 1 addition & 1 deletion applications/Unity.GrantManager/.github/AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,4 +21,4 @@ Pick the agent that matches your workflow stage and provide:
2. Target module(s) and files.
3. Constraints (tenant scope, security, deadline, non-functional requirements).

Each agent enforces ABP layering, AutoMapper usage, localization, and test conventions from repository instructions and skills.
Each agent enforces ABP layering, Mapperly usage, localization, and test conventions from repository instructions and skills.
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
name: application-service-designer
description: Designs application contracts, DTOs, authorization, and AutoMapper mapping plans.
description: Designs application contracts, DTOs, authorization, and Mapperly mapping plans.
---

# ABP Application Service Designer Agent
Expand All @@ -22,7 +22,7 @@ Produce ABP-compliant service contracts and implementation plans using DTO-first
1. Propose or update `I*AppService` method signatures.
2. Define DTOs per method intent (create, update, get, list).
3. Identify authorization requirements and permission constants.
4. Define AutoMapper profile changes.
4. Define Mapperly mapper changes.
5. Define validation and business-exception boundaries.

## Output Format
Expand All @@ -40,4 +40,4 @@ Produce ABP-compliant service contracts and implementation plans using DTO-first
- Follow `.github/instructions/csharp.instructions.md`.
- Methods must be async and end with `Async`.
- Accept/return DTOs only, never entities.
- Use AutoMapper with `ObjectMapper.Map<>()`, never Mapperly.
- Use Mapperly with `ObjectMapper.Map<>()`, never AutoMapper. Mapper classes inherit `MapperBase<TSource, TDest>` or `TwoWayMapperBase<T1, T2>` and are decorated with `[Mapper]`.
Original file line number Diff line number Diff line change
Expand Up @@ -144,5 +144,5 @@ Rules:

- Enforce module dependency direction from `.github/skills/unity-module-structure/SKILL.md`.
- Enforce ABP app/domain rules from `.github/instructions/csharp.instructions.md`.
- Do not use Mapperly. Use AutoMapper.
- Do not use AutoMapper. Use Mapperly (`[Mapper]` attribute, `MapperBase<TSource, TDest>`).
- Do not place business rules in controllers or app services.
Original file line number Diff line number Diff line change
Expand Up @@ -38,4 +38,4 @@ Evaluate if a branch is ready for PR against ABP architecture, policy, and CI ex
- Follow `.github/copilot-instructions.md`.
- Require `dotnet build Unity.GrantManager.sln --no-restore` and `dotnet test Unity.GrantManager.sln --no-build` readiness.
- Enforce ABP module layering rules from `.github/skills/unity-module-structure/SKILL.md`.
- Enforce AutoMapper, localization, and permissions conventions.
- Enforce Mapperly, localization, and permissions conventions.
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ For each changed file in the PR:

### Step 3: ABP Architecture
- Layer boundaries (Domain → Application → Web)
- Repository/DTO/AutoMapper conventions
- Repository/DTO/Mapperly conventions
- Permissions and localization keys
- EF migrations (if schema changes)

Expand Down Expand Up @@ -131,7 +131,7 @@ When invoked:
- ✅ Build/tests pass (backend unit tests)
- ✅ **Cypress E2E tests pass** (frontend integration tests)
- ✅ ABP conventions followed
- ✅ AutoMapper/localization/permissions configured
- ✅ Mapperly/localization/permissions configured

## Tool Usage

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -245,7 +245,7 @@ formatter.format(amount); // Returns formatted currency string
3. Create migration
4. Create DTOs in `*.Application.Contracts`
5. Create application service in `*.Application`
6. Add AutoMapper mappings
6. Add Mapperly mappings
7. Define permissions
8. Create MVC controller and views

Expand Down
Loading
Loading