Skip to content

Commit a1d1699

Browse files
committed
feat: add comment resolution timestamps
1 parent b909375 commit a1d1699

25 files changed

Lines changed: 107 additions & 11 deletions

File tree

TODO.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ This roadmap is derived from deep research into Greptile's public docs, blog, MC
4343
16. [x] Distinguish informational findings from blocking findings in lifecycle and readiness calculations.
4444
17. [x] Add "critical blockers" summary cards for unresolved `Error` and `Warning` comments.
4545
18. [x] Add per-PR readiness timelines showing when a review became mergeable.
46-
19. [ ] Store resolution timestamps for findings so mean-time-to-fix can be measured.
46+
19. [x] Store resolution timestamps for findings so mean-time-to-fix can be measured.
4747
20. [x] Add CLI and API surfaces to query PR readiness without opening the web UI.
4848

4949
## 3. Agentic Validation Loops
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
ALTER TABLE comments
2+
ADD COLUMN IF NOT EXISTS resolved_at TIMESTAMPTZ;

src/commands/eval/pattern/matching/run.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ mod tests {
5353
fix_effort: FixEffort::Low,
5454
feedback: None,
5555
status: crate::core::comment::CommentStatus::Open,
56+
resolved_at: None,
5657
};
5758

5859
let pattern = EvalPattern {
@@ -85,6 +86,7 @@ mod tests {
8586
fix_effort: FixEffort::Medium,
8687
feedback: None,
8788
status: crate::core::comment::CommentStatus::Open,
89+
resolved_at: None,
8890
};
8991

9092
let pattern = EvalPattern {
@@ -116,6 +118,7 @@ mod tests {
116118
fix_effort: FixEffort::Low,
117119
feedback: None,
118120
status: crate::core::comment::CommentStatus::Open,
121+
resolved_at: None,
119122
};
120123

121124
let pattern = EvalPattern {
@@ -145,6 +148,7 @@ mod tests {
145148
fix_effort: FixEffort::Low,
146149
feedback: None,
147150
status: crate::core::comment::CommentStatus::Open,
151+
resolved_at: None,
148152
};
149153

150154
let pattern = EvalPattern {
@@ -178,6 +182,7 @@ mod tests {
178182
fix_effort: FixEffort::Low,
179183
feedback: None,
180184
status: crate::core::comment::CommentStatus::Open,
185+
resolved_at: None,
181186
};
182187

183188
let pattern = EvalPattern {
@@ -207,6 +212,7 @@ mod tests {
207212
fix_effort: FixEffort::Low,
208213
feedback: None,
209214
status: crate::core::comment::CommentStatus::Open,
215+
resolved_at: None,
210216
};
211217

212218
let pattern = EvalPattern {
@@ -238,6 +244,7 @@ mod tests {
238244
fix_effort: FixEffort::Low,
239245
feedback: None,
240246
status: crate::core::comment::CommentStatus::Open,
247+
resolved_at: None,
241248
};
242249

243250
let pattern = EvalPattern {
@@ -268,6 +275,7 @@ mod tests {
268275
fix_effort: FixEffort::Low,
269276
feedback: None,
270277
status: crate::core::comment::CommentStatus::Open,
278+
resolved_at: None,
271279
};
272280

273281
let pattern = EvalPattern {
@@ -302,6 +310,7 @@ mod tests {
302310
fix_effort: FixEffort::Low,
303311
feedback: None,
304312
status: crate::core::comment::CommentStatus::Open,
313+
resolved_at: None,
305314
};
306315

307316
let pattern = EvalPattern {
@@ -335,6 +344,7 @@ mod tests {
335344
fix_effort: FixEffort::Medium,
336345
feedback: None,
337346
status: crate::core::comment::CommentStatus::Open,
347+
resolved_at: None,
338348
};
339349

340350
let pattern = EvalPattern {
@@ -371,6 +381,7 @@ mod tests {
371381
fix_effort: FixEffort::Medium,
372382
feedback: None,
373383
status: crate::core::comment::CommentStatus::Open,
384+
resolved_at: None,
374385
};
375386

376387
let pattern = EvalPattern {
@@ -408,6 +419,7 @@ mod tests {
408419
fix_effort: FixEffort::Low,
409420
feedback: None,
410421
status: crate::core::comment::CommentStatus::Open,
422+
resolved_at: None,
411423
};
412424

413425
let pattern = EvalPattern {

src/commands/feedback_eval/input.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ mod tests {
3939
fix_effort: FixEffort::Low,
4040
feedback: feedback.map(str::to_string),
4141
status: crate::core::comment::CommentStatus::Open,
42+
resolved_at: None,
4243
}
4344
}
4445

src/commands/misc/discussion/selection/rules.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ mod tests {
6565
fix_effort: core::comment::FixEffort::Low,
6666
feedback: None,
6767
status: crate::core::comment::CommentStatus::Open,
68+
resolved_at: None,
6869
};
6970
let result = select_discussion_comment(std::slice::from_ref(&comment), None, None).unwrap();
7071
assert_eq!(result.id, "cmt_1");

src/commands/misc/feedback/apply/accept.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ mod tests {
3737
fix_effort: core::comment::FixEffort::Low,
3838
feedback: None,
3939
status: crate::core::comment::CommentStatus::Open,
40+
resolved_at: None,
4041
};
4142

4243
let comments = vec![comment];

src/core/comment.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@ impl CommentSynthesizer {
120120
fix_effort,
121121
feedback: None,
122122
status: CommentStatus::Open,
123+
resolved_at: None,
123124
})
124125
}
125126
}

src/core/comment/summary.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,7 @@ mod tests {
235235
fix_effort: FixEffort::Low,
236236
feedback: None,
237237
status,
238+
resolved_at: None,
238239
}
239240
}
240241

src/core/comment/types.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ pub struct Comment {
2222
pub feedback: Option<String>,
2323
#[serde(default)]
2424
pub status: CommentStatus,
25+
#[serde(default, skip_serializing_if = "Option::is_none")]
26+
pub resolved_at: Option<i64>,
2527
}
2628

2729
#[derive(Debug, Clone, Serialize, Deserialize)]

src/core/composable_pipeline.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -374,6 +374,7 @@ mod tests {
374374
fix_effort: FixEffort::Medium,
375375
feedback: None,
376376
status: crate::core::comment::CommentStatus::Open,
377+
resolved_at: None,
377378
}
378379
}
379380

0 commit comments

Comments
 (0)