From cb6be9edb52f77b584caac8aba98fc046fcb7444 Mon Sep 17 00:00:00 2001 From: TheCryptoDonkey Date: Fri, 9 Oct 2026 12:49:05 +0100 Subject: [PATCH] fix: report an installed app's declared author The scanner gives every installed app author "Archipelago", and the app details sidebar shows it, so an app whose manifest declares metadata.author (Wildbloom: ForgeSworn) is credited to the node OS. apply_manifest_value already reads icon, tier and licence from the manifest's metadata; it now reads author too. Without one the scanner's default stays. --- .../src/container/docker_packages.rs | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/core/archipelago/src/container/docker_packages.rs b/core/archipelago/src/container/docker_packages.rs index 1fe2f1d0..aa7ab1a2 100644 --- a/core/archipelago/src/container/docker_packages.rs +++ b/core/archipelago/src/container/docker_packages.rs @@ -553,6 +553,24 @@ mod lifecycle_regression_tests { assert_eq!(entry.static_files.license, ""); } + #[test] + fn manifest_presentation_reports_the_declared_author() { + let mut entry = installing_fixture(); + entry.manifest.author = Some("Archipelago".to_owned()); + for (metadata, expected) in [ + (serde_json::json!({}), "Archipelago"), + (serde_json::json!({"author":" "}), "Archipelago"), + (serde_json::json!({"author":3}), "Archipelago"), + (serde_json::json!({"author":" ForgeSworn "}), "ForgeSworn"), + ] { + apply_manifest_value( + &serde_json::json!({"app":{"metadata":metadata}}), + &mut entry, + ); + assert_eq!(entry.manifest.author.as_deref(), Some(expected)); + } + } + #[test] fn installed_manifest_entry_path_survives_scans_without_changing_runtime_origin() { let mut entry = installing_fixture(); @@ -882,6 +900,10 @@ fn apply_manifest_value(value: &serde_json::Value, entry: &mut PackageDataEntry) if let Some(icon) = text(metadata.get("icon")) { entry.static_files.icon = icon; } + // The scanner's default author is the node OS; a declared author wins. + if let Some(author) = text(metadata.get("author")) { + entry.manifest.author = Some(author); + } if let Some(tier) = text(metadata.get("tier")) { entry.manifest.tier = Some(tier); }