pub struct ReviewRecord {
pub version: u32,
pub head: String,
pub reviewed_at: String,
pub findings: Vec<RecordedFinding>,
pub rechecks: u32,
pub verdict: Option<ReviewVerdict>,
pub posted: bool,
}Expand description
What spar review leaves behind, and what a second look reads and rewrites.
spar review used to leave nothing machine readable: not the commit it
read, not the points it raised. There was therefore nothing to check a later
push against, and the only second look possible was a first look again.
Fields§
§version: u32§head: StringThe commit the review worktree had checked out when the reviewers read
it. From git rev-parse HEAD there, never from a second gh call.
reviewed_at: StringWhen the review began, in the one shape GitHub returns,
2026-10-20T18:04:05Z, so it compares with a comment’s created_at
as a string. The start rather than the end, so a reply made while a
long review ran still counts as new on the next look.
findings: Vec<RecordedFinding>§rechecks: u32Second looks taken so far, which [listen] max_rechecks caps.
verdict: Option<ReviewVerdict>The formal verdict posted, when one was. None for a plain comment.
posted: boolWhether the review reached the pull request. A dry run’s record is kept
so spar post can complete it, but nobody has seen its findings, so it
does not count as a review to take a second look after.
Implementations§
Source§impl ReviewRecord
impl ReviewRecord
pub fn short_head(&self) -> &str
Sourcepub fn open_points(&self) -> impl Iterator<Item = &RecordedFinding>
pub fn open_points(&self) -> impl Iterator<Item = &RecordedFinding>
The points a second look rules on: everything but what was withdrawn.
Trait Implementations§
Source§impl Clone for ReviewRecord
impl Clone for ReviewRecord
Source§impl Debug for ReviewRecord
impl Debug for ReviewRecord
Source§impl<'de> Deserialize<'de> for ReviewRecord
impl<'de> Deserialize<'de> for ReviewRecord
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
impl Eq for ReviewRecord
Source§impl PartialEq for ReviewRecord
impl PartialEq for ReviewRecord
Source§impl Serialize for ReviewRecord
impl Serialize for ReviewRecord
impl StructuralPartialEq for ReviewRecord
Auto Trait Implementations§
impl Freeze for ReviewRecord
impl RefUnwindSafe for ReviewRecord
impl Send for ReviewRecord
impl Sync for ReviewRecord
impl Unpin for ReviewRecord
impl UnsafeUnpin for ReviewRecord
impl UnwindSafe for ReviewRecord
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.