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.