Skip to content
Merged

Dev #2119

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
73 commits
Select commit Hold shift + click to select a range
b63a8fe
feature/AB#32216-BuildAIBase
JamesPasta Mar 6, 2026
fc2b30e
feature/AB#32216-BuildAIBase-RemoveDBContext-ReviewFixes
JamesPasta Mar 6, 2026
8c00f95
feature/AB#32216-BuildAIBase-Permission:AI Already existed as a group
JamesPasta Mar 6, 2026
3103c87
feature/AB#32216-BuildAIBase-Permission:SonarFixes
JamesPasta Mar 6, 2026
931be94
feature/AB#32216-BuildAIBase-Permission:SonarFixes
JamesPasta Mar 6, 2026
4ab223f
feature/AB#32216-BuildAIBase-Permission:SonarFixes
JamesPasta Mar 6, 2026
9667a10
AB#32009 Add prompt baseline snapshots for v0 and v1 comparison
jacobwillsmith Mar 7, 2026
9ee1136
AB#32009 Normalize prompt baseline version folders and snapshots
jacobwillsmith Mar 7, 2026
979e7b9
AB#32009 Add runtime prompt version selector with single-file v0/v1 p…
jacobwillsmith Mar 7, 2026
003dea3
AB#322238 fixing missing snapshot
AndreGAot Mar 7, 2026
73e791f
AB#32009 Align v1 prompt contracts and preserve v0 path
jacobwillsmith Mar 7, 2026
c0e25bd
AB#32009 Fix async action authorization loop and centralize extractor…
jacobwillsmith Mar 7, 2026
377ceac
feature/AB#31884 - Remove "Title, Role" placeholder text on assessments
plavoie-BC Mar 9, 2026
27a73a6
feature/AB#32221 - Rename default sort column "Created Date" in Appli…
plavoie-BC Mar 9, 2026
05f3a4a
feature/AB#31961 - Render Applicant Name as Hyperlink
plavoie-BC Mar 9, 2026
b37f6ed
feature/AB#31961 - Render Unknown Applicant Name as Hyperlink
plavoie-BC Mar 9, 2026
8e97306
feature/AB#31961 - Applicant Name Hyperlink Code Quality Improvements
plavoie-BC Mar 9, 2026
bb6c6cd
feature/AB#31961 - Applicant Hyperlink handle null exception
plavoie-BC Mar 9, 2026
16f3c81
feature/AB#31961 - Add permission based rendering of applicant hyperl…
plavoie-BC Mar 9, 2026
3f22524
Merge pull request #2109 from bcgov/bugfix/AB#32238missing-snapshot-m…
AndreGAot Mar 9, 2026
98c682d
AB#31290: Dont include InvoiceStatus=NotFound in Total Pending Amounts
aurelio-aot Mar 9, 2026
10e8ec7
AB#32009 Normalize baseline snapshot filenames to .txt convention
jacobwillsmith Mar 10, 2026
32b2969
Merge pull request #2108 from bcgov/feature/AB#31961-applicant-hyperlink
JamesPasta Mar 10, 2026
dab319e
Merge pull request #2110 from bcgov/bugfix/AB#31290-TotalPendingAmoun…
JamesPasta Mar 10, 2026
3f5a089
Merge pull request #2100 from bcgov/feature/AB#32216-BuildAIBaseModule
JamesPasta Mar 10, 2026
e7f0df1
AB#32009 Normalize versioned AI prompt template architecture
jacobwillsmith Mar 10, 2026
c38438b
AB#32009 unify prompt normalization and fallback payloads
jacobwillsmith Mar 10, 2026
ec4186a
AB#32009 address remaining Sonar prompt and extractor issues
jacobwillsmith Mar 10, 2026
90bd25f
AB#32009 apply copilot follow-ups for prompt loading and section guard
jacobwillsmith Mar 10, 2026
1e317f1
Merge pull request #2105 from bcgov/feature/AB#32009-PromptVersionBas…
jacobwillsmith Mar 10, 2026
f5714ab
AB#32088 Add regenerate button for AI application analysis
jacobwillsmith Mar 6, 2026
54974ce
AB#32088 Align AI analysis refresh button style and copy with scoring
jacobwillsmith Feb 27, 2026
63c5800
bufix/AB#32098 url endcoded file download
JamesPasta Mar 10, 2026
a6ac4cd
AB#32089 Add refresh scoring action to regenerate AI scoresheet answers
jacobwillsmith Mar 7, 2026
f4ed733
Merge pull request #2112 from bcgov/bugfix/AB#32098-UrlEncoded
JamesPasta Mar 10, 2026
e7d8050
AB#32089 align scoring refresh branch with current AI contracts
jacobwillsmith Mar 10, 2026
a985bc7
bufix/AB#32098 url endcoded file download
JamesPasta Mar 11, 2026
34d5bfc
Merge pull request #2115 from bcgov/bugfix/AB#32098-UrlEncoded
JamesPasta Mar 11, 2026
16c9d8a
AB#32089 split AI scoring refresh into dedicated app service
jacobwillsmith Mar 11, 2026
016cb96
AB#32088 split AI analysis refresh into dedicated app service
jacobwillsmith Mar 11, 2026
b499af8
AB#32089 fix scoring AI app service logging import
jacobwillsmith Mar 11, 2026
a174009
AB#32280 Update checkout@v4 to checkout@v6 Node.js 20 actions are dep…
DarylTodosichuk Mar 11, 2026
a81263f
AB#31414: Contacts and Address Tab Restructuring
aurelio-aot Mar 11, 2026
e531a53
AB#31414: Applicant Profile height and scrollbars code - initial draft
aurelio-aot Mar 11, 2026
302b0a5
AB#31414: Remove duplicate vertical scrollbars
aurelio-aot Mar 11, 2026
3502aa0
AB#31414: Fix component overlapping in history tab when resizing browser
aurelio-aot Mar 11, 2026
2a324e0
[AB#32037] Add comprehensive Copilot instructions and guidelines
plavoie-BC Mar 11, 2026
bc1a06b
[AB#32037] Add ABP workflow agents and update Copilot instructions
plavoie-BC Mar 11, 2026
a358ce9
AB#31414: Refactor js files for maintainability
aurelio-aot Mar 11, 2026
542c2e2
Merge pull request #2116 from bcgov/bugfix/AB#32280-actions-checkout
JamesPasta Mar 11, 2026
31c8f44
Merge pull request #2114 from bcgov/feature/AB#32089-AddRegenerateAIS…
JamesPasta Mar 11, 2026
8947b8f
Remove unwanted files
aurelio-aot Mar 11, 2026
9e02ef8
[AB#32037] Add reusable Copilot agents and update instructions
plavoie-BC Mar 11, 2026
122748e
[AB#32037] Update Copilot instructions and agent references
plavoie-BC Mar 11, 2026
44208c6
[AB#32037] Apply suggestions from code review
plavoie-BC Mar 11, 2026
a4566c6
[AB#32037] Revise ABP Layering and Code Usage Guidelines
plavoie-BC Mar 11, 2026
3787201
Merge branch 'dev' into feature/AB#32088-AddRegenerateAIAnalysisButton
jacobwillsmith Mar 11, 2026
5e83de1
Merge pull request #2113 from bcgov/feature/AB#32088-AddRegenerateAIA…
jacobwillsmith Mar 11, 2026
c34cba9
AB#31810 extend AI analysis contract and prompt output
jacobwillsmith Mar 11, 2026
6fc51fd
AB#31810 redesign AI analysis review UI
jacobwillsmith Mar 11, 2026
1b91e93
AB#31810 simplify legacy-style v0 prompt wording
jacobwillsmith Mar 11, 2026
a05198f
AB#31810 restore analysis response collections import
jacobwillsmith Mar 11, 2026
6f9e739
AB#31810 polish AI analysis item visibility and status UI
jacobwillsmith Mar 11, 2026
a3721df
AB#31414: Fix Contacts and Addresses data table layout
aurelio-aot Mar 12, 2026
165e0d4
[AB#32037] Add JavaScript and Security development standards
plavoie-BC Mar 12, 2026
62d74e0
[AB#32037] Enhance testing instructions and add ABP CLI guide
plavoie-BC Mar 12, 2026
43becc9
Merge branch 'dev' into feature/AB#32037-compact-copilot-instructions
plavoie-BC Mar 12, 2026
83a0767
AB#31414: Fix sonarqube error
aurelio-aot Mar 12, 2026
390dd86
AB#31414: Fix footer pagination bug on Contacts/Addresses data tables
aurelio-aot Mar 12, 2026
3aba2b3
Merge pull request #2120 from bcgov/feature/AB#32037-compact-copilot-…
JamesPasta Mar 12, 2026
0c4902f
AB#31414: Addresses sub-tab layout changes
aurelio-aot Mar 12, 2026
b7972d1
Merge pull request #2118 from bcgov/feature/AB#31414-Contact-Address-…
JamesPasta Mar 12, 2026
1f10373
Merge pull request #2122 from bcgov/feature/AB#31810-AIApplicationAna…
JamesPasta Mar 12, 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
44 changes: 44 additions & 0 deletions .github/copilot-instructions.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
# Unity Portal – Copilot Instructions (Repository Root)

> This file is used by **Copilot on GitHub.com** (PR reviews, web chat). For local IDE instructions, see `applications/Unity.GrantManager/.github/copilot-instructions.md`.

## 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/`.

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

## Repository Structure

```
applications/Unity.GrantManager/ ← Main .NET solution (developers open this)
applications/Unity.AutoUI/ ← Cypress E2E tests (TypeScript)
database/scripts/ ← SQL seed/migration scripts
documentation/ ← Technical docs
.github/workflows/ ← GitHub Actions CI/CD
```

## Key Conventions

- **ABP Framework** modular monolith with DDD layered architecture
- **AutoMapper** for DTO mapping (not Mapperly)
- **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
- PRs to `dev` from `feature/*`, `hotfix/*`, `bugfix/*`; PRs to `main` from `test` or `hotfix/*` only

## Build & Test (from `applications/Unity.GrantManager/`)

```bash
dotnet restore Unity.GrantManager.sln
dotnet build Unity.GrantManager.sln --no-restore
dotnet test Unity.GrantManager.sln --no-build
```

All PRs must pass `dotnet build` and `dotnet test` before merge. The CI runs all `*Tests.csproj` in a parallel matrix.

## Do NOT

- Use Mapperly patterns — this project uses AutoMapper
- Create repositories for child entities — only aggregate roots get repositories
- Put business logic in application services — use domain entities/services
6 changes: 3 additions & 3 deletions .github/workflows/docker-build-dev.yml
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ jobs:
environment: dev
steps:
- name: Checkout repository
uses: actions/checkout@v4
uses: actions/checkout@v6
with:
fetch-depth: '1'
- name: Get short commitId
Expand Down Expand Up @@ -93,7 +93,7 @@ jobs:
actions: write
steps:
- name: Checkout repository
uses: actions/checkout@v4
uses: actions/checkout@v6
with:
fetch-depth: '1'
- name: Set repository version variables
Expand All @@ -112,7 +112,7 @@ jobs:
runs-on: ubuntu-latest
environment: dev
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
- name: Build Docker images
run: |
rm -f ./docker-compose.override.yml
Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/docker-build-main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ jobs:
environment: main
steps:
- name: Checkout repository
uses: actions/checkout@v4
uses: actions/checkout@v6
with:
fetch-depth: '1'
- name: Get short commitId
Expand Down Expand Up @@ -93,7 +93,7 @@ jobs:
contents: write
steps:
- name: Checkout repository
uses: actions/checkout@v4
uses: actions/checkout@v6
with:
fetch-depth: '1'
- name: Generate Next Git Tag
Expand Down Expand Up @@ -146,7 +146,7 @@ jobs:
actions: write
steps:
- name: Checkout repository
uses: actions/checkout@v4
uses: actions/checkout@v6
with:
fetch-depth: '1'
- name: Set repository version variables
Expand All @@ -169,7 +169,7 @@ jobs:
runs-on: ubuntu-latest
environment: main
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
- name: Build Docker images
run: |
rm -f ./docker-compose.override.yml
Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/docker-build-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ jobs:
environment: test
steps:
- name: Checkout repository
uses: actions/checkout@v4
uses: actions/checkout@v6
with:
fetch-depth: '1'
- name: Get short commitId
Expand Down Expand Up @@ -91,7 +91,7 @@ jobs:
environment: test
steps:
- name: Checkout repository
uses: actions/checkout@v4
uses: actions/checkout@v6
with:
fetch-depth: '1'
- name: Generate Next Git Tag
Expand All @@ -118,7 +118,7 @@ jobs:
environment: test
steps:
- name: Checkout repository
uses: actions/checkout@v4
uses: actions/checkout@v6
with:
fetch-depth: '1'
- name: Set repository version variables
Expand All @@ -145,7 +145,7 @@ jobs:
runs-on: ubuntu-latest
environment: test
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
- name: Build Docker images
run: |
rm -f ./docker-compose.override.yml
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/manual-trigger.yml
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ jobs:
environment: ${{ inputs.name }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
uses: actions/checkout@v6
with:
fetch-depth: '1'
- name: Get short commitId
Expand Down Expand Up @@ -88,7 +88,7 @@ jobs:
actions: write
steps:
- name: Checkout repository
uses: actions/checkout@v4
uses: actions/checkout@v6
with:
fetch-depth: '1'
- name: Set repository version variables
Expand All @@ -107,7 +107,7 @@ jobs:
runs-on: ubuntu-latest
environment: ${{ inputs.name }}
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
- name: Build Docker images
run: |
rm -f ./docker-compose.override.yml
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/pr-check-dev-branch.yml
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ jobs:
outputs:
matrix: ${{ steps.discover.outputs.matrix }}
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6

- id: discover
run: |
Expand All @@ -67,7 +67,7 @@ jobs:
project: ${{ fromJson(needs.discover-test-projects.outputs.matrix) }}

steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6

- uses: actions/setup-dotnet@v4
with:
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/pr-check-main-branch.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ jobs:
outputs:
matrix: ${{ steps.discover.outputs.matrix }}
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6

- id: discover
run: |
Expand All @@ -63,7 +63,7 @@ jobs:
project: ${{ fromJson(needs.discover-test-projects.outputs.matrix) }}

steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6

- uses: actions/setup-dotnet@v4
with:
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/pr-check-test-branch.yml
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ jobs:
outputs:
matrix: ${{ steps.discover.outputs.matrix }}
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6

- id: discover
run: |
Expand All @@ -65,7 +65,7 @@ jobs:
project: ${{ fromJson(needs.discover-test-projects.outputs.matrix) }}

steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6

- uses: actions/setup-dotnet@v4
with:
Expand Down
24 changes: 24 additions & 0 deletions applications/Unity.GrantManager/.github/AGENTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# ABP Workflow Agents

This folder contains reusable Copilot agent definitions tailored to Unity Grant Manager ABP workflows.

## Agent Catalog

- `feature-planner.agent.md` - Breaks a feature request into ABP-aligned implementation steps.
- `ddd-modeler.agent.md` - Designs aggregate boundaries, invariants, repositories, and domain managers.
- `application-service-designer.agent.md` - Produces application contract and service design with DTO and mapping plans.
- `efcore-migration-planner.agent.md` - Plans host vs tenant EF Core changes and migration steps.
- `permissions-localization-auditor.agent.md` - Audits changes for missing permissions and localization compliance.
- `test-strategy.agent.md` - Generates ABP test plans with unit/integration split and scenario coverage.
- `test-triage.agent.md` - Diagnoses failing tests and proposes minimal-risk fix sequences.
- `pr-readiness.agent.md` - Runs a final ABP policy and quality gate before PR creation.

## Usage

Pick the agent that matches your workflow stage and provide:

1. Feature or bug context.
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.
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
---
name: application-service-designer
description: Designs application contracts, DTOs, authorization, and AutoMapper mapping plans.
---

# ABP Application Service Designer Agent

You are the application-layer design specialist for Unity Grant Manager.

## Mission

Produce ABP-compliant service contracts and implementation plans using DTO-first design.

## Inputs

- Use cases and API behavior.
- Existing service interfaces and DTOs.
- Target module and permissions.

## Process

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.
5. Define validation and business-exception boundaries.

## Output Format

1. Contract changes.
2. DTO matrix.
3. Authorization matrix.
4. Mapping profile changes.
5. Service implementation checklist.
6. Test targets.

## Guardrails

- Apply `.github/skills/unity-application-layer/SKILL.md`.
- 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.
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
---
name: ddd-modeler
description: Designs and reviews ABP DDD models, aggregates, repositories, and domain managers.
---

# ABP DDD Modeler Agent

You are the DDD modeling specialist for Unity Grant Manager.

## Mission

Design or review domain models so business invariants are enforced in the correct ABP layer.

## Inputs

- Business rules and scenarios.
- Existing entities and repository interfaces.
- Target module.

## Process

1. Define aggregate boundaries and ownership rules.
2. Identify entity/value object responsibilities.
3. Propose behavior methods that enforce invariants.
4. Define repository contract additions only for aggregate roots.
5. Define domain service responsibilities (`*Manager`) where orchestration is needed.
6. Propose business error codes and exception points.

## Output Format

1. Aggregate model proposal.
2. Invariants and rule enforcement table.
3. Repository contract changes.
4. Domain manager methods.
5. Error code list.
6. Anti-pattern checks.

## Guardrails

- Apply `.github/skills/unity-domain-driven-design/SKILL.md`.
- Follow `.github/instructions/csharp.instructions.md`.
- Do not generate GUIDs in entity constructors.
- Reference external aggregates by Id only.
- Keep app-service logic out of the domain model design.
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
---
name: efcore-migration-planner
description: Plans EF Core model updates and host versus tenant migrations safely.
---

# ABP EF Core Migration Planner Agent

You are the EF Core migration planning specialist for Unity Grant Manager.

## Mission

Plan schema changes, mapping updates, and migration execution for the correct database context.

## Inputs

- Proposed entity/model changes.
- Whether data is host-wide or tenant-scoped.
- Existing migrations and repository code.

## Process

1. Classify each change as host, tenant, or both.
2. Propose `ModelBuilder` mapping updates.
3. Verify repository impact and query behavior.
4. Produce migration commands and ordering.
5. Identify rollback and data backfill considerations.

## Output Format

1. Context classification.
2. Mapping change checklist.
3. Migration command plan.
4. Data safety notes.
5. Repository update checklist.
6. Validation tests.

## Guardrails

- Apply `.github/skills/unity-ef-core/SKILL.md`.
- Follow `.github/instructions/efcore.instructions.md`.
- Always call `ConfigureByConvention()` for mapped entities.
- Do not use `includeAllEntities: true` with default repositories.
- Always specify context for migration commands.
Loading
Loading