Skip to content

feat: implement structured feedback modal and integrate feedback service#186

Open
ToxicBiohazard wants to merge 3 commits into
mainfrom
TECHOPS-247-hackster-discord-feedback
Open

feat: implement structured feedback modal and integrate feedback service#186
ToxicBiohazard wants to merge 3 commits into
mainfrom
TECHOPS-247-hackster-discord-feedback

Conversation

@ToxicBiohazard

Copy link
Copy Markdown
Member

Types of changes

What types of changes does your code introduce?
Put an x in the boxes that apply.

  • Bugfix (non-breaking change which fixes an issue).
  • New feature (non-breaking change which adds functionality).
  • Breaking change (fix or feature that would cause existing functionality not to work as expected).
  • Documentation Update (if none of the other choices applies).

Proposed changes

  • Added a new FeedbackModal to collect structured feedback from users.
  • Integrated feedback submission to a new feedback service API, with fallbacks to Slack if the service is not configured.
  • Introduced constants for feedback kinds and platforms to align with the feedback service schema.
  • Updated configuration to include feedback service URL and API key.
  • Added tests for feedback modal functionality and feedback service integration.

Checklist

Put an x in the boxes that apply.

  • I have read and followed the CONTRIBUTING.md
    doc.
  • Lint and unit tests pass locally with my changes.
  • I have added the necessary documentation (if appropriate).

- Added a new FeedbackModal to collect structured feedback from users.
- Integrated feedback submission to a new feedback service API, with fallbacks to Slack if the service is not configured.
- Introduced constants for feedback kinds and platforms to align with the feedback service schema.
- Updated configuration to include feedback service URL and API key.
- Added tests for feedback modal functionality and feedback service integration.
@codecov

codecov Bot commented May 27, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 84.84848% with 15 lines in your changes missing coverage. Please review.
✅ Project coverage is 66.28%. Comparing base (b9b84c3) to head (391426e).

Files with missing lines Patch % Lines
src/cmds/core/other.py 76.56% 15 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main     #186      +/-   ##
==========================================
+ Coverage   65.36%   66.28%   +0.92%     
==========================================
  Files          52       54       +2     
  Lines        3069     3153      +84     
==========================================
+ Hits         2006     2090      +84     
  Misses       1063     1063              

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@dimoschi dimoschi 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.

Solid and well-tested. One thing worth addressing, feedback is silently dropped if the service is configured but down. When is_configured() is true, ingest_discord_feedback swallows every exception (except Exception: logger.exception(...)) and returns None. The user already saw "your feedback has been recorded," but nothing was stored and there's no Slack fallback on failure, only when not configured. The PR title says "fallbacks to Slack if the service is not configured," so this is by design, but the failure mode means a Nexus/service outage = lost feedback with a success message. Consider falling back to Slack on a failed POST (return a bool from ingest_discord_feedback and branch on it), or at minimum don't claim success.

Comment thread src/helpers/feedback_service.py Outdated
Comment thread src/helpers/feedback_service.py Outdated
Return a bool from ingest_discord_feedback so the modal can route to
Slack on non-202 responses or request errors, avoiding silent feedback loss.

Co-authored-by: Cursor <cursoragent@cursor.com>
@ToxicBiohazard

Copy link
Copy Markdown
Member Author

@dimoschi Good catch on the silent drop — addressed in e6f8a47.

ingest_discord_feedback now returns bool (True on HTTP 202). The modal only short-circuits on success; if the service is configured but the POST fails, it falls through to the existing Slack path. Also dropped the redundant bool() wrapper in is_configured().

Kept the is_configured() guard inside ingest_discord_feedback so the helper stays safe when called directly (returns False instead of attempting a request with empty settings).

Resolve config.py conflict: keep feedback service settings and adopt
main's ROOT: Path | None typing.

Co-authored-by: Cursor <cursoragent@cursor.com>
@ToxicBiohazard ToxicBiohazard requested a review from dimoschi June 17, 2026 02:21
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