feat(policy): compose extension proposals with action policy - #76
Draft
seonghobae wants to merge 9 commits into
Draft
feat(policy): compose extension proposals with action policy#76seonghobae wants to merge 9 commits into
seonghobae wants to merge 9 commits into
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 #74.
Buyer/security gap
PR #74 proves that exact
ProposeTypedActionextension authority and ordinary typed-action policy are separate fail-closed boundaries. This child provides the narrow composition API so a future trusted extension adapter cannot accidentally check only extension access or only Agent action policy.Live dependency / stack state
This Draft is stacked on current exact PR #74 head
9ce259834095cef91052db1e826f283689fb688f. Current exact contributor head isfc9c7348d367a0b6295d8e2f0289b0262ef3675f.Fresh ancestry is ahead 9 / behind 0, with merge base exactly equal to the live prerequisite. Relative to #74 the child delta remains limited to
CHANGELOG.md,crates/originweave-policy/src/lib.rs, andcrates/originweave-policy/tests/extension_action_proposal.rs. The branch retains the prerequisite's current protected-main/documentation lineage while preserving this PR's production boundary. No prerequisite check, review, status, or predecessor result is transferred to this child.Keep Draft while #74 remains active.
TDD / RCA sequence
5c0e5be959fabe53367315a574840bdb1c4d175cexposed only canonical rustfmt drift, so it was not counted as the intended RED.af629d3aebadb67041ba28b97dfab0cc01dcf283established the real production-boundary RED in CI run31471940073, Rust contracts job93717027443: repository contracts and rustfmt passed, thencargo check --locked --workspace --all-targetsfailed because publicExtensionProposalDecisionandevaluate_extension_action_proposaldid not exist.dfb411c219a8d935cf0a99dab3f9585e2400e3d8added the smallest composition boundary; CI then exposed only canonical import wrapping.fc9c7348d367a0b6295d8e2f0289b0262ef3675fcarries those gates throughevaluate_extension_action_proposal: source origin is taken from the caller-suppliedActionRequest, and trustednow_epoch_secondsis required before ordinary action policy runs.Implemented boundary
evaluate_extension_action_proposalnow:ExtensionAccessRequestfor extension identity, browser session, browsing context, request source origin, trusted current time, andExtensionAgentCapability::ProposeTypedAction;ActionRequestunchanged only after proposal access is allowed; andFocused integration regressions cover missing/wrong capability, wrong origin, expired grant, exact proposal-grant success into ordinary policy, preservation of
WebContentas untrusted instruction, and the independent R3 approval requirement for broker-handle secret fill.Current exact-head evidence
For unchanged exact head
fc9c7348d367a0b6295d8e2f0289b0262ef3675fagainst exact prerequisite9ce259834095cef91052db1e826f283689fb688f:32032674326: success;Security Scan, SAST and central review/workflow evidence are not returned for this exact head, so they are not counted as passing. No predecessor, prerequisite, skipped, queued, cancelled, absent, synthetic-merge, stale, status-only, or model-only evidence is promoted as current proof. The Draft remains dependency/evidence-gated rather than merge-ready.
Truth boundary
This is a pure policy-composition prerequisite, not a Chromium extension adapter. It does not parse extension messages, authenticate user/enterprise instruction provenance, transform arbitrary extension/page data into an
ActionRequest, execute browser input, resolve or disclose secrets, verify a post-condition, persist policy, alter managed-extension configuration, or close issue #27. A later trusted adapter must construct the typed request and its instruction-source classification from independently trusted context; extension-produced content/messages remain untrusted and cannot choose their own trust class. Chrome permission, extension proposal permission, Agent capability/origin/time authority, high-risk approval, secret authority, browser execution and verified success remain separate authorities.This scheduled actor does not merge, self-approve, alter workflows, add secrets, weaken checks, tag, or publish.