feat(core): fail closed on unsupported browser protocol capabilities - #107
Draft
seonghobae wants to merge 392 commits into
Draft
feat(core): fail closed on unsupported browser protocol capabilities#107seonghobae wants to merge 392 commits into
seonghobae wants to merge 392 commits into
Conversation
|
Important Draft PR not reviewedDraft PRs are not automatically reviewed by default.
To automatically review draft PRs, update your CodeRabbit configuration: reviews:
auto_review:
drafts: trueThanks 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 12, 2026
Keep CHANGELOG, doctoring, API, architecture, ADR 0010, and the roadmap aligned with the same-call proof that observation handles require QueryNodes capability and current document authority. Co-authored-by: Seongho Bae <seonghobae@users.noreply.github.com>
Add the failing contract that zero-width and bidi-override format characters cannot be admitted in accessibility roles, accessible names, BiDi sharedId values, or registry external identifiers. Co-authored-by: Seongho Bae <seonghobae@users.noreply.github.com>
Fail closed on reviewed Default_Ignorable and bidirectional format characters in accessibility locators, BiDi sharedId values, and registry external identifiers. Ordinary spaces in accessible names remain valid. Co-authored-by: Seongho Bae <seonghobae@users.noreply.github.com>
Record the local fail-closed format-character policy and cite the current Unicode security-mechanisms standard, the bidirectional algorithm, and the superseded UTR 36 report. Co-authored-by: Seongho Bae <seonghobae@users.noreply.github.com>
RED: bind_current_nodes must consume a non-cloneable protocol-use proof and reject TypedInput and Navigation proofs before minting observation handles. Navigation-only and TypedInput-only adapters can still call the public no-proof API on the predecessor head. Co-authored-by: Seongho Bae <seonghobae@users.noreply.github.com>
Transfer the non-cloneable QueryNodes protocol-use proof by ownership into locateNodes admission and reject Navigation, TypedInput, and NetworkObservation proofs before minting ObservedNodeHandle values. Co-authored-by: Seongho Bae <seonghobae@users.noreply.github.com>
Co-authored-by: Seongho Bae <seonghobae@users.noreply.github.com>
…-protocol-dispatch feat(core): bind protocol dispatch to current browser context
…-origin-binding feat(core): bind browser context origin before observation
…apter-version-binding' into HEAD # Conflicts: # CHANGELOG.md # tests/test_repository_contract.py
…-origin-revalidation feat(core): revalidate current browser context origin
…locate-nodes-response-envelope feat(core): classify WebDriver BiDi response envelopes
…l-runtime-adapter-version-binding feat(core): bind runtime adapter version before protocol use
…-origin-epoch-protocol-dispatch fix(core): bind protocol dispatch to observed document epoch
…-evidence' into HEAD # Conflicts: # CHANGELOG.md # tests/test_repository_contract.py
…l-runtime-kind-binding feat(core): bind validated browser use to runtime protocol kind
…tocol-version-parsing feat(core): parse canonical OriginWeave protocol versions
…response-envelope-parser feat(core): parse bounded WebDriver BiDi response envelopes
…ocol-dispatch' into HEAD # Conflicts: # CHANGELOG.md
…l-runtime-revision-check feat(core): fail closed on browser runtime revision drift
…n-binding' into HEAD # Conflicts: # CHANGELOG.md
…tocol-version-binding feat(core): bind browser adapters to OriginWeave protocol version
…l-use-validation feat(core): validate browser protocol use atomically
…-requirement' into HEAD # Conflicts: # tests/test_repository_contract.py
…335-4e79-9ce1-985ad0d8ea71-aa6b feat(core): consume SemanticObservation proof in bind_current_nodes
…l-validation-evidence feat(evidence): record validated browser protocol metadata
…-requirement' into HEAD # Conflicts: # CHANGELOG.md # crates/originweave-core/src/lib.rs # tests/test_repository_contract.py
…-origin-protocol-dispatch feat(core): gate protocol dispatch on current context origin
seonghobae
changed the base branch from
feat/browser-protocol-capability-descriptor
to
feat/browser-authority-registry
August 26, 2026 22:16
… into HEAD # Conflicts: # CHANGELOG.md # crates/originweave-core/src/browser_registry.rs # crates/originweave-core/src/lib.rs # crates/originweave-core/tests/browser_authority_registry.rs # docs/doctoring.md # tests/test_product_documentation_contract.py
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 #28 and Proposed ADR 0107, stacked on live PR #106.
Buyer/foundation gap
PR #106 makes browser protocol capabilities explicit metadata, but boolean
supportsalone leaves every caller to invent its own unsupported-capability error or fallback policy. ADR 0107 requires unsupported adapter capabilities to fail closed with typed errors before later browser use.Live dependency / exact state
0841d2ab3d8b5e60a03c0a8e818cf438e2716829;1a13007b6cb43cff949b6bd09d69de0a02b327f6;193f3a3843f7bbb92b8d720ba8e127a82f2dcb47;feat/browser-protocol-capability-descriptorat the exact current feat(core): declare versioned browser protocol capabilities #106 head.The branch was non-destructively aligned with the moved #106 prerequisite through merge commit
92fd4ab3be4c57c76395a0fcd9325ca0ea812590, preserving the capability-requirement implementation while inheriting the current descriptor and #40 authority lineage. Current head193f3a...restores the capability-requirement changelog entry on top of the current prerequisite changelog. Keep Draft while #106/#40 remain active. No prerequisite check, review, status, coverage, mergeability, synthetic-merge, or predecessor-head evidence transfers.TDD / implementation
c0da8bd7537c0b242d9f6e6d38dce8ff42417032established the missing versioned descriptor boundary on the predecessor stack.8d2549cbad8cdabfe09a5ee61aa7a7ee1de81cc8exposed caller-order-dependent capability-set identity; predecessor production canonicalized the set.BrowserProtocolAdapterDescriptor::require_capabilityand typedBrowserProtocolCapabilityRequirementError::UnsupportedCapability, so unsupported surfaces fail closed without protocol-family inference or silent fallback.Implemented boundary
BrowserProtocolAdapterDescriptor::require_capabilityreturnsOk(())only for a capability explicitly present in the canonical descriptor and otherwise returns typedUnsupportedCapability(capability). The decision is independent of WebDriver BiDi versus CDP family and triggers no fallback or side effect.Exact-current proof
On unchanged exact head
193f3a3843f7bbb92b8d720ba8e127a82f2dcb47against exact live prerequisite1a13007b6cb43cff949b6bd09d69de0a02b327f6:32044867924: success;95430530156: repository contracts, canonical formatting, locked workspace/all-target check, full tests, strict Clippy, and rustdoc success;95430530084: exact owned-production function/line/region/branch enforcement success;32044867694: success;No predecessor-head, prerequisite-head, synthetic, skipped, cancelled, absent, pending, stale, status-only, or model-only evidence is promoted as current proof.
Review / governance boundary
This Draft has no qualifying independent latest-push approval. Passing automation, bot comments, author activity, prerequisite reviews, or model output are not approval. Live protected-main governance and
AGENTS.mdremain authoritative; this scheduled writer does not merge, self-approve, alter workflows, add secrets, weaken checks, tag, or publish.Truth boundary
This slice is deterministic adapter metadata validation only. It does not authenticate or invoke BiDi/CDP, prove actual capability implementation, mint browser/Agent authority, execute input, authorize network/TLS/HTTP, negotiate OriginWeave Protocol versions, expose arbitrary JavaScript, or claim the real browser adapter complete.