Files
whyrating-engine-legacy/urt-taxonomy/track-c-analytics/C1-Issue-Lifecycle-Framework.md
Alejandro Gutiérrez 3eda9bdbfa Add complete URT v5.1 taxonomy framework (11 artifacts)
Universal Review Taxonomy v5.1 implementation with:
- Track A (Training): A1 Quickstart, A2 QA Protocol, A3 Calibration Set, A4 Full Manual
- Track B (Engineering): B1 Code Registry, B2 Database Schema, B3 Owner Routing, B4 API Contract
- Track C (Analytics): C1 Issue Lifecycle, C2 KPI Mapping Guide
- Track D (Integration): D1 Dashboard Specification

Covers 7 domains, 28 categories, 138 subcodes, 16 causal codes, and 7 metadata dimensions.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 10:51:41 +00:00

1205 lines
66 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# C1: Issue Lifecycle Framework
## Universal Review Taxonomy (URT) v5.1 - Analytics Track
**Document**: C1 - Issue Lifecycle Framework
**Version**: 1.0
**Status**: Production Ready
**Date**: 2026-01-23
**Depends On**: URT Specification v5.1
---
## Purpose
This framework defines how classified feedback spans (per URT v5.1) become trackable issues that move through resolution states. It bridges the gap between span-level classification and operational issue management, enabling businesses to:
- Track issue detection through resolution
- Aggregate related spans into actionable issues
- Prioritize based on severity, recurrence, and age
- Verify resolution through subsequent feedback
- Measure operational performance with SLAs
---
## 1. Issue State Machine
### 1.1 State Definitions
| State | Code | Definition | Entry Trigger |
|-------|------|------------|---------------|
| **DETECTED** | `DET` | New issue identified from V- span(s) | Span classified with negative valence |
| **ACKNOWLEDGED** | `ACK` | Business has seen and accepted the issue | Manual acknowledgment or auto-ack rule |
| **IN_PROGRESS** | `INP` | Resolution work has started | Work assignment or status update |
| **RESOLVED** | `RES` | Fix deployed or corrective action taken | Resolution logged with action code |
| **VERIFIED** | `VER` | Subsequent feedback confirms resolution | CR-B span or V+ span on same subcode |
| **DECLINED** | `DEC` | Closed without action (with reason) | Decline action with reason code |
| **REOPENED** | `REO` | Previously resolved issue recurred | CR-S or CR-W span after RESOLVED |
### 1.2 State Transition Diagram
```
┌─────────────────────────────────────────────────────────┐
│ │
│ DECLINE REASONS │
│ ┌────────────────────────────────────┐ │
▼ │ │ │
┌──────────┐ ack ┌──────────┐ │ ┌──────────┐ │ │
│ │─────────▶│ │──────┴─────▶│ │ │ │
│ DETECTED │ │ACKNOWLEDGED│ decline │ DECLINED │ │ │
│ (DET) │ │ (ACK) │ │ (DEC) │ │ │
│ │◀─────────│ │ │ │ │ │
└──────────┘ reopen └──────────┘ └──────────┘ │ │
│ │ │ │
│ │ start_work │ │
│ ▼ │ │
│ ┌──────────┐ resolve ┌──────────┐ verify ┌──────────┐ │
│ │ │───────────────▶│ │───────────▶│ │ │
│ │IN_PROGRESS│ │ RESOLVED │ │ VERIFIED │ │
│ │ (INP) │ │ (RES) │ │ (VER) │ │
│ │ │◀───────────────│ │◀───────────│ │ │
│ └──────────┘ reopen └──────────┘ reopen └──────────┘ │
│ │ │ │ │
│ │ │ │ │
│ │ escalate │ │ │
│ └──────────────────────────┼───────────────────────┘ │
│ │ │
│ │ expire (no verification) │
│ ▼ │
│ ┌──────────┐ │
└───────────────────────────────────────▶│ STALE │◀────────────────────────────┘
escalate │ (STL) │ (optional state)
└──────────┘
```
### 1.3 Valid Transitions
| From State | To State | Trigger | Conditions |
|------------|----------|---------|------------|
| `DET` | `ACK` | `ack` | Manual or auto-acknowledgment |
| `DET` | `DEC` | `decline` | With reason code (see 1.4) |
| `DET` | `STL` | `expire` | No action within SLA window |
| `ACK` | `INP` | `start_work` | Assignment to owner/team |
| `ACK` | `DEC` | `decline` | With reason code |
| `ACK` | `REO` | `reopen` | From merged/duplicate issue |
| `INP` | `RES` | `resolve` | Resolution action logged |
| `INP` | `ACK` | `pause` | Work paused, not abandoned |
| `INP` | `DEC` | `decline` | Late decline with reason |
| `RES` | `VER` | `verify` | CR-B or positive confirmation span |
| `RES` | `REO` | `reopen` | CR-S or CR-W on resolved issue |
| `RES` | `STL` | `expire` | Verification window elapsed |
| `VER` | `REO` | `reopen` | New complaint after verification |
| `DEC` | `REO` | `reopen` | New evidence or escalation |
### 1.4 Decline Reason Codes
| Code | Reason | Use Case |
|------|--------|----------|
| `DEC-DUP` | Duplicate | Merged with existing issue |
| `DEC-OOS` | Out of Scope | Not actionable by business |
| `DEC-INS` | Insufficient Info | Cannot act without more detail |
| `DEC-NAR` | Not As Reported | Investigation found no issue |
| `DEC-EXT` | External Factor | Outside business control |
| `DEC-POL` | Policy Decision | Intentional business choice |
| `DEC-OLD` | Too Old | Beyond remediation window |
---
## 2. Issue Aggregation Rules
### 2.1 Span-to-Issue Mapping
Individual spans become issues through aggregation. A single issue may encompass multiple spans from multiple reviews when they describe the same underlying problem.
```
┌─────────────────────────────────────────────────────────────────────────────┐
│ ISSUE AGGREGATION PIPELINE │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ Review A ──▶ Span 1 (O2.05, V-, I2) ──┐ │
│ │ │
│ Review B ──▶ Span 2 (O2.05, V-, I2) ──┼──▶ ISSUE-001: Food Temp Problem │
│ │ Subcode: O2.05 │
│ Review C ──▶ Span 3 (O2.05, V-, I3) ──┘ Location: Main Kitchen │
│ Span Count: 3 │
│ Max Intensity: I3 │
│ Review D ──▶ Span 4 (P1.02, V-, I3) ──────▶ ISSUE-002: Staff Respect │
│ Subcode: P1.02 │
│ Staff: John D. │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
```
### 2.2 Aggregation Criteria
Two spans aggregate into the same issue when ALL of the following match:
| Criterion | Match Rule | Example |
|-----------|------------|---------|
| **Subcode** | Same Tier 3 code | O2.05 = O2.05 |
| **Location** | Same physical/logical location | "Kitchen", "App checkout" |
| **Entity** | Same product/person/feature | "iPhone 15", "Server John" |
| **Time Window** | Within aggregation window | See 2.3 |
| **Valence** | Same polarity (V- with V-) | Both negative |
**Note**: Location and Entity are extracted during classification as optional span attributes in extended schemas.
### 2.3 Intensity-Based Aggregation Thresholds
Different intensity levels trigger issue creation at different thresholds:
| Intensity | Immediate Issue | Aggregation Threshold | Time Window |
|-----------|-----------------|----------------------|-------------|
| **I3** (Strong) | Yes | 1 span | N/A - Immediate |
| **I2** (Moderate) | No | 3+ spans | 30 days |
| **I1** (Mild) | No | 5+ spans | 30 days |
**Decision Logic**:
```
IF span.intensity == I3:
CREATE_ISSUE(span)
ELIF span.intensity == I2:
matching_spans = FIND_MATCHING(span, window=30d)
IF COUNT(matching_spans) >= 2: # This span + 2 others = 3
CREATE_OR_UPDATE_ISSUE(matching_spans + span)
ELIF span.intensity == I1:
matching_spans = FIND_MATCHING(span, window=30d)
IF COUNT(matching_spans) >= 4: # This span + 4 others = 5
CREATE_OR_UPDATE_ISSUE(matching_spans + span)
```
### 2.4 Cross-Review Correlation
Spans from different reviews correlate based on semantic similarity and entity matching:
```
┌─────────────────────────────────────────────────────────────────┐
│ CORRELATION MATRIX │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Span A: "The burger was cold" O2.05, V-, I2 │
│ Span B: "Food arrived cold again" O2.05, V-, I2, CR-S │
│ Span C: "Temperature of dishes is bad" O2.05, V-, I2 │
│ │
│ Correlation Signals: │
│ ├── Same subcode: O2.05 (100% match) │
│ ├── Lexical overlap: "cold", "temperature" (high similarity) │
│ ├── Entity: Food/dishes (same category) │
│ └── CR signal: Span B has CR-S (recurrence indicator) │
│ │
│ Result: HIGH CORRELATION → Aggregate into single issue │
│ │
└─────────────────────────────────────────────────────────────────┘
```
**Correlation Score Calculation**:
```
correlation = (
0.40 * subcode_match + # Binary: 1.0 if same, 0.0 if different
0.25 * entity_similarity + # 0.0-1.0 based on extracted entities
0.20 * lexical_similarity + # 0.0-1.0 cosine similarity of text
0.15 * temporal_proximity # 1.0 if same day, decays over window
)
IF correlation >= 0.70:
AGGREGATE()
```
---
## 3. Time Decay Model
### 3.1 Urgency Decay Formula
Issue urgency decays over time but is refreshed by recurrence. The model balances immediate severity against persistent but lower-intensity patterns.
**Base Formula**:
```
Urgency(t) = I_base * weight(I) * decay(t) * recurrence_boost(CR)
```
Where:
- `I_base` = Initial intensity value (1, 2, or 3)
- `weight(I)` = Intensity weight multiplier
- `decay(t)` = Time decay function
- `recurrence_boost(CR)` = Boost for recurring issues
### 3.2 Component Definitions
**Intensity Weights**:
| Intensity | Weight | Rationale |
|-----------|--------|-----------|
| I1 | 1.0 | Baseline |
| I2 | 2.0 | Clear signal |
| I3 | 4.0 | Critical urgency |
**Time Decay Function**:
```
decay(days) = exp(-lambda * days)
Where lambda = 0.023 (half-life of ~30 days)
```
| Days | Decay Factor | Effective Urgency (I3) |
|------|--------------|------------------------|
| 0 | 1.000 | 4.00 |
| 7 | 0.851 | 3.40 |
| 14 | 0.724 | 2.90 |
| 30 | 0.500 | 2.00 |
| 60 | 0.250 | 1.00 |
| 90 | 0.125 | 0.50 |
**Recurrence Boost**:
```
recurrence_boost(CR, count) =
IF CR == CR-S or CR == CR-W:
1.0 + 0.5 * log2(recurrence_count + 1)
ELSE:
1.0
```
| Recurrence Count | Boost Factor |
|------------------|--------------|
| 1 | 1.00 |
| 2 | 1.50 |
| 3 | 1.79 |
| 4 | 2.00 |
| 5 | 2.16 |
| 10 | 2.66 |
### 3.3 Priority Score Calculation
The final priority score combines all factors:
```
P = I_weight * (1 + log(span_count)) * decay(days) * recurrence_boost * trend_modifier
Where:
- I_weight = max intensity weight among aggregated spans
- span_count = number of spans in issue
- days = days since first detection
- trend_modifier = sentiment trend adjustment (see below)
```
**Trend Modifier** (based on recent sentiment trajectory):
| Trend | Modifier | Detection |
|-------|----------|-----------|
| Worsening | 1.3 | Multiple CR-W in last 14 days |
| Stable | 1.0 | No CR signals or mixed |
| Improving | 0.7 | Multiple CR-B in last 14 days |
### 3.4 Priority Score Examples
**Example 1: Fresh Critical Issue**
```
I3 issue, 1 span, 0 days old, no recurrence
P = 4.0 * (1 + log(1)) * 1.0 * 1.0 * 1.0
P = 4.0 * 1.0 * 1.0 * 1.0 * 1.0
P = 4.00
```
**Example 2: Persistent Moderate Issue**
```
I2 issue, 5 spans, 15 days old, CR-S markers (3 recurrences), worsening
P = 2.0 * (1 + log(5)) * 0.707 * 1.79 * 1.3
P = 2.0 * 1.70 * 0.707 * 1.79 * 1.3
P = 5.60
```
**Example 3: Old Low-Priority Issue**
```
I1 issue, 2 spans, 45 days old, no recurrence
P = 1.0 * (1 + log(2)) * 0.354 * 1.0 * 1.0
P = 1.0 * 1.30 * 0.354 * 1.0 * 1.0
P = 0.46
```
---
## 4. Confidence Scoring
### 4.1 Single vs. Multiple Span Confidence
Issue confidence increases with corroborating evidence from independent sources.
**Base Confidence by Span Count**:
| Span Count | Base Confidence | Rationale |
|------------|-----------------|-----------|
| 1 | 0.50 | Single report, could be outlier |
| 2 | 0.70 | Corroborated once |
| 3 | 0.80 | Pattern emerging |
| 4-5 | 0.85 | Clear pattern |
| 6-10 | 0.90 | Strong pattern |
| 11+ | 0.95 | Systemic issue |
### 4.2 Evidence Type Weighting
Different evidence types (from URT metadata) contribute differently to confidence:
| Evidence Type | Weight | Rationale |
|---------------|--------|-----------|
| **ES** (Stated) | 1.0 | Direct, explicit statement |
| **EI** (Inferred) | 0.7 | Logically entailed but not explicit |
| **EC** (Contextual) | 0.5 | Depends on surrounding context |
### 4.3 Specificity Bonus
More specific feedback provides higher confidence:
| Specificity | Bonus | Example |
|-------------|-------|---------|
| **S1** (Vague) | +0.00 | "Service was bad" |
| **S2** (Moderate) | +0.05 | "Service was slow at dinner" |
| **S3** (Specific) | +0.10 | "Waiter John took 40 mins for appetizers" |
### 4.4 Aggregate Confidence Calculation
```
confidence = min(0.95, base_confidence + specificity_bonus) * evidence_weight
Where:
- base_confidence = from span count table
- specificity_bonus = max(specificity bonuses across spans)
- evidence_weight = weighted average of span evidence types
```
**Calculation Example**:
```
Issue with 4 spans:
- Span 1: ES, S3 → weight 1.0, bonus 0.10
- Span 2: ES, S2 → weight 1.0, bonus 0.05
- Span 3: EI, S2 → weight 0.7, bonus 0.05
- Span 4: ES, S1 → weight 1.0, bonus 0.00
base_confidence = 0.85 (4 spans)
specificity_bonus = 0.10 (max across spans)
evidence_weight = (1.0 + 1.0 + 0.7 + 1.0) / 4 = 0.925
confidence = min(0.95, 0.85 + 0.10) * 0.925
confidence = 0.95 * 0.925
confidence = 0.879
```
### 4.5 Confidence Thresholds for Action
| Confidence | Classification | Recommended Action |
|------------|----------------|-------------------|
| < 0.50 | Low | Monitor only |
| 0.50-0.69 | Moderate | Investigate |
| 0.70-0.84 | High | Schedule action |
| 0.85-0.94 | Very High | Prioritize action |
| >= 0.95 | Confirmed | Immediate action |
---
## 5. Resolution Verification
### 5.1 CR-B as Resolution Confirmation
The Comparative Reference (CR) dimension from URT v5.1 provides explicit signals for resolution verification:
```
┌──────────────────────────────────────────────────────────────────────────┐
│ RESOLUTION VERIFICATION FLOW │
├──────────────────────────────────────────────────────────────────────────┤
│ │
│ ISSUE-001: O2.05 (Food Temperature) │
│ Status: RESOLVED (2026-01-15) │
│ │
│ ─────────────────────────────────────────────────────────────────── │
│ │
│ Day 0 (Resolved): "We've added warming stations" │
│ │
│ Day 7: Review X - "Food was hot and fresh!" │
│ Span: O2.05, V+, CR-N │
│ → Positive but no explicit comparison │
│ → Status: RESOLVED (monitoring) │
│ │
│ Day 14: Review Y - "Much better temperature than last time!" │
│ Span: O2.05, V+, CR-B │
│ → Explicit improvement signal (CR-B) │
│ → Status: VERIFIED │
│ │
└──────────────────────────────────────────────────────────────────────────┘
```
### 5.2 Verification Criteria
An issue transitions from RESOLVED to VERIFIED when:
| Criterion | Requirement | Strength |
|-----------|-------------|----------|
| **CR-B span** | Same subcode with CR-B marker | Strong (auto-verify) |
| **Positive span** | Same subcode with V+ | Moderate (needs 2+) |
| **Absence of negative** | No V- spans in window | Weak (time-based) |
**Verification Strength Weights**:
```
verification_score =
(CR_B_count * 1.0) + # Each CR-B = full verification point
(positive_count * 0.5) + # Each V+ = half point
(absence_bonus * 0.3) # No negatives in window = 0.3
IF verification_score >= 1.0:
VERIFY()
```
### 5.3 Verification Time Windows
Different window models balance verification speed against confidence:
| Model | Window | Use Case | Auto-Close |
|-------|--------|----------|------------|
| **Fast** | 30 days | High-volume, quick feedback loops | Yes |
| **Standard** | 60 days | Typical businesses | Yes |
| **Extended** | 90 days | Low-volume, B2B, seasonal | Yes |
| **Manual** | Indefinite | Complex issues, no auto-close | No |
**Window Selection Logic**:
```
IF issue.domain IN [O, J]:
window = 30 # Product/process issues get quick feedback
ELIF issue.domain IN [P, E]:
window = 60 # People/environment need more observations
ELIF issue.domain IN [R, V]:
window = 90 # Relationship/value issues take time to verify
ELSE:
window = 60 # Default
```
### 5.4 False Resolution Detection
A resolved issue is falsely resolved when negative feedback continues:
```
┌──────────────────────────────────────────────────────────────────────────┐
│ FALSE RESOLUTION DETECTION │
├──────────────────────────────────────────────────────────────────────────┤
│ │
│ ISSUE-002: J1.01 (Wait Times) │
│ Status: RESOLVED (2026-01-10) │
│ │
│ ─────────────────────────────────────────────────────────────────── │
│ │
│ Day 0: Marked RESOLVED - "Added more staff" │
│ │
│ Day 5: Review Z - "Still waiting forever, nothing changed" │
│ Span: J1.01, V-, CR-S │
│ → Explicit "unchanged" signal (CR-S) │
│ → FALSE RESOLUTION DETECTED │
│ → Status: REOPENED │
│ │
│ OR │
│ │
│ Day 12: Review W - "Wait times are even worse now" │
│ Span: J1.01, V-, CR-W │
│ → Explicit "worse" signal (CR-W) │
│ → FALSE RESOLUTION + REGRESSION │
│ → Status: REOPENED (escalated) │
│ │
└──────────────────────────────────────────────────────────────────────────┘
```
### 5.5 Auto-Reopen Triggers
| Trigger | Condition | Action |
|---------|-----------|--------|
| **CR-S after RESOLVED** | Any CR-S span on resolved issue | Reopen |
| **CR-W after RESOLVED** | Any CR-W span on resolved issue | Reopen + Escalate |
| **V- after VERIFIED** | V- span on verified issue | Reopen |
| **Recurrence threshold** | 2+ V- spans after RESOLVED | Reopen |
**Escalation on Reopen**:
```
IF reopen_count >= 2:
escalate_to_management()
IF reopen_reason == CR-W:
escalate_immediately()
flag_as_regression()
```
---
## 6. Metrics and SLAs
### 6.1 Time-to-Acknowledge (TTA) Targets
TTA measures time from DETECTED to ACKNOWLEDGED.
| Intensity | Target TTA | Max TTA | Escalation |
|-----------|------------|---------|------------|
| **I3** | 1 hour | 4 hours | Auto-escalate at max |
| **I2** | 8 hours | 24 hours | Auto-escalate at max |
| **I1** | 24 hours | 72 hours | Flag only |
### 6.2 Time-to-Resolve (TTR) Targets by Domain
TTR measures time from DETECTED to RESOLVED.
| Domain | I3 Target | I2 Target | I1 Target |
|--------|-----------|-----------|-----------|
| **O** (Offering) | 24h | 72h | 7d |
| **P** (People) | 4h | 24h | 72h |
| **J** (Journey) | 8h | 48h | 7d |
| **E** (Environment) | 24h | 72h | 14d |
| **A** (Access) | 4h | 24h | 72h |
| **V** (Value) | 8h | 48h | 7d |
| **R** (Relationship) | 4h | 24h | 72h |
### 6.3 Resolution Rate Calculation
```
Resolution Rate = (RESOLVED + VERIFIED) / (Total Issues - DECLINED)
Monthly Rolling Resolution Rate:
- Include all issues detected in the month
- Exclude issues still in DETECTED or ACK (not yet in pipeline)
- Calculate at month end + 14 days (allow resolution time)
```
**Target Resolution Rates**:
| Performance Level | Rate |
|-------------------|------|
| Excellent | >= 95% |
| Good | 85-94% |
| Acceptable | 70-84% |
| Poor | < 70% |
### 6.4 Recurrence Rate Tracking
```
Recurrence Rate = REOPENED / RESOLVED
Where:
- Count REOPENED transitions within verification window
- Exclude declines from denominator
```
**Recurrence Interpretation**:
| Recurrence Rate | Interpretation | Action |
|-----------------|----------------|--------|
| < 5% | Excellent | Maintain process |
| 5-10% | Acceptable | Monitor closely |
| 10-20% | Concerning | Review resolution quality |
| > 20% | Critical | Resolution process audit |
### 6.5 SLA Dashboard Metrics
```
┌────────────────────────────────────────────────────────────────────────┐
│ SLA DASHBOARD │
├────────────────────────────────────────────────────────────────────────┤
│ │
│ Period: 2026-01 (January) │
│ │
│ ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐ │
│ │ TTA Compliance │ │ TTR Compliance │ │ Resolution Rate │ │
│ │ 94.2% │ │ 87.5% │ │ 91.3% │ │
│ │ ▲ +2.1% MoM │ │ ▼ -1.3% MoM │ │ ▲ +3.2% MoM │ │
│ └──────────────────┘ └──────────────────┘ └──────────────────┘ │
│ │
│ ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐ │
│ │ Recurrence Rate │ │ Verification │ │ Open Issues │ │
│ │ 7.8% │ │ Rate: 68.4% │ │ 23 │ │
│ │ ▼ -1.2% MoM │ │ ▲ +5.1% MoM │ │ ▼ -8 from MoM │ │
│ └──────────────────┘ └──────────────────┘ └──────────────────┘ │
│ │
│ By Domain (TTR Compliance): │
│ ├── O (Offering): 89.2% ████████████████████░░░░ │
│ ├── P (People): 95.1% ████████████████████████░ │
│ ├── J (Journey): 82.4% ████████████████████░░░░░ │
│ ├── E (Environment): 91.0% █████████████████████░░░ │
│ ├── A (Access): 88.7% ████████████████████░░░░ │
│ ├── V (Value): 86.3% ███████████████████░░░░░ │
│ └── R (Relationship): 93.2% ███████████████████████░ │
│ │
└────────────────────────────────────────────────────────────────────────┘
```
---
## 7. Example Workflows
### 7.1 Single Complaint to Resolution to Verification
**Scenario**: A customer reports that their food arrived cold.
```
┌──────────────────────────────────────────────────────────────────────────┐
│ WORKFLOW 1: Standard Resolution Cycle │
├──────────────────────────────────────────────────────────────────────────┤
│ │
│ T+0h REVIEW RECEIVED │
│ "My pasta was stone cold when it arrived. Very disappointing." │
│ │
│ SPAN CLASSIFIED: │
│ ├── Primary: O2.05 (Condition at Delivery) │
│ ├── Valence: V- │
│ ├── Intensity: I2 │
│ ├── Specificity: S2 │
│ ├── Actionability: A2 │
│ ├── Evidence: ES │
│ └── Comparative: CR-N │
│ │
│ ISSUE CREATED: ISSUE-2026-0142 │
│ State: DETECTED │
│ Priority: 2.00 │
│ Owner: Kitchen Manager │
│ │
│ ───────────────────────────────────────────────────────────────────── │
│ │
│ T+2h ISSUE ACKNOWLEDGED │
│ Kitchen manager reviews issue, confirms pattern. │
│ State: DETECTED → ACKNOWLEDGED │
│ Notes: "Third cold food report this week. Investigating." │
│ │
│ ───────────────────────────────────────────────────────────────────── │
│ │
│ T+4h WORK STARTED │
│ State: ACKNOWLEDGED → IN_PROGRESS │
│ Action: "Checking heat lamp timers and delivery bags" │
│ Assigned: Line cook supervisor │
│ │
│ ───────────────────────────────────────────────────────────────────── │
│ │
│ T+8h ISSUE RESOLVED │
│ State: IN_PROGRESS → RESOLVED │
│ Resolution: "Heat lamps recalibrated, new insulated bags │
│ ordered for delivery. Staff briefed." │
│ Resolution Code: FIX-EQUIPMENT │
│ │
│ ───────────────────────────────────────────────────────────────────── │
│ │
│ T+14d VERIFICATION RECEIVED │
│ │
│ NEW REVIEW: │
│ "Great improvement! Food was piping hot this time, much │
│ better than my last order." │
│ │
│ SPAN CLASSIFIED: │
│ ├── Primary: O2.05 │
│ ├── Valence: V+ │
│ ├── Comparative: CR-B ← Explicit improvement signal │
│ └── ... │
│ │
│ ISSUE VERIFIED: ISSUE-2026-0142 │
│ State: RESOLVED → VERIFIED │
│ Verification: "CR-B span confirms resolution" │
│ │
│ ───────────────────────────────────────────────────────────────────── │
│ │
│ METRICS: │
│ ├── TTA: 2 hours (Target: 8h) ✓ │
│ ├── TTR: 8 hours (Target: 72h) ✓ │
│ ├── Time to Verify: 14 days │
│ └── Recurrence: None │
│ │
└──────────────────────────────────────────────────────────────────────────┘
```
### 7.2 Recurring Issue Detection and Escalation
**Scenario**: Multiple customers report the same issue that persists despite attempted fixes.
```
┌──────────────────────────────────────────────────────────────────────────┐
│ WORKFLOW 2: Recurring Issue with Escalation │
├──────────────────────────────────────────────────────────────────────────┤
│ │
│ Week 1, Day 1 │
│ │
│ REVIEW A: "Waited 45 minutes for a table despite reservation" │
│ SPAN: J1.01 (Wait Time), V-, I3, S3, CR-N │
│ → ISSUE-2026-0201 CREATED (I3 = immediate) │
│ → State: DETECTED, Priority: 4.00 │
│ │
│ ───────────────────────────────────────────────────────────────────── │
│ │
│ Week 1, Day 2 │
│ │
│ ACKNOWLEDGED and RESOLVED │
│ Resolution: "Added second host, adjusted OpenTable buffer time" │
│ │
│ ───────────────────────────────────────────────────────────────────── │
│ │
│ Week 2, Day 3 │
│ │
│ REVIEW B: "Still waiting 30+ minutes with reservation. Nothing changed" │
│ SPAN: J1.01, V-, I2, S3, CR-S ← Explicit "unchanged" signal │
│ │
│ → ISSUE-2026-0201 REOPENED │
│ → reopen_count: 1 │
│ → State: RESOLVED → REOPENED → IN_PROGRESS │
│ → Priority recalculated: 2.0 * 1.30 * 0.9 * 1.50 = 3.51 │
│ (I2 × log(2 spans) × decay × recurrence) │
│ │
│ ───────────────────────────────────────────────────────────────────── │
│ │
│ Week 2, Day 5 │
│ │
│ RESOLVED AGAIN │
│ Resolution: "Hired additional staff for Friday/Saturday rush" │
│ │
│ ───────────────────────────────────────────────────────────────────── │
│ │
│ Week 3, Day 6 │
│ │
│ REVIEW C: "The wait is even worse than before. 50 minutes this time!" │
│ SPAN: J1.01, V-, I3, S3, CR-W ← Explicit "worse" signal │
│ │
│ → ISSUE-2026-0201 REOPENED + ESCALATED │
│ → reopen_count: 2 (threshold met) │
│ → CR-W triggers immediate escalation │
│ → State: RESOLVED → REOPENED │
│ → Priority: 4.0 * 1.48 * 0.7 * 1.79 * 1.3 = 9.65 (CRITICAL) │
│ │
│ ESCALATION TRIGGERED: │
│ ├── Reason: "2+ reopens + CR-W regression" │
│ ├── Escalated To: Operations Director │
│ ├── Flag: REGRESSION │
│ └── Required: Root cause analysis within 24h │
│ │
│ ───────────────────────────────────────────────────────────────────── │
│ │
│ CAUSAL ANALYSIS ADDED (Full Profile): │
│ ├── CD-O: Operational (demand exceeds capacity) │
│ └── MG-P: Planning (reservation system not aligned with capacity) │
│ │
│ RESOLUTION (with systemic fix): │
│ "Implemented capacity-based reservation limits. System now blocks │
│ new reservations when approaching 80% capacity for time slot." │
│ │
└──────────────────────────────────────────────────────────────────────────┘
```
### 7.3 False Resolution and Reopen
**Scenario**: An issue is marked resolved but customer feedback indicates it was not actually fixed.
```
┌──────────────────────────────────────────────────────────────────────────┐
│ WORKFLOW 3: False Resolution Detection │
├──────────────────────────────────────────────────────────────────────────┤
│ │
│ Day 0 │
│ │
│ REVIEW: "The checkout button on the app doesn't work!" │
│ SPAN: E2.02 (Digital Functionality), V-, I3, S2, A3, CR-N │
│ → ISSUE-2026-0315 CREATED │
│ │
│ ───────────────────────────────────────────────────────────────────── │
│ │
│ Day 1 │
│ │
│ RESOLVED (incorrectly) │
│ Developer: "Cannot reproduce. Works on our test devices." │
│ Resolution Code: NAR (Not As Reported) │
│ State: RESOLVED │
│ │
│ ───────────────────────────────────────────────────────────────────── │
│ │
│ Day 3 │
│ │
│ REVIEW B: "Checkout STILL broken. Same as last week. Unusable app." │
│ SPAN: E2.02, V-, I3, S2, A3, CR-S ← "Still" = unchanged │
│ │
│ → FALSE RESOLUTION DETECTED │
│ → ISSUE-2026-0315 REOPENED │
│ → Original resolution invalidated │
│ → Alert: "Issue marked NAR but customer reports persistence" │
│ │
│ ───────────────────────────────────────────────────────────────────── │
│ │
│ Day 3 (continued) │
│ │
│ REVIEW C: "App checkout broken on Android. Can't complete purchase." │
│ SPAN: E2.02, V-, I3, S3, A3, CR-N │
│ │
│ → AGGREGATED to ISSUE-2026-0315 │
│ → span_count: 3 │
│ → Note: S3 span reveals Android-specific issue │
│ │
│ ───────────────────────────────────────────────────────────────────── │
│ │
│ Day 4 │
│ │
│ PROPER INVESTIGATION │
│ ├── Root cause: Button click area too small on Android devices │
│ ├── Missed in QA: Only tested on iOS │
│ └── Fix: Increased tap target to 48dp minimum │
│ │
│ RESOLVED (properly) │
│ ├── Resolution: "Fixed Android tap target size. Deployed v2.3.1" │
│ ├── Causal (added): MG-T (Testing gaps) │
│ └── Preventive: "Added Android device farm to CI/CD pipeline" │
│ │
│ ───────────────────────────────────────────────────────────────────── │
│ │
│ Day 12 │
│ │
│ REVIEW D: "Finally! Checkout works perfectly now. Thank you!" │
│ SPAN: E2.02, V+, I2, S2, A2, CR-B ← Explicit improvement │
│ │
│ → ISSUE-2026-0315 VERIFIED │
│ → State: RESOLVED → VERIFIED │
│ │
│ ───────────────────────────────────────────────────────────────────── │
│ │
│ POST-MORTEM FLAGS: │
│ ├── false_resolution_count: 1 │
│ ├── false_resolution_reason: NAR without proper investigation │
│ └── lesson_learned: "Require device-specific reproduction steps" │
│ │
└──────────────────────────────────────────────────────────────────────────┘
```
### 7.4 Aggregated Issue from Multiple Reviewers
**Scenario**: Low-intensity feedback from multiple customers aggregates into a significant issue.
```
┌──────────────────────────────────────────────────────────────────────────┐
│ WORKFLOW 4: Aggregated Issue Detection │
├──────────────────────────────────────────────────────────────────────────┤
│ │
│ AGGREGATION TIMELINE (30-day window) │
│ │
│ Day 1 │
│ REVIEW A: "Music was a bit loud" │
│ SPAN: E3.02 (Noise Level), V-, I1, S1, A2, CR-N │
│ → No issue created (I1 requires 5+ spans) │
│ → Span stored in aggregation buffer │
│ │
│ ───────────────────────────────────────────────────────────────────── │
│ │
│ Day 5 │
│ REVIEW B: "Could be quieter in here" │
│ SPAN: E3.02, V-, I1, S1, A2, CR-N │
│ → Aggregation check: 2 spans (threshold: 5) │
│ → No issue yet │
│ │
│ ───────────────────────────────────────────────────────────────────── │
│ │
│ Day 12 │
│ REVIEW C: "Background music drowns out conversation" │
│ SPAN: E3.02, V-, I2, S2, A2, CR-N ← Intensity I2 (threshold: 3) │
│ → I2 requires only 3 spans! │
│ → Aggregation check: 3 spans including this I2 │
│ → ISSUE CREATED: ISSUE-2026-0422 │
│ │
│ AGGREGATED ISSUE: │
│ ├── Subcode: E3.02 (Noise Level) │
│ ├── Span count: 3 │
│ ├── Max intensity: I2 │
│ ├── Avg intensity: I1.33 │
│ ├── Confidence: 0.80 (3 spans) * 0.98 (evidence) = 0.78 │
│ └── Priority: 2.0 * 1.48 * 0.87 * 1.0 = 2.57 │
│ │
│ ───────────────────────────────────────────────────────────────────── │
│ │
│ Day 15 │
│ REVIEW D: "Music is way too loud. Can barely hear my date." │
│ SPAN: E3.02, V-, I3, S2, A3, CR-N │
│ → AGGREGATED to ISSUE-2026-0422 │
│ → span_count: 4 │
│ → Max intensity upgraded to I3 │
│ → Priority recalculated: 4.0 * 1.60 * 0.80 * 1.0 = 5.12 │
│ │
│ ───────────────────────────────────────────────────────────────────── │
│ │
│ Day 18 │
│ REVIEW E: "Same issue as others - music overwhelming" │
│ SPAN: E3.02, V-, I2, S1, A2, CR-S ← Explicit "same" = awareness │
│ → AGGREGATED │
│ → span_count: 5 │
│ → recurrence_boost: 1.50 (CR-S signals ongoing) │
│ → Priority: 4.0 * 1.70 * 0.73 * 1.50 = 7.45 │
│ │
│ ───────────────────────────────────────────────────────────────────── │
│ │
│ ISSUE SUMMARY AT DAY 18: │
│ │
│ ┌────────────────────────────────────────────────────────────────┐ │
│ │ ISSUE-2026-0422: Noise Level - Background Music │ │
│ ├────────────────────────────────────────────────────────────────┤ │
│ │ State: DETECTED │ │
│ │ Priority: 7.45 (HIGH) │ │
│ │ Confidence: 0.88 │ │
│ │ Owner: Facilities Manager │ │
│ │ │ │
│ │ Contributing Spans: │ │
│ │ ├── Review A (Day 1): I1, S1 - "bit loud" │ │
│ │ ├── Review B (Day 5): I1, S1 - "could be quieter" │ │
│ │ ├── Review C (Day 12): I2, S2 - "drowns out conversation" │ │
│ │ ├── Review D (Day 15): I3, S2 - "way too loud" │ │
│ │ └── Review E (Day 18): I2, S1 - "same issue" (CR-S) │ │
│ │ │ │
│ │ Signals: │ │
│ │ ├── Consistent pattern across 5 independent reviewers │ │
│ │ ├── Intensity escalation (I1 → I2 → I3) │ │
│ │ └── Customer awareness of issue (CR-S in Review E) │ │
│ │ │ │
│ │ Recommended Action: │ │
│ │ "Audit background music volume levels. Consider time-based │ │
│ │ or occupancy-based volume adjustment." │ │
│ │ │ │
│ └────────────────────────────────────────────────────────────────┘ │
│ │
└──────────────────────────────────────────────────────────────────────────┘
```
---
## 8. Implementation Reference
### 8.1 Issue Record Schema
```json
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://urt.schema/v5.1/issue",
"title": "URT Issue Record",
"type": "object",
"properties": {
"issue_id": {
"type": "string",
"pattern": "^ISSUE-[0-9]{4}-[0-9]{4,}$"
},
"state": {
"enum": ["DETECTED", "ACKNOWLEDGED", "IN_PROGRESS", "RESOLVED", "VERIFIED", "DECLINED", "REOPENED", "STALE"]
},
"primary_subcode": {
"type": "string",
"pattern": "^[OPJEAVR][1-4]\\.[0-9]{2}$"
},
"domain": {
"type": "string",
"pattern": "^[OPJEAVR]$"
},
"span_ids": {
"type": "array",
"items": { "type": "string" },
"minItems": 1
},
"span_count": {
"type": "integer",
"minimum": 1
},
"max_intensity": {
"enum": ["I1", "I2", "I3"]
},
"priority_score": {
"type": "number",
"minimum": 0
},
"confidence_score": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"owner_team": {
"type": "string"
},
"owner_individual": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"acknowledged_at": {
"type": "string",
"format": "date-time"
},
"resolved_at": {
"type": "string",
"format": "date-time"
},
"verified_at": {
"type": "string",
"format": "date-time"
},
"reopen_count": {
"type": "integer",
"minimum": 0
},
"decline_reason": {
"enum": ["DEC-DUP", "DEC-OOS", "DEC-INS", "DEC-NAR", "DEC-EXT", "DEC-POL", "DEC-OLD"]
},
"resolution_code": {
"type": "string"
},
"resolution_notes": {
"type": "string"
},
"causal_codes": {
"type": "array",
"items": {
"type": "string",
"pattern": "^(CD|MG|SY)-[A-Z]$"
}
},
"entity": {
"type": "string",
"description": "Product, person, or feature this issue relates to"
},
"location": {
"type": "string",
"description": "Physical or logical location"
},
"verification_window_days": {
"type": "integer",
"enum": [30, 60, 90]
},
"state_history": {
"type": "array",
"items": {
"type": "object",
"properties": {
"state": { "type": "string" },
"timestamp": { "type": "string", "format": "date-time" },
"actor": { "type": "string" },
"notes": { "type": "string" }
}
}
}
},
"required": [
"issue_id", "state", "primary_subcode", "domain", "span_ids",
"span_count", "max_intensity", "priority_score", "confidence_score",
"created_at"
]
}
```
### 8.2 State Transition Event Schema
```json
{
"event_type": "state_transition",
"issue_id": "ISSUE-2026-0142",
"from_state": "IN_PROGRESS",
"to_state": "RESOLVED",
"timestamp": "2026-01-15T14:32:00Z",
"actor": "kitchen_manager",
"trigger": "manual",
"resolution_code": "FIX-EQUIPMENT",
"notes": "Heat lamps recalibrated, new insulated bags ordered."
}
```
### 8.3 Priority Recalculation Triggers
Recalculate priority score when:
1. New span aggregated to issue
2. Daily decay recalculation (batch)
3. CR marker detected (CR-S, CR-W, CR-B)
4. Issue reopened
5. State changed to IN_PROGRESS (freeze priority for SLA)
---
## 9. Integration Points
### 9.1 From URT Classification
```
URT Span Classification
┌─────────────────────┐
│ Span Filter │
│ (V- only for issues)│
└─────────────────────┘
┌─────────────────────┐
│ Aggregation Engine │
│ (match/create) │
└─────────────────────┘
┌─────────────────────┐
│ Issue Lifecycle │
│ (this framework) │
└─────────────────────┘
```
### 9.2 To Operational Systems
| Integration | Data Flow | Purpose |
|-------------|-----------|---------|
| **Ticketing** | Issue → Ticket | Route to appropriate team |
| **CRM** | Issue → Customer Record | Track customer issues |
| **Dashboard** | Issue → Metrics | Real-time monitoring |
| **Alerts** | State Change → Notification | SLA warnings |
| **BI/Analytics** | Issue → Data Warehouse | Historical analysis |
### 9.3 CR Marker Processing
```
On new span classified:
IF span.comparative == CR-B:
matching_issues = FIND_RESOLVED_ISSUES(span.subcode)
FOR issue IN matching_issues:
IF within_verification_window(issue):
VERIFY(issue, span)
ELIF span.comparative IN [CR-S, CR-W]:
matching_issues = FIND_RESOLVED_ISSUES(span.subcode)
FOR issue IN matching_issues:
IF issue.state IN [RESOLVED, VERIFIED]:
REOPEN(issue, span)
IF span.comparative == CR-W:
ESCALATE(issue, reason="REGRESSION")
```
---
## Document Control
| Field | Value |
|-------|-------|
| **Document** | C1 - Issue Lifecycle Framework |
| **Version** | 1.0 |
| **Status** | Production Ready |
| **Date** | 2026-01-23 |
| **Author** | URT Working Group |
| **Depends On** | URT Specification v5.1 |
| **Part Of** | Track C: Analytics Layer |
---
## Related Documents
| Document | Purpose | Status |
|----------|---------|--------|
| **URT Specification v5.1** | Core taxonomy and classification rules | Frozen |
| **C2 - Trend Analysis Framework** | Pattern detection over time | Planned |
| **C3 - Benchmark Framework** | Cross-business comparison | Planned |
| **C4 - Alert & Escalation Rules** | Automated notification logic | Planned |
---
*End of C1: Issue Lifecycle Framework*