Skip to content

🎨 Palette: Add dashboard link to success message#414

Merged
abhimehro merged 5 commits intomainfrom
palette/dashboard-link-5279312103953067257
Feb 22, 2026
Merged

🎨 Palette: Add dashboard link to success message#414
abhimehro merged 5 commits intomainfrom
palette/dashboard-link-5279312103953067257

Conversation

@abhimehro
Copy link
Owner

💡 What: Added a clickable link to the Control D dashboard in the success message.
🎯 Why: Allows users to immediately verify their sync results without navigating manually.
📸 Before/After:


PR created automatically by Jules for task 5279312103953067257 started by @abhimehro

Co-authored-by: abhimehro <84992105+abhimehro@users.noreply.github.com>
@google-labs-jules
Copy link

👋 Jules, reporting for duty! I'm here to lend a hand with this pull request.

When you start a review, I'll add a 👀 emoji to each comment to let you know I've read it. I'll focus on feedback directed at me and will do my best to stay out of conversations between you and other bots or reviewers to keep the noise down.

I'll push a commit with your requested changes shortly after. Please note there might be a delay between these steps, but rest assured I'm on the job!

For more direct control, you can switch me to Reactive Mode. When this mode is on, I will only act on comments where you specifically mention me with @jules. You can find this option in the Pull Request section of your global Jules UI settings. You can always switch back!

New to Jules? Learn more at jules.google/docs.


For security, I will only act on instructions from the user who triggered this task.

Copilot AI review requested due to automatic review settings February 21, 2026 22:41
@trunk-io
Copy link

trunk-io bot commented Feb 21, 2026

😎 Merged manually by @abhimehro - details.

@github-actions
Copy link

👋 Development Partner is reviewing this PR. Will provide feedback shortly.

@gemini-code-assist
Copy link

Summary of Changes

Hello @abhimehro, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request enhances the user experience by integrating a direct link to the Control D dashboard within the success message displayed after a successful sync operation. This allows users to quickly access and confirm their changes, streamlining the post-sync workflow. The implementation also ensures accessibility by using distinct styling for the link.

Highlights

  • Dashboard Link: A clickable link to the Control D dashboard is now included in the success message displayed after a successful sync.
  • User Experience: Users can immediately verify their sync results by clicking the provided link, eliminating the need for manual navigation.
  • Accessibility: The dashboard link is styled with a high-contrast cyan color and an underline to ensure clear visibility and affordance.
Changelog
  • main.py
    • Created a new function print_success_message to encapsulate the logic for displaying success messages and generating dashboard links.
    • Refactored the main application logic to call print_success_message after a successful sync, passing the relevant profile IDs.
  • tests/test_ux.py
    • Added test_print_success_message_single_profile to verify the correct dashboard link is generated for a single profile.
    • Added test_print_success_message_multiple_profiles to ensure a general dashboard link is provided when multiple profiles are involved.
    • Added test_print_success_message_no_colors to confirm that no output is produced when color support is disabled.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

# Verify content
# Note: The output is ANSI colored, so exact string matching might fail if color codes are interspersed
# But "View your changes" should be there
assert "View your changes" in combined_output

Check notice

Code scanning / Bandit

Use of assert detected. The enclosed code will be removed when compiling to optimised byte code. Note test

Use of assert detected. The enclosed code will be removed when compiling to optimised byte code.
# Note: The output is ANSI colored, so exact string matching might fail if color codes are interspersed
# But "View your changes" should be there
assert "View your changes" in combined_output
assert "https://controld.com/dashboard/profiles/123456/filters" in combined_output

Check notice

Code scanning / Bandit

Use of assert detected. The enclosed code will be removed when compiling to optimised byte code. Note test

Use of assert detected. The enclosed code will be removed when compiling to optimised byte code.
assert "View your changes" in combined_output
assert "https://controld.com/dashboard/profiles/123456/filters" in combined_output
# Check for color codes presence (cyan or underline)
assert "\033[96m" in combined_output or "\033[4m" in combined_output

Check notice

Code scanning / Bandit

Use of assert detected. The enclosed code will be removed when compiling to optimised byte code. Note test

Use of assert detected. The enclosed code will be removed when compiling to optimised byte code.
writes = [args[0] for args, _ in mock_stdout.write.call_args_list]
combined_output = "".join(writes)

assert "View your changes" in combined_output

Check notice

Code scanning / Bandit

Use of assert detected. The enclosed code will be removed when compiling to optimised byte code. Note test

Use of assert detected. The enclosed code will be removed when compiling to optimised byte code.
combined_output = "".join(writes)

assert "View your changes" in combined_output
assert "https://controld.com/dashboard/profiles" in combined_output

Check notice

Code scanning / Bandit

Use of assert detected. The enclosed code will be removed when compiling to optimised byte code. Note test

Use of assert detected. The enclosed code will be removed when compiling to optimised byte code.

assert "View your changes" in combined_output
assert "https://controld.com/dashboard/profiles" in combined_output
assert "/123/filters" not in combined_output # Should not link to specific profile

Check notice

Code scanning / Bandit

Use of assert detected. The enclosed code will be removed when compiling to optimised byte code. Note test

Use of assert detected. The enclosed code will be removed when compiling to optimised byte code.
Copy link

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

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

Code Review

This pull request adds a helpful link to the Control D dashboard in the success message, improving the user experience. The implementation is clean and includes good test coverage. I've added a few suggestions to improve maintainability by reducing code duplication and moving a list to a module-level constant. I also suggested a small improvement to one of the new tests to make it more robust.

Comment on lines +2404 to +2410
success_msgs = [
"✨ All synced!",
"🚀 Ready for liftoff!",
"🎨 Beautifully done!",
"💎 Smooth operation!",
"🌈 Perfect harmony!",
]

Choose a reason for hiding this comment

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

medium

The success_msgs list is defined inside the print_success_message function. This means it's recreated every time the function is called. For better performance and to follow the convention of defining constants at the module level, consider moving this list outside the function, for example, as a module-level constant like _SUCCESS_MESSAGES.

combined_output = "".join(writes)

# Verify content
# Note: The output is ANSI colored, so exact string matching might fail if color codes are interspersed

Check warning

Code scanning / Pylint (reported by Codacy)

Line too long (107/100) Warning test

Line too long (107/100)
combined_output = "".join(writes)

# Verify content
# Note: The output is ANSI colored, so exact string matching might fail if color codes are interspersed

Check warning

Code scanning / Pylintpython3 (reported by Codacy)

Line too long (107/100) Warning test

Line too long (107/100)
# Verify content
# Note: The output is ANSI colored, so exact string matching might fail if color codes are interspersed
# But "View your changes" should be there
assert "View your changes" in combined_output

Check notice

Code scanning / Bandit (reported by Codacy)

Use of assert detected. The enclosed code will be removed when compiling to optimised byte code. Note test

Use of assert detected. The enclosed code will be removed when compiling to optimised byte code.
# Note: The output is ANSI colored, so exact string matching might fail if color codes are interspersed
# But "View your changes" should be there
assert "View your changes" in combined_output
assert "https://controld.com/dashboard/profiles/123456/filters" in combined_output

Check notice

Code scanning / Bandit (reported by Codacy)

Use of assert detected. The enclosed code will be removed when compiling to optimised byte code. Note test

Use of assert detected. The enclosed code will be removed when compiling to optimised byte code.
assert "View your changes" in combined_output
assert "https://controld.com/dashboard/profiles/123456/filters" in combined_output
# Check for color codes presence (cyan or underline)
assert "\033[96m" in combined_output or "\033[4m" in combined_output

Check notice

Code scanning / Bandit (reported by Codacy)

Use of assert detected. The enclosed code will be removed when compiling to optimised byte code. Note test

Use of assert detected. The enclosed code will be removed when compiling to optimised byte code.
writes = [args[0] for args, _ in mock_stdout.write.call_args_list]
combined_output = "".join(writes)

assert "View your changes" in combined_output

Check notice

Code scanning / Bandit (reported by Codacy)

Use of assert detected. The enclosed code will be removed when compiling to optimised byte code. Note test

Use of assert detected. The enclosed code will be removed when compiling to optimised byte code.
combined_output = "".join(writes)

assert "View your changes" in combined_output
assert "https://controld.com/dashboard/profiles" in combined_output

Check notice

Code scanning / Bandit (reported by Codacy)

Use of assert detected. The enclosed code will be removed when compiling to optimised byte code. Note test

Use of assert detected. The enclosed code will be removed when compiling to optimised byte code.

assert "View your changes" in combined_output
assert "https://controld.com/dashboard/profiles" in combined_output
assert "/123/filters" not in combined_output # Should not link to specific profile

Check notice

Code scanning / Bandit (reported by Codacy)

Use of assert detected. The enclosed code will be removed when compiling to optimised byte code. Note test

Use of assert detected. The enclosed code will be removed when compiling to optimised byte code.
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Adds a richer “success delight” output by appending a Control D dashboard URL to the post-sync success message so users can immediately navigate to verify changes.

Changes:

  • Introduces print_success_message(profile_ids) to print a random success line plus a dashboard link (single-profile deep link vs multi-profile dashboard link).
  • Updates the main success path to call the new helper instead of printing the success text inline.
  • Adds UX tests validating the success message/link behavior for single/multiple profiles and when colors are disabled.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.

File Description
main.py Adds print_success_message() and wires it into the “all success” non-dry-run path.
tests/test_ux.py Adds tests asserting the success output contains the expected dashboard links and respects USE_COLORS.

Comment on lines +2399 to +2410
def print_success_message(profile_ids: List[str]) -> None:
"""Prints a random success message and a link to the Control D dashboard."""
if not USE_COLORS:
return

success_msgs = [
"✨ All synced!",
"🚀 Ready for liftoff!",
"🎨 Beautifully done!",
"💎 Smooth operation!",
"🌈 Perfect harmony!",
]
Copy link

Copilot AI Feb 21, 2026

Choose a reason for hiding this comment

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

The docstring suggests this function always prints a success message and dashboard link, but it returns early when USE_COLORS is false and it can also skip printing the link (e.g., empty profile_ids or the dry-run-placeholder sentinel). Please update the docstring to reflect the actual behavior, or adjust the implementation if the intent is to always show a link regardless of color mode.

Copilot uses AI. Check for mistakes.
abhimehro and others added 2 commits February 22, 2026 03:41
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
@github-actions
Copy link

👋 Development Partner is reviewing this PR. Will provide feedback shortly.

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
@github-actions
Copy link

👋 Development Partner is reviewing this PR. Will provide feedback shortly.

1 similar comment
@github-actions
Copy link

👋 Development Partner is reviewing this PR. Will provide feedback shortly.

"🌈 Perfect harmony!",
]
print(f"\n{Colors.GREEN}{random.choice(success_msgs)}{Colors.ENDC}")

Check warning

Code scanning / Prospector (reported by Codacy)

multiple statements on one line (def) (E704) Warning

multiple statements on one line (def) (E704)
"🌈 Perfect harmony!",
]
print(f"\n{Colors.GREEN}{random.choice(success_msgs)}{Colors.ENDC}")

Check warning

Code scanning / Prospector (reported by Codacy)

ambiguous variable name 'l' (E741) Warning

ambiguous variable name 'l' (E741)
main.py Outdated
]
print(f"\n{Colors.GREEN}{random.choice(success_msgs)}{Colors.ENDC}")

# Construct dashboard URL once, then print it in a single place

Check warning

Code scanning / Prospector (reported by Codacy)

line too long (268 > 159 characters) (E501) Warning

line too long (268 > 159 characters) (E501)
main.py Outdated
]
print(f"\n{Colors.GREEN}{random.choice(success_msgs)}{Colors.ENDC}")

# Construct dashboard URL once, then print it in a single place

Check warning

Code scanning / Prospector (reported by Codacy)

multiple statements on one line (def) (E704) Warning

multiple statements on one line (def) (E704)
if profile_ids and len(profile_ids) == 1 and profile_ids[0] != "dry-run-placeholder":
dashboard_url = f"https://controld.com/dashboard/profiles/{profile_ids[0]}/filters"
elif profile_ids and len(profile_ids) > 1:
dashboard_url = "https://controld.com/dashboard/profiles"

Check warning

Code scanning / Prospector (reported by Codacy)

line too long (245 > 159 characters) (E501) Warning

line too long (245 > 159 characters) (E501)
Co-authored-by: abhimehro <84992105+abhimehro@users.noreply.github.com>
@github-actions
Copy link

👋 Development Partner is reviewing this PR. Will provide feedback shortly.

@abhimehro abhimehro merged commit 056dd12 into main Feb 22, 2026
20 of 21 checks passed
@abhimehro abhimehro deleted the palette/dashboard-link-5279312103953067257 branch February 22, 2026 10:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants