Skip to content

feat(issues): report an issue with a screenshot, and an Issues panel that opens a prefilled GitHub issue - #168

Merged
LESdylan merged 11 commits into
developfrom
feat/ai-issues-ui
Oct 25, 2026
Merged

LESdylan merged 11 commits into
developfrom
feat/ai-issues-ui

Conversation

@LESdylan

Copy link
Copy Markdown
Member

Users can report a problem from inside osionos (Help › Report an issue, the Issues rail item, or the assistant), with a screenshot. Admins triage the reports and open a prefilled GitHub issue from them.

Why

User request (2026-10-25): an Issues component in the Workbench rail, a "Report an issue" action with screenshots, a prefilled GitHub issue that a person submits, and captured frontend errors for developers.

Depends on:

What changed

  • ReportIssueDialog:
    • title (≤120) and description (≤4000);
    • a screenshot from Capture screen (getDisplayMedia, only on click, and the tracks stop on every path), a picked file or a paste; PNG, JPEG or WebP only, ≤5 MB, uploaded through the existing page-media path;
    • opt-in "Attach recent errors";
    • text is redacted before sending (JWTs, bearer tokens, secret query values, emails), with a preview when redaction changed something.
  • IssuesPanel (Workbench rail):
    • lists your reports, then a report and its details;
    • admins (useIsAdmin) also get the All scope, status triage, "Open GitHub issue" and a link field that only accepts github.com/<owner>/<repo>/issues/<n>.
  • buildGithubIssueUrl (C222): the issue carries the report's text, route kind, app version, browser and errors, and never the screenshot URL, the workspace or the reporter. It stays ≤8000 characters by dropping errors first, then cutting the description.
  • errorRing (C223): the last 20 error / unhandledrejection messages, redacted, cut to 500 characters. It runs only for a platform moderator or above, or with developer mode on.
  • Entry points: Help › Report an issue…, the command palette, and the assistant's open_issue_report view action.
  • issuesApi goes through the shared api client, so session refresh and revocation apply.

Before / after

Offline seed workspace, Vite dev server, 1280×820. Develop has no Issues rail item and no Report entry in Help (the rail goes Problems → Conversations).

Before (develop) After: Issues panel and the report dialog, redaction preview shown
before after

The browser check found two layout defects, fixed in cc4af9748:

  • a duplicated panel title;
  • a list/detail split squeezed to about 120px per column in the sidebar.

Evidence

  • typecheck, lint and test-canvas are green on cc4af9748: 4010/4010.
  • tests/canvas/issues-*.test.ts holds 16 tests. Revert proofs:
    • the screenshot path put back into the GitHub body → the C222 test fails;
    • the All tab shown to everyone → "a non-admin panel has no All tab" fails;
    • the ring raised to 25 → "keeps the last 20 of 25" fails.

Trade-offs

The screenshot reaches staff through the existing media path, so a report holds a capability path rather than bytes. It is never put in the public GitHub issue; the issue says a screenshot exists in osionos.

…ervice always accepts, and the tests

The first commit added the account and view in four copies and shipped no tests. The view now sends the bare path (a query string can hold a reset token), no non-uuid page id (the service would refuse the whole run), and open_panel expands a hidden sidebar.
…and a screen share that always stops

issuesApi re-implemented fetch and so skipped the client's session refresh
and revocation report; it now goes through api.get/post/patch. The row type
is the table's snake_case row (the camelCase twins were never sent), so the
GitHub URL builder and the panel read fields directly. A capture whose play()
or toBlob() failed left the screen shared; the tracks stop in finally. The
guessed alias exports and the lint suppression are gone.

The GitHub URL test now builds from a full row with a workspace, a reporter
and a screenshot path, and checks none of them reaches the issue; the drop
order (errors first, then the description) has its own two tests.
…column, and a dialog heading

Checked in the browser: the panel repeated the sidebar's "Issues" title, and a
side-by-side list and detail left about 120px to each in the sidebar. The
panel now shows the list, or the picked report with a way back. The dialog
gets the visible heading other dialogs carry, and the redaction preview shows
only when redaction changed the text.
@coderabbitai

coderabbitai Bot commented Oct 25, 2026 •

Copy link
Copy Markdown
Contributor

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 491e8837-9e99-4623-a48a-19179868de29

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Comment @coderabbitai help to get the list of available commands.

…a copy per file

SonarCloud failed #166 at 3.7 % duplicated new lines (gate 3 %): the same
11-line shim sat in both AI view tests.
@sonarqubecloud

Copy link
Copy Markdown

@LESdylan
LESdylan merged commit 94ba328 into develop Oct 25, 2026
30 checks passed
@SMOSTAFAH1
SMOSTAFAH1 deleted the feat/ai-issues-ui branch October 25, 2026 22:36
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