load_config reads file then delegates to load_config_str
Removes the duplicated collect-and-warn logic by having load_config
read the source from disk and call through to load_config_str.

https://claude.ai/code/session_015tdp3ahAmmdE69yCsV7J8b
change
commit 1b51e80d585d510ba968f35d4d1ebd7759123eb3
author Claude <noreply@anthropic.com>
date
parent d991aaf1
diff --git a/quire-core/src/fennel.rs b/quire-core/src/fennel.rs
index c5619f8..aceb5ad 100644
--- a/quire-core/src/fennel.rs
+++ b/quire-core/src/fennel.rs
@@ -203,13 +203,8 @@ impl Fennel {
     where
         T: serde::de::DeserializeOwned,
     {
-        let name = path.display().to_string();
-        let mut unknown = Vec::new();
-        let result = Self::new()?.load_file(path, |path| unknown.push(path.to_string()))?;
-        if !unknown.is_empty() {
-            tracing::warn!(config = %name, fields = ?unknown, "unknown config fields ignored");
-        }
-        Ok(result)
+        let source = fs_err::read_to_string(path)?;
+        Self::load_config_str(&source, &path.display().to_string())
     }
 
     /// Create a fresh Fennel VM and parse `source` into `T`.