Skip to content

Add engagement-based Marketplace feedback prompt - #1702

Open
Stella Huang (StellaHuang95) wants to merge 2 commits into
microsoft:mainfrom
StellaHuang95:feature/feedback-prompt
Open

Add engagement-based Marketplace feedback prompt#1702
Stella Huang (StellaHuang95) wants to merge 2 commits into
microsoft:mainfrom
StellaHuang95:feature/feedback-prompt

Conversation

@StellaHuang95

Copy link
Copy Markdown
Contributor

Summary

Adds a one-time prompt inviting established Python Environments users to leave a review on the Visual Studio Marketplace.

The prompt uses neutral engagement and successful-workflow signals so it appears after repeated, intentional use rather than during initial setup or passive extension activation.

The notification contains one action: Review on Marketplace.

Prompt eligibility

The prompt is eligible only when all of the following conditions are met:

  • The extension was first observed at least 14 days ago.
  • The extension was active on at least 9 distinct days.
  • The user successfully selected or created an environment on at least 2 distinct days.
  • A successful selection or creation occurred during the current session.
  • A 60-second quiet period has elapsed since the latest successful action.
  • The VS Code window is focused.
  • VS Code is running as a desktop application.
  • telemetry.feedback.enabled is enabled.

Automatic discovery, initial environment resolution, cancelled pickers, and failed operations do not count as successful actions.

End-to-end flow

  1. Extension activation records the current UTC date as an active day.
  2. Explicit environment selection and creation commands return the environment when they complete successfully.
  3. A successful result records the current date as a successful-action day.
  4. Once the age, active-day, and successful-action-day requirements are met, a 60-second quiet timer starts.
  5. Eligibility and window state are checked again when the timer completes.
  6. The extension atomically claims a marker in its global storage before showing the notification.
  7. The user can select Review on Marketplace to open the extension's Ratings and Reviews page.
  8. Dismissing the notification performs no external action.

Once-only behavior

The prompt is claimed before it is displayed by creating an exclusive marker file in extension global storage.

This prevents multiple VS Code windows from displaying the prompt concurrently. The marker remains after either selecting the Marketplace action or dismissing the notification, so the prompt is not shown again.

If display conditions change while the marker is being claimed, such as the window losing focus, the claim is released so the prompt can be reconsidered later.

Data and privacy

The implementation stores only:

  • The first-observed timestamp.
  • Up to 30 distinct active dates.
  • Up to 30 distinct dates with successful selection or creation.

It does not store environment names, environment paths, project information, commands, or package information. No new telemetry is emitted by the prompt.

Scope

The implementation is intentionally limited to five files:

  • Localized prompt strings.
  • Extension command wiring.
  • Environment-selection success reporting.
  • The feedback prompt service.
  • Focused unit tests.

Terminal, task, package-management, discovery, and environment-manager internals are unchanged.

Testing

  • TypeScript compilation passes.
  • ESLint passes.
  • Production webpack packaging passes.
  • Feedback prompt unit tests: 7 passing.
  • Full unit suite: 1,755 passing and 8 pending.
  • The remaining 3 failures are existing unrelated Venv/Conda test failures.

Prompt established users after successful environment selection or creation across distinct days, with a once-only Marketplace action.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: f449e51d-c3f9-40cc-9e9d-1a24773e7712
Use concise, neutral language for the feedback notification.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: f449e51d-c3f9-40cc-9e9d-1a24773e7712
@StellaHuang95

Copy link
Copy Markdown
Contributor Author

The prompt looks like this. image

await handle.close();
return true;
} catch (error) {
if ((error as NodeJS.ErrnoException).code === 'EEXIST') {

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.

Maybe add a comment explaining how the PROMPT_CLAIM_FILE logic works, I am guessing it checks if it exists, and if it doesn't, returns false; and when releasing, it removes it?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

feature-request Request for new features or functionality

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants