Skip to main content

ainl_memory/
edge_labels.rs

1//! Canonical mission subgraph edge labels.
2
3/// Mission --HAS_FEATURE--> Feature
4pub const HAS_FEATURE: &str = "HAS_FEATURE";
5/// Feature --PRECONDITION--> Feature (DAG edge)
6pub const PRECONDITION: &str = "PRECONDITION";
7/// Feature --FULFILLS--> Assertion
8pub const FULFILLS: &str = "FULFILLS";
9/// Mission --HAS_ASSERTION--> Assertion
10pub const HAS_ASSERTION: &str = "HAS_ASSERTION";
11/// Mission --HAS_MILESTONE--> milestone grouping (reserved)
12pub const HAS_MILESTONE: &str = "HAS_MILESTONE";
13/// Feature --HANDED_OFF_BY--> Handoff
14pub const HANDED_OFF_BY: &str = "HANDED_OFF_BY";
15/// Episode --PROGRESS_FOR--> Feature (stall detection)
16pub const PROGRESS_FOR: &str = "PROGRESS_FOR";
17/// Feature --FIXES--> Assertion (auto-remediation)
18pub const FIXES: &str = "FIXES";
19/// Mission --VALIDATED_BY--> validation run summary
20pub const VALIDATED_BY: &str = "VALIDATED_BY";
21
22/// All mission-related edge labels accepted by graph writers.
23pub const MISSION_EDGE_LABELS: &[&str] = &[
24    HAS_FEATURE,
25    PRECONDITION,
26    FULFILLS,
27    HAS_ASSERTION,
28    HAS_MILESTONE,
29    HANDED_OFF_BY,
30    PROGRESS_FOR,
31    FIXES,
32    VALIDATED_BY,
33];
34
35/// Returns true when `label` is a known mission edge label.
36pub fn is_mission_edge_label(label: &str) -> bool {
37    MISSION_EDGE_LABELS
38        .iter()
39        .any(|l| label.eq_ignore_ascii_case(l))
40}