Skip to main content
← Back to list
01Issue
FeatureShippedSwamp CLIPublic
Assigneesskunk-ape

Relationships

#2969 stagecraft studio: a Ticket tab on the work-item page (description, comments, relations), and the nav shows where you are

Opened by skunk-ape · 10/2/2026· Shipped 10/2/2026

Two follow-ups to the studio's work-item page (#2944, /w/<key>), from Seth on 2026-10-02:

  1. Feature: show the ticket itself, meaning its description and comments, in a ticket detail pane or tab in the right panel.
  2. Bug: the studio's navigation doesn't show where you are. On a work-item page nothing is selected.

They're one issue because they're on the same page and both are small.

1. Ticket detail tab

Seth: "When viewing a work-item in studio, there is no way to see the ticket's description... the right panel could have a ticket detail pane/tab where you could see ticket description and any comments."

What it shows for the work item's bound ticket:

  • title, description and status;
  • assignee and labels or type;
  • created and updated times;
  • comments in order, including the lifecycle entries stagecraft itself posted, visually distinct from people's comments where the adapter can tell them apart;
  • relations, from #2796: parent, children, blocked by, related, and duplicate of, each linking to that ticket's work item in the studio when one exists;
  • a link out to the ticket in Linear, or the Lab for the swamp-club team, when the ticket is external.

The description and comments may be markdown. Render them safely: sanitise everything, with no raw HTML and no script.

Where it lives. A tab in the right panel alongside the existing ones, such as Run and Metrics. Ticket is a sensible default tab when the item has a ticket. A work item with no ticket says so plainly.

Data.

  • A read-only studio route, for example GET /api/work-items/<key>/ticket. It calls the bound tracker adapter's fetch_issue, or an equivalent read, through the factory's tracker instance (#2795).
  • For the built-in tracker (#2794) that's local data. For Linear it means the studio server calls Linear with the key from the vault. The key never reaches the page, logs or errors. The page itself never contacts Linear.
  • If an adapter's read doesn't return something the tab needs, such as comments or relations, add it to that adapter's read and to the conformance contract (tracker_conformance.ts), with the fakes updated (linear_fake.ts, swamp_club_fake.ts).
  • Caching: don't call an external tracker on every render. Fetch when the tab opens, plus a manual refresh, with a short cache. Say what you chose.
  • Failure: if the tracker is unreachable or the key is wrong, show a short error in the tab. The rest of the page keeps working.

The studio stays read-only: no commenting or editing from the page.

2. Navigation shows where you are

On /w/<key> no navigation item is selected. Fix this across the whole app:

  • the current place is marked in the nav: Design, Simulate, Board, or the work-item page shown as under Board, for example with a breadcrumb "Board › blog-12";
  • aria-current is set on the current item;
  • the browser tab title says where you are.

Check every studio route, including the view addresses #2943 added.

Done when

  • Built-in tracker: a work item bound to a built-in ticket with a description and two comments shows both in the Ticket tab.
  • Linear: a Linear-bound one does too, tested against linear_fake.ts. If a live Linear workspace from the Linear live test is available, check it there as well.
  • No ticket, and unreachable trackers, each show their message.
  • Rendering is safe: descriptions and comments are sanitised, and a test proves that a script-bearing description renders inert.
  • Navigation: every route marks its place in the nav with aria-current.
  • Tests and accessibility: studio tests cover the route and the tab, and keyboard navigation and WCAG 2.2 AA hold, as across the studio.

Running alongside in the studio: #2963 (long keys on cards and headers; coordinate on the work-item header), #2966 (short keys) and #2947 (publication prep). Rebase onto origin/main before the PR.

02Bog Flow
✓OPEN✓TRIAGED✓IN PROGRESS✓SHIPPED+ 1 MOREASSIGNED+ 5 MOREREVIEW+ 10 MOREPR_MERGED+ 2 MORESESSION_SUMMARIZED

Shipped

10/2/2026, 6:49:25 PM

Click a lifecycle step above to view its details.

03Sludge Pulse
skunk-ape assigned skunk-ape10/2/2026, 5:23:00 PM

Sign in to post a ripple.