Skip to content

chore(stack): sync Web Audio privacy branch with live presentation root - #244

Closed
seonghobae wants to merge 1 commit into
feat/block-web-audio-fingerprintingfrom
feat/privacy-presentation-identity
Closed

chore(stack): sync Web Audio privacy branch with live presentation root#244
seonghobae wants to merge 1 commit into
feat/block-web-audio-fingerprintingfrom
feat/privacy-presentation-identity

Conversation

@seonghobae

@seonghobae seonghobae commented Aug 29, 2026

Copy link
Copy Markdown
Contributor

Closed after exact ancestry inspection showed this reverse sync cannot be merged cleanly: the historical #236 branch diverged from the live #229 root and GitHub reports conflicts. No merge or force push was attempted. The safe replacement path is a fresh branch from exact #229 with only the Web Audio delta replayed and reverified.

Merge exact-head bounded presentation surfaces into the privacy identity stack.
@coderabbitai

coderabbitai Bot commented Aug 29, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 2832e453-4e96-4b1e-86b4-22dfacc84941

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@seonghobae seonghobae closed this Aug 29, 2026

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Devin Review found 6 potential issues.

Devin Review

Comment on lines +152 to +153
} else if upper.starts_with("ANGLE") {
Some(Self::Angle)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Malformed renderer names bypass rejection

WebGlRendererToken::canonical accepts any spelling beginning with ANGLE, including ANGLEevil. Unknown renderers therefore enter the closed presentation set.

Prompt for agents
Tighten WebGlRendererToken::canonical in crates/originweave-fingerprint/src/stealth.rs so it recognizes only the documented ANGLE renderer grammar, rather than every string with an ANGLE prefix. Preserve software and SwiftShader precedence. Add realistic boundary tests for the accepted ANGLE form and malformed prefixes such as ANGLEevil, ANGLE suffixes without the required delimiter, and case variants, while retaining complete branch coverage.
Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.

Comment on lines +111 to +114
|| version.is_empty()
|| !version
.bytes()
.all(|byte| byte.is_ascii_alphanumeric() || byte == b'.')

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Invalid dotted versions pass validation

UaBrand::new accepts ., .131, 131., and 131..0 because it validates characters instead of components. Malformed brand versions enter validated profiles.

Prompt for agents
Update UaBrand::new in crates/originweave-fingerprint/src/ua_hints.rs to validate version strings as nonempty dot-separated ASCII-alphanumeric components. Reject leading, trailing, and consecutive dots while preserving accepted undotted and normal Chromium versions. Add boundary tests for each malformed dot placement and maintain complete branch coverage.
Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.

Comment on lines +258 to +263
if !mobile && !model.is_empty() {
return Err(ClientHintsError::ModelWithoutMobile);
}
if model.len() > MAX_MOBILE_MODEL_LENGTH {
return Err(ClientHintsError::ModelTooLong);
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Mobile hints require desktop platforms

UaClientHints::new accepts model-bearing mobile identities, but every available platform is desktop-only. Validated mobile profiles therefore report contradictory platform data.

Prompt for agents
Make mobile and platform semantics coherent in crates/originweave-fingerprint/src/ua_hints.rs. Either model the required mobile platform token or reject mobile identities until that platform is supported. Define and enforce the valid platform/mobile/model combinations, update the accessors and documentation as needed, and replace the current Linux Pixel test with realistic accepted and rejected combinations under complete branch coverage.
Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.

Comment on lines +27 to +33
pub use stealth::{
CanvasNoise, StealthError, StealthSurface, WebAudioRate, WebGlRendererToken, WebRtcInterface,
require_stealth_surfaces,
};
pub use ua_hints::{
ClientHintsError, HintsArchitecture, HintsBitness, HintsPlatform, UaBrand, UaClientHints,
};

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔍 New surfaces lack evidence binding

UaClientHints and stealth values remain outside PresentationProfile and its digest. Confirm adapters cannot claim replayable identity evidence without binding these fields.

Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.

Comment on lines +232 to +241
/// A validated, bounded UA Client Hints surface.
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct UaClientHints {
platform: HintsPlatform,
architecture: HintsArchitecture,
bitness: HintsBitness,
mobile: bool,
model: String,
brands: Vec<UaBrand>,
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔍 Platform-version policy remains undefined

The module identifies platform version as observable, but UaClientHints neither models nor suppresses it. Confirm the surface cannot be presented as complete.

Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.

Comment on lines +24 to +33
mod stealth;
mod ua_hints;

pub use stealth::{
CanvasNoise, StealthError, StealthSurface, WebAudioRate, WebGlRendererToken, WebRtcInterface,
require_stealth_surfaces,
};
pub use ua_hints::{
ClientHintsError, HintsArchitecture, HintsBitness, HintsPlatform, UaBrand, UaClientHints,
};

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔍 Pull-request description omits feature scope

The description calls this only stack realignment despite adding public fingerprint contracts and ADRs. It omits required effects, verification evidence, and residual risk.

Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant