Skip to content
Merged

Dev #2213

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
76 commits
Select commit Hold shift + click to select a range
8e67f97
feature/AB#9074 - Add Applicant Comments
plavoie-BC Mar 9, 2026
d42e584
Merge branch 'dev' into feature/AB#9074-applicant-comments
plavoie-BC Mar 10, 2026
3837bd1
Merge branch 'dev' into feature/AB#9074-applicant-comments
plavoie-BC Mar 16, 2026
78422d7
[AB#9074] Refactor comments widget manager and update counters
plavoie-BC Mar 16, 2026
4b8fb26
[AB#9074] Update comments widget to refresh counters on init
plavoie-BC Mar 16, 2026
2309307
[AB#9074] Update EmailCommentDto and adjust comment links
plavoie-BC Mar 16, 2026
c909a1e
[AB#9074] Replace NotImplementedException with ArgumentOutOfRangeExce…
plavoie-BC Mar 16, 2026
202dfae
Update customization: feature-planner.agent.md
plavoie-BC Mar 17, 2026
339b1db
Update customization: feature-planner.agent.md
plavoie-BC Mar 17, 2026
664a69a
Merge remote-tracking branch 'origin/dev' into feature/AB#9074-applic…
plavoie-BC Mar 27, 2026
2f087a8
[AB#9074] SonarQube fixes
plavoie-BC Mar 27, 2026
aac20a3
AB#32012 harden scoring prompt contracts
jacobwillsmith Mar 27, 2026
15e91f0
[AB#9074] Comment fix
plavoie-BC Mar 27, 2026
b45a936
Merge remote-tracking branch 'origin/dev' into feature/AB#9074-applic…
plavoie-BC Mar 27, 2026
60eb817
Merge branch 'dev' into feature/AB#32012-RefactorAIFlowOrchestration
jacobwillsmith Mar 27, 2026
5f050c1
AB#32012 sync seeded AI prompt contracts
jacobwillsmith Mar 27, 2026
fa5e634
[AB#9074] Refactor CommentType to use enum in EmailCommentDto
plavoie-BC Mar 28, 2026
3f019d7
[AB#9074] Add GetBaseUrlAsync method and refactor comment link genera…
plavoie-BC Mar 28, 2026
4cc3cd7
[AB#9074] Simplify CommentType enum by removing explicit values
plavoie-BC Mar 28, 2026
e75cb0b
AB#29181: Use CHEFS CSS Files in Submission Panel Shadow DOM
aurelio-aot Mar 28, 2026
f8d4ed3
AB#29181: Update comments
aurelio-aot Mar 28, 2026
74f0a67
[AB#9074] Re-apply ApplicantComments migration
plavoie-BC Mar 28, 2026
5ba8a8e
[AB#9074] Apply suggestions from code review
plavoie-BC Mar 28, 2026
b63b26b
[AB#9074] Code Quality Improvements
plavoie-BC Mar 28, 2026
fe961c6
Merge branch 'dev' into feature/AB#9074-applicant-comments
plavoie-BC Mar 28, 2026
b0c88e0
AB#32298 move AI files into module and automation folders
jacobwillsmith Mar 28, 2026
a33844b
AB#32298 update AI module wiring and consumer namespaces
jacobwillsmith Mar 28, 2026
7ce10a3
AB#29181: Fix sonarqube issue. Stick to the CHEFS and BC GOV styling
aurelio-aot Mar 28, 2026
7a9a1d4
AB#29181: Fix sonarqube issue
aurelio-aot Mar 28, 2026
9d1ac28
AB#29181: Fix sonarqube issues
aurelio-aot Mar 28, 2026
5395d33
AB#29181: Remove NOSONAR because it's not working
aurelio-aot Mar 28, 2026
97191d8
AB#31068: Dont allow creation of payment request if parent is not app…
aurelio-aot Mar 29, 2026
302704e
AB#31068: Exclude self-reference when getting parent application
aurelio-aot Mar 29, 2026
bd5ec42
AB#31102: Bugfix for Applicant with empty UnityApplicantId is Not Sea…
aurelio-aot Mar 29, 2026
33b7450
AB#32298 tighten AI queue boundaries and pipeline naming
jacobwillsmith Mar 30, 2026
6ed567b
AB#32298 remove unused pipeline handler tenant dependency
jacobwillsmith Mar 30, 2026
6b3cf2d
AB#32493 AB#32498 - fix dynamic datatable with large fields
AndreGAot Mar 30, 2026
aa95116
AB#32493 AB#32498 - update dynamic dt config
AndreGAot Mar 30, 2026
491bc17
Merge pull request #2184 from bcgov/feature/AB#32012-RefactorAIFlowOr…
JamesPasta Mar 30, 2026
10d8790
AB#32012 validate scoring against aliased section contract
jacobwillsmith Mar 30, 2026
fa40d87
Merge pull request #2200 from bcgov/feature/AB#32012-RefactorAIFlowOr…
JamesPasta Mar 30, 2026
747d391
AB#29201 - Created Unity Admin Page. Restricted to ITOperations Role,…
DavidBrightBcGov Mar 31, 2026
2187e79
AB#32524: Funding History and Issue Tracking Bug
aurelio-aot Mar 31, 2026
fdefa55
Merge pull request #2204 from bcgov/hotfix/AB#32524-Funding-History-I…
JamesPasta Mar 31, 2026
a3727df
AB#32490 update portal contact providers and handlers
AndreGAot Mar 31, 2026
8705bf6
AB#32524: Allow non-numeric inputs for Year
aurelio-aot Mar 31, 2026
6a43a18
AB#32490 add on creationTime to contacts dto
AndreGAot Mar 31, 2026
997d4e4
Merge branch 'dev' into bugfix/AB#32524-Funding-History-Issue-Trackin…
aurelio-aot Mar 31, 2026
e80e748
Merge pull request #2201 from bcgov/bugfix/AB#32524-Funding-History-I…
JamesPasta Mar 31, 2026
c3e449a
AB#31414: Contacts and Addresses Tab Restructuring - Initial Draft
aurelio-aot Mar 31, 2026
ca2d33f
AB#32490 address more copilot comments
AndreGAot Mar 31, 2026
85dce03
AB#31414: Show data table footer for Submissions tab
aurelio-aot Mar 31, 2026
230f92a
AB#29201 Updated code quality gate checks for the page
DavidBrightBcGov Mar 31, 2026
1573aa0
AB#31414: Fix sonarqube issues
aurelio-aot Mar 31, 2026
a31f14d
AB#32490 fix AI mess
AndreGAot Mar 31, 2026
b05cea9
feature/AB#32504: Enable searching and add filter button for assessme…
JamesPasta Apr 1, 2026
677c933
feature/AB#32504: Enable searching and add filter button for assessme…
JamesPasta Apr 1, 2026
93d353e
AB#32490 set isPrimary by creation if not set
AndreGAot Apr 1, 2026
760701e
Merge pull request #2202 from bcgov/feature/AB#29201-Unity-Admin-Page
DavidBrightBcGov Apr 1, 2026
e82a63d
Merge pull request #2209 from bcgov/feature/AB#31414-Contact-Address-…
JamesPasta Apr 1, 2026
e250890
Merge pull request #2208 from bcgov/feature/AB#32490-portal-contact-p…
JamesPasta Apr 1, 2026
520e6af
#AB32265 - Needed to make sure when resetting to default view, since …
DavidBrightBcGov Apr 1, 2026
fbe150a
AB#33265 - Changed to use appropriate clearFilters() method I initial…
DavidBrightBcGov Apr 1, 2026
1899447
Merge pull request #2193 from bcgov/bugfix/AB#31102-Cannot-Search-App…
JamesPasta Apr 1, 2026
7d52105
Merge pull request #2192 from bcgov/feature/AB#31068-Payment-Validati…
JamesPasta Apr 1, 2026
77d0a73
Merge pull request #2191 from bcgov/feature/AB#29181-Use-CHEFS-CSS
JamesPasta Apr 1, 2026
821bd12
Merge pull request #2211 from bcgov/feature/AB#32504-FilterRiskAttach…
JamesPasta Apr 1, 2026
56b69fc
feature/AB#9074-FixImportsUnused
JamesPasta Apr 1, 2026
5f3bce4
Merge branch 'dev' into feature/AB#9074-applicant-comments
JamesPasta Apr 1, 2026
6b26339
Merge pull request #2210 from bcgov/bugfix/AB#32265-filter-reset-remo…
DavidBrightBcGov Apr 1, 2026
9c9aa3b
feature/AB#9074-FixImportsUnused
JamesPasta Apr 1, 2026
f562f44
Merge branch 'dev' into feature/AB#32298-MoveAIApplicationServicesInt…
jacobwillsmith Apr 1, 2026
f8f03b0
Merge pull request #2194 from bcgov/feature/AB#32298-MoveAIApplicatio…
jacobwillsmith Apr 1, 2026
7173580
Merge pull request #2190 from bcgov/feature/AB#9074-applicant-comments
JamesPasta Apr 1, 2026
183b8ba
Merge pull request #2212 from bcgov/feature/AB#9074-applicant-comments
JamesPasta Apr 1, 2026
ad8b58b
Merge pull request #2195 from bcgov/feature/AB#32493-AB#32498-datagri…
JamesPasta Apr 1, 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
152 changes: 124 additions & 28 deletions applications/Unity.GrantManager/.github/agents/feature-planner.agent.md
Original file line number Diff line number Diff line change
@@ -1,16 +1,88 @@
---
name: feature-planner
description: Plans feature implementation across Domain, Application, EF Core, Web, and tests.
tools: ['fetch', 'githubRepo', 'problems', 'usages', 'search', 'todos', 'runSubagent']
argument-hint: Outline the goal or problem to research
target: vscode
disable-model-invocation: true
tools: ['search', 'read', 'web', 'vscode/memory', 'github/issue_read', 'github.vscode-pull-request-github/issue_fetch', 'github.vscode-pull-request-github/activePullRequest', 'execute/getTerminalOutput', 'execute/testFailure', 'agent', 'vscode/askQuestions']
agents: ['Explore']
handoffs:
- label: Start Implementation
agent: agent
prompt: 'Start implementation'
send: true
- label: Open in Editor
agent: agent
prompt: '#createFile the plan as is into an untitled file (`untitled:plan-${camelCaseName}.prompt.md` without frontmatter) for further refinement.'
send: true
showContinueOn: false
---

# ABP Feature Planner Agent

You are the feature planning specialist for Unity Grant Manager.
You are the FEATURE PLANNING AGENT for Unity Grant Manager, pairing with the user to create a detailed, actionable plan.

## Mission
You research the codebase → clarify with the user → capture findings and decisions to convert a feature request into a comprehensive plan that respects ABP modular layering and delivery flow. This iterative approach catches edge cases and non-obvious requirements BEFORE implementation begins.

Convert a feature request into an implementation plan that respects ABP modular layering and delivery flow.
Your SOLE responsibility is planning. NEVER start implementation.

**Current plan**: `/memories/session/plan.md` - update using #tool:vscode/memory.

<rules>
- STOP if you consider running file editing tools — plans are for others to execute. The only write tool you have is #tool:vscode/memory for persisting plans.
- Use #tool:vscode/askQuestions freely to clarify requirements — don't make large assumptions
- Present a well-researched plan with loose ends tied BEFORE implementation
</rules>

<workflow>
Cycle through these phases based on user input. This is iterative, not linear. If the user task is highly ambiguous, do only *Discovery* to outline a draft plan, then move on to alignment before fleshing out the full plan.

## 1. Discovery

Run the *Explore* subagent to gather context, analogous existing features to use as implementation templates, and potential blockers or ambiguities. When the task spans multiple independent areas (e.g., frontend + backend, different features, separate modules), launch **2-3 *Explore* subagents in parallel** — one per area — to speed up discovery.

Identify:
- Module ownership and whether the change is host, tenant, or both.
- Work split by ABP layer: Domain.Shared → Domain → Application.Contracts → Application → EntityFrameworkCore → HttpApi/Web → Tests.
- Dependencies and ordering constraints between layers.
- Cross-module impacts and permission/localization requirements.

Update the plan with your findings.

## 2. Alignment

If research reveals major ambiguities or if you need to validate assumptions:
- Use #tool:vscode/askQuestions to clarify intent with the user.
- Surface discovered technical constraints or alternative approaches.
- If answers significantly change the scope, loop back to **Discovery**.

## 3. Design

Once context is clear, draft a comprehensive implementation plan structured around ABP layers.

The plan should reflect:
- Structured concisely enough to be scannable and detailed enough for effective execution.
- Step-by-step implementation with explicit dependencies — mark which steps can run in parallel vs. which block on prior steps.
- For plans with many steps, group into named phases that are each independently verifiable.
- Verification steps for validating the implementation, both automated and manual.
- Critical architecture to reuse or use as reference — reference specific functions, types, or patterns, not just file names.
- Critical files to be modified (with full paths).
- Explicit scope boundaries — what's included and what's deliberately excluded.
- Reference decisions from the discussion.
- Leave no ambiguity.

Save the comprehensive plan document to `/memories/session/plan.md` via #tool:vscode/memory, then show the scannable plan to the user for review. You MUST show the plan to the user, as the plan file is for persistence only, not a substitute for showing it to the user.

## 4. Refinement

On user input after showing the plan:
- Changes requested → revise and present updated plan. Update `/memories/session/plan.md` to keep the documented plan in sync.
- Questions asked → clarify, or use #tool:vscode/askQuestions for follow-ups.
- Alternatives wanted → loop back to **Discovery** with new subagent.
- Approval given → acknowledge, the user can now use handoff buttons.

Keep iterating until explicit approval or handoff.
</workflow>

## Inputs

Expand All @@ -19,30 +91,54 @@ Convert a feature request into an implementation plan that respects ABP modular
- Target module(s).
- Any constraints (timeline, migration risk, tenant scope, security requirements).

## Process

1. Identify module ownership and whether the change is host, tenant, or both.
2. Split work by layer:
- Domain.Shared
- Domain
- Application.Contracts
- Application
- EntityFrameworkCore
- HttpApi/Web
- Tests
3. List dependencies and ordering constraints.
4. Flag cross-module impacts and permission/localization requirements.

## Output Format

Return sections in this order:

1. Scope summary.
2. Layer-by-layer implementation tasks.
3. Migration and data impact.
4. Test plan summary.
5. Risks and mitigations.
6. Definition of done checklist.
<plan_style_guide>
```markdown
## Plan: {Title (2-10 words)}

{TL;DR - what, why, and how (your recommended approach).}

**Steps**

### Phase 1 — Domain & Contracts
1. {Domain.Shared changes — enums, consts, error codes}
2. {Domain entity/aggregate changes — note dependency ("*depends on N*") or parallelism ("*parallel with step N*") when applicable}
3. {Application.Contracts — DTOs, IAppService interfaces, permissions}

### Phase 2 — Application & Persistence
4. {Application service implementation}
5. {EntityFrameworkCore — DbContext, entity config, migration}

### Phase 3 — API & Frontend
6. {HttpApi controller / AutoAPI}
7. {Web — Pages, JS, localization}

### Phase 4 — Tests
8. {Unit and integration tests}

**Relevant files**
- `{full/path/to/file}` — {what to modify or reuse, referencing specific functions/patterns}

**Migration & Data Impact**
- {Host vs tenant migration scope, data backfill needs, breaking schema changes}

**Verification**
1. {Verification steps for validating the implementation (**Specific** tasks, tests, commands, MCP tools, etc; not generic statements)}

**Decisions** (if applicable)
- {Decision, assumptions, and includes/excluded scope}

**Risks & Mitigations** (if applicable)
- {Risk and mitigation strategy}

**Definition of Done**
- [ ] {Checklist item}
```

Rules:
- NO code blocks — describe changes, link to files and specific symbols/functions.
- NO blocking questions at the end — ask during workflow via #tool:vscode/askQuestions.
- The plan MUST be presented to the user, don't just mention the plan file.
</plan_style_guide>

## Guardrails

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
name: abp-cli
description: ABP CLI commands - generate-proxy, install-libs, add-package-ref, new-module, install-module, abp update, abp clean, abp suite generate. Use when the user asks how to run ABP CLI commands, generate proxies, install libraries, or use ABP Suite.
description: ABP CLI commands - generate-proxy, install-libs, add-package-ref, new-module, install-module, abp update, abp clean, abp suite generate. Use when the user asks how to run ABP CLI commands, generate proxies, install NPM libraries, or use ABP Suite.
---

# ABP CLI Commands
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
using System.Threading.Tasks;

namespace Unity.GrantManager.AI.Extraction
namespace Unity.AI.Extraction
{
public interface ITextExtractionService
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
using System.Threading.Tasks;
using Unity.GrantManager.AI.Requests;
using Unity.GrantManager.AI.Responses;
using Unity.AI.Requests;
using Unity.AI.Responses;

namespace Unity.GrantManager.AI
namespace Unity.AI
{
public interface IAIService
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
using System.Text.Json.Serialization;

namespace Unity.GrantManager.AI.Models
namespace Unity.AI.Models
{
public class AIAttachmentItem
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
namespace Unity.GrantManager.AI.Models
namespace Unity.AI.Models
{
public static class AIJsonKeys
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
using System.Text.Json.Serialization;

namespace Unity.GrantManager.AI.Models
namespace Unity.AI.Models
{
public class ApplicationAnalysisFinding
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
using System.Text.Json.Serialization;

namespace Unity.GrantManager.AI.Models
namespace Unity.AI.Models
{
public class ApplicationAnalysisRecommendation
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
using System.Text.Json;
using System.Text.Json.Serialization;

namespace Unity.GrantManager.AI.Models
namespace Unity.AI.Models
{
public class ApplicationScoringAnswer
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
using System.Text.Json.Serialization;

namespace Unity.GrantManager.AI.Requests
namespace Unity.AI.Requests
{
public class AICompletionRequest
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
using System.Collections.Generic;
using System.Text.Json;
using System.Text.Json.Serialization;
using Unity.GrantManager.AI.Models;
using Unity.AI.Models;

namespace Unity.GrantManager.AI.Requests
namespace Unity.AI.Requests
{
public class ApplicationAnalysisRequest
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
using System.Collections.Generic;
using System.Text.Json;
using System.Text.Json.Serialization;
using Unity.GrantManager.AI.Models;
using Unity.AI.Models;

namespace Unity.GrantManager.AI.Requests
namespace Unity.AI.Requests
{
public class ApplicationScoringRequest
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
using System.Text.Json.Serialization;

namespace Unity.GrantManager.AI.Requests
namespace Unity.AI.Requests
{
public class AttachmentSummaryRequest
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
using System.Text.Json.Serialization;

namespace Unity.GrantManager.AI.Responses
namespace Unity.AI.Responses
{
public class AICompletionResponse
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
using System.Collections.Generic;
using System.Text.Json.Serialization;
using Unity.GrantManager.AI.Models;
using Unity.AI.Models;

namespace Unity.GrantManager.AI.Responses
namespace Unity.AI.Responses
{
public class ApplicationAnalysisResponse
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
using System.Collections.Generic;
using System.Text.Json.Serialization;
using Unity.GrantManager.AI.Models;
using Unity.AI.Models;

namespace Unity.GrantManager.AI.Responses
namespace Unity.AI.Responses
{
public class ApplicationScoringResponse
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
using System.Text.Json.Serialization;
using Unity.GrantManager.AI.Models;
using Unity.AI.Models;

namespace Unity.GrantManager.AI.Responses
namespace Unity.AI.Responses
{
public class AttachmentSummaryResponse
{
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
using System;
using System.Collections.Generic;
using System.Threading.Tasks;

namespace Unity.AI.Automation;

public interface IApplicationAIGenerationQueue
{
Task QueueAttachmentSummariesAsync(IReadOnlyList<Guid> attachmentIds, Guid? tenantId, string? promptVersion = null);
Task QueueApplicationAnalysisAsync(Guid applicationId, Guid? tenantId, string? promptVersion = null);
Task QueueApplicationScoringAsync(Guid applicationId, Guid? tenantId, string? promptVersion = null);
Task QueueApplicationPipelineAsync(Guid applicationId, Guid? tenantId, string? promptVersion = null);
}
Original file line number Diff line number Diff line change
@@ -1,27 +1,23 @@
<Project Sdk="Microsoft.NET.Sdk">

<Import Project="..\..\common.props" />

<PropertyGroup>
<TargetFramework>net9.0</TargetFramework>
<Nullable>enable</Nullable>
<RootNamespace>Unity.AI</RootNamespace>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Volo.Abp.Ddd.Application.Contracts" Version="9.1.3" />
<PackageReference Include="System.Text.Json" Version="9.0.5" />
<PackageReference Include="Volo.Abp.Authorization" Version="9.1.3" />
<PackageReference Include="Volo.Abp.Ddd.Application.Contracts" Version="9.1.3" />
<PackageReference Include="Volo.Abp.Features" Version="9.1.3" />
<PackageReference Include="Volo.Abp.SettingManagement.Application.Contracts" Version="9.1.3" />
<ProjectReference Include="..\Unity.AI.Domain.Shared\Unity.AI.Shared.csproj" />
</ItemGroup>

<ItemGroup>
<PackageReference Update="ConfigureAwait.Fody" Version="3.3.2" />
<PackageReference Update="Fody" Version="6.9.2">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>
</ItemGroup>

</Project>
</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
using UglyToad.PdfPig;
using Volo.Abp.DependencyInjection;

namespace Unity.GrantManager.AI.Extraction
namespace Unity.AI.Extraction
{
public partial class TextExtractionService : ITextExtractionService, ITransientDependency
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@
using System.Linq;
using System.Text.Json;
using System.Threading.Tasks;
using Unity.GrantManager.AI.Models;
using Unity.GrantManager.AI.Prompts;
using Unity.GrantManager.AI.Requests;
using Unity.AI.Models;
using Unity.AI.Prompts;
using Unity.AI.Requests;
using Unity.GrantManager.Applications;
using Volo.Abp.DependencyInjection;

namespace Unity.GrantManager.AI.Operations
namespace Unity.AI.Operations
{
public class ApplicationAnalysisService(
IApplicationRepository applicationRepository,
Expand Down
Loading
Loading