Task autolinks

Task autolinks turn typed and pasted task identifiers into live link chips. Anywhere the rich text editor runs, a string like PAR-482 becomes a chip you can hover for a preview and click to jump straight to the task.

You get them in every editor surface:

  • Task descriptions
  • Task comments
  • Wiki pages
  • Board node content

The chip is inline, small, and consistent across all four surfaces. Hovering shows a preview popover with the task name, current state, priority, and the first few assignees. Clicking opens the task.

The three ways to insert one

Type #PAR-482. As soon as you finish the digits, the #PAR-482 run collapses into a chip. The # is a trigger character only; it is not stored on the chip.

Type # alone. A small popover opens, fuzzy-searching recent tasks in the workspace by title or by IDENT-N shorthand. Arrow keys or the mouse to pick, Enter or Tab to insert. Escape dismisses the popover without inserting anything.

Paste. Pasting a bare identifier (PAR-482) or an in-app URL like https://ithura.com/{workspace}/browse/PAR-482 converts to a chip. You do not need the # on paste because pasting is already an intent signal.

What matches

The identifier grammar is {PROJECT}-{N}, where:

  • PROJECT is 2 to 10 characters, the first is a letter, the rest are letters or digits. This is the same identifier your project uses (PAR, WEB, INF, and so on).
  • N is one or more digits, the task's sequence number in that project.

Examples that resolve: PAR-482, WEB-17, INF2-9.

Examples that do not: par-482 (lowercase), PAR482 (no dash), A-1 (project prefix too short).

Scope is workspace-local

Every workspace has its own project identifiers. A WEB-17 you type in one workspace resolves to that workspace's WEB project, not to another workspace's. If the identifier does not exist in your current workspace, the chip renders normally but the preview popover says "not found" and the chip does not link anywhere useful.

The permission model is the same one the project list uses:

  • Workspace admins can see every project in the workspace.
  • Members can see public projects and projects they are a member of.
  • Guests can see only projects they are a member of.

A task in a project you cannot see returns "not found" in the preview, so an autolink never leaks the existence of a task you do not have access to.

What the preview shows

The hover popover fetches the task from the workspace and renders:

  • The PROJECT-N identifier and the task title.
  • The current state (name and colour).
  • The task priority, when it is not none.
  • Up to five assignees, with avatars.
  • The start and target dates, when set.

The preview loads on the first hover and caches for a minute so repeated hovers do not re-hit the server. A "not found" answer is cached for the rest of the session and does not retry.

Click behaviour

Clicking a chip goes to /{workspace}/browse/{identifier}. That route resolves the identifier server-side and lands you on the task in its project. If the identifier no longer exists (the task was deleted, or was moved to another workspace) the browse page shows a "Task not found" screen with a back link to the workspace home.

What it does NOT do

  • Autolinks do not create tasks. Typing #PAR-999 when PAR-999 does not exist leaves a chip that hovers to "not found". Create the task first.
  • Autolinks do not span workspaces. There is no cross-workspace routing.
  • Autolinks are not markdown link syntax. If you write [label](/{ws}/browse/PAR-482) the editor keeps it as a plain markdown link, not an autolink chip. Only bare identifiers and in-app URLs convert.

Behind the scenes

  • GET /workspaces/{slug}/issues/by-identifier/{identifier} returns the preview payload. Response includes id, project id, project identifier, sequence id, name, state, priority, assignees (capped at 5), start and target dates, and last-updated timestamp.
  • A Tiptap Node (issueAutolink) is registered in the shared editor. HTML round-trip shape is <a data-issue-autolink="PAR-482" href="/{workspace}/browse/PAR-482">PAR-482</a> so pasted and stored HTML survives a reload.
  • The # popover is backed by the existing /workspaces/{slug}/issue-lookup/ typeahead. No new search index; the same rows that back the wiki page #-embed drive this popover.