fix: fixed hidden mods being enabled on every launch (#794)

This commit is contained in:
Maciek 2026-09-05 18:00:15 +02:00 • committed by LynithDev
parent ca43e56455
commit 612cd9e2a8
2 changed files with 18 additions and 27 deletions

View file

@ -194,12 +194,9 @@ pub async fn install_bundle(
/// `suppression` comes from [`find_user_suppression`] so a choice filed under a
/// bundle the file has since left still counts
pub(crate) fn disable_was_deliberate(hidden: bool, suppression: Option<OverrideType>) -> bool {
pub(crate) fn disable_was_deliberate(suppression: Option<OverrideType>) -> bool {
match suppression {
Some(OverrideType::Removed) => true,
// Hidden files are never-shown dependencies
// they follow the bundle so only an outright removal keeps one off
Some(OverrideType::Disabled) => !hidden,
Some(OverrideType::Removed | OverrideType::Disabled) => true,
Some(OverrideType::Enabled) | None => false,
}
}
@ -243,7 +240,7 @@ pub async fn heal_bundle_activity(
// a package that moved keeps its old override row and reading only its
// current bundle would switch it back on
let suppression = find_user_suppression(&overrides, package_id);
if disable_was_deliberate(is_hidden, suppression) {
if disable_was_deliberate(suppression) {
continue;
}
@ -263,12 +260,6 @@ pub async fn heal_bundle_activity(
tracing::warn!(hash = %row.hash, error = %err, "failed to re-enable bundle content");
continue;
}
// Drop the stale override everywhere or a copy under another bundle
// keeps answering "off" and the two records never settle
if suppression == Some(OverrideType::Disabled) {
clear_suppressing_overrides(cluster_id, package_id, ctx).await?;
}
}
Ok(())
@ -803,32 +794,32 @@ mod tests {
#[test]
fn a_disable_with_no_override_behind_it_is_an_accident() {
assert!(!disable_was_deliberate(false, None));
assert!(!disable_was_deliberate(true, None));
assert!(!disable_was_deliberate(None));
}
#[test]
fn a_users_own_disable_is_respected() {
assert!(disable_was_deliberate(
false,
Some(OverrideType::Disabled)
));
assert!(disable_was_deliberate(false, Some(OverrideType::Removed)));
assert!(disable_was_deliberate(Some(OverrideType::Disabled)));
assert!(disable_was_deliberate(Some(OverrideType::Removed)));
}
#[test]
fn a_hidden_dependency_cannot_be_disabled_on_its_own() {
fn a_hidden_dependency_can_be_disabled_on_its_own() {
let file = BundleFile {
hidden: true,
..file(true)
};
assert!(
!disable_was_deliberate(true, Some(OverrideType::Disabled)),
"a hidden file follows its bundle; only removing it keeps it off"
disable_was_deliberate(Some(OverrideType::Disabled)),
"the hidden filter offers the toggle so the choice behind it has to outlive a launch"
);
assert!(disable_was_deliberate(true, Some(OverrideType::Removed)));
assert!(!effective_enabled(&file, Some(OverrideType::Disabled)));
}
#[test]
fn an_opt_in_override_never_reads_as_a_disable() {
assert!(!disable_was_deliberate(false, Some(OverrideType::Enabled)));
assert!(!disable_was_deliberate(true, Some(OverrideType::Enabled)));
assert!(!disable_was_deliberate(Some(OverrideType::Enabled)));
}
#[test]

View file

@ -702,7 +702,7 @@ async fn reconcile_update(
) -> ContentResult<()> {
let file_id = update.new_file.kind.package_id();
let suppression = find_user_suppression(overrides, &file_id);
let enabled = !disable_was_deliberate(update.new_file.hidden, suppression);
let enabled = !disable_was_deliberate(suppression);
set_artifact_enabled_to(update.cluster_id, hash, enabled, ctx).await?;
if hash != update.installed_hash {
@ -722,7 +722,7 @@ async fn reconcile_addition(
) -> ContentResult<()> {
let file_id = addition.new_file.kind.package_id();
let suppression = find_user_suppression(overrides, &file_id);
let enabled = !disable_was_deliberate(addition.new_file.hidden, suppression);
let enabled = !disable_was_deliberate(suppression);
set_artifact_enabled_to(addition.cluster_id, hash, enabled, ctx).await?;
artifact_dao::set_seen_status(&ctx.db, addition.cluster_id, hash, SeenStatus::New).await?;