hive-forge: hard-error unresolved --label names; render dependency timeline events

This commit is contained in:
damocles 2026-08-02 04:41:52 +02:00 committed by mara
commit 7bad72d354
4 changed files with 134 additions and 20 deletions

View file

@ -196,6 +196,23 @@ fn format_event(ev: &Value) -> String {
}
}
"comment_ref" | "issue_ref" => "referenced from another issue/PR".to_owned(),
"add_dependency" | "remove_dependency" => {
let verb = if event_type == "add_dependency" {
"added dependency on"
} else {
"removed dependency on"
};
let dep = ev.get("dependent_issue");
let number = dep
.and_then(|d| d.get("number"))
.and_then(Value::as_u64)
.map_or_else(|| "?".to_owned(), |n| n.to_string());
let title = dep
.and_then(|d| d.get("title"))
.and_then(Value::as_str)
.unwrap_or("?");
format!("{verb} #{number} ({title})")
}
"changed_target_branch" => "changed target branch".to_owned(),
"review" => "submitted a review".to_owned(),
"lock" => "locked the conversation".to_owned(),
@ -344,6 +361,34 @@ mod tests {
);
}
#[test]
fn add_dependency_renders_target_issue() {
let ev = serde_json::json!({
"type": "add_dependency",
"user": { "login": "mara" },
"created_at": "2026-05-31T12:00:00Z",
"dependent_issue": { "number": 2850, "title": "extract swarm controller" },
});
assert_eq!(
format_event(&ev),
"**mara @ 2026-05-31T12:00:00Z**: added dependency on #2850 (extract swarm controller)" // lint:allow: sample issue number in a test fixture string, not a tracker tag
);
}
#[test]
fn remove_dependency_renders_target_issue() {
let ev = serde_json::json!({
"type": "remove_dependency",
"user": { "login": "mara" },
"created_at": "2026-05-31T12:00:00Z",
"dependent_issue": { "number": 2850, "title": "extract swarm controller" },
});
assert_eq!(
format_event(&ev),
"**mara @ 2026-05-31T12:00:00Z**: removed dependency on #2850 (extract swarm controller)" // lint:allow: sample issue number in a test fixture string, not a tracker tag
);
}
#[test]
fn unknown_event_type_renders_bracketed_placeholder() {
// Future-proofing: a forge schema bump that adds a new event