feat(extension): bind managed Agent Task policy to browser session - #97
Draft
seonghobae wants to merge 15 commits into
Draft
Conversation
|
Important Review skippedDraft detected. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Plus Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
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. Comment |
This was referenced Aug 11, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Partial implementation of #27, stacked on PR #94.
Buyer/security gap
PR #94 makes managed Agent Task extension admission time-bounded but still leaves the policy reusable across OriginWeave browser sessions. A valid managed-extension policy for one isolated Agent Task session must not become ambient authority for another session. A mismatched session also must not learn whether the policy window is malformed, overlong, not yet valid, or expired, nor whether an extension is managed.
TDD / RCA sequence
6cc5211e4b7de3262368651446ea8be8227b650drequired every mismatched-session evaluation to returnDenySessionMismatch, including when the bound policy window was malformed, overlong, not yet valid, or expired. Its first CI stopped at canonical formatting, so that setup failure was not promoted as semantic RED.52e33a06d665a2c8c299edac61ffb1b3d5d51c70reached the intended production boundary in CI run31938116305: repository contracts, formatting, and workspace check passed, thenmismatched_session_cannot_probe_policy_window_statefailed with actualDenyInvalidPolicyWindowversus requiredDenySessionMismatch. This is the valid semantic RED.85a9fa723cc9efddac7008dcb5ef92e81a8049b3moved exact session validation before policy-window and allow-list evaluation. A foreign session therefore receives one stable typed denial without learning bound-session policy state.3c96a289824f6cc946867c16dda3a30097993c77failed exact CI run32024664291, Rust contracts job95371434724, at the branch-local negative-capability test: currentExtensionAccessRequest::newrequires canonicalOriginplus trusted evaluation time, while this descendant still supplied the former four-argument request shape.b1ea0b0867ea77262415c1707a7df93ab1c07151non-destructively reconciles exact current feat(extension): expire managed Agent Task policy #94 while preserving all session-binding production semantics and regressions. The compatibility repair supplies a valid controlled HTTPS origin plus trusted time only to the separate negative-capability request construction, preservingDenyMissingGrant. No production authority or evidence gate was weakened.Live dependency / stack state
The independently resolved live prerequisite is exact PR #94 head
ed6d191802d378303d1dd71a742f86592f206639, transitively on #85/#83/#82. Current exact #97 head isb1ea0b0867ea77262415c1707a7df93ab1c07151.Fresh compare reports ahead 15 / behind 0, with merge base exactly the live prerequisite. The unique session-binding delta is limited to
crates/originweave-policy/src/lib.rsandcrates/originweave-policy/tests/agent_task_extension_policy.rs. The reconciliation preserves prerequisite native-messaging/core authority changes and #94 freshness behavior. No prerequisite check, review, status, coverage, mergeability, or synthetic-merge result transfers.Keep Draft while the prerequisite stack remains active.
Implemented boundary
AgentTaskExtensionPolicyis constructed for one exactBrowserSessionId.evaluate_agent_task_extension:DenySessionMismatchbefore inspecting validity-window shape, duration, trusted time, or allow-list membership;ExtensionAgentGrantcapability.Current exact-head evidence
On unchanged exact head
b1ea0b0867ea77262415c1707a7df93ab1c07151against exact live prerequisiteed6d191802d378303d1dd71a742f86592f206639:32077521031: success;95533742711: repository contracts, canonical formatting, locked workspace/all-target check, full tests, strict Clippy, and rustdoc success;95533742587: exact owned production function/line/region/branch measurement and enforcement success;Security/SAST/central/model workflows not returned for this stacked Draft are absent evidence, not passing. No predecessor-head, prerequisite-head, queued, pending, skipped, cancelled, stale, synthetic, status-only, or model-only evidence is promoted as current proof.
Truth boundary
This slice binds deterministic managed-extension admission policy to one OriginWeave browser session and prevents foreign-session policy-state probing. It does not authenticate an administrator, read or attest Chrome enterprise policy, prove the browser profile belongs to that session, attest a clock, install/update/enable extensions, verify signatures or supply-chain provenance, authorize native messaging, grant Agent capabilities, persist policy, or claim managed enterprise extension support complete.