Skip to content

[PF-2031] Cut picasso-provider → picasso-notification source-import cycle - #4964

Merged
dulishkovych merged 3 commits into
masterfrom
pf-2031-cut-provider-notification-cycle
May 21, 2026
Merged

[PF-2031] Cut picasso-provider → picasso-notification source-import cycle#4964
dulishkovych merged 3 commits into
masterfrom
pf-2031-cut-provider-notification-cycle

Conversation

@dulishkovych

@dulishkovych dulishkovych commented May 15, 2026

Copy link
Copy Markdown
Contributor

PF-2031

Summary

  • Removes the only source-import edge in the provider → notification → tailwind-merge → test-utils → provider cycle that PF-2031 publish forensics flagged
  • Moves the NotificationsProvider maxNotifications test to cypress/component/NotificationsProvider.spec.tsx (integration test, where it always belonged)
  • Drops the PicassoLight with notifications and favicon storybook example — its content is already covered by @toptal/picasso-notification's use-notification/story/MaxNotifications.example.tsx
  • No public API change — test/story-only diff, no changeset needed

Why

Two files in packages/picasso-provider/src/ imported useNotifications from @toptal/picasso-notification even though picasso-notification is not declared as a dep of picasso-provider. This created the only source-import edge in the 5-edge cycle nx flagged during PF-2031 alpha publishing. The other 4 edges are legitimate package.json deps.

Even though nx release publish hardcodes nxIgnoreCycles: true and the cycle was therefore non-fatal, removing the structural source-import edge is the right cleanup: it shrinks the cycle topology and makes future debugging easier.

Verification

pnpm nx release publish --dry-run on this branch:

NX   The task graph has a circular dependency
@toptal/picasso-application-update-notification:nx-release-publish
  → @toptal/picasso-test-utils
  → @toptal/picasso-provider
  → @toptal/picasso
  → @toptal/picasso-provider

NX   Successfully ran target nx-release-publish for 90 projects

The flagged cycle (now provider ↔ @toptal/picasso — pre-existing 2-cycle from umbrella story imports, unrelated to PF-2031) is non-fatal. All 90 projects reach the publish step. Exit 0.

Test plan

  • CI passes (lint + unit + cypress + build)
  • cypress/component/NotificationsProvider.spec.tsx runs in CI and the two maxNotifications cases pass (default cap of 5, custom cap of 2)
  • Picasso provider's storybook section no longer lists PicassoLight with notifications and favicon (intentional)
  • Alpha publish on this branch succeeds without the cycle path that previously failed

…ycle

Move the NotificationsProvider maxNotifications integration test out of
provider's src to a Cypress component spec, and drop the
LightWithNotificationsAndFavicon storybook example (the equivalent
demonstration already lives in picasso-notification's
use-notification/story/MaxNotifications.example.tsx).

Both files imported useNotifications from @toptal/picasso-notification
even though notification is not declared as a dep of provider, which
created the only source-import edge in the provider → notification →
tailwind-merge → test-utils → provider cycle that PF-2031 publish
forensics flagged.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@dulishkovych
dulishkovych requested a review from a team as a code owner May 15, 2026 13:02
@changeset-bot

changeset-bot Bot commented May 15, 2026

Copy link
Copy Markdown

⚠️ No Changeset found

Latest commit: fa84928

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@dulishkovych dulishkovych self-assigned this May 15, 2026
@github-actions

Copy link
Copy Markdown
Contributor

📖 Storybook Preview

🚀 Your Storybook preview is ready: View Storybook

📍 Preview URL: https://toptal.github.io/picasso/prs/4964/

This preview is updated automatically when you push changes to this PR.

github-actions Bot added a commit that referenced this pull request May 15, 2026
@github-actions

Copy link
Copy Markdown
Contributor

🎉 Alpha packages are ready!

PR: #4964
Triggered by: @dulishkovych
Workflow run: 26019469345

Installation commands:
pnpm add @toptal/picasso-tailwind@4.0.1-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-shared@15.0.1-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-modal-context@1.0.2-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/base-tailwind@2.0.1-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-typography@5.0.1-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-fade@1.0.10-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-paper@4.0.6-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-backdrop@2.0.1-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-icons@1.15.3-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-modal@4.0.1-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-utils@4.0.1-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-tailwind-merge@2.0.5-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-slide@1.0.5-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-tooltip@2.0.6-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-loader@3.0.6-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-link@4.0.1-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-container@3.1.5-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-popper@2.0.3-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-typography-overflow@4.0.7-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-input-adornment@4.0.1-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-grid@5.0.20-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-list@5.0.22-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-outlined-input@5.0.1-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-logo@2.0.19-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-collapse@3.0.5-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-input@5.0.1-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-tag@5.0.1-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-image@3.0.6-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-timepicker@5.0.1-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-rating@3.0.21-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-avatar@7.0.1-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-alert@4.0.1-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-form-layout@1.0.4-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-menu@4.0.1-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-user-badge@5.1.23-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-form@7.0.1-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-dropdown@5.0.1-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-avatar-upload@4.0.1-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-form-label@1.0.5-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-number-input@5.0.1-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-select@5.0.1-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-radio@5.0.23-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-checkbox@5.0.24-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-autocomplete@6.0.1-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-badge@4.0.1-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-button@5.0.1-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-tagselector@4.0.1-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-switch@5.0.1-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-notification@5.0.1-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-file-input@5.0.1-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-calendar@5.0.1-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-accordion@4.0.1-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-dropzone@5.0.35-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-date-picker@4.0.1-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-skeleton-loader@1.0.70-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-password-input@5.1.14-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-prompt-modal@3.0.1-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-section@6.0.1-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-page@6.0.1-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-tree-view@3.0.46-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-carousel@4.0.34-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-pagination@5.0.1-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-date-select@2.0.1-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-tabs@7.0.2-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-note@4.0.8-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-quote@2.0.10-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-empty-state@2.0.24-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-slider@5.0.1-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-breadcrumbs@3.0.21-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-amount@1.0.13-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-environment-banner@3.0.1-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-overview-block@5.0.1-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-timeline@5.0.9-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-step@4.0.20-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-account-select@4.0.1-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-show-more@3.0.1-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-helpbox@6.0.1-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-table@4.0.1-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-drawer@3.0.46-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso@54.1.6-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-charts@59.0.7-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-provider@5.0.3-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-pictograms@5.5.2-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-test-utils@2.0.1-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-application-update-notification@2.0.45-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @topkit/analytics-charts@56.0.11-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-forms@74.0.1-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-query-builder@8.0.36-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-rich-text-editor@18.0.1-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0
pnpm add @toptal/picasso-codemod@6.0.1-alpha-pf-2031-cut-provider-notification-cycle-731ec5a65.0

These alpha packages were built from the latest commit in this PR.

dulishkovych and others added 2 commits May 18, 2026 12:11
… spec

Switch the two count-assertion selectors in
cypress/component/NotificationsProvider.spec.tsx from
`cy.get(\`[data-testid=...\`])` to `cy.getByTestId(...)`, matching the
selector style already used a couple of lines above for the trigger
button and elsewhere in cypress/component/ (e.g. NotificationStream.spec.tsx).

`getByTestId` is a thin alias for `cy.get('[data-testid=X]')` defined in
cypress/support/commands.jsx, so behavior is identical.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This PR only deletes a Jest test and a storybook example and adds a
Cypress component spec. None of those files ship in
@toptal/picasso-provider's dist-package, so the patch-level changeset
is noise rather than a published version bump.

Removes .changeset/cut-provider-notification-cycle.md.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

📖 Storybook Preview

🚀 Your Storybook preview is ready: View Storybook

📍 Preview URL: https://toptal.github.io/picasso/prs/4964/

This preview is updated automatically when you push changes to this PR.

github-actions Bot added a commit that referenced this pull request May 18, 2026
@github-actions

Copy link
Copy Markdown
Contributor

📖 Storybook Preview

🚀 Your Storybook preview is ready: View Storybook

📍 Preview URL: https://toptal.github.io/picasso/prs/4964/

This preview is updated automatically when you push changes to this PR.

github-actions Bot added a commit that referenced this pull request May 18, 2026
@dulishkovych
dulishkovych merged commit ae070fe into master May 21, 2026
14 checks passed
@dulishkovych
dulishkovych deleted the pf-2031-cut-provider-notification-cycle branch May 21, 2026 11:04
@github-actions

Copy link
Copy Markdown
Contributor

🗑️ Storybook preview cleaned up

The preview deployment has been automatically removed since this PR was closed.

github-actions Bot added a commit that referenced this pull request May 21, 2026
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.

2 participants