Skip to content

feature/482 Use list types from database - #487

Merged
junaidiqbalmoj merged 13 commits into
masterfrom
feature/use-list-types-from-database
May 7, 2026
Merged

feature/482 Use list types from database#487
junaidiqbalmoj merged 13 commits into
masterfrom
feature/use-list-types-from-database

Conversation

@KianKwa

@KianKwa KianKwa commented Apr 15, 2026

Copy link
Copy Markdown
Contributor

Jira link

#482

Change description

Use list types from database

Checklist

  • commit messages are meaningful and follow good commit message guidelines
  • README and other documentation has been updated / added (if needed)
  • tests have been updated / new tests has been added (if needed)
  • Does this PR introduce a breaking change

Summary by CodeRabbit

  • New Features

    • Notifications and PDF generation now resolve list-type names from the live database for more accurate templates.
  • Bug Fixes

    • Improved fallback behaviour when list-type lookups fail, reducing template and notification errors.
  • Chores

    • Replaced static mock list-type data with runtime database queries across admin pages and tests.
    • Updated list-type provenance classifications and configuration options for data accuracy and validation.

@github-actions

github-actions Bot commented Apr 15, 2026

Copy link
Copy Markdown
Contributor

🎭 Playwright E2E Test Results

83 tests   50 ✅  4m 48s ⏱️
33 suites  33 💤
 1 files     0 ❌

Results for commit 35246fe.

♻️ This comment has been updated with latest results.

@coderabbitai

coderabbitai Bot commented Apr 15, 2026

Copy link
Copy Markdown
Contributor

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Migrates list-type sourcing from in-repo mocks to runtime database queries (Prisma), removes the mock list-types module/exports, updates services to use DB lookups for PDF generator and notifications, updates system-admin pages to fetch list types, and adjusts provenance data and related validation/UI.

Changes

List-types common module removal

Layer / File(s) Summary
Public API cleanup
libs/list-types/common/src/index.ts
Removed re-exports for getListTypeName, ListTypeName, ListType, and mockListTypes.
Deleted mock/types
libs/list-types/common/src/list-type-ids.ts, libs/list-types/common/src/mock-list-types.ts
Deleted files that provided in-memory mockListTypes, ListType type, and getListTypeName() helper.

Notification & Publication service DB migration

Layer / File(s) Summary
Data lookup change
libs/notifications/src/notification/notification-service.ts, libs/publication/src/processing/service.ts
Replaced in-memory lookup with prisma.listType.findUnique to derive listType.name/friendlyName for notifications and PDF generator selection.
API/internal wiring
libs/notifications/src/notification/notification-service.ts
Threaded optional listTypeName?: string through processUserNotification and buildEmailTemplateData; loosened registry key type to string.
Error handling / fallback
libs/publication/src/processing/service.ts
If DB lookup missing/throws, fallback to LIST_TYPE_<id> for hearing name and return empty generator when none found; logs warnings on DB errors.
Tests
libs/notifications/src/notification/notification-service.test.ts, libs/publication/src/processing/service.test.ts
Introduced Vitest mocks for @hmcts/postgres-prisma / prisma.listType.findUnique and updated test setups/assertions to stub DB returns per scenario.

System-admin pages: replace mocks with DB queries

Layer / File(s) Summary
Query integration
libs/system-admin-pages/src/pages/manage-list-types/index.ts, .../manage-third-party-subscriptions/index.ts
Replaced mockListTypes usage with runtime findAllListTypes() and awaited calls in handlers.
View/data mapping
libs/system-admin-pages/src/pages/manage-list-types/index.ts, .../manage-third-party-subscriptions/index.ts
Changed name fallback to `friendlyName
Templates & tests
libs/system-admin-pages/src/pages/manage-list-types/index.njk, .../index.test.ts, .../index.njk
Added manage-list-types template; tests updated to mock findAllListTypes() and assert new friendly-name fallback and counts.

Provenance data, validation and UI updates

Layer / File(s) Summary
Data updates
libs/location/src/list-type-data.ts, e2e-tests/utils/seed-list-types.ts
Adjusted provenance values for many list types (e.g., MANUAL_UPLOADCFT_IDAM, several → CRIME_IDAM); minor Welsh name punctuation fix.
Validation & form wiring
libs/system-admin-pages/src/list-type/validation.ts, libs/system-admin-pages/src/pages/configure-list-type-enter-details/index.ts, .../index.njk
Replaced COMMON_PLATFORM with CRIME_IDAM in PROVENANCE_OPTIONS, handlers, and template checkbox options; updated POST/GET checked state handling.
Tests
libs/system-admin-pages/src/pages/configure-list-type-enter-details/index.test.ts
Updated/render tests to expect CRIME_IDAM in checkedProvenance and added a test for editing list type with CRIME_IDAM.

Test infra and minor test changes

Layer / File(s) Summary
Manual-upload and other tests
libs/admin-pages/src/pages/manual-upload-summary/index.test.ts, libs/system-admin-pages/src/pages/manage-list-types/index.test.ts, various tests
Replaced imports of mockListTypes with Prisma/query mocks where needed; added prisma mocks returning specific list-type records; adjusted some assertions (removed inline comment text).
Config
vitest.config.*
Minor config adjustments referenced by test changes.

Sequence Diagram(s)

sequenceDiagram
    autonumber
    participant EventProducer as PublicationEvent
    participant PublicationService as Publication Service
    participant Prisma as Postgres/Prisma
    participant PDFRegistry as PDF_GENERATOR_REGISTRY
    participant NotificationService as Notification Service
    participant EmailBuilder as Email Builder
    participant Outbound as Email/SNS

    EventProducer->>PublicationService: sendPublication(event)
    PublicationService->>Prisma: findUnique(listTypeId)
    Prisma-->>PublicationService: listType { name, friendlyName } or null
    PublicationService->>PDFRegistry: lookup generator by name (or key fallback)
    PDFRegistry-->>PublicationService: generator or undefined
    PublicationService->>NotificationService: sendPublicationNotifications(event, listTypeName?)
    NotificationService->>Prisma: findUnique(listTypeId) [if needed]
    Prisma-->>NotificationService: listType { name } or null
    NotificationService->>EmailBuilder: buildEmailTemplateData(event, user, listTypeName?)
    EmailBuilder-->>NotificationService: email payload
    NotificationService->>Outbound: send email
    Outbound-->>NotificationService: delivery result
Loading

Possibly related issues

Possibly related PRs

  • hmcts/cath-service#320 — refactors publication/notification flows and adopts DB-backed list-type lookups, touching the same modules.
  • hmcts/cath-service#325 — directly related: removes/changes mockListTypes exports and switches callers to prisma.listType.findUnique.
  • hmcts/cath-service#181 — implements the same migration pattern replacing in-memory list-type lookups with DB queries.
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title directly reflects the main objective of the pull request—migrating list types from in-memory mocks to runtime database lookups across multiple modules.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feature/use-list-types-from-database

Tip

💬 Introducing Slack Agent: The best way for teams to turn conversations into code.

Slack Agent is built on CodeRabbit's deep understanding of your code, so your team can collaborate across the entire SDLC without losing context.

  • Generate code and open pull requests
  • Plan features and break down work
  • Investigate incidents and troubleshoot customer tickets together
  • Automate recurring tasks and respond to alerts with triggers
  • Summarize progress and report instantly

Built for teams:

  • Shared memory across your entire org—no repeating context
  • Per-thread sandboxes to safely plan and execute work
  • Governance built-in—scoped access, auditability, and budget controls

One agent for your entire SDLC. Right inside Slack.

👉 Get started


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 6

🧹 Nitpick comments (1)
libs/system-admin-pages/src/pages/manage-list-types/index.test.ts (1)

8-55: Rename the top-level fixture constant to SCREAMING_SNAKE_CASE.

mockDbListTypes should follow the repo constant naming rule for consistency.

Suggested rename
-const mockDbListTypes = [
+const MOCK_DB_LIST_TYPES = [
@@
-    vi.mocked(queries.findAllListTypes).mockResolvedValue(mockDbListTypes as any);
+    vi.mocked(queries.findAllListTypes).mockResolvedValue(MOCK_DB_LIST_TYPES as any);
@@
-      vi.mocked(queries.findAllListTypes).mockResolvedValue([{ ...mockDbListTypes[0], friendlyName: null } as any]);
+      vi.mocked(queries.findAllListTypes).mockResolvedValue([{ ...MOCK_DB_LIST_TYPES[0], friendlyName: null } as any]);
@@
-      expect(listTypes.length).toBe(mockDbListTypes.length);
+      expect(listTypes.length).toBe(MOCK_DB_LIST_TYPES.length);

As per coding guidelines: "Constants should use SCREAMING_SNAKE_CASE (e.g., MAX_FILE_SIZE, DEFAULT_TIMEOUT)."

Also applies to: 71-72, 139-140, 155-156


ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 786f6c1c-e35d-4abc-9211-a1e115a6b26f

📥 Commits

Reviewing files that changed from the base of the PR and between 825ee68 and 617a275.

📒 Files selected for processing (15)
  • e2e-tests/tests/care-standards-tribunal-upload.spec.ts
  • e2e-tests/tests/configure-list-type.spec.ts
  • libs/admin-pages/src/pages/manual-upload-summary/index.test.ts
  • libs/list-types/common/src/index.ts
  • libs/list-types/common/src/list-type-ids.ts
  • libs/list-types/common/src/mock-list-types.ts
  • libs/notifications/src/notification/notification-service.test.ts
  • libs/notifications/src/notification/notification-service.ts
  • libs/publication/src/index.ts
  • libs/publication/src/processing/service.test.ts
  • libs/publication/src/processing/service.ts
  • libs/system-admin-pages/src/pages/manage-list-types/index.test.ts
  • libs/system-admin-pages/src/pages/manage-list-types/index.ts
  • libs/system-admin-pages/src/pages/manage-third-party-subscriptions/index.ts
  • tsconfig.json
💤 Files with no reviewable changes (4)
  • libs/publication/src/index.ts
  • libs/list-types/common/src/list-type-ids.ts
  • libs/list-types/common/src/index.ts
  • libs/list-types/common/src/mock-list-types.ts

@@ -1,8 +1,8 @@
import AxeBuilder from "@axe-core/playwright";
import { prisma } from "@hmcts/postgres";

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Use the database id in this flow.

The file now pulls in Prisma, but the upload helper still selects hard-coded list type "9" later on. That keeps this E2E coupled to seed ids and can make it fail across environments even though the app now reads list types from the database.

Comment on lines +91 to +92
const { prisma } = await import("@hmcts/postgres");
vi.mocked(prisma.listType.findUnique).mockResolvedValue({ name: "CIVIL_AND_FAMILY_DAILY_CAUSE_LIST" } as any);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Make the Prisma mock depend on the requested id.

This always returns the Civil/Family list type, so the unsupported-list-type path is no longer really exercised. Returning null for non-enhanced ids would keep the tests aligned with the new lookup behaviour.

Suggested fix
     const { prisma } = await import("@hmcts/postgres");
-    vi.mocked(prisma.listType.findUnique).mockResolvedValue({ name: "CIVIL_AND_FAMILY_DAILY_CAUSE_LIST" } as any);
+    vi.mocked(prisma.listType.findUnique).mockImplementation(async ({ where: { id } }) => {
+      if (id === 8) {
+        return { name: "CIVIL_AND_FAMILY_DAILY_CAUSE_LIST" } as any;
+      }
+      return null;
+    });
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
const { prisma } = await import("@hmcts/postgres");
vi.mocked(prisma.listType.findUnique).mockResolvedValue({ name: "CIVIL_AND_FAMILY_DAILY_CAUSE_LIST" } as any);
const { prisma } = await import("@hmcts/postgres");
vi.mocked(prisma.listType.findUnique).mockImplementation(async ({ where: { id } }) => {
if (id === 8) {
return { name: "CIVIL_AND_FAMILY_DAILY_CAUSE_LIST" } as any;
}
return null;
});

Comment thread libs/notifications/src/notification/notification-service.ts Outdated
Comment thread libs/publication/src/processing/service.ts Outdated
Comment thread libs/publication/src/processing/service.ts Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🧹 Nitpick comments (2)
libs/system-admin-pages/src/pages/manage-third-party-subscriptions/index.test.ts (1)

26-29: Broaden fixture shape to cover friendlyName/name fallback.

The fixture currently only validates the friendlyName path. Add name and include one entry without friendlyName so the fallback behaviour is exercised.

♻️ Proposed fixture update
   const mockListTypes = [
-    { id: 1, friendlyName: "Civil Daily Cause List" },
-    { id: 2, friendlyName: "Crown Daily List" }
+    { id: 1, name: "CIVIL_DAILY_CAUSE_LIST", friendlyName: "Civil Daily Cause List" },
+    { id: 2, name: "CROWN_DAILY_LIST" }
   ];
libs/notifications/src/notification/notification-service.ts (1)

100-103: Make the fallback path observable.

Line 103’s catch(() => null) quietly downgrades every affected notification to the standard template. A warning or metric here would make DB/schema issues visible instead of silently degrading behaviour.


ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: bfbeb5e5-f35a-4b25-944f-099fa1723a4b

📥 Commits

Reviewing files that changed from the base of the PR and between 617a275 and 0ad46d1.

📒 Files selected for processing (3)
  • libs/notifications/src/notification/notification-service.ts
  • libs/publication/src/processing/service.ts
  • libs/system-admin-pages/src/pages/manage-third-party-subscriptions/index.test.ts
🚧 Files skipped from review as they are similar to previous changes (1)
  • libs/publication/src/processing/service.ts

Comment thread libs/system-admin-pages/src/pages/manage-third-party-subscriptions/index.test.ts Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🧹 Nitpick comments (2)
e2e-tests/utils/seed-list-types.ts (1)

14-105: Avoid keeping a second hard-coded list-type catalogue here.

These provenance values now have to stay in sync with libs/location/src/list-type-data.ts, and this PR is already updating both copies for the same changes. Please consider pulling the shared list-type data into one source and reusing it here to avoid future drift.

libs/system-admin-pages/src/pages/configure-list-type-enter-details/index.ts (1)

42-46: Extract the provenance-to-checkbox mapping into one helper.

The GET path and POST error path now duplicate the same projection logic. Please keep this in one place so the next provenance change only needs a single update.

Possible tidy-up
+const buildCheckedProvenance = (allowedProvenance?: string[]) => ({
+  CFT_IDAM: allowedProvenance?.includes("CFT_IDAM") || false,
+  PI_AAD: allowedProvenance?.includes("PI_AAD") || false,
+  CRIME_IDAM: allowedProvenance?.includes("CRIME_IDAM") || false
+});
+
 const getHandler = async (req: Request, res: Response) => {
   const session = req.session as ListTypeSession;
   const language = req.query.lng === "cy" ? "cy" : "en";
   const content = language === "cy" ? cy : en;
   const editId = req.query.id ? Number.parseInt(req.query.id as string, 10) : undefined;
@@
-  const checkedProvenance = {
-    CFT_IDAM: formData.allowedProvenance?.includes("CFT_IDAM") || false,
-    PI_AAD: formData.allowedProvenance?.includes("PI_AAD") || false,
-    CRIME_IDAM: formData.allowedProvenance?.includes("CRIME_IDAM") || false
-  };
+  const checkedProvenance = buildCheckedProvenance(formData.allowedProvenance);
@@
-    const checkedProvenance = {
-      CFT_IDAM: formData.allowedProvenance?.includes("CFT_IDAM") || false,
-      PI_AAD: formData.allowedProvenance?.includes("PI_AAD") || false,
-      CRIME_IDAM: formData.allowedProvenance?.includes("CRIME_IDAM") || false
-    };
+    const checkedProvenance = buildCheckedProvenance(formData.allowedProvenance);

Also applies to: 105-109


ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: a870dcfe-89e7-414e-9929-b4860dcae0e0

📥 Commits

Reviewing files that changed from the base of the PR and between 0ad46d1 and a2d60ba.

📒 Files selected for processing (6)
  • e2e-tests/utils/seed-list-types.ts
  • libs/location/src/list-type-data.ts
  • libs/system-admin-pages/src/list-type/validation.ts
  • libs/system-admin-pages/src/pages/configure-list-type-enter-details/index.njk
  • libs/system-admin-pages/src/pages/configure-list-type-enter-details/index.test.ts
  • libs/system-admin-pages/src/pages/configure-list-type-enter-details/index.ts
✅ Files skipped from review due to trivial changes (1)
  • libs/system-admin-pages/src/list-type/validation.ts

KianKwa added 3 commits April 28, 2026 14:21
…pes-from-database

# Conflicts:
#	e2e-tests/tests/care-standards-tribunal-upload.spec.ts
#	e2e-tests/tests/configure-list-type.spec.ts
#	e2e-tests/utils/seed-list-types.ts
#	libs/system-admin-pages/src/pages/manage-list-types/index.test.ts
#	libs/system-admin-pages/src/pages/manage-list-types/index.ts
#	tsconfig.json
@github-actions

Copy link
Copy Markdown
Contributor

Preview Deployment Successful 🚀

Your preview environment is ready:

The environment will be automatically cleaned up when this PR is closed.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🧹 Nitpick comments (2)
libs/system-admin-pages/src/pages/manage-third-party-subscriptions/index.test.ts (1)

26-29: Add one case for name fallback coverage.

The new handler logic supports friendlyName || name, but the fixture only exercises friendlyName. Add one list type with name only to protect that branch.

Suggested test fixture tweak
   const mockListTypes = [
-    { id: 1, friendlyName: "Civil Daily Cause List" },
-    { id: 2, friendlyName: "Crown Daily List" }
+    { id: 1, friendlyName: "Civil Daily Cause List", name: "CIVIL_DAILY_CAUSE_LIST" },
+    { id: 2, friendlyName: "Crown Daily List", name: "CROWN_DAILY_LIST" },
+    { id: 3, name: "FALLBACK_NAME_ONLY_LIST_TYPE" }
   ];

As per coding guidelines, "Aim for >80% test coverage on business logic."

libs/publication/src/processing/service.test.ts (1)

258-280: Add a rejection-path test for list-type lookup failures.

You already test null fallback; add one case where lookup throws to lock in the catch-and-continue behaviour.

Suggested additional test case
   it("should use fallback list type name when not found", async () => {
     vi.mocked(prisma.listType.findUnique).mockResolvedValue(null);
@@
     expect(sendPublicationNotifications).toHaveBeenCalledWith(
       expect.objectContaining({
         hearingListName: "LIST_TYPE_999"
       })
     );
   });
+
+  it("should use fallback list type name when lookup throws", async () => {
+    vi.mocked(prisma.listType.findUnique).mockRejectedValueOnce(new Error("DB unavailable"));
+    vi.mocked(getLocationById).mockResolvedValue({
+      id: 123,
+      name: "Test Court",
+      welshName: "Llys Prawf"
+    });
+    vi.mocked(sendPublicationNotifications).mockResolvedValue({
+      totalSubscriptions: 0,
+      sent: 0,
+      failed: 0,
+      skipped: 0,
+      errors: []
+    });
+
+    await sendPublicationNotificationsForArtefact({ ...baseParams, listTypeId: 999 });
+
+    expect(sendPublicationNotifications).toHaveBeenCalledWith(
+      expect.objectContaining({ hearingListName: "LIST_TYPE_999" })
+    );
+  });

As per coding guidelines, "Aim for >80% test coverage on business logic."


ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: e3e2a83d-1882-4b29-8c68-25c46df7373c

📥 Commits

Reviewing files that changed from the base of the PR and between a2d60ba and 52a811d.

📒 Files selected for processing (11)
  • e2e-tests/utils/seed-list-types.ts
  • libs/admin-pages/src/pages/manual-upload-summary/index.test.ts
  • libs/list-types/common/src/index.ts
  • libs/notifications/src/notification/notification-service.test.ts
  • libs/notifications/src/notification/notification-service.ts
  • libs/publication/src/processing/service.test.ts
  • libs/publication/src/processing/service.ts
  • libs/system-admin-pages/src/pages/configure-list-type-enter-details/index.test.ts
  • libs/system-admin-pages/src/pages/manage-list-types/index.njk
  • libs/system-admin-pages/src/pages/manage-third-party-subscriptions/index.test.ts
  • libs/system-admin-pages/src/pages/manage-third-party-subscriptions/index.ts
💤 Files with no reviewable changes (1)
  • libs/list-types/common/src/index.ts
✅ Files skipped from review due to trivial changes (2)
  • libs/system-admin-pages/src/pages/manage-list-types/index.njk
  • e2e-tests/utils/seed-list-types.ts
🚧 Files skipped from review as they are similar to previous changes (2)
  • libs/notifications/src/notification/notification-service.test.ts
  • libs/admin-pages/src/pages/manual-upload-summary/index.test.ts

@github-actions

Copy link
Copy Markdown
Contributor

Preview Deployment Successful 🚀

Your preview environment is ready:

The environment will be automatically cleaned up when this PR is closed.

@github-actions

github-actions Bot commented May 7, 2026

Copy link
Copy Markdown
Contributor

Preview Deployment Successful 🚀

Your preview environment is ready:

The environment will be automatically cleaned up when this PR is closed.

@sonarqubecloud

sonarqubecloud Bot commented May 7, 2026

Copy link
Copy Markdown

@github-actions

github-actions Bot commented May 7, 2026

Copy link
Copy Markdown
Contributor

Preview Deployment Successful 🚀

Your preview environment is ready:

The environment will be automatically cleaned up when this PR is closed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants