Skip to content

feat: expand @ocom-verification coverage for community management#299

Open
henry-casper wants to merge 4 commits into
mainfrom
feat/Expand-@ocom-verification-coverage-for-Community-Management
Open

feat: expand @ocom-verification coverage for community management#299
henry-casper wants to merge 4 commits into
mainfrom
feat/Expand-@ocom-verification-coverage-for-Community-Management

Conversation

@henry-casper

@henry-casper henry-casper commented Jul 16, 2026

Copy link
Copy Markdown
Contributor

Add shared community settings scenarios (create/read/update + permission checks) in verification-shared and implement them across acceptance-api, acceptance-ui, and e2e-tests following the Screenplay notes/tasks/questions and e2e interactions patterns. Port PR #297 dependency overrides and add websocket-driver/ws overrides so audit and snyk scans pass.

Summary by Sourcery

Expand community management verification scenarios to cover viewing and updating community settings with permission checks across API, UI, and E2E suites, backed by new seeded community/membership data and shared page/GraphQL abstractions.

New Features:

  • Add shared community settings management scenarios (view/update, validation, and permission cases) consumed by acceptance-api, acceptance-ui, and e2e-tests.
  • Introduce shared CommunitySettingsPage contracts and tasks/interactions for community settings and create-community flows across DOM and Playwright adapters.
  • Support staff and member permission modeling for communities via new seeded communities, roles, members, and staff actors, plus actor-scoped auth and principal hints in the API verification stack.

Enhancements:

  • Refactor create-community E2E task into reusable Screenplay interactions and shared GraphQL response helpers.
  • Reset and reseed MongoDB test fixtures between scenarios in API and E2E worlds to ensure deterministic community settings state.
  • Extend OAuth2 mock handlers and tests to handle safely-typed request bodies and unparsed body rejection, and propagate additional signup fields.
  • Update GraphQL client ability and API GraphQL test server wiring to use per-actor auth tokens and member/community hint headers.
  • Extend serenity page adapters with input value support and broaden CSS module type handling for DOM-based tests.
  • Add workspace dependency overrides for body-parser, websocket-driver, ws, protobufjs, and js-yaml, and disable pnpm auto-install to stabilise CI runs.

Build:

  • Adjust pnpm workspace overrides and dependency minimum age exclusions to satisfy audit and Snyk constraints.

Tests:

  • Add cucumber tags configuration to selectively run shared scenarios per suite and new tests for community settings flows and OAuth2 router body handling.

Add shared community settings scenarios (create/read/update + permission
checks) in verification-shared and implement them across acceptance-api,
acceptance-ui, and e2e-tests following the Screenplay notes/tasks/questions
and e2e interactions patterns. Port PR #297 dependency overrides and add
websocket-driver/ws overrides so audit and snyk scans pass.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@henry-casper
henry-casper requested review from a team, Copilot and noce-nick July 16, 2026 20:25
@henry-casper
henry-casper requested a review from a team as a code owner July 16, 2026 20:25
@sourcery-ai

sourcery-ai Bot commented Jul 16, 2026

Copy link
Copy Markdown
Contributor

Reviewer's Guide

Expands community management verification to cover community settings read/update flows with role- and permission-aware scenarios across API, UI, and E2E suites, refactors existing create-community flows into Screenplay-aligned tasks/interactions, seeds MongoDB with community/membership/staff data for auth-sensitive tests, wires actor-specific auth tokens and principal hints into the GraphQL client/mock services, and updates pnpm workspace overrides to satisfy audit/Snyk/CI constraints.

Sequence diagram for API community settings update with actor-aware auth

sequenceDiagram
    actor TestActor
    participant UpdateCommunitySettingsTask as UpdateCommunitySettings
    participant UpdateCommunityAbility as UpdateCommunity
    participant GraphQLClient as GraphQLClient
    participant ActorAuth as actor_auth
    participant ApiFactory as createMockApplicationServicesFactory
    participant TokenValidation
    participant QueryCommunity

    TestActor->>UpdateCommunitySettingsTask: performAs(actor)
    UpdateCommunitySettingsTask->>UpdateCommunityAbility: UpdateCommunity.performAs(actor, details)
    UpdateCommunityAbility->>GraphQLClient: GraphQLClient.as(actor)
    UpdateCommunityAbility->>GraphQLClient: execute(COMMUNITY_UPDATE_SETTINGS_MUTATION, input)
    GraphQLClient->>ActorAuth: getActorToken(actor.name)
    GraphQLClient->>ActorAuth: getActorHints(actor.name)
    GraphQLClient->>ApiFactory: forRequest(rawAuthHeader, hints)
    ApiFactory->>TokenValidation: verifyJwt(token)
    TokenValidation-->>ApiFactory: TokenValidationResult (roles, principal)
    ApiFactory-->>GraphQLClient: communityUpdateSettings response
    UpdateCommunityAbility-->>UpdateCommunitySettingsTask: UpdateCommunityResult
    UpdateCommunitySettingsTask->>QueryCommunity: QueryCommunity.as(actor).byId(actor, communityId)
    QueryCommunity-->>UpdateCommunitySettingsTask: CommunityReadResult
    UpdateCommunitySettingsTask->>TestActor: notes.set(lastCommunityStatus, "SUCCESS")
Loading

File-Level Changes

Change Details Files
Refactor the E2E create-community task into composable Screenplay interactions and shared GraphQL response utilities.
  • Replace the monolithic browser interaction with a Task composed of OpenCreateCommunityForm, FillCommunityForm, and SubmitCommunityForm.
  • Extract GraphQL response selection and error handling into shared helpers used by community create and settings flows.
  • Update acceptance-api and E2E step definitions to use shared last-actor tracking and add max-length validation scenarios for community names.
packages/ocom-verification/e2e-tests/src/contexts/community/tasks/create-community.ts
packages/ocom-verification/e2e-tests/src/contexts/community/interactions/fill-community-form.ts
packages/ocom-verification/e2e-tests/src/contexts/community/interactions/open-create-community-form.ts
packages/ocom-verification/e2e-tests/src/contexts/community/interactions/submit-community-form.ts
packages/ocom-verification/e2e-tests/src/shared/support/graphql-response.ts
packages/ocom-verification/acceptance-api/src/contexts/community/step-definitions/create-community.steps.ts
packages/ocom-verification/e2e-tests/src/contexts/community/step-definitions/create-community.steps.ts
packages/ocom-verification/verification-shared/src/scenarios/community/create-community.feature
packages/ocom-verification/acceptance-api/src/contexts/community/step-definitions/last-actor.ts
packages/ocom-verification/e2e-tests/src/contexts/community/step-definitions/last-actor.ts
Introduce shared community settings page objects, tasks, and scenarios across acceptance-API, acceptance-UI, and E2E suites.
  • Add CommunitySettingsPage and wire it into acceptance-UI and E2E via page-contracts and adapters (DOM and Playwright).
  • Create tasks/interactions to view and update community settings in UI and E2E, including validation and persistence checks.
  • Define shared Gherkin feature for community settings management and route scenarios to API, UI, and E2E via tags and suite-specific step-definition registrations.
packages/ocom-verification/verification-shared/src/pages/community-settings.page.ts
packages/ocom-verification/e2e-tests/src/shared/page-contracts.ts
packages/ocom-verification/acceptance-ui/src/shared/page-contracts.ts
packages/cellix/serenity-framework/src/pages/page-adapter.ts
packages/cellix/serenity-framework/src/pages/adapters/dom-adapter.ts
packages/cellix/serenity-framework/src/pages/adapters/playwright-adapter.ts
packages/ocom-verification/verification-shared/src/scenarios/community/update-community-settings.feature
packages/ocom-verification/acceptance-ui/src/contexts/community/tasks/update-community-settings.ts
packages/ocom-verification/acceptance-ui/src/contexts/community/tasks/view-community-settings.ts
packages/ocom-verification/e2e-tests/src/contexts/community/tasks/update-community-settings.ts
packages/ocom-verification/e2e-tests/src/contexts/community/tasks/view-community-settings.ts
packages/ocom-verification/e2e-tests/src/contexts/community/interactions/fill-community-settings-form.ts
packages/ocom-verification/e2e-tests/src/contexts/community/interactions/open-community-settings.ts
packages/ocom-verification/e2e-tests/src/contexts/community/interactions/read-community-settings.ts
packages/ocom-verification/e2e-tests/src/contexts/community/interactions/submit-community-settings-form.ts
packages/ocom-verification/acceptance-api/src/contexts/community/step-definitions/update-community-settings.steps.ts
packages/ocom-verification/acceptance-ui/src/contexts/community/step-definitions/update-community-settings.steps.tsx
packages/ocom-verification/e2e-tests/src/contexts/community/step-definitions/update-community-settings.steps.ts
packages/ocom-verification/acceptance-api/src/contexts/community/notes/community-notes.ts
packages/ocom-verification/acceptance-ui/src/contexts/community/notes/community-notes.ts
packages/ocom-verification/e2e-tests/src/contexts/community/notes/community-notes.ts
packages/ocom-verification/acceptance-api/src/contexts/community/questions/community-field.ts
packages/ocom-verification/acceptance-api/src/contexts/community/questions/viewed-community-name.ts
packages/ocom-verification/acceptance-ui/src/contexts/community/questions/community-settings.ts
packages/ocom-verification/e2e-tests/src/contexts/community/questions/community-settings.ts
packages/ocom-verification/acceptance-api/src/contexts/community/step-definitions/index.ts
packages/ocom-verification/acceptance-ui/src/contexts/community/step-definitions/index.ts
packages/ocom-verification/e2e-tests/src/contexts/community/step-definitions/index.ts
packages/ocom-verification/acceptance-api/cucumber.js
packages/ocom-verification/acceptance-ui/cucumber.js
packages/ocom-verification/e2e-tests/cucumber.js
Seed MongoDB with communities, roles, members, and staff users to support permission-aware community settings scenarios and reseed between scenarios.
  • Extend shared seed data to include communities, end-user roles, members, staff roles, and staff users with explicit ids and permission profiles.
  • Update seedDatabase to upsert users, roles, communities, and members collections using ObjectId mapping.
  • Add suite lifecycle hooks to reseed MongoDB before scenarios and export mongoDbName from e2e test Mongo server.
  • Ensure E2E world closes community portal sessions after all tests to avoid leaking browser contexts.
packages/ocom-verification/verification-shared/src/test-data/seed/seed.ts
packages/ocom-verification/verification-shared/src/test-data/seed/communities.ts
packages/ocom-verification/verification-shared/src/test-data/seed/end-user-roles.ts
packages/ocom-verification/verification-shared/src/test-data/seed/members.ts
packages/ocom-verification/verification-shared/src/test-data/seed/staff-roles.ts
packages/ocom-verification/verification-shared/src/test-data/seed/staff-users.ts
packages/ocom-verification/verification-shared/src/test-data/seed/index.ts
packages/ocom-verification/verification-shared/src/test-data/index.ts
packages/ocom-verification/verification-shared/src/test-data/test-actors.ts
packages/ocom-verification/acceptance-api/src/cucumber-lifecycle-hooks.ts
packages/ocom-verification/e2e-tests/src/cucumber-lifecycle-hooks.ts
packages/ocom-verification/e2e-tests/src/servers/test-mongo-server.ts
packages/ocom-verification/e2e-tests/src/shared/abilities/community-portal-session.ts
packages/ocom-verification/e2e-tests/src/contexts/community/abilities/community-portal-page.ts
Wire actor-specific auth tokens and principal hints into the API GraphQL client and mock application services to simulate real-world authorization for community settings.
  • Introduce actor-auth registry that maps Serenity actor names to auth tokens and principal hints; expose helpers for end-user and staff tokens.
  • Update createGraphQLClientAbility to derive Authorization and x-member-id/x-community-id headers per actor from actor-auth registry.
  • Extend mock token validation to interpret staff and end-user tokens, resolving principals via shared test actors and emitting appropriate roles claims.
  • Update API GraphQL test server to forward Authorization and principal hints into the application services factory.
  • Add seeded staff roles and users so TechAdminStaff and CaseManagerStaff tokens exercise manage-all-communities vs limited-community permissions in scenarios.
packages/ocom-verification/acceptance-api/src/shared/abilities/actor-auth.ts
packages/ocom-verification/acceptance-api/src/shared/abilities/graphql-client.ts
packages/ocom-verification/acceptance-api/src/mock-application-services.ts
packages/ocom-verification/acceptance-api/src/servers/api-graphql-test-server.ts
packages/ocom-verification/verification-shared/src/test-data/test-actors.ts
packages/ocom-verification/verification-shared/src/test-data/seed/staff-roles.ts
packages/ocom-verification/verification-shared/src/test-data/seed/staff-users.ts
Tighten mock OAuth2 router and login handlers to handle unparsed request bodies safely and preserve optional signup fields.
  • Add CredentialRequestBody interface and use safe (req.body ?? {}) destructuring in login and signup handlers.
  • Ensure signup handler selectively passes optional email, given_name, and family_name to signup HTML when present.
  • Update token endpoint to handle missing req.body gracefully.
  • Add router tests that POST text/plain bodies to /token, /login, and /signup and assert 400 responses.
packages/cellix/server-oauth2-mock-seedwork/src/login-handlers.ts
packages/cellix/server-oauth2-mock-seedwork/src/router.ts
packages/cellix/server-oauth2-mock-seedwork/src/router.test.ts
Broaden acceptance-UI coverage to admin settings components and tighten TypeScript/DOM support for CSS modules and inputs.
  • Include ui-community-route-admin sources in the acceptance-ui tsconfig include and exclude story/test files from compilation.
  • Extend CSS module type declarations to cover plain .css files used by DOM rendering.
  • Enhance DOM and Playwright element adapters with an inputValue() API used by settings form assertions.
packages/ocom-verification/acceptance-ui/tsconfig.json
packages/cellix/serenity-framework/src/dom/css-module-types.d.ts
packages/cellix/serenity-framework/src/pages/adapters/dom-adapter.ts
packages/cellix/serenity-framework/src/pages/adapters/playwright-adapter.ts
packages/cellix/serenity-framework/src/pages/page-adapter.ts
Add pnpm workspace override and config changes to satisfy audit/Snyk and stabilize CI installs.
  • Disable pnpm verifyDepsBeforeRun auto-install to avoid concurrent installs during turbo tasks in CI.
  • Override vulnerable or outdated transitive dependencies including body-parser v1/v2, websocket-driver, ws, protobufjs, and js-yaml to safer versions.
  • Update minimumReleaseAgeExclude to include body-parser override.
  • Refresh pnpm-lock.yaml to reflect new overrides and dependency graph.
pnpm-workspace.yaml
pnpm-lock.yaml

Assessment against linked issues

Issue Objective Addressed Explanation
#294 Add or significantly improve shared Gherkin scenarios in verification-shared for community creation, reading, and settings updates, including validation and permission checks (owner vs member vs staff vs guest).
#294 Implement API-specific step definitions and abilities in acceptance-api to exercise backend community logic for create/read/update flows, persistence, validation, permission checks, and error handling using the shared scenarios.
#294 Implement UI and E2E-specific steps, page objects, tasks, and hooks in acceptance-ui and e2e-tests so community create and settings-update flows (including permission scenarios) are covered end-to-end and wired via shared Screenplay interactions and tagged Cucumber routing.

Possibly linked issues

  • #Expand @ocom-verification coverage for Community Management: PR adds the shared community create/update/permission scenarios and step defs across verification-shared, acceptance-api, acceptance-ui, and e2e-tests as requested.

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

Copilot AI 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.

Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.

@sourcery-ai sourcery-ai 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.

Hey - I've left some high level feedback:

Fixed security issues:

  • websocket-driver (link)

  • The actor auth plumbing (prefix constants, token construction, hints) is split between shared/abilities/actor-auth.ts and mock-application-services.ts; consider centralizing this logic so the mock token verification and GraphQL client headers stay aligned in one place.

  • The new CommunitySettingsPage relies on hard-coded CSS selectors and input IDs (e.g. #name, .ant-form-item-explain-error), which will make the settings tests brittle against UI refactors; you may want to introduce dedicated test attributes or a small selector helper to decouple tests from Ant Design internals.

Prompt for AI Agents
Please address the comments from this code review:

## Overall Comments
- The actor auth plumbing (prefix constants, token construction, hints) is split between `shared/abilities/actor-auth.ts` and `mock-application-services.ts`; consider centralizing this logic so the mock token verification and GraphQL client headers stay aligned in one place.
- The new `CommunitySettingsPage` relies on hard-coded CSS selectors and input IDs (e.g. `#name`, `.ant-form-item-explain-error`), which will make the settings tests brittle against UI refactors; you may want to introduce dedicated test attributes or a small selector helper to decouple tests from Ant Design internals.

Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.

Copilot AI 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.

Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.

Resolves CodeQL js/polynomial-redos warning by matching the post-create
redirect URL with an exact pathname check instead of a regular expression.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@henry-casper
henry-casper requested a review from Copilot July 16, 2026 20:52
@henry-casper

Copy link
Copy Markdown
Contributor Author

@sourcery-ai review

@sourcery-ai sourcery-ai 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.

Hey - I've reviewed your changes and they look great!

Fixed security issues:

  • websocket-driver (link)

Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.

Copilot AI 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.

Copilot reviewed 72 out of 74 changed files in this pull request and generated no new comments.

Files not reviewed (1)
  • pnpm-lock.yaml: Generated file

@henry-casper henry-casper linked an issue Jul 17, 2026 that may be closed by this pull request
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@henry-casper

Copy link
Copy Markdown
Contributor Author

@sourcery-ai review

@sourcery-ai sourcery-ai 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.

Hey - I've found 2 issues, and left some high level feedback:

Fixed security issues:

  • websocket-driver (link)

  • The CommunitySettingsFormDetails/CommunitySettingsDetails types are defined separately in multiple packages (acceptance-api, acceptance-ui, e2e); consider extracting a shared type to avoid divergence and keep the settings field contract consistent across suites.

  • The seeded test data uses many hard-coded string IDs across communities, roles, members, and staff; centralizing these in a single module or builder helpers would reduce the risk of mismatched references and make future changes to the seed graph easier.

Prompt for AI Agents
Please address the comments from this code review:

## Overall Comments
- The `CommunitySettingsFormDetails`/`CommunitySettingsDetails` types are defined separately in multiple packages (acceptance-api, acceptance-ui, e2e); consider extracting a shared type to avoid divergence and keep the settings field contract consistent across suites.
- The seeded test data uses many hard-coded string IDs across communities, roles, members, and staff; centralizing these in a single module or builder helpers would reduce the risk of mismatched references and make future changes to the seed graph easier.

## Individual Comments

### Comment 1
<location path="packages/ocom-verification/acceptance-api/src/contexts/community/questions/community-field.ts" line_range="21-26" />
<code_context>
+	}
+
+	override async answeredBy(actor: AnswersQuestions & UsesAbilities): Promise<string> {
+		const communityId = await this.readNote(actor, 'lastCommunityId');
+		if (!communityId) {
+			throw new Error(`No community id found in actor notes; cannot read the community ${this.fieldName}. Did the actor act on a community first?`);
+		}
+
+		const community = await QueryCommunity.as(actor).byId(actor, communityId);
+		if (!community) {
+			throw new Error(`Community "${communityId}" was not found through the API`);
</code_context>
<issue_to_address>
**suggestion:** The note-reading helper uses a generic `Record<typeof key, string>` that obscures the intended `CommunityNotes` shape.

In `readNote` the use of `notes<Record<typeof key, string>>()` makes the note type opaque and doesn’t add meaningful type safety. It also hides the actual `CommunityNotes` shape from consumers.

Prefer:
```ts
return await actor.answer(notes<CommunityNotes>().get(key));
```
so the helper stays aligned with the `CommunityNotes` interface and the available keys and their semantics remain discoverable and easier to evolve.

Suggested implementation:

```typescript
	private async readNote(actor: AnswersQuestions & UsesAbilities, key: keyof CommunityNotes): Promise<string | undefined> {
		try {
			return await actor.answer(notes<CommunityNotes>().get(key));

```

If `CommunityNotes` is not yet imported in this file, ensure you add or fix the import so the interface is available:
- Add an import such as `import type { CommunityNotes } from '...';` from the module where `CommunityNotes` is defined.
</issue_to_address>

### Comment 2
<location path="packages/ocom-verification/e2e-tests/src/contexts/community/step-definitions/update-community-settings.steps.ts" line_range="118-126" />
<code_context>
+	}
+});
+
+Then('the community should not be modified', async () => {
+	// Verify through an independently authenticated actor so the assertion works
+	// even when the scenario actor is unauthenticated or under-privileged.
</code_context>
<issue_to_address>
**suggestion (testing):** E2E "community should not be modified" only checks name; consider asserting other settings fields too

This step only revalidates the `name` against `SEEDED_COMMUNITY`. Because the update flows can also change `whiteLabelDomain`, `domain`, and `handle`, a bug that wrongly persists those fields would go unnoticed.

After the reload, consider also reading `SavedWhiteLabelDomain`, `SavedDomain`, and `SavedHandle` and asserting they match the seeded baseline (likely empty/null). That way, the "not modified" check covers all settings, not just the name.
</issue_to_address>

Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.

Copilot AI 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.

Pull request overview

Copilot reviewed 75 out of 77 changed files in this pull request and generated no new comments.

Files not reviewed (1)
  • pnpm-lock.yaml: Generated file

Union-resolve overlapping acceptance-api harness (community + staff-role
abilities, principal hints, per-scenario re-seed), shared test data, and
acceptance-ui tsconfig includes. Keep the stricter dependency overrides
(ws 8.21.1, split body-parser, websocket-driver) and extended .snyk waivers;
adopt main's refined page-adapter implementations. Bump fast-uri override to
^4.1.1 for SNYK-JS-FASTURI-18021349.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Expand @ocom-verification coverage for Community Management

3 participants