Skip to content

Issues in Chromeria: an Issues view with computed status, linked to threads #25

Description

@lukemaj

Outcome

The user sees every GitHub Issue across their T3 projects in Chromeria, with a
status computed from real signals, and moves between Issues and the threads
working on them in one click.

Problem Statement

All work is tracked in GitHub Issues and done by agents, but Chromeria only
shows PRs. To see what is being worked on, reviewed, blocked or waiting, the
user leaves the app and reconstructs status by hand from branches, PRs,
review prose and threads. Nothing shows which thread owns which Issue.

Solution

The Pull Requests page gains a PRs/Issues toggle, and the sidebar gains an
Issues icon that opens the page with Issues selected. Issues are grouped by a
computed status or by parent tree, and filtered and sorted like PRs. A side
panel shows an Issue and lets the user comment and close/reopen it. Threads
show their linked Issues the way they show PRs, and an Issue can start a new
linked thread.

Acceptance criteria

  • Sidebar Issues icon and the page toggle both open the Issues list;
    the command palette searches Issues on that page and finds threads by
    linked Issue.
  • Issues from all repositories of the user's T3 projects are listed,
    across connected environments, GitHub only; other forges show a
    not-supported state.
  • Each Issue shows exactly one status from the status table below,
    derived without manual input and without writing to GitHub.
  • Group by status (Done and Not planned collapsed) or by parent tree,
    including cross-repository children, which are marked when outside the
    user's projects.
  • Filters: Status, Repository/Project, Parent, Labels, Milestone, Linked.
    Sort: updated, created, number.
  • Side panel: body, comments, add comment, close and reopen, open on
    GitHub, linked threads and PRs.
  • A thread shows its linked Issues next to its PRs in the right panel,
    and each link can be removed.
  • Links are created by: manual link, a link_issue MCP tool, task branch
    name (<type>/<number>-<slug>), and closing references (Closes #N)
    of the thread's linked PRs.
  • "Start thread" on an Issue creates a thread in the matching project
    with its usual worktree mode, linked immediately, with the composer
    prefilled (title, URL, body) and not sent. Disabled with a reason when
    no project matches.
  • Upstream tables, migrations and events are unchanged; fork state lives
    in one fork-owned table.

Status table (first match wins)

Status Rule
Done Closed as completed
Not planned Closed as not planned or duplicate
In review Review mark pending on the PR head
In progress Branch or PR exists and a linked thread is working now
Waiting for merge Review mark success on the PR head
Changes requested Review mark failure on the PR head
Waiting for review PR open, no review mark
Paused Branch exists, no PR, nobody working
Blocked Open native blocker, no branch or PR
Discussion Thread linked, no branch or PR
To do Nothing linked

The review mark is the commit status review/independent on the PR's head
commit, counted only when posted by a trusted account (default: the account
behind the repository's GitHub connection). Until AgentsMD posts it
(toolboxmd/agentsmd#133), the three review statuses do not appear.

User stories

  1. As the user, I want to see which Issues agents are working on right now,
    so that I know where the fleet's effort is going.
  2. As the user, I want to see which Issues wait for review, merge or fixes,
    so that I can unblock them.
  3. As the user, I want to start a thread from an Issue, so that work begins
    already linked.
  4. As the user, I want to open an Issue from its thread and a thread from its
    Issue, so that I never search for either.
  5. As an agent, I want to link my thread to an Issue through MCP, so that the
    user sees my work in the Issues view.

Implementation decisions

  • One page and one route shared with PRs; the Issues mode reuses the PR
    page's search, sort, filter and grouping, hiding PR-only filters.
  • The list is GitHub search (is:issue) plus one GraphQL read per page for
    parent, sub-Issues, blockers and closing PRs, within the existing GitHub
    GraphQL budget and rate-limit handling.
  • Only links that cannot be derived are stored, in fork_thread_issue_links,
    created by the fork in the existing database outside upstream migrations
    and outside the event log. Branch and closing-reference links are derived
    when read.
  • "Working now" comes from T3 thread activity, including subagents and Prism
    jobs. Agents outside T3 are not visible.
  • Status is a pure function of Issue state, links, branch, PR and review mark.
  • New code in new files; each upstream-file edit is added to
    scripts/fork-upstream-edits.txt and the feature map.

Testing decisions

  • Status derivation: table-driven unit tests covering every row and the
    precedence between rows, at the pure function.
  • Listing and Issue actions: tests at the Issues list RPC and panel actions
    against real gh and real GitHub, no fake CLI (user decision 2026-09-25).
    They cover search, pagination, cross-repo children and untrusted review
    marks, and run as a separate live suite with a GitHub token.
  • Links: tests for manual, MCP, branch-derived and closing-reference links,
    including unlink and restart persistence.
  • Web: logic tests for grouping, filtering and sorting following
    pullRequestList.logic.test.ts.
  • One integrated pass in the real web client against seeded worktree state,
    on request.

Non-goals

  • Writing status labels or anything else to GitHub in the background.
  • Issue types, assignment-as-wakeup, auto-starting agents on Issue changes.
  • An "Approved" state from GitHub reviews; editing labels, assignees or
    milestones; creating Issues from the UI.
  • Mobile, non-GitHub forges, repositories outside the user's T3 projects
    (except as parent-tree children).
  • Sending anything upstream to pingdotgg/t3code.

Blockers

None for shipping. The three review statuses depend on
toolboxmd/agentsmd#133.

Required proof

  • Focused tests above pass, including the live gh suite; targeted lint and
    typecheck for changed scope; scripts/fork-check.sh passes; fork CI green
    on the final PR.
  • Independent review of the exact final candidate.
  • Integrated web pass with before/after screenshots on the PR.

Further notes

Deliberate detour approved by the user on 2026-09-25: advances the Vision's
"project handling" but is outside the current Objective. Delivery: component
PRs into an integration branch, one final PR into fork main, merged once CI
is green and review has no open findings. No upstream rebase, release,
installation or upstream contribution.

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions