Work items: Linear

Work items for this repository live in Linear (https://linear.app/calab) β€” issues, sub-issues, projects, milestones, project documents, initiatives, and customer requests.

Interact with Linear via the linear CLI (user-scope skill) or Linear MCP tools. Do not use gh issue to create or manage Calab work items.

This document is the source of truth for work-item conventions in calab-mocks. .github/instructions/linear-issues.instructions.md is a thin pointer to it. Engineering skills that need an issue-tracker description read docs/agents/issue-tracker.md.

Entity mapping

Concept Linear object
Value stream / strategic programme Initiative
Plan Project (a small single-outcome plan = a single Issue with sub-issues)
PRD / Spec Project document (issue description for small plans)
Plan phase Project milestone
Client ask Customer Request
Task Issue
Issue breakdown Sub-issues (see below)

Sub-issues are not a fixed "step" level. Use them when an issue is large enough that it should be broken down β€” as a rule of thumb, more than about 21 hours of effort β€” or to plan the separation of small stacked PRs under one parent issue. Sub-issues can nest multiple levels when the root parent issue requires it.

Category types map to the workspace Type label group: Bug, Feature, Improvement, Problem, Request, Task, and Incident. See triage-labels.md.

Team routing

Work items go to the Linear team that owns the work. Team names change, so verify live names with linear team list (or the Linear MCP equivalent) rather than trusting remembered names. Team keys are stabler references.

Work type Linear team (verify live) Key
This repository's product and engineering work intl-mocks MOC
Platform, agent infrastructure, technology content gl04-technology GL04
Governance / value streams / org model gl01-executive GL01
Sales content and ops gl02-sales GL02
Delivery content and products gl03-delivery GL03
Administration and operations content gl05-operations GL05
Client or product delivery work The owning squad team varies

Default to intl-mocks (MOC) for work in this repository unless the change is clearly platform or agent-infrastructure (GL04) or belongs to another owner above.

This repository is the fakes estate. Do not file NeuralOps consumer-connection work here β€” that belongs on the owning NeuralOps team.

Relationships

Use Linear's native relations β€” they are the link of record:

  • Sub-issue (parent/child) β€” set the parent when creating the child. A sub-issue has exactly one parent.
  • Blocking / blocked-by β€” define each directed dependency once; Linear shows the reciprocal automatically.
  • Project membership β€” add issues that belong to a plan to that plan's Project.
  • Duplicates β€” mark duplicate so Linear moves the duplicate to the system-managed Duplicate status and links it to the canonical issue. Attachments and customer requests migrate; comment threads are not merged β€” copy unique details to the canonical issue first.

Body-text references are optional context for readers, not the link of record.

Workflow rules

  • Every Project should have at least one issue; break an issue into sub-issues when it is large enough to warrant it (roughly more than 21 hours of effort) or to plan a set of small stacked PRs (nesting further levels as needed).
  • Every item must include a clear title, a short description (what and why), and acceptance criteria.
  • Not every issue must roll up to a Project: small, self-contained work may stand alone.
  • Avoid duplicate issues: search by similar titles before creating; use Mark duplicate when applicable.
  • Audit trails live in Linear's activity log β€” do not maintain CHANGELOG-file audit conventions for work tracking.
  • Use existing labels only. Ask a maintainer to add a missing workspace label rather than creating one ad hoc.
  • Confirm the target team's statuses with linear team states <team-id> before relying on a specific status name.
  • When raising an issue, say whether the change is local-only (docker compose), Azure (azd / landing-zone RGs), or both.

Description best practices

  • Keep descriptions concise and specific.
  • For Projects, include a brief overview in the project description; attach the PRD as a project document.
  • For Features, Improvements, and Bugs, state the problem or opportunity, desired outcome, and acceptance criteria. For Bugs, add steps to reproduce, expected versus actual behaviour, and relevant logs or screenshots.
  • For sub-issues, state the action and relevant links or dependencies. Prefer imperative phrasing (for example, "Add Linear work-item instructions").
  • Include Acceptance Criteria: and Out of Scope: sections when helpful.

PR linking

Pull requests stay on GitHub. Linear links PRs to issues when:

  • Branch names contain the issue identifier, for example feat/MOC-12-container-apps.
  • Magic words appear in the PR title or description, for example Fixes MOC-18 or Refs MOC-18.

Use both where practical. Branch and PR titles still follow this repository's Conventional Commit conventions. Automation branches may use the copilot/ or cursor/ prefix.

Agent delegation

To hand an issue to an AFK coding agent, assign the Linear issue to the coding agent from Linear. The agent still raises a draft PR on GitHub; kickoff is from Linear. Prefer Cursor cloud or agent workflows where the team has standardized on Cursor.

Interim documents

Publish interim or collaborative research as a Linear Document attached to the relevant Project, and leave a link comment on related issues. Commit to the repository (for example under docs/) only when the content is durable and a maintainer has reviewed it.

Handoffs

Publish a session handoff as a Linear issue with the workspace handoff label, routed per the team table, unassigned by default.

linear CLI conventions

These commands refer to the user-scope linear-cli skill (invoked as linear <resource> <action>), not a public npm package with a similar name. Prefer the linear CLI or Linear MCP tools; both are valid.

  • Create: linear issue create "Title" --team <team-id> --body-file <file> [--parent MOC-N] [--project <project-id>]
  • Read: linear issue view MOC-N
  • List: linear issue list --team <team-id> [--status <name>] [--label <name>]
  • Comment: linear issue comment MOC-N <text>
  • Update: linear issue update MOC-N --status <name> --assignee <id> --add-label <name>
  • Triage actions: linear issue snooze MOC-N [--days <n>], linear issue unsnooze MOC-N, linear issue duplicate MOC-N <canonical>
  • Relations: linear issue relate MOC-A MOC-B --type blocks|related|similar (default blocks)
  • Projects / milestones / documents: linear project create|update, linear milestone create|update, linear document create|update (team-scoped documents: document create --team)
  • Teams / states / labels: linear team list, linear team states <team-id>, linear label list --team <team-id>

When paginating labels via the GraphQL API, page through all results β€” a single first: N query can miss workspace labels in a workspace with many teams.

When asked to publish to the issue tracker

Create a Linear issue following the entity mapping and team routing above. Set parent and project at creation time with --parent and --project. After create, record blocking or related links with linear issue relate … --type blocks|related|similar (see Relations above).

When asked to fetch the relevant ticket

Run linear issue view <identifier> or the Linear MCP equivalent.