Issue trackers
Send signals to Linear or GitHub issues, keep their statuses in sync, and match commits to open signals.
All three panels live under Signal → Integrations. Only admins and owners see the page, see Roles. Triage itself is on Signal.
| Panel | Does |
|---|---|
| Linear | Accepting a signal opens a Linear issue |
| GitHub issues | Accepting a signal opens a GitHub issue |
| Commits | Reads pushes to your repositories and flags commits that look like fixes |
Connect Linear, GitHub issues, or both. Accept opens an issue in every tracker that is connected.
Linear
Connect
Press Connect Linear and authorize Median on Linear's screen. Finish within 15 minutes.
Pick a team
Back in Median, the panel lists the workspace's teams under "Choose a team for new issues." Click the team new issues should go into.
Once connected, the panel shows the team as KEY · Team name and the
workspace with who connected it.
| Control | Does |
|---|---|
| File issues automatically | On by default. Opens a Linear issue for every new signal from the agent, the feedback panel or a crash report, without waiting for Accept. Covers suggestions as well as bugs. |
| Disconnect | Revokes Median's access to the workspace. Existing issues stay in Linear. Status sync with them stops. |
The Median app creates the issues, not the person who connected it. Issues stay in Linear if that person leaves. Reconnecting the same workspace keeps the team you picked.
| Message | Fix |
|---|---|
| Linear connection was not authorized. Try connecting again. | You declined on Linear's screen. Press Connect Linear again. |
| The connection did not finish. Try again. | Press Connect Linear again. |
| This connection link has expired or was already used. Start again from Median. | More than 15 minutes passed. Start again from Connect Linear. |
| Median cannot see any teams in that workspace. | Connect a workspace with at least one team you can access. |
| Linear turned us away. Connect the workspace again. | Access was revoked in Linear. Disconnect, then connect again. |
| Linear is not answering right now. | Try again later. |
| Linear would not open that issue. | Try Accept again. |
| Linear integration is unavailable. Contact Median support. | Contact Median support. |
GitHub issues
GitHub issues go through the Median GitHub App. The same app syncs repositories into Knowledge and reads commits for the Commits panel. It needs write access to issues on the repository.
Install the app
If no GitHub account is connected yet, press Connect GitHub. Install the app on GitHub and give it access to the repository.
Pick a repository
The panel reads "Choose a repository for new issues." Search the list, then press Connect on the repository. The account menu beside the search switches GitHub accounts, and Connect another account in that menu adds one.
One repository per organization. To use another, press Disconnect and pick again.
| Control | Does |
|---|---|
| File issues automatically | On by default. Same rule as Linear. |
| Disconnect | Stops new issues and stops Median updating existing ones. Existing issues stay on GitHub. Closing or reopening one of them on GitHub still moves its signal while the Median GitHub App can see the repository. |
Each issue gets the label bug or suggestion.
| Message | Fix |
|---|---|
| No repositories available. Grant Median access on GitHub. | Give the app access to the repository in your GitHub settings. |
| GitHub would not open an issue. The Median app needs write access to issues on that repository. | Accept the app's permission to write issues in your GitHub settings. |
| That repository has issues turned off. | Turn on Issues in the repository's settings. |
| GitHub could not find that repository. Check the app can still see it. | Give the app access to the repository again. |
| GitHub would not open that issue. | Try Accept again. |
Where errors show
| When | Where |
|---|---|
| Accept on a card | Under Approvals on the Signal page. The signal still moves to Planned. |
| Accept on a signal's page | In the sidebar of that page |
| Bulk Accept | "N could not reach a tracker." in the bulk bar |
| Automatic filing, issue updates, status sync | No message on the signal. A failed Issue sync entry in Logs. |
Commits
The Commits panel reads pushes to your repositories and flags commits that look like they fix an open signal. It needs the Median GitHub App on those repositories.
Pick a repository
Under Add a repository, press Choose on a repository. The form is open while no repository is watched. After that, press Add repository.
Pick a branch
Branch starts on the repository's default branch. Leave it to follow whatever the default branch is, or pick another one.
Confirm
Press Watch repository. The repository appears with "Watching the default branch" or "Watching" and the branch name.
The trash button on a row stops watching that repository.
| Limit | Value |
|---|---|
| Repositories | 10 per organization. The 11th fails with "Median watches 10 repositories at most." |
| Same repository twice | Refused with "That repository is already watched." |
| Branch | Only pushes to the watched branch are read |
| Commits per push | The last 20. Only the first line of each message is read. |
| Signals compared | Up to 60 signals that are not Done or Declined, bugs and suggestions. Suggestions are read before bugs. |
Matching runs on AI and uses credits, see Plans. A commit is claimed once per signal, even if GitHub delivers the push twice.
Confirm or dismiss a match
A match shows in three places.
- A commit glyph with a count on the signal's row.
- The Commits section on the signal's page, with the message, short SHA, author, the reason it looks like a fix, and a link to the commit.
- The Fixes to confirm card on the Dashboard.
| Button | Does |
|---|---|
| Confirm fix | Moves the signal to Done. Reporters get their message. |
| Dismiss match | Removes the claim. The status does not change. |
Close signals automatically
Each watched repository has a Close signals automatically switch. It is off by default. When on, a matching commit moves the signal to Done at once and its reporters get their message, with nobody confirming. It applies to bugs and suggestions alike. The commit stays on the signal's page as the record of why it closed.
What an issue contains
| Part | Content |
|---|---|
| Title | The signal's title |
| Body | The signal's write-up |
| Reports (N) | The 5 newest reports. Each has the name, the time in UTC, the quote, screenshots, page, viewport, app state, attached values, the last 5 browser log entries, and server check results. More reports are counted as "And N more reports, in Median." |
| Footer | The line Priority: medium · Reported through Median. and an Open it in Median link |
| Linear priority | Urgent, High, Medium or Low, matching the signal |
| GitHub label | bug or suggestion |
Median rewrites the title and body whenever the signal's content changes. That covers an edit, a new report, a merge and a priority change. Edits made to the issue body in the tracker are replaced on the next update. Linear also gets the new priority.
Status sync
Median updates linked issues while their tracker is connected. Linear changes reach Median while Linear is connected. GitHub changes reach Median while the Median GitHub App can see the repository.
| Signal moves to | Linear issue | GitHub issue |
|---|---|---|
| Open, Planned | An unstarted state, such as Todo | Reopened |
| In progress, In review | A started state | Open |
| Done | A completed state | Closed as completed |
| Declined | A canceled state | Closed as not planned |
| Linear issue moves to | Signal |
|---|---|
| A completed state | Done |
| A canceled state | Declined |
| A started state | In progress. A signal already In review stays there. |
| Backlog, triage or unstarted | No change |
| GitHub issue is | Signal |
|---|---|
| Closed as not planned | Declined |
| Closed for any other reason | Done |
| Reopened | Open, back in Approvals |
A signal that reaches Done from a tracker messages its reporters like any other move to Done, see Telling reporters.