Skip to content

Issue Linking

Issue linking is fundamental to GuideMode’s ability to track work from discovery through delivery. This guide explains how links are detected, created, and used to power metrics like validation rate and end-to-end lead time.

GuideMode supports two types of issue links:

  1. Same-provider links - Links between issues in the same tool (e.g., Jira → Jira)
  2. Cross-tool links - Links between issues in different tools (e.g., Notion → GitHub)

Both types enable the connection between discovery research and delivery work that powers DX² metrics.


GuideMode uses eight canonical link types to describe relationships between issues:

Link TypeDirectionPurposeExample
validatesDiscovery → FeatureResearch proved hypothesis, feature createdSpike validates Feature
invalidatesDiscovery → (closed)Research disproved hypothesisDiscovery marked invalid
implementsFeature → DiscoveryFeature implements validated discoveryFeature implements Spike
blocksIssue → IssueThis issue blocks anotherChore blocks Feature
blocked_byIssue → IssueThis issue is blocked by anotherFeature blocked by Chore
relates_toIssue ↔ IssueGeneral relationshipFeature relates to Bug
duplicatesIssue → IssueThis issue duplicates anotherBug duplicates Bug
duplicated_byIssue → IssueThis issue is duplicated by anotherBug duplicated by Bug

The validates and implements links are inverse relationships that connect discovery to delivery:

Diagram

These links enable:

  • Validation rate - What percentage of discoveries led to features?
  • End-to-end lead time - Time from discovery creation to production deployment
  • Research ROI - Connect research investment to delivered value

GuideMode detects issue links through multiple sources, each with different confidence levels:

Diagram

Each provider has its own link system that GuideMode syncs:

Jira:

  • Issue links with types like “Blocks”, “Relates”, “Clones”
  • Synced via Jira API during issue sync
  • Link type names mapped to GuideMode types

GitHub:

  • Native dependencies API (blocked_by / blocking)
  • Available via REST API: /repos/{owner}/{repo}/issues/{number}/dependencies
  • Synced via webhooks (issue_dependencies events)

Linear:

  • Parent/child relationships
  • Related issue links
  • Synced during issue sync

Notion:

  • Relation properties (links to other databases)
  • URL properties pointing to external issues
  • Configured via database mapping

GuideMode automatically scans issue body text for URLs from supported providers:

Diagram

Supported URL Patterns:

ProviderURL PatternExtracted ID
GitHubgithub.com/{owner}/{repo}/issues/{number}github:owner/repo#123
Jira{site}.atlassian.net/browse/{key}jira:PROJ-123
Linearlinear.app/{workspace}/issue/{id}linear:ABC-123
Notionnotion.so/{workspace}/{page-id}notion:page-id

Cross-tool links connect issues across different providers, enabling discovery-to-delivery tracking even when research happens in Notion but delivery happens in GitHub.

Diagram

Once links are resolved, they can be queried from either direction:

From Notion Discovery:
"What features implement this research?"
→ Query: sourceIssueId = notionPageId, linkType = 'implements'
From GitHub Feature:
"What discovery validated this feature?"
→ Query: targetIssueId = githubIssueId, linkType = 'validates'
→ Or inverse: sourceIssueId = githubIssueId, linkType = 'implements'

Different providers use different names for link relationships. GuideMode’s link type mappings let you configure how provider-specific names translate to internal types.

Navigate to Settings → Integrations → Link Mappings to configure mappings.

┌─────────────────────────────────────────────────────────────────────────┐
│ LINK TYPE MAPPING │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ Provider: Jira │
│ External Type: "Implements" │
│ Internal Type: validates │
│ │
│ ───────────────────────────────────────────────────────────────────── │
│ │
│ Optional Conditions: │
│ • Requires Source Type: discovery │
│ • Requires Target Type: feature │
│ │
│ (Only apply this mapping when source is discovery │
│ and target is feature) │
│ │
└─────────────────────────────────────────────────────────────────────────┘
ProviderExternal TypeInternal TypeCondition
Jira”Blocks”blocksAlways
Jira”Implements”validatesSource: discovery, Target: feature
Jira”Relates”relates_toAlways
Linear”Parent”blocked_byAlways
GitHub”blocked_by”blocked_byAlways

Conditional mappings let you apply different internal types based on the issue types involved:

Example: Jira "Relates" link
Default behavior:
"Relates" → relates_to
With conditional mapping:
"Relates" where source=discovery AND target=feature → validates
"Relates" where source=feature AND target=discovery → implements
"Relates" otherwise → relates_to

This is useful when your provider doesn’t have specific link types for discovery validation.


Notion databases can have relation properties that link to other databases. GuideMode can map these to issue links.

In your Notion database mapping, configure deliveryLinks:

{
deliveryLinks: [
{
notionProperty: "Delivery Ticket", // Property name in Notion
notionPropertyType: "url", // "url" or "relation"
linkType: "validates" // Internal link type
},
{
notionProperty: "Related Features",
notionPropertyType: "relation",
linkType: "implements"
}
]
}

For URL-type properties, GuideMode parses the URL to detect the provider and issue:

Notion page with URL property "Delivery Ticket":
Value: "https://github.com/org/repo/issues/42"
→ Creates link:
• Source: This Notion page
• Target: GitHub org/repo#42
• Type: validates

For relation-type properties, GuideMode creates links to other Notion pages:

Notion page with Relation property "Related Features":
Value: [Page A, Page B]
→ Creates links:
• Source: This page → Target: Page A, Type: implements
• Source: This page → Target: Page B, Type: implements

GitHub has a native dependencies feature that tracks blocking relationships between issues.

GET /repos/{owner}/{repo}/issues/{number}/dependencies/blocked_by
GET /repos/{owner}/{repo}/issues/{number}/dependencies/blocking

GuideMode listens for issue_dependencies webhook events:

EventAction
blocked_by_addedCreate blocked_by link
blocked_by_removedRemove blocked_by link
blocking_addedCreate blocks link
blocking_removedRemove blocks link

GitHub dependencies can span repositories within the same organization:

┌────────────────────┐ blocked_by ┌────────────────────┐
│ org/frontend#42 │ ◄─────────────────────────│ org/backend#15 │
│ "Add user UI" │ │ "Add user API" │
└────────────────────┘ └────────────────────┘

GuideMode’s cross-tool linking enables dual-track agile workflows where discovery research happens in one tool and delivery work in another. This is a key differentiator for teams using multiple tools.

Scenario: Product team researches in Notion, engineers implement in GitHub.

Diagram

Setup steps:

  1. Connect Notion integration → Settings → Integrations → Notion
  2. Connect GitHub integration → Settings → Integrations → GitHub
  3. Map Notion database with type: discovery
  4. Add GitHub issue URL to Notion page when research is validated

No additional configuration needed - URL detection works automatically.

Scenario: Design team researches in Notion, product team delivers in Linear.

Diagram

URL pattern detected: linear.app/{workspace}/issue/{id}

Scenario: Product management in Jira, development in GitHub.

Diagram

Two linking methods:

  1. URL in description (recommended)

    • Add GitHub URL to Jira issue description
    • GuideMode detects automatically on sync
  2. Jira native links

    • Use Jira’s “Link Issue” with external URL
    • Configure link type mapping: Jira “Implements” → GuideMode validates

Cross-provider links power the same metrics as same-provider links:

MetricWhat It Measures
Validation Rate% of discoveries validated into features (across any provider)
Discovery → ProductionTime from discovery close to feature deployment
From Discovery %Delivery work originating from linked discoveries

→ See Workflow Modes for detailed setup guides


Issue links enable several key metrics:

validationRate = (discoveries with validates link) / (total closed discoveries) × 100
Target: 50-70%

A validation rate of 50-70% indicates healthy discovery - not every hypothesis should be proven correct.

totalLeadTime = production_deployment_date - discovery_created_date
Requires: validates link from discovery to feature

Tracks the complete journey from initial research to production.

discoveryToProduction = production_deployment_date - discovery_closed_date
Requires: validates link connecting discovery to deployed feature

Measures implementation speed after validation.

By connecting discoveries to features, you can track:

  • Which discoveries led to shipped features
  • Time invested in validated vs invalidated research
  • Research-to-production conversion rates

Check sync status:

  • Ensure both source and target issues are synced
  • Cross-tool links remain “pending” until both sides sync

Check URL format:

  • URLs must match supported patterns exactly
  • Private/internal URLs may not be parseable

Check link type mappings:

  • Verify provider link types are mapped correctly
  • Check conditional mappings if links appear with wrong types

Review mappings:

  1. Go to Settings → Link Mappings
  2. Check if a mapping exists for the external link type
  3. Verify conditions match expected issue types

Default behavior:

  • Unknown link types default to relates_to
  • Add explicit mappings for provider-specific types

Links stay “pending” when:

  • Target issue hasn’t been synced yet
  • Target URL doesn’t match a synced issue
  • Provider integration isn’t configured

Resolution:

  1. Sync the target provider/repository
  2. Verify the URL in the source issue is correct
  3. Check that URL matches a syncable issue