An Issue Link connects a Catalio Requirement or Application to an issue in an external issue tracker — GitHub, Linear, Jira, or Azure DevOps. Issue Links close the traceability gap between the specification layer (Catalio) and the delivery layer (your issue tracker), answering the questions: “Has this requirement been implemented?” and “Which requirements does this issue address?”
Supported Platforms
| Platform | Notes |
|---|---|
| GitHub | GitHub Issues — primary integration |
| Linear | Linear issue tracking |
| Jira | Atlassian Jira (Cloud and Data Center) |
| Azure DevOps | Azure DevOps Work Items |
Link Types
| Link Type | When It Applies |
|---|---|
| created_from | The issue was created directly from this Requirement in Catalio |
| linked_manually | An existing issue was manually linked to this Requirement after the fact |
created_from links are created automatically when you use Catalio’s “Create Issue” action. linked_manually links are created when you paste an existing issue URL or ID into the link dialog.
Linking to Requirements vs. Applications
Issue Links can be scoped to either a Requirement or an Application:
- Requirement link — The most common case. One issue implements one requirement. Required for per-requirement traceability reports.
- Application link — Link an issue directly to an Application without associating it to a specific requirement. Useful for infrastructure, DevOps, or platform-wide issues that don’t map to a single requirement.
At least one of requirement_id or application_id must be set on every link.
Cached Metadata
Catalio caches issue metadata locally for offline display and reporting:
- title — Issue title at time of last sync
- status — Issue state (open, in progress, closed, etc.)
- assignee — Assigned team member
This cached data allows Catalio to show issue context without a live API call. Use the sync_cached_data action to refresh metadata from the platform when you want the latest status.
Soft Deletion
Issue Links use soft delete (archival). When you delete a link, it is marked with an archived_at timestamp and hidden from all views — but the link record is retained for audit purposes. The unique constraint that prevents duplicate links applies only to non-archived records.
Key Fields
| Field | Purpose |
|---|---|
| platform | Which issue tracker: github, linear, jira, or azure_devops |
| external_issue_id | Numeric or string identifier from the external platform |
| external_identifier | Full identifier for display (e.g., “GH-123”, “LIN-456”, “PROJ-789”) |
| link_type | created_from or linked_manually |
| requirement_id | The linked Requirement (nullable; one of requirement_id or application_id required) |
| application_id | The linked Application (nullable; alternative to requirement_id) |
| cached_title | Cached issue title from last sync |
| cached_status | Cached issue status from last sync |
| cached_assignee | Cached assignee from last sync |
Uniqueness
Catalio enforces that each external issue is linked to a given Requirement (or Application) at most once. Duplicate links — where the same issue is linked to the same Requirement twice — are prevented at the database level. Archived links are excluded from this uniqueness check, so if you delete a link and recreate it, the new link is valid.
Traceability Reporting
Issue Links are the foundation of Catalio’s traceability matrix:
- Requirement coverage — Which requirements have at least one linked issue? Which are unimplemented?
- Implementation status — For requirements with linked issues, what is the combined issue status?
- Cross-platform view — One requirement can link to issues across multiple platforms simultaneously
This makes it possible to answer “Is requirement X delivered?” by checking whether linked issues are closed — without leaving Catalio.
Relationships at a Glance
| Related Concept | Relationship |
|---|---|
| Requirements | Issue Links connect Requirements to external delivery work |
| Applications | Issue Links can scope directly to an Application |
| Repositories | Repositories are the code layer; Issue Links are the work-item layer |
Best Practices
Create links at requirement approval, not at implementation.
The moment a requirement is approved and a corresponding issue is created in your tracker, link them. Waiting until after implementation means traceability gaps form and are hard to backfill.
Link issues to the most specific requirement possible.
Linking an issue to a broad feature requirement (e.g., “Invoice Processing”) when it implements a specific requirement (“Invoice PDF export must preserve line-item totals”) produces misleading traceability reports. Prefer specificity.
Sync cached data regularly.
Issue status in Catalio reflects the last sync, not the current platform state. For sprint reviews or status reports, trigger a sync first to ensure the displayed status is current.
Use application-level links for cross-cutting work.
Not every issue maps to a single requirement. DevOps automation, performance tuning, and infrastructure upgrades often span many requirements. Link these to the Application directly, rather than forcing an incorrect requirement link.
Next Steps
- Understand Requirements — Learn what Issue Links are tracing
- Connect Repositories — Establish code-level traceability alongside issue links
- Work with Applications — See how applications anchor both code and work-item traceability
Pro Tip: After an initial batch of requirement approvals, use Catalio’s requirement list view with the “linked issues” filter set to “none” to identify which requirements are still unlinked. This surfaces gaps before sprint planning, not after implementation.
Support
- Documentation: Continue reading about Requirements and Repositories
- In-App Help: The AI assistant can help identify requirements without linked issues
- Email: support@catalio.ai
- Community: Share traceability patterns with other Catalio users