diff --git a/server/src/dashboard.html b/server/src/dashboard.html index f47314c..3770fe4 100644 --- a/server/src/dashboard.html +++ b/server/src/dashboard.html @@ -1085,10 +1085,12 @@ `); loadGenericList('/api/adrs', 'adrs-container', item => ` - ${item.title} -
Context: ${item.context || ''}
+ ${item.id} | ${item.title} + ${item.status} +
Context: ${item.context || ''}
Decision: ${item.decision || ''}
-
Consequences: ${item.consequences || ''}
+
Consequence: ${item.consequence || ''}
+ ${item.supersedes ? `
Supersedes: ${item.supersedes}
` : ''} `); loadGenericList('/api/context_workspaces', 'workspaces-container', item => ` diff --git a/server/src/handlers/meta.rs b/server/src/handlers/meta.rs index daa6cf6..f87ccd3 100644 --- a/server/src/handlers/meta.rs +++ b/server/src/handlers/meta.rs @@ -25,6 +25,17 @@ impl McpTool for LogDecisionHandler { let mut final_id = String::new(); state.adrs.modify(|adrs| { + if let Some(superseded_id) = &req.supersedes { + for old_adr in adrs.iter_mut() { + if old_adr.id == *superseded_id { + old_adr.status = "superseded".to_string(); + // Re-index the modified old ADR + drop(idx.index_adr(old_adr)); + break; + } + } + } + final_id = format!("ADR-{:04}", adrs.len() + 1); let a = Adr { id: final_id.clone(), @@ -32,6 +43,8 @@ impl McpTool for LogDecisionHandler { context: req.context, decision: req.decision, consequence: req.consequence, + status: "accepted".to_string(), + supersedes: req.supersedes, timestamp: crate::handlers::utils::now_secs(), }; diff --git a/server/src/models.rs b/server/src/models.rs index 1452eab..1ceae6e 100644 --- a/server/src/models.rs +++ b/server/src/models.rs @@ -82,8 +82,16 @@ pub struct Adr { pub context: String, pub decision: String, pub consequence: String, + #[serde(default = "default_adr_status")] + pub status: String, + #[serde(default)] + pub supersedes: Option, pub timestamp: u64, } + +fn default_adr_status() -> String { + "accepted".to_string() +} #[derive(Debug, Clone, Serialize, Deserialize, Default)] pub struct Preference { pub key: String, diff --git a/server/src/tools.rs b/server/src/tools.rs index d548c4d..486b477 100644 --- a/server/src/tools.rs +++ b/server/src/tools.rs @@ -220,6 +220,8 @@ pub struct LogDecisionTool { pub decision: String, /// The consequence of the decision. pub consequence: String, + /// The ID of an older ADR this decision supersedes, if any. + pub supersedes: Option, } /// Query architectural decision records.