From eeec42404d2b2135f5550e1fbc71456594d513c2 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Tue, 11 Aug 2026 19:50:28 +0900 Subject: [PATCH 1/6] test(extension): require reduced assurance for influenced attached tabs --- .../tests/attached_tab_assurance.rs | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 crates/originweave-core/tests/attached_tab_assurance.rs diff --git a/crates/originweave-core/tests/attached_tab_assurance.rs b/crates/originweave-core/tests/attached_tab_assurance.rs new file mode 100644 index 0000000..bbc705f --- /dev/null +++ b/crates/originweave-core/tests/attached_tab_assurance.rs @@ -0,0 +1,37 @@ +use originweave_core::{ + BrowserAttachmentKind, ExtensionInfluenceEvidence, ReducedAssuranceReason, + classify_reduced_assurance, +}; + +#[test] +fn attached_human_tab_with_extension_influence_is_explicitly_reduced_assurance() { + assert_eq!( + classify_reduced_assurance( + BrowserAttachmentKind::AttachedHumanTab, + ExtensionInfluenceEvidence::CanInfluencePageState, + ), + Some(ReducedAssuranceReason::AttachedTabExtensionInfluence) + ); +} + +#[test] +fn attached_human_tab_without_extension_influence_has_no_extension_reduction() { + assert_eq!( + classify_reduced_assurance( + BrowserAttachmentKind::AttachedHumanTab, + ExtensionInfluenceEvidence::NoExtensionInfluence, + ), + None + ); +} + +#[test] +fn isolated_profile_is_not_relabelled_by_attached_tab_rule() { + assert_eq!( + classify_reduced_assurance( + BrowserAttachmentKind::IsolatedProfile, + ExtensionInfluenceEvidence::CanInfluencePageState, + ), + None + ); +} From 94abb95d59b9c33537eeb41147897fc44fab9b13 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Tue, 11 Aug 2026 20:36:59 +0900 Subject: [PATCH 2/6] test(extension): sync native host coverage with parent --- crates/originweave-core/tests/native_messaging_authority.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/originweave-core/tests/native_messaging_authority.rs b/crates/originweave-core/tests/native_messaging_authority.rs index 5bee774..f0a830c 100644 --- a/crates/originweave-core/tests/native_messaging_authority.rs +++ b/crates/originweave-core/tests/native_messaging_authority.rs @@ -25,7 +25,7 @@ fn context(value: u64) -> BrowsingContextId { #[test] fn native_messaging_host_name_matches_chromium_manifest_syntax() { - let canonical = "com.contextualwisdom.originweave_host"; + let canonical = "com.contextualwisdom.originweave_host1"; assert_eq!(host_name(canonical).as_str(), canonical); for invalid in [ From b8c76d9863d8c3c5fad0b0d8717cfca8c38ff0e5 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Tue, 11 Aug 2026 20:50:58 +0900 Subject: [PATCH 3/6] feat(extension): classify reduced-assurance attached tabs --- crates/originweave-core/src/lib.rs | 49 ++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/crates/originweave-core/src/lib.rs b/crates/originweave-core/src/lib.rs index 6126019..cbf9309 100644 --- a/crates/originweave-core/src/lib.rs +++ b/crates/originweave-core/src/lib.rs @@ -1178,3 +1178,52 @@ pub fn evaluate_native_messaging_access( } NativeMessagingAccessDecision::Allow } + +/// Browser control surface represented by assurance evidence. +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum BrowserAttachmentKind { + /// OriginWeave is attached to an existing person-controlled browser tab. + AttachedHumanTab, + /// OriginWeave operates in a task-isolated browser profile. + IsolatedProfile, +} + +/// Trusted adapter evidence about extension influence on page state. +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum ExtensionInfluenceEvidence { + /// The trusted adapter established that an extension can influence page state. + CanInfluencePageState, + /// This bounded rule has no trusted evidence of extension influence. + NoExtensionInfluence, +} + +/// A specific reason that one browser context has reduced assurance. +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum ReducedAssuranceReason { + /// An attached human tab can be influenced by an existing browser extension. + AttachedTabExtensionInfluence, +} + +/// Classify the narrow attached-tab extension-influence assurance reduction. +/// +/// `None` means only that this rule did not identify this specific reduction. It +/// is not evidence of full trust, extension absence, or high assurance. A future +/// trusted Chromium adapter must supply the attachment and influence evidence and +/// evaluate any other applicable assurance rules separately. +#[must_use] +pub const fn classify_reduced_assurance( + attachment: BrowserAttachmentKind, + extension_influence: ExtensionInfluenceEvidence, +) -> Option { + if matches!( + (attachment, extension_influence), + ( + BrowserAttachmentKind::AttachedHumanTab, + ExtensionInfluenceEvidence::CanInfluencePageState + ) + ) { + Some(ReducedAssuranceReason::AttachedTabExtensionInfluence) + } else { + None + } +} From 231996f6db978c586207bd38596ebfc352dd54b2 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Tue, 11 Aug 2026 20:54:28 +0900 Subject: [PATCH 4/6] docs(changelog): record attached-tab assurance boundary --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6e4bd39..569bb0c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ All notable changes to OriginWeave are documented in this file. The format follo ### Added +- Explicit reduced-assurance classification for attached human tabs when trusted adapter evidence says an existing extension can influence page state; the narrow rule does not detect extensions, prove extension absence, grant Agent authority, or turn an unclassified context into high-assurance evidence. - Rust workspace for independently reusable core, policy, destination, network, TLS, resource, and evidence modules. - Canonical HTTPS and loopback-origin boundary with case-normalized schemes and hosts, default-port normalization, IPv4/IPv6 handling, browser-special numeric-host rejection, and explicit malformed-input errors. - Typed browser actions, capabilities, risk classes, execution modes, robots decisions, secret-delivery contracts, immutable canonical action-intent digests, and intent-bound approval scopes. From 292736fc8a697292e4ec49224b4c43f673ac1de9 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Tue, 11 Aug 2026 21:09:50 +0900 Subject: [PATCH 5/6] test(extension): require uncertainty-safe influence evidence name --- crates/originweave-core/tests/attached_tab_assurance.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/originweave-core/tests/attached_tab_assurance.rs b/crates/originweave-core/tests/attached_tab_assurance.rs index bbc705f..a9bb52c 100644 --- a/crates/originweave-core/tests/attached_tab_assurance.rs +++ b/crates/originweave-core/tests/attached_tab_assurance.rs @@ -15,11 +15,11 @@ fn attached_human_tab_with_extension_influence_is_explicitly_reduced_assurance() } #[test] -fn attached_human_tab_without_extension_influence_has_no_extension_reduction() { +fn attached_human_tab_without_known_extension_influence_has_no_extension_reduction() { assert_eq!( classify_reduced_assurance( BrowserAttachmentKind::AttachedHumanTab, - ExtensionInfluenceEvidence::NoExtensionInfluence, + ExtensionInfluenceEvidence::NoKnownExtensionInfluence, ), None ); From f6d57f86e2cbea70144f3b7504bc929e20d60233 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Tue, 11 Aug 2026 21:15:20 +0900 Subject: [PATCH 6/6] fix(extension): avoid overstating absence of influence evidence --- crates/originweave-core/src/lib.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/crates/originweave-core/src/lib.rs b/crates/originweave-core/src/lib.rs index cbf9309..538611a 100644 --- a/crates/originweave-core/src/lib.rs +++ b/crates/originweave-core/src/lib.rs @@ -1194,7 +1194,8 @@ pub enum ExtensionInfluenceEvidence { /// The trusted adapter established that an extension can influence page state. CanInfluencePageState, /// This bounded rule has no trusted evidence of extension influence. - NoExtensionInfluence, + /// Absence of known influence is not proof that extensions are absent or unable to interfere. + NoKnownExtensionInfluence, } /// A specific reason that one browser context has reduced assurance.