> ## Documentation Index
> Fetch the complete documentation index at: https://docs.janet.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Clusters

> Detect relationships clusters within your project

<div className="img-showcase">
  <div className="rel-mock">
    <div className="rel-mock-tabs">
      <div className="rel-mock-tab-group">
        <span className="rel-mock-tab">
          <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2">
            <rect x="3" y="3" width="7" height="9" />

            <rect x="14" y="3" width="7" height="5" />

            <rect x="14" y="12" width="7" height="9" />

            <rect x="3" y="16" width="7" height="5" />
          </svg>

          Kanban
        </span>

        <span className="rel-mock-tab">
          <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2">
            <path d="M3 6h18M3 12h18M3 18h18" />
          </svg>

          List
        </span>

        <span className="rel-mock-tab rel-mock-tab-active">
          <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
            <path d="M2 12h2" />

            <path d="M6 8v8" />

            <path d="M10 4v16" />

            <path d="M14 6v12" />

            <path d="M18 9v6" />

            <path d="M22 12h-2" />
          </svg>

          Signals
          <span className="rel-mock-new-badge">New</span>
        </span>
      </div>
    </div>

    <div className="rel-mock-body">
      <div>
        <div className="rel-mock-section-header">
          <span className="rel-mock-section-label">Themes</span>
          <span className="rel-mock-section-count">2</span>
        </div>

        <div className="rel-mock-cards">
          {/* Theme cluster card 1 */}

          <div className="rel-mock-theme-card">
            <div className="rel-mock-theme-pie">
              <svg width="36" height="36" viewBox="0 0 36 36">
                {/* Donut chart: 3 In Progress (blue), 2 To Do (gray) = 5 total */}

                {/* Background ring */}

                <path d="M18 4 A14 14 0 1 1 17.99 4" fill="none" stroke="rgba(0,0,0,0.06)" strokeWidth="5" />

                {/* Blue segment: 60% = 216deg */}

                <path d="M18 4 A14 14 0 1 1 4.824 23.8" fill="none" stroke="#6366f1" strokeWidth="5" />

                {/* Gray segment: 40% = remaining */}

                <path d="M4.824 23.8 A14 14 0 0 1 18 4" fill="none" stroke="#94a3b8" strokeWidth="5" />
              </svg>
            </div>

            <div className="rel-mock-theme-info">
              <span className="rel-mock-theme-title">API Rate Limiting Issues</span>

              <div className="rel-mock-ticket-ids">
                <span className="rel-mock-ticket-id">SW-42</span>
                <span className="rel-mock-ticket-id">SW-57</span>
                <span className="rel-mock-ticket-id">SW-61</span>
                <span className="rel-mock-more">+2 more</span>
              </div>

              <p className="rel-mock-theme-summary">Multiple tickets reporting 429 errors and throttling behavior across different API endpoints</p>
            </div>
          </div>

          {/* Theme cluster card 2 */}

          <div className="rel-mock-theme-card">
            <div className="rel-mock-theme-pie">
              <svg width="36" height="36" viewBox="0 0 36 36">
                {/* Background ring */}

                <path d="M18 4 A14 14 0 1 1 17.99 4" fill="none" stroke="rgba(0,0,0,0.06)" strokeWidth="5" />

                {/* Orange segment: 67% */}

                <path d="M18 4 A14 14 0 1 1 9.248 30.124" fill="none" stroke="#f97316" strokeWidth="5" />

                {/* Blue segment: 33% */}

                <path d="M9.248 30.124 A14 14 0 0 1 18 4" fill="none" stroke="#6366f1" strokeWidth="5" />
              </svg>
            </div>

            <div className="rel-mock-theme-info">
              <span className="rel-mock-theme-title">Dashboard Loading Performance</span>

              <div className="rel-mock-ticket-ids">
                <span className="rel-mock-ticket-id">SW-19</span>
                <span className="rel-mock-ticket-id">SW-33</span>
                <span className="rel-mock-ticket-id">SW-48</span>
              </div>

              <p className="rel-mock-theme-summary">Slow initial load times and rendering lag on the analytics dashboard</p>
            </div>
          </div>
        </div>
      </div>

      <div>
        <div className="rel-mock-section-header">
          <span className="rel-mock-section-label">Duplicates</span>
          <span className="rel-mock-section-count">3</span>
        </div>

        <div className="rel-mock-cards">
          {/* Duplicate group card (3+ tickets) */}

          <div className="rel-mock-dup-card">
            <div className="rel-mock-dup-graph">
              <svg width="56" height="56" viewBox="0 0 56 56">
                {/* Radial graph: center node + 3 outer nodes connected by edges */}

                {/* Edges from center to outer */}

                <path d="M28 28 L28 12" stroke="#f97316" strokeWidth="1" opacity="0.18" />

                <path d="M28 28 L42 38" stroke="#f97316" strokeWidth="1" opacity="0.18" />

                <path d="M28 28 L14 38" stroke="#f97316" strokeWidth="1" opacity="0.18" />

                {/* Center node (larger) */}

                <rect x="22" y="22" width="12" height="12" rx="6" fill="#f97316" opacity="0.9" />

                {/* Outer nodes */}

                <rect x="23" y="7" width="10" height="10" rx="5" fill="#f97316" opacity="0.5" />

                <rect x="37" y="33" width="10" height="10" rx="5" fill="#f97316" opacity="0.5" />

                <rect x="9" y="33" width="10" height="10" rx="5" fill="#f97316" opacity="0.5" />
              </svg>
            </div>

            <div className="rel-mock-dup-info">
              <span className="rel-mock-dup-title">Email Notification Failures</span>

              <div className="rel-mock-dup-meta">
                <span className="rel-mock-ticket-id">SW-22</span>
                <span className="rel-mock-ticket-id">SW-35</span>
                <span className="rel-mock-ticket-id">SW-41</span>
                <span className="rel-mock-sim-badge rel-mock-sim-med">\~93%</span>
              </div>

              <p className="rel-mock-dup-summary">Multiple tickets describing email delivery failures for password reset and verification emails</p>
            </div>
          </div>

          {/* Duplicate group card 2 */}

          <div className="rel-mock-dup-card">
            <div className="rel-mock-dup-graph">
              <svg width="56" height="56" viewBox="0 0 56 56">
                {/* Edges from center to outer */}

                <path d="M28 28 L28 10" stroke="#ef4444" strokeWidth="1" opacity="0.18" />

                <path d="M28 28 L44 20" stroke="#ef4444" strokeWidth="1" opacity="0.18" />

                <path d="M28 28 L44 38" stroke="#ef4444" strokeWidth="1" opacity="0.18" />

                <path d="M28 28 L12 38" stroke="#ef4444" strokeWidth="1" opacity="0.18" />

                {/* Center node */}

                <rect x="22" y="22" width="12" height="12" rx="6" fill="#ef4444" opacity="0.9" />

                {/* Outer nodes */}

                <rect x="23" y="5" width="10" height="10" rx="5" fill="#ef4444" opacity="0.5" />

                <rect x="39" y="15" width="10" height="10" rx="5" fill="#ef4444" opacity="0.5" />

                <rect x="39" y="33" width="10" height="10" rx="5" fill="#ef4444" opacity="0.5" />

                <rect x="7" y="33" width="10" height="10" rx="5" fill="#ef4444" opacity="0.5" />
              </svg>
            </div>

            <div className="rel-mock-dup-info">
              <span className="rel-mock-dup-title">Login Page Redirect Loop</span>

              <div className="rel-mock-dup-meta">
                <span className="rel-mock-ticket-id">SW-8</span>
                <span className="rel-mock-ticket-id">SW-17</span>
                <span className="rel-mock-ticket-id">SW-31</span>
                <span className="rel-mock-ticket-id">SW-46</span>
                <span className="rel-mock-sim-badge rel-mock-sim-high">\~96%</span>
              </div>

              <p className="rel-mock-dup-summary">Users stuck in infinite redirect between login and dashboard when SSO session expires</p>
            </div>
          </div>

          {/* Duplicate group card 3 */}

          <div className="rel-mock-dup-card">
            <div className="rel-mock-dup-graph">
              <svg width="56" height="56" viewBox="0 0 56 56">
                {/* Edges from center to outer */}

                <path d="M28 28 L18 12" stroke="#eab308" strokeWidth="1" opacity="0.18" />

                <path d="M28 28 L40 14" stroke="#eab308" strokeWidth="1" opacity="0.18" />

                <path d="M28 28 L42 40" stroke="#eab308" strokeWidth="1" opacity="0.18" />

                {/* Center node */}

                <rect x="22" y="22" width="12" height="12" rx="6" fill="#eab308" opacity="0.9" />

                {/* Outer nodes */}

                <rect x="13" y="7" width="10" height="10" rx="5" fill="#eab308" opacity="0.5" />

                <rect x="35" y="9" width="10" height="10" rx="5" fill="#eab308" opacity="0.5" />

                <rect x="37" y="35" width="10" height="10" rx="5" fill="#eab308" opacity="0.5" />
              </svg>
            </div>

            <div className="rel-mock-dup-info">
              <span className="rel-mock-dup-title">CSV Export Timeout</span>

              <div className="rel-mock-dup-meta">
                <span className="rel-mock-ticket-id">SW-14</span>
                <span className="rel-mock-ticket-id">SW-29</span>
                <span className="rel-mock-ticket-id">SW-52</span>
                <span className="rel-mock-sim-badge rel-mock-sim-low">\~89%</span>
              </div>

              <p className="rel-mock-dup-summary">Data export fails or hangs on datasets over 10k rows across multiple export formats</p>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</div>

## How it works

Navigate to the **Signals** page and click **Generate**. Janet scans every ticket in your project and surfaces two things:

**Themes** group tickets that share a common theme or topic, such as "API rate limiting" or "dashboard performance." Each theme shows which tickets are involved and their status breakdown.

**Duplicates** flag tickets describing the same problem. You can merge duplicates directly from the signals view to eliminate redundant work.
