app

Local-first trade for farms and co-ops
git clone https://radroots.dev/git/app.git
Log | Files | Refs | README | LICENSE

commit f97b1f1479dd3ab9382b03c1d1f4ae0f4aab1dd8
parent bf304895261f36cccb6ceddf970fb7fbb414e7c3
Author: triesap <tyson@radroots.org>
Date:   Sun,  9 Aug 2026 19:16:49 +0000

product: cut over to the HarvestCircle identity

- replace package, bundle, database, and keyring coordinates atomically
- rename recovery, repair, evidence, title, and icon identities
- retain old on-disk Studio artifacts without lookup or migration aliases
- verify source, bindings, and the macOS HarvestCircle package

Diffstat:
Mapp/desktop/build.gradle.kts | 6+++---
Mapp/desktop/src/main/kotlin/org/radroots/harvestcircle/accounts/ui/HarvestCircleScreen.kt | 8++++----
Mapp/desktop/src/main/kotlin/org/radroots/harvestcircle/desktop/Main.kt | 4++--
Rapp/desktop/src/main/resources/icons/radroots.icns -> app/desktop/src/main/resources/icons/harvestcircle.icns | 0
Rapp/desktop/src/main/resources/icons/radroots.png -> app/desktop/src/main/resources/icons/harvestcircle.png | 0
Mapp/desktop/src/test/kotlin/org/radroots/harvestcircle/accounts/ui/HarvestCircleScreenTest.kt | 2+-
Mapp/desktop/src/test/kotlin/org/radroots/harvestcircle/application/HarvestCircleApplicationTest.kt | 2+-
Mapp/desktop/src/test/kotlin/org/radroots/harvestcircle/architecture/V5CompatibilityBaselineTest.kt | 12++++++------
Mcore/compatibility/v5-baseline.properties | 16++++++++--------
Mcore/crates/harvestcircle_ffi/build.rs | 2+-
Mcore/crates/harvestcircle_ffi/src/commands.rs | 11+++++++----
Mcore/crates/harvestcircle_runtime/src/persistence.rs | 8++++----
Mcore/crates/harvestcircle_runtime/src/runtime_actor.rs | 2+-
Mcore/crates/harvestcircle_runtime/tests/restart_isolation.rs | 2+-
Mcore/crates/harvestcircle_storage/src/accounts.rs | 2+-
Mcore/crates/harvestcircle_storage/src/db.rs | 24++++++++++++------------
Mcore/crates/harvestcircle_storage/src/os_keyring.rs | 4++--
Mcore/crates/harvestcircle_storage/src/recovery.rs | 6+++---
Mcore/crates/harvestcircle_storage/src/repair.rs | 12+++++++-----
Mcore/crates/harvestcircle_storage/tests/redaction.rs | 2+-
20 files changed, 65 insertions(+), 60 deletions(-)

diff --git a/app/desktop/build.gradle.kts b/app/desktop/build.gradle.kts @@ -713,13 +713,13 @@ compose.desktop { packageName = applicationName packageVersion = installableVersion - description = "Radroots HarvestCircle $appVersion" + description = "HarvestCircle $appVersion" copyright = "Copyright © 2024 Radroots, Inc." vendor = "Radroots, Inc" macOS { bundleID = bundleId - iconFile.set(project.file("src/main/resources/icons/radroots.icns")) + iconFile.set(project.file("src/main/resources/icons/harvestcircle.icns")) packageName = applicationName dockName = applicationName packageBuildVersion = macOsBuildVersion @@ -732,7 +732,7 @@ val verifyMacOsDistribution by tasks.registering(VerifyMacOsDistribution::class) dependsOn("createDistributable") appDirectory.set(layout.buildDirectory.dir("compose/binaries/main/app/$applicationName.app")) releaseLibrary.set(rustReleaseLibrary) - iconSource.set(layout.projectDirectory.file("src/main/resources/icons/radroots.icns")) + iconSource.set(layout.projectDirectory.file("src/main/resources/icons/harvestcircle.icns")) expectedBundleId.set(bundleId) expectedPackageVersion.set(installableVersion) expectedBuildVersion.set(macOsBuildVersion) diff --git a/app/desktop/src/main/kotlin/org/radroots/harvestcircle/accounts/ui/HarvestCircleScreen.kt b/app/desktop/src/main/kotlin/org/radroots/harvestcircle/accounts/ui/HarvestCircleScreen.kt @@ -72,7 +72,7 @@ fun StartupFailureScreen(problem: String) { .testTag("startup-failure"), verticalArrangement = Arrangement.spacedBy(16.dp), ) { - BasicText("radroots") + BasicText("HarvestCircle") BasicText(problem, Modifier.testTag("startup-problem")) } } @@ -146,7 +146,7 @@ private fun LifecycleScreen( .testTag(testTag), verticalArrangement = Arrangement.spacedBy(16.dp), ) { - BasicText("radroots") + BasicText("HarvestCircle") BasicText(message) } } @@ -167,7 +167,7 @@ private fun ActiveAccountHome( .testTag("home-screen"), verticalArrangement = Arrangement.spacedBy(10.dp), ) { - BasicText("radroots") + BasicText("HarvestCircle") BasicText(active.heading) BasicText(active.account.npub, Modifier.testTag("active-npub")) BasicText(active.account.publicKeyHex, Modifier.testTag("active-pubkey-hex")) @@ -225,7 +225,7 @@ private fun InactiveAccountsScreen( .testTag("accounts-screen"), verticalArrangement = Arrangement.spacedBy(16.dp), ) { - BasicText("radroots") + BasicText("HarvestCircle") BasicText("Accounts") if (degraded) { BasicText(model.problem ?: "Nostr relay access is unavailable. Local accounts remain available.") diff --git a/app/desktop/src/main/kotlin/org/radroots/harvestcircle/desktop/Main.kt b/app/desktop/src/main/kotlin/org/radroots/harvestcircle/desktop/Main.kt @@ -11,7 +11,7 @@ import java.awt.Dimension import java.awt.Taskbar import javax.imageio.ImageIO -private const val APPLICATION_NAME = "Radroots" +private const val APPLICATION_NAME = "HarvestCircle" private const val INITIAL_WINDOW_WIDTH = 1284 private const val INITIAL_WINDOW_HEIGHT = 795 private const val MINIMUM_WINDOW_WIDTH = 1080 @@ -68,7 +68,7 @@ private fun configureMacOsApplication(): String? { val icon = loadRuntimeIcon { - Thread.currentThread().contextClassLoader.getResourceAsStream("icons/radroots.png") + Thread.currentThread().contextClassLoader.getResourceAsStream("icons/harvestcircle.png") } ?: return "The application icon resource is unavailable." return runCatching { taskbar.iconImage = icon } .fold( diff --git a/app/desktop/src/main/resources/icons/radroots.icns b/app/desktop/src/main/resources/icons/harvestcircle.icns Binary files differ. diff --git a/app/desktop/src/main/resources/icons/radroots.png b/app/desktop/src/main/resources/icons/harvestcircle.png Binary files differ. diff --git a/app/desktop/src/test/kotlin/org/radroots/harvestcircle/accounts/ui/HarvestCircleScreenTest.kt b/app/desktop/src/test/kotlin/org/radroots/harvestcircle/accounts/ui/HarvestCircleScreenTest.kt @@ -83,7 +83,7 @@ class HarvestCircleScreenTest { } onNodeWithTag("accounts-screen").assertIsDisplayed() - onNodeWithText("radroots").assertIsDisplayed() + onNodeWithText("HarvestCircle").assertIsDisplayed() onNodeWithTag("choose-create-account").performClick() onNodeWithTag("generate-key").performClick() onNodeWithTag("cancel-account-entry").performClick() diff --git a/app/desktop/src/test/kotlin/org/radroots/harvestcircle/application/HarvestCircleApplicationTest.kt b/app/desktop/src/test/kotlin/org/radroots/harvestcircle/application/HarvestCircleApplicationTest.kt @@ -48,7 +48,7 @@ class HarvestCircleApplicationTest { ) } - onNodeWithText("radroots").assertIsDisplayed() + onNodeWithText("HarvestCircle").assertIsDisplayed() onNodeWithTag("toggle-application").performClick() waitForIdle() diff --git a/app/desktop/src/test/kotlin/org/radroots/harvestcircle/architecture/V5CompatibilityBaselineTest.kt b/app/desktop/src/test/kotlin/org/radroots/harvestcircle/architecture/V5CompatibilityBaselineTest.kt @@ -18,18 +18,18 @@ class V5CompatibilityBaselineTest { root.resolve("core/compatibility/v5-baseline.properties").inputStream().use(::load) } - assertEquals("studio-runtime-v5", baseline.getProperty("baseline.id")) + assertEquals("harvestcircle-runtime-v5", baseline.getProperty("baseline.id")) assertEquals("5", baseline.getProperty("schema.version")) assertEquals("legacy-unversioned-v1", baseline.getProperty("ffi.contract")) assertEquals("1", baseline.getProperty("ffi.snapshot.schema")) assertEquals("0.1.0-alpha", baseline.getProperty("ffi.runtime.version")) assertEquals("org.radroots.harvestcircle", baseline.getProperty("source.namespace")) - assertEquals("org.radroots.studio", baseline.getProperty("package.namespace")) - assertEquals("org.radroots.studio", baseline.getProperty("package.application_id")) - assertEquals("Radroots", baseline.getProperty("package.name")) - assertEquals("org.radroots.studio", baseline.getProperty("package.bundle_id")) + assertEquals("org.radroots.harvestcircle", baseline.getProperty("package.namespace")) + assertEquals("org.radroots.harvestcircle", baseline.getProperty("package.application_id")) + assertEquals("HarvestCircle", baseline.getProperty("package.name")) + assertEquals("org.radroots.harvestcircle", baseline.getProperty("package.bundle_id")) assertEquals("1.0.0", baseline.getProperty("package.version")) - assertEquals("org.radroots.studio.nostr", baseline.getProperty("keyring.service")) + assertEquals("org.radroots.harvestcircle.nostr", baseline.getProperty("keyring.service")) assertEquals( "canonical-lowercase-public-key-hex", baseline.getProperty("keyring.account"), diff --git a/core/compatibility/v5-baseline.properties b/core/compatibility/v5-baseline.properties @@ -1,17 +1,17 @@ -baseline.id=studio-runtime-v5 +baseline.id=harvestcircle-runtime-v5 schema.version=5 ffi.contract=legacy-unversioned-v1 ffi.snapshot.schema=1 ffi.runtime.version=0.1.0-alpha source.namespace=org.radroots.harvestcircle -package.namespace=org.radroots.studio -package.application_id=org.radroots.studio -package.name=Radroots -package.bundle_id=org.radroots.studio +package.namespace=org.radroots.harvestcircle +package.application_id=org.radroots.harvestcircle +package.name=HarvestCircle +package.bundle_id=org.radroots.harvestcircle package.version=1.0.0 database.qualifier=org database.organization=radroots -database.application=studio -database.filename=studio.sqlite3 -keyring.service=org.radroots.studio.nostr +database.application=harvestcircle +database.filename=harvestcircle.sqlite3 +keyring.service=org.radroots.harvestcircle.nostr keyring.account=canonical-lowercase-public-key-hex diff --git a/core/crates/harvestcircle_ffi/build.rs b/core/crates/harvestcircle_ffi/build.rs @@ -24,7 +24,7 @@ fn main() { collect_public_metadata(Path::new(source), &mut metadata); } let mut migrations = fs::read_dir("../harvestcircle_storage/migrations") - .expect("read Studio migration catalog") + .expect("read HarvestCircle migration catalog") .map(|entry| entry.expect("read migration entry").path()) .filter(|path| path.extension().is_some_and(|extension| extension == "sql")) .collect::<Vec<_>>(); diff --git a/core/crates/harvestcircle_ffi/src/commands.rs b/core/crates/harvestcircle_ffi/src/commands.rs @@ -29,8 +29,8 @@ use crate::{ const DATABASE_QUALIFIER: &str = "org"; const DATABASE_ORGANIZATION: &str = "radroots"; -const DATABASE_APPLICATION: &str = "studio"; -const DATABASE_FILENAME: &str = "studio.sqlite3"; +const DATABASE_APPLICATION: &str = "harvestcircle"; +const DATABASE_FILENAME: &str = "harvestcircle.sqlite3"; const DEVELOPMENT_DATA_DIR_ENVIRONMENT: &str = "HARVESTCIRCLE_DEVELOPMENT_DATA_DIR"; pub(crate) const ACTOR_MAILBOX_CAPACITY: usize = 64; const MAX_COMMAND_DEADLINE_MILLIS: u64 = 30_000; @@ -1045,7 +1045,10 @@ mod tests { } let directory = tempfile::tempdir().expect("directory"); - let rejected = directory.path().join("rejected").join("studio.sqlite3"); + let rejected = directory + .path() + .join("rejected") + .join("harvestcircle.sqlite3"); let incompatible = CompatibilityExpectation { contract_major: FFI_CONTRACT_MAJOR + 1, ..compatible @@ -1067,7 +1070,7 @@ mod tests { }) }; - assert_eq!(property("baseline.id"), Some("studio-runtime-v5")); + assert_eq!(property("baseline.id"), Some("harvestcircle-runtime-v5")); assert_eq!(property("schema.version"), Some("5")); assert_eq!(CURRENT_SCHEMA_VERSION, 10); assert_eq!(property("ffi.contract"), Some("legacy-unversioned-v1")); diff --git a/core/crates/harvestcircle_runtime/src/persistence.rs b/core/crates/harvestcircle_runtime/src/persistence.rs @@ -355,7 +355,7 @@ mod tests { #[test] fn persistent_bootstrap_handles_fresh_and_existing_signed_out_state() { let directory = tempdir().expect("directory"); - let path = directory.path().join("studio.sqlite3"); + let path = directory.path().join("harvestcircle.sqlite3"); let public_key = account().public_key(); let secrets = InMemorySecretStore::default(); { @@ -388,7 +388,7 @@ mod tests { #[test] fn corrupt_database_fails_safely_without_recreation() { let directory = tempdir().expect("directory"); - let path = directory.path().join("studio.sqlite3"); + let path = directory.path().join("harvestcircle.sqlite3"); fs::write(&path, b"not a sqlite database").expect("corrupt file"); let error = PersistentAppCore::open(&path, RelayConfiguration::default()) @@ -404,7 +404,7 @@ mod tests { #[test] fn persisted_generate_and_import_survive_restart_without_secret_bytes() { let directory = tempdir().expect("directory"); - let path = directory.path().join("studio.sqlite3"); + let path = directory.path().join("harvestcircle.sqlite3"); let secrets = InMemorySecretStore::default(); let selected; { @@ -646,7 +646,7 @@ mod tests { #[test] fn bootstrap_recovery_completes_credential_deleted_removal_and_fallback() { let directory = tempdir().expect("directory"); - let path = directory.path().join("studio.sqlite3"); + let path = directory.path().join("harvestcircle.sqlite3"); let secrets = InMemorySecretStore::default(); let first; let removed; diff --git a/core/crates/harvestcircle_runtime/src/runtime_actor.rs b/core/crates/harvestcircle_runtime/src/runtime_actor.rs @@ -1584,7 +1584,7 @@ mod tests { #[tokio::test(flavor = "multi_thread")] async fn installation_identity_survives_file_backed_runtime_restart() { let directory = tempfile::tempdir().expect("temporary directory"); - let path = directory.path().join("studio.sqlite3"); + let path = directory.path().join("harvestcircle.sqlite3"); let first = RuntimeActorHandle::open( &path, RelayConfiguration::default(), diff --git a/core/crates/harvestcircle_runtime/tests/restart_isolation.rs b/core/crates/harvestcircle_runtime/tests/restart_isolation.rs @@ -22,7 +22,7 @@ impl Clock for FixedClock { #[test] fn restart_restores_selection_and_keeps_account_namespaces_isolated() { let directory = tempdir().expect("temporary directory"); - let path = directory.path().join("studio.sqlite3"); + let path = directory.path().join("harvestcircle.sqlite3"); let secrets = InMemorySecretStore::default(); let (owner_a, owner_b); diff --git a/core/crates/harvestcircle_storage/src/accounts.rs b/core/crates/harvestcircle_storage/src/accounts.rs @@ -356,7 +356,7 @@ mod tests { #[test] fn accounts_and_selection_survive_restart_without_secret_text() { let directory = tempdir().expect("temporary directory"); - let path = directory.path().join("studio.sqlite3"); + let path = directory.path().join("harvestcircle.sqlite3"); let account = account(3, 30); { diff --git a/core/crates/harvestcircle_storage/src/db.rs b/core/crates/harvestcircle_storage/src/db.rs @@ -411,9 +411,9 @@ mod tests { fs::write(&regular, b"file").expect("write regular file"); assert!(create_secure_directory(&regular).is_err()); - let database = directory.path().join("studio.sqlite3"); + let database = directory.path().join("harvestcircle.sqlite3"); fs::write(&database, b"database").expect("write database file"); - fs::create_dir(directory.path().join("studio.sqlite3-wal")) + fs::create_dir(directory.path().join("harvestcircle.sqlite3-wal")) .expect("create invalid WAL sidecar"); assert!(restrict_sqlite_sidecars(&database).is_err()); } @@ -484,7 +484,7 @@ mod tests { #[test] fn v5_data_migrates_append_only_with_identity_profile_and_selection() { let directory = tempdir().expect("temporary directory"); - let path = directory.path().join("studio.sqlite3"); + let path = directory.path().join("harvestcircle.sqlite3"); let public_key = "07".repeat(32); { let mut connection = Connection::open(&path).expect("legacy database"); @@ -544,7 +544,7 @@ mod tests { let backup = directory .path() - .join("studio.sqlite3.recovery/migration-v5-to-v10.sqlite3"); + .join("harvestcircle.sqlite3.recovery/migration-v5-to-v10.sqlite3"); fs::OpenOptions::new() .append(true) .open(backup) @@ -559,7 +559,7 @@ mod tests { #[test] fn corrupt_v5_identity_fails_before_migration_without_recreation() { let directory = tempdir().expect("temporary directory"); - let path = directory.path().join("studio.sqlite3"); + let path = directory.path().join("harvestcircle.sqlite3"); { let mut connection = Connection::open(&path).expect("legacy database"); configure(&connection).expect("configuration"); @@ -593,7 +593,7 @@ mod tests { #[test] fn invalid_curve_identity_is_quarantined_without_mutation() { let directory = tempdir().expect("temporary directory"); - let path = directory.path().join("studio.sqlite3"); + let path = directory.path().join("harvestcircle.sqlite3"); { let mut connection = Connection::open(&path).expect("legacy database"); configure(&connection).expect("configuration"); @@ -665,7 +665,7 @@ mod tests { assert!( directory .path() - .join("studio.sqlite3.quarantined-evidence") + .join("harvestcircle.sqlite3.quarantined-evidence") .is_file() ); } @@ -710,7 +710,7 @@ mod tests { #[test] fn failed_v5_copy_rolls_back_the_active_migration() { let directory = tempdir().expect("temporary directory"); - let path = directory.path().join("studio.sqlite3"); + let path = directory.path().join("harvestcircle.sqlite3"); let public_key = "07".repeat(32); { let mut connection = Connection::open(&path).expect("legacy database"); @@ -769,7 +769,7 @@ mod tests { #[test] fn second_process_cannot_acquire_writable_ownership() { let directory = tempdir().expect("temporary directory"); - let path = directory.path().join("studio.sqlite3"); + let path = directory.path().join("harvestcircle.sqlite3"); let _owner = Database::open(&path).expect("parent owner"); let status = Command::new(std::env::current_exe().expect("test executable")) .arg("--exact") @@ -792,7 +792,7 @@ mod tests { #[test] fn migration_persists_schema_version_across_file_reopen() { let directory = tempdir().expect("temporary directory"); - let path = directory.path().join("studio.sqlite3"); + let path = directory.path().join("harvestcircle.sqlite3"); { let database = Database::open(&path).expect("open file database"); @@ -812,7 +812,7 @@ mod tests { #[test] fn writable_ownership_rejects_a_second_runtime_and_releases_on_drop() { let directory = tempdir().expect("temporary directory"); - let path = directory.path().join("studio.sqlite3"); + let path = directory.path().join("harvestcircle.sqlite3"); let first = Database::open(&path).expect("first owner"); let Err(error) = Database::open(&path) else { panic!("second owner must fail"); @@ -831,7 +831,7 @@ mod tests { use std::os::unix::fs::PermissionsExt; let directory = tempdir().expect("temporary directory"); - let path = directory.path().join("studio.sqlite3"); + let path = directory.path().join("harvestcircle.sqlite3"); let database = Database::open(&path).expect("open file database"); let mode = fs::metadata(&path) .expect("database metadata") diff --git a/core/crates/harvestcircle_storage/src/os_keyring.rs b/core/crates/harvestcircle_storage/src/os_keyring.rs @@ -5,7 +5,7 @@ use harvestcircle_domain::{PublicKey, SafeError, SafeErrorCode, SafeMessage, Sec use keyring::{Entry, Error as KeyringError}; use zeroize::Zeroizing; -pub const CREDENTIAL_SERVICE: &str = "org.radroots.studio.nostr"; +pub const CREDENTIAL_SERVICE: &str = "org.radroots.harvestcircle.nostr"; #[derive(Default)] pub struct OsKeyringSecretStore { @@ -109,7 +109,7 @@ mod tests { let public_key = PublicKey::from_hex("7e7e9c42a91bfef19fa7ea99d52d8afdb67d893a8fefba1f5cb9793f2107f6d7") .expect("valid public key"); - assert_eq!(CREDENTIAL_SERVICE, "org.radroots.studio.nostr"); + assert_eq!(CREDENTIAL_SERVICE, "org.radroots.harvestcircle.nostr"); assert_eq!( public_key.to_hex(), "7e7e9c42a91bfef19fa7ea99d52d8afdb67d893a8fefba1f5cb9793f2107f6d7" diff --git a/core/crates/harvestcircle_storage/src/recovery.rs b/core/crates/harvestcircle_storage/src/recovery.rs @@ -14,7 +14,7 @@ type HmacSha256 = Hmac<Sha256>; const RECOVERY_DIRECTORY_SUFFIX: &str = "recovery"; const AUTHENTICATION_KEY_FILENAME: &str = "authentication-key-v1"; -const MANIFEST_FORMAT: &str = "radroots-studio-migration-recovery-v1"; +const MANIFEST_FORMAT: &str = "harvestcircle-migration-recovery-v1"; pub(crate) struct MigrationRecovery { directory: PathBuf, @@ -540,7 +540,7 @@ mod tests { #[test] fn migration_recovery_authenticates_finishes_reopens_and_restores() { let directory = tempdir().expect("temporary directory"); - let database = directory.path().join("studio.sqlite3"); + let database = directory.path().join("harvestcircle.sqlite3"); sqlite_database(&database); let recovery = MigrationRecovery::prepare(&database, 5, 10).expect("prepare recovery"); @@ -569,7 +569,7 @@ mod tests { #[test] fn recovery_manifest_rejects_every_tampered_authority_field() { let directory = tempdir().expect("temporary directory"); - let database = directory.path().join("studio.sqlite3"); + let database = directory.path().join("harvestcircle.sqlite3"); sqlite_database(&database); let recovery = MigrationRecovery::prepare(&database, 5, 10).expect("prepare recovery"); let original = fs::read_to_string(&recovery.marker).expect("read marker"); diff --git a/core/crates/harvestcircle_storage/src/repair.rs b/core/crates/harvestcircle_storage/src/repair.rs @@ -12,8 +12,8 @@ use crate::compatibility::{DatabasePreflight, preflight}; use crate::db::{CURRENT_SCHEMA_VERSION, restrict_file_permissions}; type HmacSha256 = Hmac<Sha256>; -const EXPORT_DOMAIN: &[u8] = b"radroots-studio-quarantine-export-v1"; -const REPAIR_DOMAIN: &[u8] = b"radroots-studio-repair-candidate-v1"; +const EXPORT_DOMAIN: &[u8] = b"harvestcircle-quarantine-export-v1"; +const REPAIR_DOMAIN: &[u8] = b"harvestcircle-repair-candidate-v1"; pub struct RepairAuthorization(Zeroizing<[u8; 32]>); @@ -142,7 +142,7 @@ pub(crate) fn install_candidate( return Err(storage_error()); } copy_secure(&candidate.path, &replacement)?; - let retained = parent.join("studio.sqlite3.quarantined-evidence"); + let retained = parent.join("harvestcircle.sqlite3.quarantined-evidence"); if retained.try_exists().map_err(|_| storage_error())? { let _ = fs::remove_file(&replacement); return Err(storage_error()); @@ -344,7 +344,7 @@ mod tests { fn repair_installation_rejects_tampering_quarantined_candidates_and_staging_collisions() { let directory = tempdir().expect("temporary directory"); let authorization = RepairAuthorization::from_bytes(vec![0x41; 32]).expect("authorization"); - let target = directory.path().join("studio.sqlite3"); + let target = directory.path().join("harvestcircle.sqlite3"); quarantined_database(&target); let candidate_path = directory.path().join("candidate.sqlite3"); drop(Database::open(&candidate_path).expect("candidate database")); @@ -377,7 +377,9 @@ mod tests { assert!(install_candidate(&target, &candidate, &authorization).is_err()); fs::remove_file(&replacement).expect("remove occupied replacement"); - let retained = directory.path().join("studio.sqlite3.quarantined-evidence"); + let retained = directory + .path() + .join("harvestcircle.sqlite3.quarantined-evidence"); fs::write(&retained, b"occupied").expect("occupied retained evidence"); assert!(install_candidate(&target, &candidate, &authorization).is_err()); assert!(!replacement.exists()); diff --git a/core/crates/harvestcircle_storage/tests/redaction.rs b/core/crates/harvestcircle_storage/tests/redaction.rs @@ -27,7 +27,7 @@ fn assert_redacted(bytes: &[u8]) { #[test] fn redaction_guards_sqlite_schema_and_non_secret_records() { let directory = tempdir().expect("directory"); - let path = directory.path().join("studio.sqlite3"); + let path = directory.path().join("harvestcircle.sqlite3"); { let database = Database::open(&path).expect("database"); let public_key = PublicKey::from_bytes([7; 32]).expect("valid public key");