Skip to content

feat(deployment): add screened provider marketplace to configure screen#3308

Merged
ygrishajev merged 1 commit into
mainfrom
feat/deployment-screened-provider-list
Jun 15, 2026
Merged

feat(deployment): add screened provider marketplace to configure screen#3308
ygrishajev merged 1 commit into
mainfrom
feat/deployment-screened-provider-list

Conversation

@ygrishajev

@ygrishajev ygrishajev commented Jun 12, 2026

Copy link
Copy Markdown
Contributor

Why

The Compute Marketplace pane on the Configure screen showed no providers. Users need to see audited providers screened against the selected placement's group spec so they can pick where to deploy.

Closes CON-421

What

  • Populate the Compute Marketplace pane with audited providers screened for the selected placement's group spec, and add service/placement selection in the deployment pane that drives it.
  • Expose the screenProviders operationId on POST /v1/bid-screening and regenerate the typed console-api-types SDK (incl. the location response field).
  • Validate (not transform) resource values in the api request schema so the proxy can forward them without a BigInt serialization error.
  • Register the screen domain verb for the operation-id-format lint rule.
  • Add useScreenedProviders: screens the selected placement's group spec (audited via signedBy, region via attributes), falling back to the full audited catalog (empty resources) when no placement/SDL is available.
  • Add MarketplaceProvidersTable (Provider, Region, sortable; empty Cost column with an estimate tooltip) styled to the design system; host shown like the bid list via getProviderNameFromUri.
  • Resolve the selected placement in the form and pass it to the marketplace.
  • Select a placement by clicking it (focuses its first service); add a default service when adding a placement; track selected service/placement state.
image

Summary by CodeRabbit

  • New Features

    • Added marketplace provider screening interface with sortable provider table
    • Provider location information now displayed in screening results
    • Enhanced service and placement selection workflow in deployment configuration
  • Bug Fixes

    • Improved service selection validation and flow consistency

@ygrishajev ygrishajev requested a review from a team as a code owner June 12, 2026 12:09
@codecov

codecov Bot commented Jun 12, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 94.11765% with 6 lines in your changes missing coverage. Please review.
✅ Project coverage is 68.93%. Comparing base (79e25fa) to head (a7299d9).
✅ All tests successful. No failed tests found.

Files with missing lines Patch % Lines
...bid-screening/http-schemas/bid-screening.schema.ts 0.00% 2 Missing and 1 partial ⚠️
...tplaceProvidersTable/MarketplaceProvidersTable.tsx 89.65% 3 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main    #3308      +/-   ##
==========================================
+ Coverage   68.79%   68.93%   +0.13%     
==========================================
  Files        1095     1097       +2     
  Lines       26822    26903      +81     
  Branches     6440     6452      +12     
==========================================
+ Hits        18453    18545      +92     
+ Misses       7326     7325       -1     
+ Partials     1043     1033      -10     
Flag Coverage Δ
api 84.82% <0.00%> (+<0.01%) ⬆️
deploy-web 54.42% <96.96%> (+0.33%) ⬆️
log-collector 85.85% <ø> (ø)
notifications 91.44% <ø> (ø)
provider-console 81.38% <ø> (ø)
provider-inventory 84.98% <ø> (ø)
provider-proxy 86.37% <ø> (ø)
tx-signer 78.37% <ø> (ø)
Files with missing lines Coverage Δ
...Deployment/ConfigurationPane/ConfigurationPane.tsx 100.00% <ø> (ø)
...onfigureDeploymentForm/ConfigureDeploymentForm.tsx 97.01% <100.00%> (+0.78%) ⬆️
...figureDeploymentPanes/ConfigureDeploymentPanes.tsx 100.00% <100.00%> (ø)
...figureDeployment/DeploymentPane/DeploymentPane.tsx 100.00% <100.00%> (ø)
...ent/DeploymentPane/PlacementCard/PlacementCard.tsx 95.83% <100.00%> (+10.11%) ⬆️
...eployment/DeploymentPane/ServiceRow/ServiceRow.tsx 100.00% <100.00%> (ø)
...entPane/usePlacementManager/usePlacementManager.ts 95.74% <100.00%> (+0.39%) ⬆️
...gureDeployment/MarketplacePane/MarketplacePane.tsx 100.00% <100.00%> (+50.00%) ⬆️
...pps/deploy-web/src/queries/useScreenedProviders.ts 100.00% <100.00%> (ø)
apps/deploy-web/src/types/sdlBuilder/sdlBuilder.ts 55.69% <ø> (ø)
... and 2 more

... and 10 files with indirect coverage changes

🚀 New features to boost your workflow:
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@coderabbitai

coderabbitai Bot commented Jun 12, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

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

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: e695f2e4-b141-44e4-a684-3f012db19dfc

📥 Commits

Reviewing files that changed from the base of the PR and between 9e619c4 and a7299d9.

⛔ Files ignored due to path filters (1)
  • apps/api/test/functional/__snapshots__/docs.spec.ts.snap is excluded by !**/*.snap
📒 Files selected for processing (27)
  • apps/api/src/bid-screening/http-schemas/bid-screening.schema.ts
  • apps/api/src/bid-screening/routes/bid-screening.router.ts
  • apps/api/swagger/openapi.json
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/ConfigurationPane.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/ConfigurationPane.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentForm/ConfigureDeploymentForm.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentForm/ConfigureDeploymentForm.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentPanes/ConfigureDeploymentPanes.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentPanes/ConfigureDeploymentPanes.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/DeploymentPane.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/DeploymentPane.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/PlacementCard/PlacementCard.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/PlacementCard/PlacementCard.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/ServiceRow/ServiceRow.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/usePlacementManager/usePlacementManager.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/usePlacementManager/usePlacementManager.ts
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/MarketplacePane/MarketplacePane.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/MarketplacePane/MarketplacePane.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/MarketplacePane/MarketplaceProvidersTable/MarketplaceProvidersTable.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/MarketplacePane/MarketplaceProvidersTable/MarketplaceProvidersTable.tsx
  • apps/deploy-web/src/queries/useScreenedProviders.spec.tsx
  • apps/deploy-web/src/queries/useScreenedProviders.ts
  • apps/deploy-web/src/types/sdlBuilder/sdlBuilder.spec.ts
  • apps/deploy-web/src/types/sdlBuilder/sdlBuilder.ts
  • packages/console-api-types/src/operations.gen.ts
  • packages/console-api-types/src/schema.d.ts
  • packages/dev-config/.eslintrc.base.js
✅ Files skipped from review due to trivial changes (1)
  • apps/api/src/bid-screening/routes/bid-screening.router.ts
🚧 Files skipped from review as they are similar to previous changes (24)
  • packages/console-api-types/src/operations.gen.ts
  • packages/dev-config/.eslintrc.base.js
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/DeploymentPane.tsx
  • apps/deploy-web/src/types/sdlBuilder/sdlBuilder.ts
  • apps/api/src/bid-screening/http-schemas/bid-screening.schema.ts
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/usePlacementManager/usePlacementManager.spec.tsx
  • apps/deploy-web/src/types/sdlBuilder/sdlBuilder.spec.ts
  • packages/console-api-types/src/schema.d.ts
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/PlacementCard/PlacementCard.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/DeploymentPane.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/ServiceRow/ServiceRow.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/ConfigurationPane.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/usePlacementManager/usePlacementManager.ts
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentForm/ConfigureDeploymentForm.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/MarketplacePane/MarketplacePane.spec.tsx
  • apps/api/swagger/openapi.json
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/PlacementCard/PlacementCard.tsx
  • apps/deploy-web/src/queries/useScreenedProviders.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/MarketplacePane/MarketplaceProvidersTable/MarketplaceProvidersTable.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentPanes/ConfigureDeploymentPanes.spec.tsx
  • apps/deploy-web/src/queries/useScreenedProviders.ts
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/MarketplacePane/MarketplaceProvidersTable/MarketplaceProvidersTable.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentForm/ConfigureDeploymentForm.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/MarketplacePane/MarketplacePane.tsx

📝 Walkthrough

Walkthrough

Adds end-to-end placement-aware provider screening: the API's ResourceValueSchema is refactored to validate without bigint transformation, the POST /v1/bid-screening endpoint gains an operationId, and a location field is added to the provider schema. On the frontend, a new useScreenedProviders hook, MarketplacePane, and MarketplaceProvidersTable wire up screened-provider display per placement, with selectedServiceId made non-nullable across the deployment configuration UI.

Changes

Marketplace Provider Screening

Layer / File(s) Summary
API resource schema refactor
apps/api/src/bid-screening/http-schemas/bid-screening.schema.ts
ResourceValueSchema validates unsigned-integer strings (including base64) without transforming to bigint; val fields now infer as string.
API operation metadata and generated types
apps/api/src/bid-screening/routes/bid-screening.router.ts, apps/api/swagger/openapi.json, packages/console-api-types/src/operations.gen.ts, packages/console-api-types/src/schema.d.ts, packages/dev-config/.eslintrc.base.js
Adds operationId: "screenProviders", extends provider schema with nullable location field, generates typed operation entry, and permits screen verb in ESLint rule.
SDL builder schema: service id required
apps/deploy-web/src/types/sdlBuilder/sdlBuilder.ts, apps/deploy-web/src/types/sdlBuilder/sdlBuilder.spec.ts
ServiceSchema.id changed from optional to required non-empty string; test fixtures updated to include id on all service objects.
useScreenedProviders hook
apps/deploy-web/src/queries/useScreenedProviders.ts, apps/deploy-web/src/queries/useScreenedProviders.spec.tsx
New hook memoizes a screening request from SDL + placementName, falls back to EMPTY_CATALOG_REQUEST, calls api.v1.screenProviders.useQuery, and returns providers/isLoading/isError; buildPlacementScreeningRequest constructs audited-only requests or returns null.
Placement manager: addPlacement returns service id
apps/deploy-web/.../usePlacementManager/usePlacementManager.ts, ...usePlacementManager.spec.tsx, DeploymentPane/DeploymentPane.tsx, DeploymentPane/DeploymentPane.spec.tsx
addPlacement returns the new service id; DeploymentPane calls onSelectService with it; selectedServiceId props tightened to non-null string.
PlacementCard selection and event propagation
apps/deploy-web/.../PlacementCard/PlacementCard.tsx, PlacementCard.spec.tsx
Card click selects first service via onSelectService; buttons use propagation-stopping handlers; conditional border/ring styling via cn; two new selection interaction tests added.
ServiceRow propagation-stopping handler
apps/deploy-web/.../ServiceRow/ServiceRow.tsx
Dedicated selectWithoutSelectingPlacement handler stops propagation before invoking onSelect; adds bg-accent for selected state.
ConfigureDeploymentForm: placement name derivation
apps/deploy-web/.../ConfigureDeploymentForm/ConfigureDeploymentForm.tsx, ConfigureDeploymentForm.spec.tsx
Form watches services/placements via useWatch to derive selectedPlacementName; initial/seed/next selection logic guarantees non-null selectedServiceId; carried-in SDL only accepted with at least one visible service.
Panes integration: selectedPlacementName threading
apps/deploy-web/.../ConfigureDeploymentPanes/ConfigureDeploymentPanes.tsx, ConfigureDeploymentPanes.spec.tsx
ConfigureDeploymentPanes adds required selectedPlacementName prop and forwards sdl/placementName to MarketplacePane; tests verify prop threading.
ConfigurationPane non-nullable selectedServiceId
apps/deploy-web/.../ConfigurationPane/ConfigurationPane.tsx, ConfigurationPane.spec.tsx
selectedServiceId prop tightened to string; null test case replaced with empty-string/missing-id variant.
MarketplacePane component and tests
apps/deploy-web/.../MarketplacePane/MarketplacePane.tsx, MarketplacePane.spec.tsx
Accepts sdl/placementName props with dependency injection via DEPENDENCIES; shows alert on load failure with zero providers or renders table; tests cover success, error-without-cache, and error-with-cache paths.
MarketplaceProvidersTable component and tests
apps/deploy-web/.../MarketplaceProvidersTable/MarketplaceProvidersTable.tsx, MarketplaceProvidersTable.spec.tsx
New sortable TanStack table with Provider (from hostUri) and Region (from location, "—" fallback) columns; loading spinner, empty state, SortableHeader helper; tests verify rendering, null-region handling, and sort behavior.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related PRs

  • akash-network/console#3297: Backend/schema changes introducing location: string | null in the bid screening response directly overlap with the OpenAPI/type additions in this PR.
  • akash-network/console#3280: Modifies the same ConfigurationPane/ConfigureDeploymentPanes prop contracts around selectedServiceId and placement wiring.
  • akash-network/console#3289: Modifies DeploymentPane.tsx selection wiring and structure at the same integration point.

Suggested labels

size: XL

Suggested reviewers

  • baktun14
  • stalniy
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/deployment-screened-provider-list

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

@github-actions github-actions Bot temporarily deployed to beta-sandbox June 12, 2026 12:10 Inactive
@github-actions github-actions Bot temporarily deployed to beta-mainnet June 12, 2026 12:10 Inactive
@github-actions github-actions Bot temporarily deployed to production-sandbox June 12, 2026 12:11 Inactive
@github-actions github-actions Bot temporarily deployed to beta-sandbox June 12, 2026 12:11 Inactive
@github-actions github-actions Bot temporarily deployed to production-sandbox June 12, 2026 12:12 Inactive
@github-actions github-actions Bot temporarily deployed to beta June 12, 2026 12:12 Inactive
@github-actions github-actions Bot temporarily deployed to beta-mainnet June 12, 2026 12:12 Inactive
@github-actions github-actions Bot temporarily deployed to beta-sandbox June 12, 2026 12:13 Inactive
@github-actions github-actions Bot temporarily deployed to beta-mainnet June 12, 2026 12:13 Inactive
@github-actions github-actions Bot temporarily deployed to beta June 12, 2026 12:13 Inactive
@github-actions github-actions Bot temporarily deployed to beta-sandbox June 12, 2026 12:13 Inactive
@github-actions github-actions Bot temporarily deployed to production June 12, 2026 12:13 Inactive
@github-actions github-actions Bot temporarily deployed to production-sandbox June 12, 2026 12:15 Inactive
@github-actions github-actions Bot temporarily deployed to production-sandbox June 12, 2026 12:16 Inactive

@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: 3

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
packages/console-api-types/src/schema.d.ts (1)

6792-6992: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

screenProviders is missing from the generated operations type surface.

operations.gen.ts now exports v1.screenProviders, and /v1/bid-screening is present here, but interface operations in this file has no screenProviders member. This leaves the generated SDK contract internally inconsistent and can break typed consumers expecting operations["screenProviders"].

Please regenerate @akashnetwork/console-api-types from the updated OpenAPI so screenProviders is present in both generated artifacts.

As per coding guidelines, packages/**/*.ts reviews must focus on breaking changes to public API surface, type safety, and missing exports.

Also applies to: 7882-9507

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/console-api-types/src/schema.d.ts` around lines 6792 - 6992, The
operations interface in the generated types (schema.d.ts) is missing the
screenProviders member even though operations.gen.ts now exports
v1.screenProviders (the /v1/bid-screening endpoint), causing an inconsistent
public API; regenerate the console-api-types from the updated OpenAPI spec so
the operations interface includes a "screenProviders" entry that matches the
exported v1.screenProviders contract, ensuring /v1/bid-screening is present in
both the operations.gen.ts export surface and the operations interface in
schema.d.ts (re-run the OpenAPI-to-types generation script or CLI used by this
repo and commit the updated generated files).

Source: Coding guidelines

🧹 Nitpick comments (2)
apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentPanes/ConfigureDeploymentPanes.spec.tsx (1)

100-142: ⚡ Quick win

Add a direct assertion for selectedPlacementName passthrough.

setup() now accepts selectedPlacementName, but this suite still never verifies that ConfigureDeploymentPanes forwards it into MarketplacePane. That leaves the new placement-scoped marketplace path untested even though it is part of the runtime contract.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentPanes/ConfigureDeploymentPanes.spec.tsx`
around lines 100 - 142, The test never asserts that ConfigureDeploymentPanes
forwards selectedPlacementName into the MarketplacePane; update the test to mock
MarketplacePane (reuse the MarketplacePane entry in the dependencies object) so
it captures props, pass a non-null selectedPlacementName into setup(), render,
and add an assertion that MarketplacePane was called with
props.selectedPlacementName equal to the value you passed; locate the mock
MarketplacePane in setup(), make it return a testid element and expose the mock
from setup() (alongside SdlPreviewPane, DeploymentPane, ConfigurationPane), then
add an expect(MarketplacePane).toHaveBeenCalledWith(expect.objectContaining({
selectedPlacementName: 'your-test-value' }), expect.anything()) to verify
passthrough from ConfigureDeploymentPanes.
apps/deploy-web/src/queries/useScreenedProviders.spec.tsx (1)

77-87: ⚡ Quick win

Replace the unsafe test-only casts in apps/deploy-web/src/queries/useScreenedProviders.spec.tsx and apps/deploy-web/src/components/deployments/ConfigureDeployment/MarketplacePane/MarketplacePane.spec.tsx.

Both files bypass collaborator typing with as unknown as / as never, which suppresses type drift in the generated API and injected dependency contracts. One typed mock/stub pattern should be used in both files so these tests keep validating the real shape they depend on.

As per coding guidelines, use mock<T>() instead of as unknown as <Type> for type casting in tests.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/deploy-web/src/queries/useScreenedProviders.spec.tsx` around lines 77 -
87, The test uses unsafe casts (as unknown as / as never) to build the api stub
in the setup function (variables: useQuery, api) which hides signature drift;
replace these casts with a properly typed test mock using mock<T>() so the stub
enforces the real API shape — e.g., create a typed mock for
ReturnType<NonNullable<NonNullable<NonNullable<Parameters<typeof
setupQuery>[1]>["services"]>["api"]>> and assign useQuery into its
v1.screenProviders.useQuery property using mock<T> to preserve types; apply the
same typed-mock pattern in MarketplacePane.spec.tsx so both tests validate the
actual collaborator contracts instead of using as unknown/as never.

Source: Coding guidelines

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In
`@apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentForm/ConfigureDeploymentForm.tsx`:
- Around line 41-43: When a selected service is removed the watched
services/placements can transiently make resolveSelectedPlacementName(...)
return null; compute an effective selected service id from the watched values
during render instead of relying on the effect-driven selectedServiceId.
Concretely: use the values returned by useWatch (services and placements) to
check whether selectedServiceId still exists; if not, pick a surviving service
id (e.g., first key of services) as the effective id and pass that into
resolveSelectedPlacementName(services, placements, effectiveSelectedServiceId)
so placementName never becomes null and MarketplacePane won't fall back to the
unscoped catalog.

In
`@apps/deploy-web/src/components/deployments/ConfigureDeployment/MarketplacePane/MarketplacePane.spec.tsx`:
- Line 26: The test incorrectly asserts a second call argument for the mocked
component; update the assertion in MarketplacePane.spec.tsx to only check the
props object passed to the mock: change the toHaveBeenCalledWith invocation for
MarketplaceProvidersTable to assert only expect.objectContaining({ providers,
isLoading: false }) (omit the second expect.anything()), since the JSX render
calls the mock with a single props argument.

In
`@apps/deploy-web/src/components/deployments/ConfigureDeployment/MarketplacePane/MarketplacePane.tsx`:
- Around line 25-32: The component currently replaces the table with an error
alert whenever isError is true; instead, keep rendering the
d.MarketplaceProvidersTable when useScreenedProviders' providers array has items
even if isError is true. Update the JSX conditional in MarketplacePane.tsx to
show the "Failed to load providers" alert only when isError && providers.length
=== 0, otherwise render d.MarketplaceProvidersTable with providers and
isLoading; this preserves prior data from useScreenedProviders/query.data on
refetch failures.

---

Outside diff comments:
In `@packages/console-api-types/src/schema.d.ts`:
- Around line 6792-6992: The operations interface in the generated types
(schema.d.ts) is missing the screenProviders member even though
operations.gen.ts now exports v1.screenProviders (the /v1/bid-screening
endpoint), causing an inconsistent public API; regenerate the console-api-types
from the updated OpenAPI spec so the operations interface includes a
"screenProviders" entry that matches the exported v1.screenProviders contract,
ensuring /v1/bid-screening is present in both the operations.gen.ts export
surface and the operations interface in schema.d.ts (re-run the OpenAPI-to-types
generation script or CLI used by this repo and commit the updated generated
files).

---

Nitpick comments:
In
`@apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentPanes/ConfigureDeploymentPanes.spec.tsx`:
- Around line 100-142: The test never asserts that ConfigureDeploymentPanes
forwards selectedPlacementName into the MarketplacePane; update the test to mock
MarketplacePane (reuse the MarketplacePane entry in the dependencies object) so
it captures props, pass a non-null selectedPlacementName into setup(), render,
and add an assertion that MarketplacePane was called with
props.selectedPlacementName equal to the value you passed; locate the mock
MarketplacePane in setup(), make it return a testid element and expose the mock
from setup() (alongside SdlPreviewPane, DeploymentPane, ConfigurationPane), then
add an expect(MarketplacePane).toHaveBeenCalledWith(expect.objectContaining({
selectedPlacementName: 'your-test-value' }), expect.anything()) to verify
passthrough from ConfigureDeploymentPanes.

In `@apps/deploy-web/src/queries/useScreenedProviders.spec.tsx`:
- Around line 77-87: The test uses unsafe casts (as unknown as / as never) to
build the api stub in the setup function (variables: useQuery, api) which hides
signature drift; replace these casts with a properly typed test mock using
mock<T>() so the stub enforces the real API shape — e.g., create a typed mock
for ReturnType<NonNullable<NonNullable<NonNullable<Parameters<typeof
setupQuery>[1]>["services"]>["api"]>> and assign useQuery into its
v1.screenProviders.useQuery property using mock<T> to preserve types; apply the
same typed-mock pattern in MarketplacePane.spec.tsx so both tests validate the
actual collaborator contracts instead of using as unknown/as never.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: fbd4e12c-b6b8-4d71-90af-06393bfbe64c

📥 Commits

Reviewing files that changed from the base of the PR and between 30fe439 and 036865f.

📒 Files selected for processing (23)
  • apps/api/src/bid-screening/controllers/bid-screening/bid-screening.controller.spec.ts
  • apps/api/src/bid-screening/http-schemas/bid-screening.schema.ts
  • apps/api/src/bid-screening/routes/bid-screening.router.ts
  • apps/api/swagger/openapi.json
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentForm/ConfigureDeploymentForm.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentPanes/ConfigureDeploymentPanes.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentPanes/ConfigureDeploymentPanes.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/DeploymentPane.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/DeploymentPane.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/PlacementCard/PlacementCard.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/PlacementCard/PlacementCard.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/ServiceRow/ServiceRow.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/usePlacementManager/usePlacementManager.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/usePlacementManager/usePlacementManager.ts
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/MarketplacePane/MarketplacePane.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/MarketplacePane/MarketplacePane.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/MarketplacePane/MarketplaceProvidersTable/MarketplaceProvidersTable.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/MarketplacePane/MarketplaceProvidersTable/MarketplaceProvidersTable.tsx
  • apps/deploy-web/src/queries/useScreenedProviders.spec.tsx
  • apps/deploy-web/src/queries/useScreenedProviders.ts
  • packages/console-api-types/src/operations.gen.ts
  • packages/console-api-types/src/schema.d.ts
  • packages/dev-config/.eslintrc.base.js

@github-actions github-actions Bot temporarily deployed to beta June 12, 2026 12:17 Inactive
@github-actions github-actions Bot temporarily deployed to production June 12, 2026 12:27 Inactive
@ygrishajev ygrishajev force-pushed the feat/deployment-screened-provider-list branch from 036865f to 4b8349a Compare June 12, 2026 13:47

@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

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In
`@apps/deploy-web/src/components/deployments/ConfigureDeployment/MarketplacePane/MarketplacePane.spec.tsx`:
- Line 26: The two assertions incorrectly expect a second argument when
verifying the JSX-rendered function component MarketplaceProvidersTable; update
the test to inspect the actual props object passed by examining
MarketplaceProvidersTable.mock.calls[0]?.[0] (and similarly for the other
assertion around line 41) instead of using toHaveBeenCalledWith(...,
expect.anything()), so you assert the props (e.g., providers and isLoading)
directly from mock.calls[0][0].
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 30ef429b-f011-4fff-9600-cf3501784cde

📥 Commits

Reviewing files that changed from the base of the PR and between 036865f and 4b8349a.

⛔ Files ignored due to path filters (1)
  • apps/api/test/functional/__snapshots__/docs.spec.ts.snap is excluded by !**/*.snap
📒 Files selected for processing (27)
  • apps/api/src/bid-screening/controllers/bid-screening/bid-screening.controller.spec.ts
  • apps/api/src/bid-screening/http-schemas/bid-screening.schema.ts
  • apps/api/src/bid-screening/routes/bid-screening.router.ts
  • apps/api/swagger/openapi.json
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/ConfigurationPane.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/ConfigurationPane.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentForm/ConfigureDeploymentForm.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentForm/ConfigureDeploymentForm.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentPanes/ConfigureDeploymentPanes.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentPanes/ConfigureDeploymentPanes.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/DeploymentPane.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/DeploymentPane.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/PlacementCard/PlacementCard.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/PlacementCard/PlacementCard.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/ServiceRow/ServiceRow.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/usePlacementManager/usePlacementManager.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/usePlacementManager/usePlacementManager.ts
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/MarketplacePane/MarketplacePane.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/MarketplacePane/MarketplacePane.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/MarketplacePane/MarketplaceProvidersTable/MarketplaceProvidersTable.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/MarketplacePane/MarketplaceProvidersTable/MarketplaceProvidersTable.tsx
  • apps/deploy-web/src/queries/useScreenedProviders.spec.tsx
  • apps/deploy-web/src/queries/useScreenedProviders.ts
  • apps/deploy-web/src/types/sdlBuilder/sdlBuilder.ts
  • packages/console-api-types/src/operations.gen.ts
  • packages/console-api-types/src/schema.d.ts
  • packages/dev-config/.eslintrc.base.js
✅ Files skipped from review due to trivial changes (2)
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/ServiceRow/ServiceRow.tsx
  • packages/console-api-types/src/schema.d.ts
🚧 Files skipped from review as they are similar to previous changes (17)
  • packages/dev-config/.eslintrc.base.js
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentPanes/ConfigureDeploymentPanes.tsx
  • packages/console-api-types/src/operations.gen.ts
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/MarketplacePane/MarketplaceProvidersTable/MarketplaceProvidersTable.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/usePlacementManager/usePlacementManager.ts
  • apps/api/src/bid-screening/controllers/bid-screening/bid-screening.controller.spec.ts
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/PlacementCard/PlacementCard.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentPanes/ConfigureDeploymentPanes.spec.tsx
  • apps/api/src/bid-screening/http-schemas/bid-screening.schema.ts
  • apps/api/swagger/openapi.json
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/MarketplacePane/MarketplaceProvidersTable/MarketplaceProvidersTable.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentForm/ConfigureDeploymentForm.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/MarketplacePane/MarketplacePane.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/DeploymentPane.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/PlacementCard/PlacementCard.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/usePlacementManager/usePlacementManager.spec.tsx
  • apps/deploy-web/src/queries/useScreenedProviders.ts

@ygrishajev ygrishajev force-pushed the feat/deployment-screened-provider-list branch from 4b8349a to 6a51238 Compare June 12, 2026 14:12
@ygrishajev ygrishajev force-pushed the feat/deployment-screened-provider-list branch from 6a51238 to 9e619c4 Compare June 12, 2026 15:51

@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

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In
`@apps/deploy-web/src/components/deployments/ConfigureDeployment/MarketplacePane/MarketplaceProvidersTable/MarketplaceProvidersTable.tsx`:
- Around line 18-21: The Provider column is sorted by the raw hostUri but
renders getProviderNameFromUri(info.getValue()), causing mismatched sort order
when schemes/ports differ; update the column definition created with
columnHelper.accessor("hostUri") so its sort value matches the rendered hostname
(use the provider name derived by getProviderNameFromUri as the sort key or
change the accessor to return that name) and keep the header using
SortableHeader and cell using ShortenedValue(getProviderNameFromUri(...)); also
extend the existing test to include rows with mixed schemes/ports so it asserts
that displayed order (ShortenedValue/getProviderNameFromUri) equals the sort
order.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 4277164a-3996-403f-b95d-30a8d0d09d40

📥 Commits

Reviewing files that changed from the base of the PR and between 6a51238 and 9e619c4.

⛔ Files ignored due to path filters (1)
  • apps/api/test/functional/__snapshots__/docs.spec.ts.snap is excluded by !**/*.snap
📒 Files selected for processing (28)
  • apps/api/src/bid-screening/controllers/bid-screening/bid-screening.controller.spec.ts
  • apps/api/src/bid-screening/http-schemas/bid-screening.schema.ts
  • apps/api/src/bid-screening/routes/bid-screening.router.ts
  • apps/api/swagger/openapi.json
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/ConfigurationPane.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/ConfigurationPane.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentForm/ConfigureDeploymentForm.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentForm/ConfigureDeploymentForm.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentPanes/ConfigureDeploymentPanes.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentPanes/ConfigureDeploymentPanes.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/DeploymentPane.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/DeploymentPane.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/PlacementCard/PlacementCard.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/PlacementCard/PlacementCard.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/ServiceRow/ServiceRow.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/usePlacementManager/usePlacementManager.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/usePlacementManager/usePlacementManager.ts
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/MarketplacePane/MarketplacePane.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/MarketplacePane/MarketplacePane.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/MarketplacePane/MarketplaceProvidersTable/MarketplaceProvidersTable.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/MarketplacePane/MarketplaceProvidersTable/MarketplaceProvidersTable.tsx
  • apps/deploy-web/src/queries/useScreenedProviders.spec.tsx
  • apps/deploy-web/src/queries/useScreenedProviders.ts
  • apps/deploy-web/src/types/sdlBuilder/sdlBuilder.spec.ts
  • apps/deploy-web/src/types/sdlBuilder/sdlBuilder.ts
  • packages/console-api-types/src/operations.gen.ts
  • packages/console-api-types/src/schema.d.ts
  • packages/dev-config/.eslintrc.base.js
✅ Files skipped from review due to trivial changes (1)
  • packages/console-api-types/src/schema.d.ts
🚧 Files skipped from review as they are similar to previous changes (26)
  • apps/api/src/bid-screening/routes/bid-screening.router.ts
  • packages/dev-config/.eslintrc.base.js
  • apps/deploy-web/src/types/sdlBuilder/sdlBuilder.ts
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/ConfigurationPane.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/ConfigurationPane.spec.tsx
  • apps/api/swagger/openapi.json
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/DeploymentPane.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/DeploymentPane.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/usePlacementManager/usePlacementManager.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentPanes/ConfigureDeploymentPanes.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/MarketplacePane/MarketplaceProvidersTable/MarketplaceProvidersTable.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/ServiceRow/ServiceRow.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/usePlacementManager/usePlacementManager.ts
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentPanes/ConfigureDeploymentPanes.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentForm/ConfigureDeploymentForm.spec.tsx
  • apps/api/src/bid-screening/http-schemas/bid-screening.schema.ts
  • packages/console-api-types/src/operations.gen.ts
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/PlacementCard/PlacementCard.tsx
  • apps/deploy-web/src/queries/useScreenedProviders.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/PlacementCard/PlacementCard.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/MarketplacePane/MarketplacePane.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/MarketplacePane/MarketplacePane.tsx
  • apps/api/src/bid-screening/controllers/bid-screening/bid-screening.controller.spec.ts
  • apps/deploy-web/src/types/sdlBuilder/sdlBuilder.spec.ts
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentForm/ConfigureDeploymentForm.tsx
  • apps/deploy-web/src/queries/useScreenedProviders.ts

Comment thread apps/deploy-web/src/queries/useScreenedProviders.spec.tsx Outdated
@ygrishajev ygrishajev enabled auto-merge June 15, 2026 09:54
@ygrishajev ygrishajev force-pushed the feat/deployment-screened-provider-list branch from 9e619c4 to abe5c0b Compare June 15, 2026 09:54
Populate the Compute Marketplace pane with audited providers screened for the
selected placement's group spec, and drive it from the deployment pane's
service/placement selection.

API / SDK
- expose the screenProviders operationId on POST /v1/bid-screening and surface it
  in the typed console-api-types SDK (incl. the location response field)
- validate (don't transform) resource values in the request schema so the proxy
  forwards them without a BigInt serialization error
- register the "screen" domain verb for the operation-id-format lint rule

Marketplace (deploy-web)
- useScreenedProviders: screens the selected placement's group spec (audited via
  signedBy, region via attributes), falling back to the full audited catalog
  (empty resources) while the SDL is mid-edit/invalid
- MarketplaceProvidersTable: design-system table with sortable Provider/Region
  columns and an empty Cost column with an estimate tooltip; host formatted like
  the bid list via getProviderNameFromUri
- MarketplacePane keeps the cached table on a refetch error; shows the error only
  when there is nothing to display

Deployment pane selection
- clicking a service selects it; clicking a placement selects its first service;
  adding a placement adds a default service; selected service/placement states
- resolve the selected placement in the form and pass it to the marketplace
- normalize a service-less carried-in SDL to a default at the configure entry, so
  the selected service/placement are always present (required, non-nullable)
- require the service id in the form schema (always generated) to drop id casts
@ygrishajev ygrishajev force-pushed the feat/deployment-screened-provider-list branch from abe5c0b to a7299d9 Compare June 15, 2026 09:54
@ygrishajev ygrishajev added this pull request to the merge queue Jun 15, 2026
Merged via the queue into main with commit ca7d11c Jun 15, 2026
58 of 59 checks passed
@ygrishajev ygrishajev deleted the feat/deployment-screened-provider-list branch June 15, 2026 11:26
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