Skip to content

Storefront polish#2041

Merged
filiphsps merged 120 commits into
masterfrom
dev/storefront-polish-loop
Jun 17, 2026
Merged

Storefront polish#2041
filiphsps merged 120 commits into
masterfrom
dev/storefront-polish-loop

Conversation

@filiphsps

@filiphsps filiphsps commented Jun 16, 2026

Copy link
Copy Markdown
Owner

No description provided.

@vercel

vercel Bot commented Jun 16, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
commerce-storefront Ready Ready Preview, Comment Jun 17, 2026 3:19am
2 Skipped Deployments
Project Deployment Actions Updated (UTC)
commerce-landing Ignored Ignored Preview Jun 17, 2026 3:19am
commerce-admin Skipped Skipped Jun 17, 2026 3:19am

@filiphsps filiphsps changed the title fix(storefront): make Alert token-driven with legible per-severity fo… Storefront polish Jun 16, 2026
@vercel

vercel Bot commented Jun 16, 2026

Copy link
Copy Markdown

Deployment failed with the following error:

Resource is limited - try again in 24 hours (more than 100, code: "api-deployments-free-per-day").

Learn More: https://vercel.com/filiph?upgradeToPro=build-rate-limit

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

1 issue found and verified against the latest diff

Confidence score: 4/5

  • In apps/storefront/src/components/actionable/pagination.tsx, parseInt will accept malformed page query values like 2abc, which can route users to an unintended page instead of falling back to firstPage; this is a mild but user-visible pagination correctness risk if merged as-is — switch to strict integer validation (full-string numeric check) before clamping.

Reply with feedback, questions, or to request a fix.

Re-trigger cubic

Comment thread apps/storefront/src/components/actionable/pagination.tsx Outdated
@github-actions

github-actions Bot commented Jun 16, 2026

Copy link
Copy Markdown
Contributor

Coverage Report

Status Category Percentage Covered / Total
🔵 Lines 82.29% 10977 / 13339
🔵 Statements 80.88% 12025 / 14867
🔵 Functions 81.17% 2902 / 3575
🔵 Branches 69.01% 7024 / 10178
File Coverage
File Stmts Branches Functions Lines Uncovered Lines
Changed Files
apps/storefront/src/components/geo-redirect.tsx 83.87% 89.09% 80% 86.44% 34, 44, 50-51, 79, 81, 82, 103-105
apps/storefront/src/components/link.tsx 90.9% 82.92% 100% 90.9% 27, 29, 74
apps/storefront/src/components/actionable/filter-values.tsx 100% 94.44% 100% 100%
apps/storefront/src/components/actionable/input.tsx 100% 100% 100% 100%
apps/storefront/src/components/actionable/pagination.tsx 97.5% 77.77% 100% 97.43% 112
apps/storefront/src/components/cart/cart-coupons.tsx 100% 100% 100% 100%
apps/storefront/src/components/cart/cart-note.tsx 81.25% 50% 100% 81.25% 27-29
apps/storefront/src/components/cart/cart-summary.tsx 73.21% 71.73% 70% 72.72% 180, 191, 259-304
apps/storefront/src/components/header/cart-button.tsx 93.33% 100% 66.66% 100% 38
apps/storefront/src/components/header/header.tsx 91.66% 33.33% 50% 91.66% 99-111
apps/storefront/src/components/header/info-bar.tsx 100% 100% 100% 100%
apps/storefront/src/components/informational/alert.tsx 50% 37.5% 100% 50% 57-68, 72-73
apps/storefront/src/components/informational/breadcrumbs.tsx 100% 94.44% 100% 100%
apps/storefront/src/components/layout/modal.tsx 77.77% 50% 50% 77.77% 39, 48
apps/storefront/src/components/layout/popover.tsx 100% 50% 100% 100%
apps/storefront/src/components/product-card/picker/sheet.tsx 86.66% 40% 80% 92.3% 29
apps/storefront/src/components/product-display/primitives/variant-badges.tsx 94.73% 92.85% 100% 94.73% 32
apps/storefront/src/components/products/collection-product-card.tsx 66.66% 100% 0% 66.66% 34
apps/storefront/src/components/products/product-filters.tsx 31.95% 14.44% 8.69% 36.47% 32-37, 77-79, 92-98, 109-130, 134-135, 144, 145, 146, 147, 151-159, 165-223, 251-268, 283-322
apps/storefront/src/components/products/quantity-selector.tsx 78.68% 76.19% 90% 79.66% 29, 32, 40, 113, 119, 128, 139-140, 145-146, 153-157
apps/storefront/src/components/products/search-product-card.tsx 66.66% 100% 0% 100% 29
apps/storefront/src/components/products/surface-product-card.tsx 66.66% 100% 0% 66.66% 42
Generated in workflow #13257 for commit 1a0cc28 by the Vitest Coverage Report Action

@codecov

codecov Bot commented Jun 16, 2026

Copy link
Copy Markdown

❌ 1 Tests Failed:

Tests completed Failed Passed Skipped
337 1 336 0
View the top 3 failed test(s) by shortest run time
src/core/definitions.test.ts > isDefinitionSnippet > classifies "export * from '@/core/x';" as false
Stack Traces | 5.94e-05s run time
No failure message available
src/core/definitions.test.ts > isDefinitionSnippet > classifies "export { isProduction } from '@/core/env';" as false
Stack Traces | 6.16e-05s run time
No failure message available
src/core/definitions.test.ts > isDefinitionSnippet > classifies "export interface Bar {" as true
Stack Traces | 8.48e-05s run time
No failure message available
src/core/definitions.test.ts > isDefinitionSnippet > classifies "abstract class Base {" as true
Stack Traces | 0.000108s run time
No failure message available
src/core/definitions.test.ts > isDefinitionSnippet > classifies "export type Foo = {" as true
Stack Traces | 0.000115s run time
No failure message available
src/core/definitions.test.ts > isDefinitionSnippet > classifies "enum Kind {" as true
Stack Traces | 0.00014s run time
No failure message available
src/core/definitions.test.ts > isDefinitionSnippet > classifies "export function isProduction() {" as true
Stack Traces | 0.000149s run time
No failure message available
src/shared/resolve-build-id.test.ts > resolveBuildId > returns 'development' when nothing is set
Stack Traces | 0.000168s run time
No failure message available
src/config.test.ts > withBuildNotifier > keeps a pre-existing deploymentId
Stack Traces | 0.00017s run time
No failure message available
src/shared/resolve-build-id.test.ts > resolveBuildId > falls through an empty GIT_COMMIT_SHA to VERCEL_GIT_COMMIT_SHA
Stack Traces | 0.000181s run time
No failure message available
src/presets.test.ts > VIEWPORT_PRESETS > covers a folded foldable narrow enough to stress horizontal overflow
Stack Traces | 0.000186s run time
No failure message available
src/shared/resolve-build-id.test.ts > resolveBuildId > falls back to BUILD_ID
Stack Traces | 0.000195s run time
No failure message available
src/shared/resolve-build-id.test.ts > resolveBuildId > falls back to NEXT_PUBLIC_BUILD_ID
Stack Traces | 0.000199s run time
No failure message available
src/shared/resolve-build-id.test.ts > resolveBuildId > falls back to GIT_COMMIT_SHA
Stack Traces | 0.000209s run time
No failure message available
src/shared/resolve-build-id.test.ts > resolveBuildId > falls back to VERCEL_GIT_COMMIT_SHA
Stack Traces | 0.000218s run time
No failure message available
src/shared/resolve-build-id.test.ts > resolveBuildId > ignores empty-string values
Stack Traces | 0.000233s run time
No failure message available
src/core/definitions.test.ts > isDefinitionSnippet > classifies "import { X } from '@/api/shopify';" as false
Stack Traces | 0.000234s run time
No failure message available
src/config.test.ts > withBuildNotifier > bakes an id with empty options
Stack Traces | 0.00026s run time
No failure message available
src/core/merge.test.ts > mergeLocations > accepts a single Location (not just arrays)
Stack Traces | 0.000271s run time
No failure message available
src/config.test.ts > withBuildNotifier > respects an explicit buildId and can skip deploymentId
Stack Traces | 0.000276s run time
No failure message available
src/presets.test.ts > breakpointForWidth > resolves just below a boundary to the lower tier
Stack Traces | 0.000277s run time
No failure message available
src/playwright.test.ts > responsiveProjects > lets the preset emulation win over a conflicting baseUse viewport
Stack Traces | 0.00029s run time
No failure message available
src/shared/resolve-build-id.test.ts > resolveBuildId > prefers VERCEL_DEPLOYMENT_ID above all
Stack Traces | 0.000293s run time
No failure message available
src/core/definitions.test.ts > isDefinitionSnippet > classifies "isProduction: boolean;" as false
Stack Traces | 0.00031s run time
No failure message available
src/matchmedia.test.ts > installMatchMedia > treats an unsupported feature as a non-match instead of passing silently
Stack Traces | 0.000314s run time
No failure message available
src/server.test.ts > createVersionRoute > lets options.headers override the default cache-control
Stack Traces | 0.000334s run time
No failure message available
src/presets.test.ts > VIEWPORT_PRESETS > indexes by id
Stack Traces | 0.000343s run time
No failure message available
src/matchmedia.test.ts > installMatchMedia > supports the deprecated addListener/removeListener API
Stack Traces | 0.000365s run time
No failure message available
src/server.test.ts > createVersionRoute > falls back to resolveBuildId when no baked id is present
Stack Traces | 0.000367s run time
No failure message available
src/cli.test.ts > parseCli > throws on an unknown mode
Stack Traces | 0.00038s run time
No failure message available
src/presets.test.ts > VIEWPORT_PRESETS > derives every preset breakpoint from its width
Stack Traces | 0.000381s run time
No failure message available
src/presets.test.ts > VIEWPORT_PRESETS > flags only book-style foldables as foldable
Stack Traces | 0.00039s run time
No failure message available
src/core/routing.test.ts > routing > returns the languageId for a path
Stack Traces | 0.00039s run time
No failure message available
src/config.test.ts > withBuildNotifier > falls back to process.env when no env option is given
Stack Traces | 0.000391s run time
No failure message available
src/server.test.ts > createVersionRoute > honors a custom resolveId and extra headers
Stack Traces | 0.000395s run time
No failure message available
src/playwright.test.ts > responsiveProjects > defaults to the core matrix, prefixing project names
Stack Traces | 0.000401s run time
No failure message available
src/matchmedia.test.ts > installMatchMedia > restores the original globals on cleanup
Stack Traces | 0.000403s run time
No failure message available
src/playwright.test.ts > presetToUse > marks non-touch presets as non-mobile
Stack Traces | 0.000411s run time
No failure message available
src/to-plain-text.test.ts > toPlainText > separates block elements with newlines
Stack Traces | 0.000434s run time
No failure message available
src/config/default-config.test.ts > DEFAULT_CONFIG > maps .tsx to typescriptreact on the typescript backend
Stack Traces | 0.000445s run time
No failure message available
src/to-plain-text.test.ts > toPlainText > returns empty string for empty input
Stack Traces | 0.000457s run time
No failure message available
src/core/backend-client.test.ts > dropWritesAfterDestroy > silently drops a write issued after the underlying stream is destroyed
Stack Traces | 0.000463s run time
No failure message available
src/cli.test.ts > parseCli > throws on an unknown option
Stack Traces | 0.000476s run time
No failure message available
src/to-plain-text.test.ts > toPlainText > decodes HTML entities in text content
Stack Traces | 0.000492s run time
No failure message available
src/server.test.ts > createVersionRoute > reports the build-baked NEXT_PUBLIC_BUILD_ID over a divergent runtime var
Stack Traces | 0.000514s run time
No failure message available
src/normalize.test.ts > normalize > trims outer whitespace
Stack Traces | 0.000518s run time
No failure message available
src/presets.test.ts > CORE_RESPONSIVE_MATRIX > spans distinct device widths from a narrow foldable up to a desktop tier
Stack Traces | 0.000519s run time
No failure message available
src/normalize.test.ts > normalize > collapses non-breaking spaces to regular spaces
Stack Traces | 0.00054s run time
No failure message available
src/normalize.test.ts > normalize > collapses raw U+00A0 characters (not just   entities) to regular spaces
Stack Traces | 0.000541s run time
No failure message available
src/cli.test.ts > run > prints the version
Stack Traces | 0.000558s run time
No failure message available
src/config/default-config.test.ts > DEFAULT_CONFIG > every backend has a command and a non-empty extension map
Stack Traces | 0.00061s run time
No failure message available
src/to-plain-text.test.ts > toPlainText > collapses non-breaking spaces
Stack Traces | 0.000616s run time
No failure message available
src/matchmedia.test.ts > installMatchMedia > combines and-joined clauses and ignores the screen media type
Stack Traces | 0.000629s run time
No failure message available
src/core/merge.test.ts > mergeLocations > drops null/undefined backend replies
Stack Traces | 0.000629s run time
No failure message available
src/core/routing.test.ts > routing > matches a backend by extension
Stack Traces | 0.00066s run time
No failure message available
src/cli.test.ts > run > prints usage for help
Stack Traces | 0.00069s run time
No failure message available
src/matchmedia.test.ts > installMatchMedia > derives orientation from width vs height
Stack Traces | 0.000699s run time
No failure message available
src/cli.test.ts > run > inits an engine and starts the MCP server
Stack Traces | 0.000727s run time
No failure message available
src/to-plain-text.test.ts > toPlainText > removes <meta>/<script>/<style> content
Stack Traces | 0.000734s run time
No failure message available
src/to-plain-text.test.ts > toPlainText > separates table cells with newlines
Stack Traces | 0.000763s run time
No failure message available
src/cli.test.ts > parseCli > returns help and version results
Stack Traces | 0.000802s run time
No failure message available
src/to-plain-text.test.ts > toPlainText > treats <br>, headings, and list items as block separators
Stack Traces | 0.000844s run time
No failure message available
src/mcp/server.test.ts > buildTools > find_implementations handler reports none found
Stack Traces | 0.000964s run time
No failure message available
src/mcp/server.test.ts > buildTools > find_references handler reports none found
Stack Traces | 0.000984s run time
No failure message available
src/cli.test.ts > parseCli > parses the --root option
Stack Traces | 0.00107s run time
No failure message available
src/core/backend-client.test.ts > dropWritesAfterDestroy > forwards writes while the underlying stream is open
Stack Traces | 0.00112s run time
No failure message available
src/core/seed.test.ts > orderSeedFiles > puts the basename match first and caps the list
Stack Traces | 0.00125s run time
No failure message available
src/playwright.test.ts > responsiveProjects > merges baseUse under each project emulation block
Stack Traces | 0.00127s run time
No failure message available
src/mcp/server.test.ts > buildTools > find_symbol handler returns results as text
Stack Traces | 0.00132s run time
No failure message available
src/config/load-config.test.ts > loadConfig > throws a descriptive error on a malformed backend (missing command)
Stack Traces | 0.00151s run time
No failure message available
src/config.test.ts > withBuildNotifier > preserves an existing env and generateBuildId
Stack Traces | 0.00152s run time
No failure message available
src/normalize.test.ts > normalize > returns null for empty string
Stack Traces | 0.00156s run time
No failure message available
src/cli.test.ts > run > starts the LSP server with the root
Stack Traces | 0.00159s run time
No failure message available
src/matchmedia.test.ts > installMatchMedia > seeds innerWidth/innerHeight and fires resize on setViewport
Stack Traces | 0.00178s run time
No failure message available
src/cli.test.ts > parseCli > throws on a missing mode
Stack Traces | 0.00195s run time
No failure message available
src/client/use-build-notifier-engine.test.ts > useBuildNotifierEngine > is inert in development (no fetch)
Stack Traces | 0.00207s run time
No failure message available
src/normalize.test.ts > normalize > drops data-* attributes from every element
Stack Traces | 0.00216s run time
No failure message available
src/config/load-config.test.ts > loadConfig > reads lspmesh.json discovered from a child dir upward
Stack Traces | 0.00221s run time
No failure message available
src/presets.test.ts > VIEWPORT_PRESETS > has unique, non-empty ids and positive dimensions
Stack Traces | 0.00223s run time
No failure message available
src/config.test.ts > withBuildNotifier > bakes NEXT_PUBLIC_BUILD_ID and sets deploymentId from the resolved id
Stack Traces | 0.00236s run time
No failure message available
src/to-react-nodes.test.tsx > toReactNodes > decodes HTML entities in text content
Stack Traces | 0.00247s run time
No failure message available
src/core/definitions.test.ts > isDefinitionSnippet > classifies "export const ShopifyApolloApiClient = async ({" as true
Stack Traces | 0.0025s run time
No failure message available
src/playwright.test.ts > presetToUse > emits the emulation block for a preset
Stack Traces | 0.00263s run time
No failure message available
src/core/routing.test.ts > routing > lowercases the extension
Stack Traces | 0.00269s run time
No failure message available
src/core/seed.test.ts > seedScore > defers tests, dist, and .d.ts; floats basename matches
Stack Traces | 0.0028s run time
No failure message available
src/to-react-nodes.test.tsx > toReactNodes > filters whitespace-only text nodes between elements
Stack Traces | 0.00281s run time
No failure message available
src/to-react-nodes.test.tsx > toReactNodes > returns null for null/undefined/non-string/empty
Stack Traces | 0.00297s run time
No failure message available
src/client/use-build-notifier-engine.test.ts > useBuildNotifierEngine > does not flag when ids match
Stack Traces | 0.00299s run time
No failure message available
src/matchmedia.test.ts > installMatchMedia > notifies change listeners only when the match flips
Stack Traces | 0.00302s run time
No failure message available
src/shared/resolve-build-id.test.ts > resolveBuildId > prefers NEXT_DEPLOYMENT_ID above all
Stack Traces | 0.00307s run time
No failure message available
src/to-react-nodes.test.tsx > toReactNodes > strips data-* attributes
Stack Traces | 0.00312s run time
No failure message available
src/presets.test.ts > breakpointForWidth > maps each min-width boundary to its breakpoint
Stack Traces | 0.00326s run time
No failure message available
src/client/dismissal.test.ts > dismissal > round-trips a dismissed build id
Stack Traces | 0.00341s run time
No failure message available
src/to-plain-text.test.ts > toPlainText > returns empty string for null/undefined/non-string
Stack Traces | 0.00354s run time
No failure message available
src/to-plain-text.test.ts > toPlainText > preserves unicode characters (no HTML entity encoding)
Stack Traces | 0.00365s run time
No failure message available
src/to-react-nodes.test.tsx > toReactNodes > uses provided component override for a tag
Stack Traces | 0.00372s run time
No failure message available
src/config/default-config.test.ts > DEFAULT_CONFIG > wires typescript, tailwind, and biome backends
Stack Traces | 0.0038s run time
No failure message available
src/core/merge.test.ts > mergeLocations > unions and dedupes by uri:line:character
Stack Traces | 0.00385s run time
No failure message available
src/to-react-nodes.test.tsx > toReactNodes > strips <meta>, <script>, <style>
Stack Traces | 0.00404s run time
No failure message available
src/config/load-config.test.ts > loadConfig > returns the default config (with root) when no file is found
Stack Traces | 0.00405s run time
No failure message available
src/to-react-nodes.test.tsx > toReactNodes > renames table-cell colspan/rowspan to React conventions
Stack Traces | 0.00415s run time
No failure message available
src/mcp/server.test.ts > buildTools > registers the three find_* tools
Stack Traces | 0.00438s run time
No failure message available
src/matchmedia.test.ts > installMatchMedia > evaluates min-width / max-width against the emulated width
Stack Traces | 0.00444s run time
No failure message available
src/to-react-nodes.test.tsx > toReactNodes > renders nested formatting
Stack Traces | 0.00472s run time
No failure message available
src/to-react-nodes.test.tsx > toReactNodes > renders lists
Stack Traces | 0.00482s run time
No failure message available
src/to-react-nodes.test.tsx > toReactNodes > converts class to className
Stack Traces | 0.00528s run time
No failure message available
src/client/use-build-notifier-engine.test.ts > useBuildNotifierEngine > does not fetch when disabled
Stack Traces | 0.00535s run time
No failure message available
src/cli.test.ts > parseCli > parses the lsp and mcp modes
Stack Traces | 0.00549s run time
No failure message available
src/normalize.test.ts > normalize > returns null for null/undefined/non-string input
Stack Traces | 0.00623s run time
No failure message available
src/server.test.ts > createVersionRoute > returns the resolved build id as no-store JSON
Stack Traces | 0.00723s run time
No failure message available
src/to-plain-text.test.ts > toPlainText > strips all tags and preserves inline text order
Stack Traces | 0.00862s run time
No failure message available
src/client/build-notifier.test.tsx > BuildNotifierProvider + BuildNotifier > useBuildNotification throws outside a provider
Stack Traces | 0.00891s run time
No failure message available
src/mcp/server.test.ts > buildMcpServer > builds an MCP server with the tools registered
Stack Traces | 0.00993s run time
No failure message available
src/client/use-build-notifier-engine.test.ts > useBuildNotifierEngine > polls on interval and skips ticks while hidden
Stack Traces | 0.0105s run time
No failure message available
src/client/use-build-notifier-engine.test.ts > useBuildNotifierEngine > re-checks when the tab becomes visible
Stack Traces | 0.0128s run time
No failure message available
src/normalize.test.ts > normalize > strips <meta>, <script>, <style> elements entirely
Stack Traces | 0.0195s run time
No failure message available
src/client/build-notifier.test.tsx > BuildNotifierProvider + BuildNotifier > dismiss through the hook hides the update in the same tree
Stack Traces | 0.0293s run time
No failure message available
src/to-react-nodes.test.tsx > toReactNodes > renders a simple paragraph
Stack Traces | 0.0352s run time
No failure message available
src/client/build-notifier.test.tsx > BuildNotifierProvider + BuildNotifier > exposes updateAvailable through the render-prop
Stack Traces | 0.0421s run time
No failure message available
src/client/use-build-notifier-engine.test.ts > useBuildNotifierEngine > does not re-fire onUpdateAvailable for the same id
Stack Traces | 0.0559s run time
No failure message available
src/client/use-build-notifier-engine.test.ts > useBuildNotifierEngine > sets status=error when the fetcher throws
Stack Traces | 0.0575s run time
No failure message available
src/client/use-build-notifier-engine.test.ts > useBuildNotifierEngine > calls onUpdateAvailable once per new id and auto-reloads when enabled
Stack Traces | 0.059s run time
No failure message available
src/client/use-build-notifier-engine.test.ts > useBuildNotifierEngine > flags an update when the endpoint id differs
Stack Traces | 0.0823s run time
No failure message available
src/client/use-build-notifier-engine.test.ts > useBuildNotifierEngine > dismiss hides the current build but a newer build re-surfaces
Stack Traces | 0.111s run time
No failure message available
src/core/backend-registry.test.ts > BackendRegistry > returns backends that handle a path
Stack Traces | 0.181s run time
No failure message available
src/core/engine.test.ts > AggregatorEngine > merges a position op (references) from matching backends
Stack Traces | 0.182s run time
No failure message available
src/core/backend-client.test.ts > BackendClient > rejects an in-flight request when the backend dies
Stack Traces | 0.186s run time
No failure message available
src/core/backend-client.test.ts > BackendClient > sends didChange with a bumped version when the file changes on disk
Stack Traces | 0.188s run time
No failure message available
src/core/engine.test.ts > AggregatorEngine > findReferences pins to a single file when given one
Stack Traces | 0.215s run time
No failure message available
src/lsp/server.test.ts > createLspHandlers > serves references and workspace/symbol through the engine
Stack Traces | 0.22s run time
No failure message available
src/lsp/server.test.ts > createLspHandlers > returns sensible empties for ops the backend does not implement
Stack Traces | 0.222s run time
No failure message available
src/core/engine.test.ts > AggregatorEngine > forward routes a document-shaped request by uri
Stack Traces | 0.225s run time
No failure message available
src/core/engine.test.ts > AggregatorEngine > findSymbol with definitionsOnly filters to definition-shaped results
Stack Traces | 0.242s run time
No failure message available
src/core/engine.test.ts > AggregatorEngine > rawForward returns one reply per matching backend
Stack Traces | 0.244s run time
No failure message available
src/core/engine.test.ts > AggregatorEngine > findImplementations returns an array even when no backend answers
Stack Traces | 0.246s run time
No failure message available
src/core/engine.test.ts > AggregatorEngine > findReferences unions references over the resolved definitions, tagged with definedAt
Stack Traces | 0.252s run time
No failure message available
src/core/backend-client.test.ts > BackendClient > initializes and answers a request
Stack Traces | 0.259s run time
No failure message available
src/core/engine.test.ts > AggregatorEngine > aggregates workspace/symbol across backends
Stack Traces | 0.294s run time
No failure message available
src/core/backend-registry.test.ts > BackendRegistry > respawns a backend after it dies
Stack Traces | 0.375s run time
No failure message available
View the full list of 198 ❄️ flaky test(s)
__tests__/compose.test.ts > compose > returns identity when no middleware passed

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.00113s run time
No failure message available
__tests__/compose.test.ts > compose > runs middleware in registration order, terminal returns cart

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.00725s run time
No failure message available
__tests__/contract-tests-self.test.ts > cart adapter contract: mock-adapter > Money.amount is a decimal string; currencyCode is ISO 4217

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000394s run time
No failure message available
__tests__/contract-tests-self.test.ts > cart adapter contract: mock-adapter > declares capabilities matching method presence

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.00232s run time
No failure message available
__tests__/contract-tests-self.test.ts > cart adapter contract: mock-adapter > every declared customMutation name has a handler

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000297s run time
No failure message available
__tests__/contract-tests-self.test.ts > cart adapter contract: mock-adapter > idempotency: same key + same mutation = one effective change

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000355s run time
No failure message available
__tests__/contract-tests-self.test.ts > cart adapter contract: mock-adapter > lifecycle: createCart -> getCart -> addLines -> updateLines -> removeLines

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.0029s run time
No failure message available
__tests__/contract-tests-self.test.ts > cart adapter contract: mock-adapter > missing cart throws CartNotFoundError (by name)

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000175s run time
No failure message available
__tests__/errors.test.ts > cart errors > CartCapabilityUnsupportedError names the missing capability

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000287s run time
No failure message available
__tests__/errors.test.ts > cart errors > CartNotFoundError carries name + cartId

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.00305s run time
No failure message available
__tests__/errors.test.ts > cart errors > CartProviderError preserves cause

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000327s run time
No failure message available
__tests__/errors.test.ts > cart errors > CartUserError carries userErrors array

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000565s run time
No failure message available
__tests__/events.test.ts > event bus > delivers to all matching handlers asynchronously

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.00431s run time
No failure message available
__tests__/events.test.ts > event bus > swallows handler errors and logs warn

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.00476s run time
No failure message available
__tests__/events.test.ts > event bus > unsubscribes via returned dispose

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000331s run time
No failure message available
__tests__/idempotency.test.ts > idempotency middleware > does not dedup mutations without a key

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000669s run time
No failure message available
__tests__/idempotency.test.ts > idempotency middleware > expires entries after windowMs

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.00311s run time
No failure message available
__tests__/idempotency.test.ts > idempotency middleware > short-circuits same-key replay within window

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.0042s run time
No failure message available
__tests__/kernel.test.ts > createCart kernel > dispatches add-line mutation through adapter.addLines

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.0056s run time
No failure message available
__tests__/kernel.test.ts > createCart kernel > emits cart.updated after mutate

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000905s run time
No failure message available
__tests__/kernel.test.ts > createCart kernel > exposes adapter type + capabilities

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.00512s run time
No failure message available
__tests__/kernel.test.ts > createCart kernel > routes kind: custom to adapter.customMutations[name]

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000589s run time
No failure message available
__tests__/kernel.test.ts > createCart kernel > throws CartCapabilityUnsupportedError when mutation needs a missing capability

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.00181s run time
No failure message available
__tests__/middleware-analytics.test.ts > analytics middleware > emits cart.mutation.error on reject

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.00239s run time
No failure message available
__tests__/middleware-analytics.test.ts > analytics middleware > emits cart.mutation.success on resolve

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.00642s run time
No failure message available
__tests__/middleware-logger.test.ts > logger middleware > logs entry and exit per mutation

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.00385s run time
No failure message available
__tests__/middleware-retry.test.ts > retry middleware > does not retry CartUserError

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.00282s run time
No failure message available
__tests__/middleware-retry.test.ts > retry middleware > retries CartProviderError up to attempts

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.00464s run time
No failure message available
__tests__/middleware-tracing.test.ts > tracing middleware > is a no-op if ctx.tracer is missing

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000372s run time
No failure message available
__tests__/middleware-tracing.test.ts > tracing middleware > opens span per mutation with kind, cartId, idempotencyKey

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.00345s run time
No failure message available
__tests__/mock-adapter.test.ts > mock cart adapter > addLines synthesizes line + bumps totalQuantity

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.0025s run time
No failure message available
__tests__/mock-adapter.test.ts > mock cart adapter > createCart + getCart round-trip

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.00647s run time
No failure message available
__tests__/mock-adapter.test.ts > mock cart adapter > failOn injects errors per mutation predicate

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.00231s run time
No failure message available
__tests__/mock-adapter.test.ts > mock cart adapter > respects capability overrides — when giftCards=false, no applyGiftCardCodes method

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000284s run time
No failure message available
__tests__/mock-adapter.test.ts > mock cart adapter > updateLines + removeLines mutate state

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000969s run time
No failure message available
__tests__/money.test.ts > money > add/sub/mul preserve currency scale

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000816s run time
No failure message available
__tests__/money.test.ts > money > eq / lt / gt comparisons

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000479s run time
No failure message available
__tests__/money.test.ts > money > formats integer cents back to decimal string with currency scale

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000685s run time
No failure message available
__tests__/money.test.ts > money > handles BHD with scale=3

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000468s run time
No failure message available
__tests__/money.test.ts > money > handles JPY with scale=0

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000534s run time
No failure message available
__tests__/money.test.ts > money > parses USD decimal string to integer cents

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.0244s run time
No failure message available
__tests__/money.test.ts > money > throws when add/sub/eq currencies differ

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.00174s run time
No failure message available
__tests__/money.test.ts > money > zero returns currency-scoped zero

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000219s run time
No failure message available
src/env.test.ts > resolveBuildEnv > falls back to VERCEL_GIT_COMMIT_SHA when GIT_COMMIT_SHA missing

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.00017s run time
No failure message available
src/env.test.ts > resolveBuildEnv > returns a non-empty SHA string when no env values provided

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.00553s run time
No failure message available
src/env.test.ts > resolveBuildEnv > returns development when NODE_ENV is development

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.0126s run time
No failure message available
src/env.test.ts > resolveBuildEnv > returns preview when VERCEL_ENV is preview

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.00553s run time
No failure message available
src/env.test.ts > resolveBuildEnv > returns production when nothing matches development or preview

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.00512s run time
No failure message available
src/env.test.ts > resolveBuildEnv > uses provided GIT_COMMIT_SHA when set

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.00024s run time
No failure message available
src/hostname.test.ts > DEV_TLDS > is readonly and contains the expected TLDs

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.00329s run time
No failure message available
src/hostname.test.ts > appFromHost > handles dotted shop slugs

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000154s run time
No failure message available
src/hostname.test.ts > appFromHost > handles port suffix

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000118s run time
No failure message available
src/hostname.test.ts > appFromHost > returns empty for bare TLD

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000142s run time
No failure message available
src/hostname.test.ts > appFromHost > returns empty for null/undefined/empty

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000144s run time
No failure message available
src/hostname.test.ts > appFromHost > returns empty for production host

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000101s run time
No failure message available
src/hostname.test.ts > appFromHost > returns the app segment for bare-app dev host

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000169s run time
No failure message available
src/hostname.test.ts > appFromHost > returns the app segment for shop dev host

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.00016s run time
No failure message available
src/hostname.test.ts > appFromHost > treats deeply-nested dev hosts as <…shop>.<app>.<tld>

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000163s run time
No failure message available
src/hostname.test.ts > isDevHost > is case-insensitive

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000173s run time
No failure message available
src/hostname.test.ts > isDevHost > returns false for "*.localhostsomething" — must be a real TLD match

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000128s run time
No failure message available
src/hostname.test.ts > isDevHost > returns false for empty / null / undefined

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.00014s run time
No failure message available
src/hostname.test.ts > isDevHost > returns false for leading-dot host

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000115s run time
No failure message available
src/hostname.test.ts > isDevHost > returns false for production domain

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 9.8e-05s run time
No failure message available
src/hostname.test.ts > isDevHost > returns true for .localhost subdomain

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000197s run time
No failure message available
src/hostname.test.ts > isDevHost > returns true for .test TLD

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000155s run time
No failure message available
src/hostname.test.ts > isDevHost > returns true for admin/landing dev hosts

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000119s run time
No failure message available
src/hostname.test.ts > isDevHost > returns true for bare .test

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000109s run time
No failure message available
src/hostname.test.ts > isDevHost > returns true for bare localhost

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000124s run time
No failure message available
src/hostname.test.ts > isDevHost > returns true when host has port suffix

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 9.82e-05s run time
No failure message available
src/hostname.test.ts > isLocalhost > is false for empty/null/undefined

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000139s run time
No failure message available
src/hostname.test.ts > isLocalhost > is false for subdomains and other dev TLDs

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000128s run time
No failure message available
src/hostname.test.ts > isLocalhost > is true only for bare localhost

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000198s run time
No failure message available
src/hostname.test.ts > normalizeHost > lowercases ASCII

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000226s run time
No failure message available
src/hostname.test.ts > normalizeHost > rejects double trailing dots

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000149s run time
No failure message available
src/hostname.test.ts > normalizeHost > rejects empty / whitespace / leading-dot

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000457s run time
No failure message available
src/hostname.test.ts > normalizeHost > returns a branded Hostname

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000307s run time
No failure message available
src/hostname.test.ts > normalizeHost > strips a single trailing dot (FQDN)

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.00024s run time
No failure message available
src/hostname.test.ts > normalizeHost > strips ports

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000165s run time
No failure message available
src/hostname.test.ts > normalizeHost > trims surrounding whitespace

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000404s run time
No failure message available
src/hostname.test.ts > parseHost > parses a .test TLD host

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000829s run time
No failure message available
src/hostname.test.ts > parseHost > parses a bare TLD

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000276s run time
No failure message available
src/hostname.test.ts > parseHost > parses a bare-app dev host

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000614s run time
No failure message available
src/hostname.test.ts > parseHost > parses a dev host with a dotted shop slug

Flake rate in main: 100.00% (Passed 0 times, Failed 7 times)

Stack Traces | 0.0184s run time
AssertionError: expected { …(7) } to deeply equal { …(7) }

- Expected
+ Received

@@ -2,13 +2,13 @@
    "app": "storefront",
    "hostname": "demo.nordcom.store.storefront.localhost",
    "isDev": true,
    "port": null,
    "segments": [
-     "beta",
-     "pouched",
-     "de",
+     "demo",
+     "nordcom",
+     "store",
      "storefront",
      "localhost",
    ],
    "shop": "demo.nordcom.store",
    "tld": "localhost",

 ❯ src/hostname.test.ts:361:70
src/hostname.test.ts > parseHost > parses a full shop dev host

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000404s run time
No failure message available
src/hostname.test.ts > parseHost > parses a production host

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000305s run time
No failure message available
src/hostname.test.ts > parseHost > returns null for malformed input

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000405s run time
No failure message available
src/hostname.test.ts > portFromHost > extracts port from DNS host

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000291s run time
No failure message available
src/hostname.test.ts > portFromHost > extracts port from bracketed IPv6

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000172s run time
No failure message available
src/hostname.test.ts > portFromHost > returns null for invalid port values

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000234s run time
No failure message available
src/hostname.test.ts > portFromHost > returns null for null/undefined/empty

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.00166s run time
No failure message available
src/hostname.test.ts > portFromHost > returns null for unbracketed IPv6

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000163s run time
No failure message available
src/hostname.test.ts > portFromHost > returns null when no port present

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.00024s run time
No failure message available
src/hostname.test.ts > shopFromHost > extracts leftmost subdomain from dev host with 3+ segments

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000428s run time
No failure message available
src/hostname.test.ts > shopFromHost > handles .test TLD identically to .localhost

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000329s run time
No failure message available
src/hostname.test.ts > shopFromHost > handles port suffix on dev host

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000285s run time
No failure message available
src/hostname.test.ts > shopFromHost > lower-cases production hostname

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000141s run time
No failure message available
src/hostname.test.ts > shopFromHost > lower-cases the result

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000166s run time
No failure message available
src/hostname.test.ts > shopFromHost > preserves dotted shop slugs (mirrors prod hostname)

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000136s run time
No failure message available
src/hostname.test.ts > shopFromHost > preserves dotted shop slugs across .test TLD too

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000128s run time
No failure message available
src/hostname.test.ts > shopFromHost > returns empty for malformed labels

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000153s run time
No failure message available
src/hostname.test.ts > shopFromHost > returns empty string for admin/landing apps

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000144s run time
No failure message available
src/hostname.test.ts > shopFromHost > returns empty string for bare TLD

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000163s run time
No failure message available
src/hostname.test.ts > shopFromHost > returns empty string for bare-app dev host (2 segments)

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000135s run time
No failure message available
src/hostname.test.ts > shopFromHost > returns empty string for empty / null / undefined

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000194s run time
No failure message available
src/hostname.test.ts > shopFromHost > returns everything before .app.tld for deeply nested dev host

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000147s run time
No failure message available
src/hostname.test.ts > shopFromHost > returns full hostname unchanged for production

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000135s run time
No failure message available
src/hostname.test.ts > shopFromHost > strips port on production host

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.00012s run time
No failure message available
src/hostname.test.ts > shopFromHost > strips trailing dot on production host

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000143s run time
No failure message available
src/hostname.test.ts > shopFromHost > trims surrounding whitespace

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000126s run time
No failure message available
src/hostname.test.ts > stripPort > handles IPv4 with port

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000146s run time
No failure message available
src/hostname.test.ts > stripPort > handles bracketed IPv6 with port

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000124s run time
No failure message available
src/hostname.test.ts > stripPort > handles bracketed IPv6 without port

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000113s run time
No failure message available
src/hostname.test.ts > stripPort > handles empty input gracefully

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.00016s run time
No failure message available
src/hostname.test.ts > stripPort > leaves unbracketed IPv6 intact (cannot tell port from address)

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000141s run time
No failure message available
src/hostname.test.ts > stripPort > removes port suffix

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000437s run time
No failure message available
src/hostname.test.ts > stripPort > returns host unchanged when no port

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000154s run time
No failure message available
src/index.test.ts > DomainVerificationError > carries the domain-verification code and a 422 status

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000259s run time
No failure message available
src/index.test.ts > DomainVerificationError > is resolvable from its code

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000178s run time
No failure message available
src/index.test.ts > DuplicatePredicateRegistrationError > has the expected shape (no args)

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000306s run time
No failure message available
src/index.test.ts > DuplicatePredicateRegistrationError > is reachable through getErrorFromCode

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000167s run time
No failure message available
src/index.test.ts > DuplicatePredicateRegistrationError > templates predicate name into description

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000186s run time
No failure message available
src/index.test.ts > DuplicateWorkspaceSlugError > has the expected shape (no args)

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000288s run time
No failure message available
src/index.test.ts > DuplicateWorkspaceSlugError > is reachable through getErrorFromCode

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.00015s run time
No failure message available
src/index.test.ts > DuplicateWorkspaceSlugError > templates slug into description

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000183s run time
No failure message available
src/index.test.ts > EmptyTenantScopeError > has the expected shape

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000272s run time
No failure message available
src/index.test.ts > EmptyTenantScopeError > is reachable through getErrorFromCode

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000153s run time
No failure message available
src/index.test.ts > EmptyUploadFileError > has the expected shape

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000271s run time
No failure message available
src/index.test.ts > EmptyUploadFileError > is reachable through getErrorFromCode

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000183s run time
No failure message available
src/index.test.ts > Error.isTodo > matches a TodoError instance

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000296s run time
No failure message available
src/index.test.ts > Error.isTodo > matches any object carrying the GENERIC_TODO code

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000195s run time
No failure message available
src/index.test.ts > Error.isTodo > rejects a different error kind

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000278s run time
No failure message available
src/index.test.ts > Error.isTodo > rejects primitives, null, and undefined

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000272s run time
No failure message available
src/index.test.ts > MalformedFormPayloadError > captures Error cause as a message string

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000235s run time
No failure message available
src/index.test.ts > MalformedFormPayloadError > captures non-Error cause as String()

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000234s run time
No failure message available
src/index.test.ts > MalformedFormPayloadError > has the expected shape (no args)

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.00078s run time
No failure message available
src/index.test.ts > MalformedFormPayloadError > is reachable through getErrorFromCode

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.00016s run time
No failure message available
src/index.test.ts > MediaStorageUploadError > has the expected shape (no args)

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.0003s run time
No failure message available
src/index.test.ts > MediaStorageUploadError > is reachable through getErrorFromCode

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000153s run time
No failure message available
src/index.test.ts > MediaStorageUploadError > templates the byte-sink status into description

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000213s run time
No failure message available
src/index.test.ts > MissingConvexBridgeError > has the expected shape (no args)

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.00029s run time
No failure message available
src/index.test.ts > MissingConvexBridgeError > is reachable through getErrorFromCode

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000153s run time
No failure message available
src/index.test.ts > MissingConvexBridgeError > templates collection into description

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000179s run time
No failure message available
src/index.test.ts > MissingEnvironmentVariableError > accepts cause and statusCode positionally

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000202s run time
No failure message available
src/index.test.ts > MissingEnvironmentVariableError > appends hint when provided

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000215s run time
No failure message available
src/index.test.ts > MissingEnvironmentVariableError > has the expected shape (no args)

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000343s run time
No failure message available
src/index.test.ts > MissingEnvironmentVariableError > templates variable name into description

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000209s run time
No failure message available
src/index.test.ts > MissingListConfigError > has the expected shape (no args)

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000276s run time
No failure message available
src/index.test.ts > MissingListConfigError > is reachable through getErrorFromCode

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000178s run time
No failure message available
src/index.test.ts > MissingListConfigError > templates collection into description

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000179s run time
No failure message available
src/index.test.ts > MissingRequestContextError > has the expected shape

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000265s run time
No failure message available
src/index.test.ts > MissingRequestContextError > is reachable through getErrorFromCode

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000152s run time
No failure message available
src/index.test.ts > MissingRequiredFieldError > has the expected shape (no args)

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000299s run time
No failure message available
src/index.test.ts > MissingRequiredFieldError > is reachable through getErrorFromCode

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000178s run time
No failure message available
src/index.test.ts > MissingRequiredFieldError > templates field name into description

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000184s run time
No failure message available
src/index.test.ts > MissingSessionUserIdError > has the expected shape

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.00431s run time
No failure message available
src/index.test.ts > MissingSessionUserIdError > is reachable through getErrorFromCode

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000568s run time
No failure message available
src/index.test.ts > MissingTenantForScopedCollectionError > has the expected shape (no args)

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000288s run time
No failure message available
src/index.test.ts > MissingTenantForScopedCollectionError > is reachable through getErrorFromCode

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000192s run time
No failure message available
src/index.test.ts > MissingTenantForScopedCollectionError > templates collection into description

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.00018s run time
No failure message available
src/index.test.ts > MissingTypeDocOutputError > has the expected shape (no args)

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000362s run time
No failure message available
src/index.test.ts > MissingTypeDocOutputError > is reachable through getErrorFromCode

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000148s run time
No failure message available
src/index.test.ts > MissingTypeDocOutputError > templates subpath, rootDir, and buildCommand into description

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000223s run time
No failure message available
src/index.test.ts > MissingUploadFileError > has the expected shape

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000289s run time
No failure message available
src/index.test.ts > MissingUploadFileError > is reachable through getErrorFromCode

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000146s run time
No failure message available
src/index.test.ts > NoLocaleResolvableError > has the expected shape (no args)

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.00032s run time
No failure message available
src/index.test.ts > NoLocaleResolvableError > is reachable through getErrorFromCode

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.00019s run time
No failure message available
src/index.test.ts > NoLocaleResolvableError > templates url into description

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000185s run time
No failure message available
src/index.test.ts > ShopMisconfigurationError > has the expected shape (no args)

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000493s run time
No failure message available
src/index.test.ts > ShopMisconfigurationError > is reachable through getErrorFromCode

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000311s run time
No failure message available
src/index.test.ts > ShopMisconfigurationError > templates domain and missing fields into description

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.00028s run time
No failure message available
src/index.test.ts > UnknownCollectionSlugError > has the expected shape (no args)

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000317s run time
No failure message available
src/index.test.ts > UnknownCollectionSlugError > is reachable through getErrorFromCode

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000163s run time
No failure message available
src/index.test.ts > UnknownCollectionSlugError > templates slug into description

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000218s run time
No failure message available
src/index.test.ts > UnknownShopDomainError > accepts cause and statusCode positionally

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.00114s run time
No failure message available
src/index.test.ts > UnknownShopDomainError > has the expected shape (no args)

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000519s run time
No failure message available
src/index.test.ts > UnknownShopDomainError > is reachable through getErrorFromCode

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000146s run time
No failure message available
src/index.test.ts > UnknownShopDomainError > templates domain into description

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000307s run time
No failure message available
src/index.test.ts > UnknownShopIdError > has the expected shape (no args)

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000684s run time
No failure message available
src/index.test.ts > UnknownShopIdError > is reachable through getErrorFromCode

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000184s run time
No failure message available
src/index.test.ts > UnknownShopIdError > templates id into description

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000218s run time
No failure message available
src/index.test.ts > UnsupportedUploadMimeTypeError > has the expected shape (no args)

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000332s run time
No failure message available
src/index.test.ts > UnsupportedUploadMimeTypeError > is reachable through getErrorFromCode

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000164s run time
No failure message available
src/index.test.ts > UnsupportedUploadMimeTypeError > templates mime type into description

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000185s run time
No failure message available
src/index.test.ts > error code enums > ApiErrorKind: every member value equals its member name

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.00166s run time
No failure message available
src/index.test.ts > error code enums > GenericErrorKind: every member value equals its member name

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000668s run time
No failure message available
src/index.test.ts > error code enums > every code resolves to a class whose own code round-trips

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.00798s run time
No failure message available
src/index.test.ts > error code enums > getAllErrorCodes returns a unique, non-empty set of codes

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000301s run time
No failure message available
src/runtime-env.test.ts > isDevelopment > is false on a Vercel preview deploy

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.001s run time
No failure message available
src/runtime-env.test.ts > isDevelopment > is false on a production deploy

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000254s run time
No failure message available
src/runtime-env.test.ts > isDevelopment > is false under test

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000259s run time
No failure message available
src/runtime-env.test.ts > isDevelopment > is true on a Vercel development environment regardless of NODE_ENV

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000233s run time
No failure message available
src/runtime-env.test.ts > isDevelopment > is true when NODE_ENV is development

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000286s run time
No failure message available
src/runtime-env.test.ts > isProduction / isDevelopment > are mutually exclusive across every tier

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000634s run time
No failure message available
src/runtime-env.test.ts > isProduction > is false in local development

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000412s run time
No failure message available
src/runtime-env.test.ts > isProduction > is false on a Vercel preview deploy even though NODE_ENV is production

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000422s run time
No failure message available
src/runtime-env.test.ts > isProduction > is false under test

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000502s run time
No failure message available
src/runtime-env.test.ts > isProduction > is true on a production deploy

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.00343s run time
No failure message available
src/runtime-env.test.ts > isProduction > is true when NODE_ENV is production and VERCEL_ENV is unset (self-hosted / browser)

Flake rate in main: 50.00% (Passed 1 times, Failed 1 times)

Stack Traces | 0.000636s run time
No failure message available

To view more test analytics, go to the Test Analytics Dashboard
📋 Got 3 mins? Take this short survey to help us improve Test Analytics.

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

1 issue found across 3 files (changes from recent commits).

Tip: Review your code locally with the cubic CLI to iterate faster.

Re-trigger cubic

Comment thread .specs/2026-06-16-storefront-polish-loop/log.md
@codecov

codecov Bot commented Jun 17, 2026

Copy link
Copy Markdown

Bundle Report

Changes will decrease total bundle size by 608.03kB (-9.51%) ⬇️. This is within the configured threshold ✅

Detailed changes
Bundle name Size Change
@nordcom/commerce-marketing-common-@nordcom/commerce-marketing-common-esm (removed) -222 bytes (-100.0%) ⬇️
@nordcom/commerce-errors-@nordcom/commerce-errors-esm (removed) -26.61kB (-100.0%) ⬇️
@nordcom/commerce-shopify-html-@nordcom/commerce-shopify-html-esm (removed) -332.1kB (-100.0%) ⬇️
@nordcom/commerce-shopify-graphql-@nordcom/commerce-shopify-graphql-esm (removed) -39.86kB (-100.0%) ⬇️
@tagtree/payload-@tagtree/payload-esm (removed) -885 bytes (-100.0%) ⬇️
@nordcom/commerce-db-@nordcom/commerce-db-esm (removed) -126.03kB (-100.0%) ⬇️
@nordcom/commerce-test-mongo-@nordcom/commerce-test-mongo-esm (removed) -82.34kB (-100.0%) ⬇️

filiphsps added 10 commits June 17, 2026 03:22
…regrounds.

The Alert was the design system's outlier: a hard-coded bg-yellow-200 no tenant theme could recolor, and the error severity set a saturated --state-danger background with no foreground, leaving illegible dark --text on red. Promote warning to themeable --color-warning-* sources plus a --surface-warning/--text-warning-strong pair, map each severity to a surface + AA-clearing on-surface ink, and derive an ARIA role (alert for warning/error). Pin the new token pair to WCAG AA in the gate.
The vegan/sale/free-shipping overlay badges already read tokens, but the gift-card (bg-purple-600) and subscription (bg-blue-600) fills were hard-coded and no tenant theme could recolor them. Promote both to --badge-gift-card-bg/--badge-subscription-bg (defaults unchanged), collapse h-3 w-3 to size-3, and pin white-on-badge AA in the gate.
…tion through the shop cascade.

The collection/recommendation/search wrappers were near-identical delegations, but recommendation rendered the raw surface preset instead of productCardSurfaceForShop — so tenants could theme collection/search cards but not recommendation cards. Extract one generic SurfaceProductCard that resolves any surface through the full cascade; the three wrappers now delegate, pinning only their surface. Recommendation cards become tenant-customizable like the rest, and no-extensions shops stay byte-identical.
The info severity rendered on neutral --surface-1, indistinguishable from a plain card. Add a light-info surface (--surface-info) paired with the existing dark-blue info ink (--text-info-strong), completing the severity color system, and pin the pair to WCAG AA in the gate.
The decrease button disabled at the lower bound, but increase never disabled at the shop's maxQuantity — at the ceiling it silently no-opped (the clamp swallowed the click) with no visual or assistive-tech signal. Disable it at quantity >= maxQuantity, mirroring decrease-at-min.
filiphsps added 10 commits June 17, 2026 03:38
…the image.

The fallback initials emitted one letter per word, so a multi-word name
overflowed the fixed-size circle, and runs of whitespace produced empty
initials. Extracted a testable getInitials that takes the first + last word
initials (capped at two) and collapses whitespace. The wrapper className was
also spread onto the inner <Image>, so a caller's circle styling (e.g. the
blog author's margins) wrongly landed on the image — the image now always just
fills its circle.
… target.

The remove button was display:contents, erasing its box so keyboard users got
no hit area and no visible focus indicator; it now renders as a small padded
target with the shared focus-ring and a danger hover/focus color. The X icon
used h-4 with no matching width, so lucide's 24px default left it rendered
16 tall x 24 wide (distorted) — switched both the tag and X icons to size-4.
… summary.

The shipping, subtotal, discount, promo, and automatic-discount detail lines
each hand-rolled the same flex justify-between row + muted Label. Consolidated
them into one SummaryRow primitive that takes the label and renders the value
(a Price, status text, or null while loading) as children, so every summary
line stays visually consistent and future rows extend one component.
lucide icons render at a 24px default width/height, so a height-only class
(h-3 / h-4) left them constrained vertically but 24px wide — squashed glyphs.
Switched the export-cart download, info-bar mail/phone, geo-redirect check, and
cart-summary lock icons to canonical size-* (both axes). Also dropped no-op
text-lg/text-2xl/bare stroke classes and moved inline strokeWidth styles to the
lucide strokeWidth prop.
@vercel vercel Bot temporarily deployed to Preview – commerce-admin June 17, 2026 01:51 Inactive
…clamp.

The free-shipping PackageIcon carried no size class (only no-op text-sm), so it
rendered at lucide's 24px default inside the badge, and the vegan AttributeIcon
used height-only h-4 — both distorted next to the size-3 gift/subscription
icons. Unified all four badge icons to size-3. Also replaced VariantTitle's
inline -webkit-box line-clamp style with the canonical line-clamp-2 utility.
@filiphsps filiphsps marked this pull request as ready for review June 17, 2026 01:52
Repository owner deleted a comment from vercel Bot Jun 17, 2026
Repository owner deleted a comment from cubic-dev-ai Bot Jun 17, 2026

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

1 issue found across 2 files (changes from recent commits).

Tip: Review your code locally with the cubic CLI to iterate faster.

Re-trigger cubic

Comment thread apps/storefront/src/components/product-display/primitives/variant-title.tsx Outdated

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

0 issues found across 2 files (changes from recent commits).

Re-trigger cubic

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

0 issues found across 2 files (changes from recent commits).

Re-trigger cubic

The `block` utility class conflicted with `line-clamp-2` by overriding
the `display: -webkit-box` property required for multi-line truncation.
Removing `block` allows `line-clamp-2` to function correctly.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant