Skip to content

feat(deployment): add configure deployment flow with marketplace quoting#3362

Merged
ygrishajev merged 1 commit into
mainfrom
feat/deployment-configure-flow-marketplace
Jun 26, 2026
Merged

feat(deployment): add configure deployment flow with marketplace quoting#3362
ygrishajev merged 1 commit into
mainfrom
feat/deployment-configure-flow-marketplace

Conversation

@ygrishajev

@ygrishajev ygrishajev commented Jun 25, 2026

Copy link
Copy Markdown
Contributor

Why

The new "Configure your deployment" screen had the spec cards but no way to actually request quotes or interact with providers — its quoting/locked state and the marketplace were unfinished. This PR wires the deployment lifecycle flow (request quotes → quoting → cancel & edit) into the screen and adds the Marketplace pane, so a user can see screened providers while configuring and the live bids for their placement once quoting.

Part of CON-423

What

  • Lifecycle flow (useDeploymentFlow): configuring → creating → quoting → closing, with the dseq mirrored into the route (new-deployment/configure/[[...dseq]]) so a reload resumes quoting. Request quotes creates the deployment; Cancel and edit closes it.
  • Locked (read-only) state: while quotes are active a Locked banner is shown and all spec inputs are disabled (storage, compute, image & runtime); card chevrons stay expandable for viewing.
  • Marketplace pane: audited/screened providers for the selected placement while configuring; once quoting, the placement's live bids scoped by group gseq, with a pre-bid screened fallback so the list is never blank. Bid rows take their name (organization, else host), region and audited flag from the provider list.
  • Bid screening is paused once locked — the spec is frozen, so the CPU-heavy screening query stops re-running and the last screened set is kept as the fallback.
  • Storage cards: an off card shows a short "… is off" hint instead of fabricated default fields; Compute Resources and Image & Runtime inputs honor the locked state.
  • Cosmetics: the Configuration pane header shows the service name in the same blue "• name" style as the Marketplace placement (dot and name kept on one line); the Configuration pane is slightly wider so the Persistent Storage info icon doesn't collide with the toggle when a scrollbar appears.
  • Tests: unit specs for the lifecycle hook, marketplace offers (screening vs bids, gseq scoping, provider-name enrichment), locked-disable across cards, and the off-state hints; a Playwright e2e (configure-deployment-flow.spec.ts) driving create → locked → cancel & edit.

Follow-ups (not in this PR): draft persistence so a reload keeps the edited SDL instead of re-applying the template; responsive panes to avoid horizontal scroll at narrow widths; the lease-creation step.

Screen.Recording.2026-06-25.at.14.38.26.mov

Summary by CodeRabbit

  • New Features
    • Added a consistent locked experience across the Configure Deployment UI (lock banner with Cancel and edit, plus disabled inputs/cards while preserving chevron expand/collapse).
    • Introduced a phase-driven quote lifecycle with draft persistence and URL updates (request quotes, cancel/edit, retry).
    • Updated marketplace data to render from placement offers with phase/dseq-aware offer states.
  • Bug Fixes
    • Improved marketplace Provider label fallback logic to use owner when host/org info is missing.
  • Tests
    • Expanded unit/component/hook and Playwright coverage for locked mode, quote flow, drafts, and offers.

@coderabbitai

coderabbitai Bot commented Jun 25, 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
📝 Walkthrough

Walkthrough

Adds deployment-intent parsing and draft persistence, introduces a quote-lifecycle state machine, threads locked and cancel-edit state through configure panes and cards, and switches marketplace data to placement offers.

Changes

Configure deployment locking, drafts, and offers

Layer / File(s) Summary
URL, intent, and draft storage
apps/deploy-web/src/utils/urlUtils.ts, apps/deploy-web/src/utils/urlUtils.spec.ts, apps/deploy-web/src/components/deployments/ConfigureDeployment/useDeploymentFlow/deploymentIntent.ts, apps/deploy-web/src/components/deployments/ConfigureDeployment/useDeploymentFlow/deploymentIntent.spec.ts, apps/deploy-web/src/components/deployments/ConfigureDeployment/useConfigureDraft/*, apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeployment/*
UrlService.configureDeployment builds configure routes with dseq and draft/query params, parseDeploymentIntent normalizes route/query inputs into a typed deployment intent, and useConfigureDraft persists SDL drafts by draftId.
Deployment flow state machine
apps/deploy-web/src/components/deployments/ConfigureDeployment/useDeploymentFlow/*
useDeploymentFlow tracks phase, dseq, and bid strategy, drives create/close mutations, and updates the URL during quote and cancel-edit transitions.
Configure shell wiring
apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeployment/*, .../ConfigureDeploymentForm/*, .../ConfigureDeploymentHeader/*, .../ConfigureDeploymentPanes/*, apps/deploy-web/tests/ui/*
The configure screen now derives intent from route params, passes flow state into the form, header, and panes, and adds Playwright coverage for the request-quotes, cancel-edit, and draft-persistence flow.
Pane lock controls
apps/deploy-web/src/components/deployments/ConfigureDeployment/PaneLockBanner/*, .../DeploymentPane/DeploymentPane.*, .../DeploymentPane/PlacementCard/*, .../DeploymentPane/IpEndpointsSection/*, .../ConfigurationPane/ConfigurationPane.*
Locked state now renders a banner and disables placement editing, placement removal, and endpoint interaction in the deployment and configuration panes.
Locked card controls
packages/ui/components/collapsible-card.*, packages/ui/components/number-unit-input.*, apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/*
Locked state propagates through the reusable card controls and the hardware, runtime, RAM, persistent-storage, and image-runtime cards, disabling their interactive inputs and actions.
Marketplace offers
apps/deploy-web/src/queries/useScreenedProviders.*, apps/deploy-web/src/queries/usePlacementOffers.*, apps/deploy-web/src/components/deployments/ConfigureDeployment/MarketplacePane/*
Marketplace data now comes from placement offers, with phase-aware screening and bid polling and provider labels that fall back to the owner address when host data is missing.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~75 minutes

Possibly related PRs

  • akash-network/console#3251: Same ConfigureDeployment shell and pane wiring that this PR extends with locked-state behavior.
  • akash-network/console#3308: Same marketplace path, where MarketplacePane and its data flow were refactored around placement offers.
  • akash-network/console#3351: Same deployment configuration storage cards and hardware section that now receive disabled/locked props.

Suggested reviewers

  • baktun14
  • stalniy
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/deployment-configure-flow-marketplace

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

@codecov

codecov Bot commented Jun 25, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 68.20%. Comparing base (9d91c3b) to head (3c42df4).
✅ All tests successful. No failed tests found.

Additional details and impacted files
@@            Coverage Diff             @@
##             main    #3362      +/-   ##
==========================================
- Coverage   69.63%   68.20%   -1.43%     
==========================================
  Files        1088      998      -90     
  Lines       26663    24306    -2357     
  Branches     6408     5938     -470     
==========================================
- Hits        18566    16579    -1987     
+ Misses       7113     6769     -344     
+ Partials      984      958      -26     
Flag Coverage Δ *Carryforward flag
api 84.96% <ø> (ø) Carriedforward from 9d91c3b
deploy-web 55.13% <ø> (-0.07%) ⬇️ Carriedforward from 9d91c3b
log-collector ?
notifications 91.44% <ø> (ø) Carriedforward from 9d91c3b
provider-console 81.38% <ø> (ø)
provider-inventory ?
provider-proxy 86.26% <ø> (ø) Carriedforward from 9d91c3b
tx-signer ?

*This pull request uses carry forward flags. Click here to find out more.

Files with missing lines Coverage Δ
...Deployment/ConfigurationPane/ConfigurationPane.tsx 100.00% <ø> (ø)
...oyment/ConfigureDeployment/ConfigureDeployment.tsx 100.00% <ø> (ø)
...onfigureDeploymentForm/ConfigureDeploymentForm.tsx 96.92% <ø> (-0.14%) ⬇️
...gureDeploymentHeader/ConfigureDeploymentHeader.tsx 0.00% <ø> (-16.67%) ⬇️
...figureDeploymentPanes/ConfigureDeploymentPanes.tsx 100.00% <ø> (ø)
...figureDeployment/DeploymentPane/DeploymentPane.tsx 100.00% <ø> (ø)
...mentPane/IpEndpointsSection/IpEndpointsSection.tsx 100.00% <ø> (ø)
...ent/DeploymentPane/PlacementCard/PlacementCard.tsx 95.83% <ø> (ø)
...eployment/DeploymentPane/ServiceRow/ServiceRow.tsx 100.00% <ø> (ø)
...gureDeployment/MarketplacePane/MarketplacePane.tsx 100.00% <ø> (ø)
... and 4 more

... and 94 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 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: 2

Caution

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

⚠️ Outside diff range comments (1)
apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/PlacementCard/PlacementCard.tsx (1)

78-91: 🎯 Functional Correctness | 🟠 Major

Disable the locked placement name and region controls

pointer-events-none only blocks mouse/touch. The name field and region select still receive keyboard focus and can be edited while locked, so the lock is bypassed. Wrap them in a disabled <fieldset> (or pass disabled through) to make the controls truly inert. The JSDoc also says these controls are disabled, which is not true today.

🤖 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/DeploymentPane/PlacementCard/PlacementCard.tsx`
around lines 78 - 91, The locked placement UI in PlacementCard still allows
keyboard focus and editing because pointer-events-none only blocks mouse
interaction. Update the PlacementCard component so the placement name input
(InlineEditInput) and the RegionSelect are truly disabled when locked,
preferably by wrapping the controls in a disabled fieldset or plumbing a
disabled prop through those components. Keep the existing locked check
consistent with the JSDoc and ensure the remove button behavior remains
unchanged.
🤖 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/DeploymentPane/DeploymentPane.tsx`:
- Around line 97-99: The lock behavior around IpEndpointsSection is only applied
by the wrapper, so keyboard interaction still allows endpoint edits. Pass the
locked state from DeploymentPane into IpEndpointsSection and make the section
itself non-interactive using a disabled fieldset or inert behavior, ensuring the
Add endpoint and edit/remove controls are blocked when locked.

In `@apps/deploy-web/src/queries/usePlacementOffers.ts`:
- Line 108: The returned status in usePlacementOffers is only reflecting
screened state, so listBids failures during quoting are hidden from
MarketplacePane. Update the usePlacementOffers return value to combine the
listBids query’s isLoading/isError with screened state when phase === "quoting",
while keeping the existing screened-only behavior for other phases. Use the
phase check and the existing listBids/screened query results in
usePlacementOffers to locate and adjust the flags.

---

Outside diff comments:
In
`@apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/PlacementCard/PlacementCard.tsx`:
- Around line 78-91: The locked placement UI in PlacementCard still allows
keyboard focus and editing because pointer-events-none only blocks mouse
interaction. Update the PlacementCard component so the placement name input
(InlineEditInput) and the RegionSelect are truly disabled when locked,
preferably by wrapping the controls in a disabled fieldset or plumbing a
disabled prop through those components. Keep the existing locked check
consistent with the JSDoc and ensure the remove button behavior remains
unchanged.
🪄 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: 70226f14-9323-439e-b6a3-028fc99dd604

📥 Commits

Reviewing files that changed from the base of the PR and between 06d1248 and 5208f68.

📒 Files selected for processing (47)
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/AdditionalSection/AdditionalSection.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/ComputeResourcesCard/ComputeResourcesCard.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/ComputeResourcesCard/ComputeResourcesCard.tsx
  • 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/ConfigurationPane/HardwareSection/HardwareSection.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/ImageRuntimeCard/ImageRuntimeCard.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/ImageRuntimeCard/ImageRuntimeCard.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/PersistentStorageCard/PersistentStorageCard.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/PersistentStorageCard/PersistentStorageCard.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/RamStorageCard/RamStorageCard.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/RamStorageCard/RamStorageCard.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeployment/ConfigureDeployment.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeployment/ConfigureDeployment.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/ConfigureDeploymentHeader/ConfigureDeploymentHeader.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentHeader/ConfigureDeploymentHeader.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/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/components/deployments/ConfigureDeployment/PaneLockBanner/PaneLockBanner.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/PaneLockBanner/PaneLockBanner.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/useDeploymentFlow/deploymentIntent.spec.ts
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/useDeploymentFlow/deploymentIntent.ts
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/useDeploymentFlow/useDeploymentFlow.spec.ts
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/useDeploymentFlow/useDeploymentFlow.ts
  • apps/deploy-web/src/pages/new-deployment/configure/[[...dseq]].tsx
  • apps/deploy-web/src/queries/usePlacementOffers.spec.ts
  • apps/deploy-web/src/queries/usePlacementOffers.ts
  • apps/deploy-web/src/queries/useScreenedProviders.spec.tsx
  • apps/deploy-web/src/queries/useScreenedProviders.ts
  • apps/deploy-web/src/utils/urlUtils.spec.ts
  • apps/deploy-web/src/utils/urlUtils.ts
  • apps/deploy-web/tests/ui/configure-deployment-flow.spec.ts
  • apps/deploy-web/tests/ui/pages/ConfigureDeploymentPage.ts
  • packages/ui/components/collapsible-card.spec.tsx
  • packages/ui/components/collapsible-card.tsx
  • packages/ui/components/number-unit-input.spec.tsx
  • packages/ui/components/number-unit-input.tsx

Comment thread apps/deploy-web/src/queries/usePlacementOffers.ts Outdated
@ygrishajev ygrishajev force-pushed the feat/deployment-configure-flow-marketplace branch 2 times, most recently from b32e33a to 53b3f2e Compare June 25, 2026 13:09
@ygrishajev ygrishajev enabled auto-merge June 25, 2026 13:11

@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

🤖 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/ConfigureDeployment/ConfigureDeployment.tsx`:
- Around line 55-59: The active draft is being pinned on first render by the
useState captures in ConfigureDeployment and then reused in resolvedIntent and
persistDraftIdInUrl(), which causes stale draft state when the URL changes on
the same page instance. Replace the one-time draftId and persistedSdl
initialization with values derived from the current intent/draft on each render,
and make sure persistDraftIdInUrl() and the related draft-resume logic always
use the latest draftId from ConfigureDeployment rather than the initial one.

In
`@apps/deploy-web/src/components/deployments/ConfigureDeployment/useConfigureDraft/useConfigureDraft.ts`:
- Around line 9-10: The storage access in DEPENDENCIES.getStorage and the draft
handling in useConfigureDraft still only guard against missing storage, but
window.localStorage, getItem, setItem, and removeItem can throw as well. Update
the storage wrapper used by draft.read/draft.write/draft.remove to catch these
failures and degrade to a safe no-op instead of letting configure screen
rendering crash. Use the existing getStorage, draft.read, draft.write, and
draft.remove symbols to add try/catch protection around all storage
interactions.

In
`@apps/deploy-web/src/components/deployments/ConfigureDeployment/useDeploymentFlow/deploymentIntent.ts`:
- Around line 28-29: Treat an empty draftId as missing in deploymentIntent
parsing: the current draftId handling in the deployment flow preserves an empty
string, which prevents fresh ID minting and can disable persistence for
?draftId= URLs. Update the draftId normalization in the intent-building logic so
that blank values become undefined, keeping the behavior consistent with the
downstream useConfigureDraft path.
🪄 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: 04dd8709-cd28-4bb6-94cc-48a668d880d3

📥 Commits

Reviewing files that changed from the base of the PR and between 53b3f2e and 359b515.

📒 Files selected for processing (14)
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeployment/ConfigureDeployment.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeployment/ConfigureDeployment.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/useConfigureDraft/useConfigureDraft.spec.ts
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/useConfigureDraft/useConfigureDraft.ts
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/useDeploymentFlow/deploymentIntent.spec.ts
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/useDeploymentFlow/deploymentIntent.ts
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/useDeploymentFlow/useDeploymentFlow.spec.ts
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/useDeploymentFlow/useDeploymentFlow.ts
  • apps/deploy-web/src/utils/urlUtils.spec.ts
  • apps/deploy-web/src/utils/urlUtils.ts
  • apps/deploy-web/tests/ui/configure-deployment-flow.spec.ts
  • apps/deploy-web/tests/ui/pages/ConfigureDeploymentPage.ts
🚧 Files skipped from review as they are similar to previous changes (6)
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/useDeploymentFlow/deploymentIntent.spec.ts
  • apps/deploy-web/tests/ui/pages/ConfigureDeploymentPage.ts
  • apps/deploy-web/src/utils/urlUtils.ts
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/useDeploymentFlow/useDeploymentFlow.spec.ts
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentForm/ConfigureDeploymentForm.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/useDeploymentFlow/useDeploymentFlow.ts

@ygrishajev ygrishajev force-pushed the feat/deployment-configure-flow-marketplace branch 2 times, most recently from d4c37b1 to 8ac4738 Compare June 26, 2026 06:24

@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 (1)
apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/ServiceRow/ServiceRow.spec.tsx (1)

35-45: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Add coverage for locked-row selection.

These tests only prove the textbox is disabled. The production code also relies on disabled:pointer-events-none so clicks on the locked name still select the row; without a test for that contract, a future class change can silently break locked-row selection.

🤖 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/DeploymentPane/ServiceRow/ServiceRow.spec.tsx`
around lines 35 - 45, The current ServiceRow.spec tests only verify the Service
name textbox enabled/disabled state, but they do not cover the locked-row click
behavior that depends on the row’s disabled pointer-events styling. Update the
ServiceRow test coverage to exercise the locked row interaction through the
ServiceRow/setup path and assert that clicking the locked name still selects the
row via the existing selection callback/state, so future changes to the locked
styling do not break selection behavior.
🤖 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.

Nitpick comments:
In
`@apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/ServiceRow/ServiceRow.spec.tsx`:
- Around line 35-45: The current ServiceRow.spec tests only verify the Service
name textbox enabled/disabled state, but they do not cover the locked-row click
behavior that depends on the row’s disabled pointer-events styling. Update the
ServiceRow test coverage to exercise the locked row interaction through the
ServiceRow/setup path and assert that clicking the locked name still selects the
row via the existing selection callback/state, so future changes to the locked
styling do not break selection behavior.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 38913e51-87f4-4757-bdc5-aa420778a103

📥 Commits

Reviewing files that changed from the base of the PR and between 359b515 and 8ac4738.

📒 Files selected for processing (54)
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/AdditionalSection/AdditionalSection.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/ComputeResourcesCard/ComputeResourcesCard.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/ComputeResourcesCard/ComputeResourcesCard.tsx
  • 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/ConfigurationPane/HardwareSection/HardwareSection.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/ImageRuntimeCard/ImageRuntimeCard.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/ImageRuntimeCard/ImageRuntimeCard.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/PersistentStorageCard/PersistentStorageCard.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/PersistentStorageCard/PersistentStorageCard.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/RamStorageCard/RamStorageCard.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/RamStorageCard/RamStorageCard.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeployment/ConfigureDeployment.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeployment/ConfigureDeployment.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/ConfigureDeploymentHeader/ConfigureDeploymentHeader.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentHeader/ConfigureDeploymentHeader.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/IpEndpointsSection/IpEndpointsSection.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/IpEndpointsSection/IpEndpointsSection.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.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/ServiceRow/ServiceRow.tsx
  • 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/components/deployments/ConfigureDeployment/PaneLockBanner/PaneLockBanner.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/PaneLockBanner/PaneLockBanner.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/useConfigureDraft/useConfigureDraft.spec.ts
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/useConfigureDraft/useConfigureDraft.ts
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/useDeploymentFlow/deploymentIntent.spec.ts
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/useDeploymentFlow/deploymentIntent.ts
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/useDeploymentFlow/useDeploymentFlow.spec.ts
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/useDeploymentFlow/useDeploymentFlow.ts
  • apps/deploy-web/src/components/sdl/RegionSelect/RegionSelect.tsx
  • apps/deploy-web/src/pages/new-deployment/configure/[[...dseq]].tsx
  • apps/deploy-web/src/queries/usePlacementOffers.spec.ts
  • apps/deploy-web/src/queries/usePlacementOffers.ts
  • apps/deploy-web/src/queries/useScreenedProviders.spec.tsx
  • apps/deploy-web/src/queries/useScreenedProviders.ts
  • apps/deploy-web/src/utils/urlUtils.spec.ts
  • apps/deploy-web/src/utils/urlUtils.ts
  • apps/deploy-web/tests/ui/configure-deployment-flow.spec.ts
  • apps/deploy-web/tests/ui/pages/ConfigureDeploymentPage.ts
  • packages/ui/components/collapsible-card.spec.tsx
  • packages/ui/components/collapsible-card.tsx
  • packages/ui/components/number-unit-input.spec.tsx
  • packages/ui/components/number-unit-input.tsx
✅ Files skipped from review due to trivial changes (1)
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeployment/ConfigureDeployment.spec.tsx
🚧 Files skipped from review as they are similar to previous changes (49)
  • packages/ui/components/number-unit-input.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/PaneLockBanner/PaneLockBanner.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/AdditionalSection/AdditionalSection.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/MarketplacePane/MarketplaceProvidersTable/MarketplaceProvidersTable.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/PlacementCard/PlacementCard.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/MarketplacePane/MarketplaceProvidersTable/MarketplaceProvidersTable.tsx
  • packages/ui/components/number-unit-input.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/PaneLockBanner/PaneLockBanner.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/RamStorageCard/RamStorageCard.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentHeader/ConfigureDeploymentHeader.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/useDeploymentFlow/deploymentIntent.spec.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/ConfigureDeploymentPanes/ConfigureDeploymentPanes.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/useDeploymentFlow/useDeploymentFlow.spec.ts
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/HardwareSection/HardwareSection.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/ConfigurationPane.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/IpEndpointsSection/IpEndpointsSection.spec.tsx
  • apps/deploy-web/src/utils/urlUtils.spec.ts
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/ComputeResourcesCard/ComputeResourcesCard.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/PersistentStorageCard/PersistentStorageCard.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentHeader/ConfigureDeploymentHeader.tsx
  • packages/ui/components/collapsible-card.tsx
  • apps/deploy-web/tests/ui/pages/ConfigureDeploymentPage.ts
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/MarketplacePane/MarketplacePane.spec.tsx
  • apps/deploy-web/src/queries/useScreenedProviders.ts
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/IpEndpointsSection/IpEndpointsSection.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/DeploymentPane.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/ComputeResourcesCard/ComputeResourcesCard.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentForm/ConfigureDeploymentForm.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/useDeploymentFlow/deploymentIntent.ts
  • apps/deploy-web/src/utils/urlUtils.ts
  • apps/deploy-web/src/queries/usePlacementOffers.ts
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/useDeploymentFlow/useDeploymentFlow.ts
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentPanes/ConfigureDeploymentPanes.tsx
  • apps/deploy-web/tests/ui/configure-deployment-flow.spec.ts
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/ImageRuntimeCard/ImageRuntimeCard.spec.tsx
  • packages/ui/components/collapsible-card.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/DeploymentPane.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/useConfigureDraft/useConfigureDraft.spec.ts
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/MarketplacePane/MarketplacePane.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/useConfigureDraft/useConfigureDraft.ts
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentForm/ConfigureDeploymentForm.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/ConfigurationPane.tsx
  • apps/deploy-web/src/queries/usePlacementOffers.spec.ts
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeployment/ConfigureDeployment.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/ImageRuntimeCard/ImageRuntimeCard.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/RamStorageCard/RamStorageCard.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/PersistentStorageCard/PersistentStorageCard.tsx

@ygrishajev ygrishajev force-pushed the feat/deployment-configure-flow-marketplace branch from 8ac4738 to 3d85351 Compare June 26, 2026 09:41

@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/useConfigureDraft/useConfigureDraft.spec.ts`:
- Around line 102-107: The unreadable-entry spec in useConfigureDraft.spec.ts is
being masked because setup() clears localStorage after the test seeds the value,
so the JSON.parse failure path in readDraft is never hit. Update setup() to
accept and write a raw stored draft entry after window.localStorage.clear(),
then use that path in the "ignores an unreadable entry instead of throwing" test
so it truly exercises the unreadable-entry branch and validates the parse-catch
behavior.
🪄 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: 1bae2d05-0ed2-4c4d-ad38-28c17ed0c12e

📥 Commits

Reviewing files that changed from the base of the PR and between 8ac4738 and 3d85351.

📒 Files selected for processing (54)
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/AdditionalSection/AdditionalSection.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/ComputeResourcesCard/ComputeResourcesCard.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/ComputeResourcesCard/ComputeResourcesCard.tsx
  • 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/ConfigurationPane/HardwareSection/HardwareSection.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/ImageRuntimeCard/ImageRuntimeCard.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/ImageRuntimeCard/ImageRuntimeCard.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/PersistentStorageCard/PersistentStorageCard.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/PersistentStorageCard/PersistentStorageCard.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/RamStorageCard/RamStorageCard.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/RamStorageCard/RamStorageCard.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeployment/ConfigureDeployment.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeployment/ConfigureDeployment.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/ConfigureDeploymentHeader/ConfigureDeploymentHeader.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentHeader/ConfigureDeploymentHeader.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/IpEndpointsSection/IpEndpointsSection.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/IpEndpointsSection/IpEndpointsSection.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.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/ServiceRow/ServiceRow.tsx
  • 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/components/deployments/ConfigureDeployment/PaneLockBanner/PaneLockBanner.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/PaneLockBanner/PaneLockBanner.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/useConfigureDraft/useConfigureDraft.spec.ts
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/useConfigureDraft/useConfigureDraft.ts
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/useDeploymentFlow/deploymentIntent.spec.ts
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/useDeploymentFlow/deploymentIntent.ts
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/useDeploymentFlow/useDeploymentFlow.spec.ts
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/useDeploymentFlow/useDeploymentFlow.ts
  • apps/deploy-web/src/components/sdl/RegionSelect/RegionSelect.tsx
  • apps/deploy-web/src/pages/new-deployment/configure/[[...dseq]].tsx
  • apps/deploy-web/src/queries/usePlacementOffers.spec.ts
  • apps/deploy-web/src/queries/usePlacementOffers.ts
  • apps/deploy-web/src/queries/useScreenedProviders.spec.tsx
  • apps/deploy-web/src/queries/useScreenedProviders.ts
  • apps/deploy-web/src/utils/urlUtils.spec.ts
  • apps/deploy-web/src/utils/urlUtils.ts
  • apps/deploy-web/tests/ui/configure-deployment-flow.spec.ts
  • apps/deploy-web/tests/ui/pages/ConfigureDeploymentPage.ts
  • packages/ui/components/collapsible-card.spec.tsx
  • packages/ui/components/collapsible-card.tsx
  • packages/ui/components/number-unit-input.spec.tsx
  • packages/ui/components/number-unit-input.tsx
🚧 Files skipped from review as they are similar to previous changes (49)
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/PaneLockBanner/PaneLockBanner.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/PaneLockBanner/PaneLockBanner.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/MarketplacePane/MarketplaceProvidersTable/MarketplaceProvidersTable.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/IpEndpointsSection/IpEndpointsSection.spec.tsx
  • apps/deploy-web/tests/ui/configure-deployment-flow.spec.ts
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/MarketplacePane/MarketplaceProvidersTable/MarketplaceProvidersTable.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/ServiceRow/ServiceRow.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/AdditionalSection/AdditionalSection.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/ImageRuntimeCard/ImageRuntimeCard.spec.tsx
  • packages/ui/components/number-unit-input.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentHeader/ConfigureDeploymentHeader.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/ComputeResourcesCard/ComputeResourcesCard.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentHeader/ConfigureDeploymentHeader.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/ConfigurationPane.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/ComputeResourcesCard/ComputeResourcesCard.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentPanes/ConfigureDeploymentPanes.spec.tsx
  • apps/deploy-web/src/utils/urlUtils.spec.ts
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/RamStorageCard/RamStorageCard.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/useDeploymentFlow/deploymentIntent.ts
  • apps/deploy-web/src/components/sdl/RegionSelect/RegionSelect.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/ServiceRow/ServiceRow.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentPanes/ConfigureDeploymentPanes.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/IpEndpointsSection/IpEndpointsSection.tsx
  • packages/ui/components/number-unit-input.spec.tsx
  • packages/ui/components/collapsible-card.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/ImageRuntimeCard/ImageRuntimeCard.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/DeploymentPane.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/PlacementCard/PlacementCard.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/MarketplacePane/MarketplacePane.spec.tsx
  • apps/deploy-web/tests/ui/pages/ConfigureDeploymentPage.ts
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/HardwareSection/HardwareSection.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/ConfigurationPane.tsx
  • apps/deploy-web/src/queries/useScreenedProviders.ts
  • 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/ConfigurationPane/RamStorageCard/RamStorageCard.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/PersistentStorageCard/PersistentStorageCard.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/useDeploymentFlow/deploymentIntent.spec.ts
  • apps/deploy-web/src/queries/usePlacementOffers.ts
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/PlacementCard/PlacementCard.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentForm/ConfigureDeploymentForm.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/PersistentStorageCard/PersistentStorageCard.tsx
  • packages/ui/components/collapsible-card.tsx
  • apps/deploy-web/src/utils/urlUtils.ts
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/useDeploymentFlow/useDeploymentFlow.spec.ts
  • apps/deploy-web/src/queries/useScreenedProviders.spec.tsx
  • apps/deploy-web/src/components/deployments/ConfigureDeployment/useDeploymentFlow/useDeploymentFlow.ts
  • apps/deploy-web/src/queries/usePlacementOffers.spec.ts

@ygrishajev ygrishajev force-pushed the feat/deployment-configure-flow-marketplace branch from 3d85351 to 68ef97c Compare June 26, 2026 09:57
Introduce the "Configure your deployment" screen: a deployment pane with
placement/service cards and a configuration pane, plus the request-quotes
lifecycle that creates the deployment and scopes the marketplace to the
placement.

Persist the working SDL draft per draft id and restore it across reloads.

Lock the panes while quotes are active: SDL-mutating controls (image, cpu,
placement/service name, region) are disabled while placements and services
stay selectable, and clicking a locked control falls through to select it.
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.

2 participants