Repository navigation
gunbhub R1 React/TSX consumer via canonical std.markup + XSS reject-witness - #4946
Merged
Merged
Conversation
…llision Move gunbhub browse receipt to dsl-rooted ReactMarkupNode witnesses, rename TextNode→ReactTextNode to avoid std.markup import clash, and enroll both keystones in the claim-witness corpus (shard b 24→26). Co-authored-by: Cursor <cursoragent@cursor.com>
…sses Replace blocklist with explicit http/https/mailto/relative allowlist before escape_url, and add witnesses proving javascript:/data: are rejected (not merely char-escaped) plus ftp:// fail-closed by allowlist. Co-authored-by: Cursor <cursoragent@cursor.com>
Empty commit to re-fire gunbc CI on HEAD after draft→ready transition. Co-authored-by: Cursor <cursoragent@cursor.com>
Address claude-opus review: remove faux case-insensitivity enum arms, document RFC 3986 gap (no v2 to_lower yet) with explicit fail-closed lowercase-only rule + witness; delete unused is_trusted_url_scheme alias. Co-authored-by: Cursor <cursoragent@cursor.com>
briansrls
added a commit
that referenced
this pull request
Jun 15, 2026
Merge origin/main (#4946 gunbhub react_markup) into session branch. Recomputed corpus counts: 52/18/34 (lists match). SPICE signed-path files unchanged — awaits manager re-pin on green head. Co-authored-by: Cursor <cursoragent@cursor.com>
4 of 5 tasks
briansrls
added a commit
that referenced
this pull request
Jun 15, 2026
…us CI Rebased on main post-#4946: one additive corpus row on shard A; counts 45/19/26. Co-authored-by: Cursor <cursoragent@cursor.com>
briansrls
added a commit
that referenced
this pull request
Jun 15, 2026
Merge origin/main after #4946 landed. Keep both XSS keystone enrollments (html_markup + react_markup/gunbhub_react_browse). Recount corpus rows: 45 full / 27 shard_b / 18 shard_a (18+27=45). Co-authored-by: Cursor <cursoragent@cursor.com>
briansrls
added a commit
that referenced
this pull request
Jun 15, 2026
…rkup + XSS reject-witness (#4945) * WIP: gunbhub HTML consumer: un-vendor markup.dag, consume canonical std.marku * fix(html_markup): scheme checks without to_lower (v2 interpreter gap) validate_href uses explicit lower/upper prefix matching because to_lower is not yet implemented in the v2 interpreter — smoke and XSS witnesses now run green by execution. Co-authored-by: Cursor <cursoragent@cursor.com> * fix(html_markup): positive scheme allowlist + perturb-discrimination witness Per signed XSS contract: allowlist http/https/mailto/relative only (reject protocol-relative and unknown schemes); validate href and src. Witness proves escape_url passes javascript: through while the consumer rejects it. Co-authored-by: Cursor <cursoragent@cursor.com> * ci: enroll html_markup_xss_keystone in claim witness corpus shard b Makes the XSS reject-witness load-bearing in v4_claim_witness_corpus_b (43 total rows, shard b 25) per zesty-swift-505 pairing flag. Co-authored-by: Cursor <cursoragent@cursor.com> * fix(html_markup): dissolve href_is_safe predicate; enroll XSS corpus - Practice-10: remove href_is_safe Bool collapse; walk tree via find_first_rejected_url matching validate_href coproduct directly. - Witness mixed-case javascript fail-closed as SchemeNotAllowlisted. - (with prior 3c047f3) enroll html_markup_xss_keystone in corpus shard b. Co-authored-by: Cursor <cursoragent@cursor.com> * merge main: integrate #4946 react corpus rows + fix shard-b counts Merge origin/main after #4946 landed. Keep both XSS keystone enrollments (html_markup + react_markup/gunbhub_react_browse). Recount corpus rows: 45 full / 27 shard_b / 18 shard_a (18+27=45). Co-authored-by: Cursor <cursoragent@cursor.com> --------- Co-authored-by: Cursor <cursoragent@cursor.com>
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.
Summary
dsl/std/react_markup.dag: gunbhub R1 React/TSX consumer surface (ReactMarkupNode) that reduces to canonicalstd.markup.Fragmentand serializes through the singleserialize_fragmentfold (CoC=1 with Fragment-IR serializer IC #4940).href/srcvalues withjavascript:,data:, orvbscript:schemes are rejected before emit viaMarkupEmitResult(EmitOk/EmitRejected).dsl/test/claim/react_markup_witness.dag(consumer + XSS reject + REQ-A trusted-url escaping) anddsl/test/claim/gunbhub_react_browse_witness.dag(repo-browse page structural compose + serialize).Note: A v4
ReactElementbridge was attempted but dropped — combining--source-root dsl+--source-root src/v4hits anElementvariant collision betweenstd.markup.FragmentandReactCreateElementChild. The executable consumer path is dsl-rootedReactMarkupNode; v4 bridge is a follow-on once the name collision is dissolved.Test plan
gunbc run --source-root dsl --entry dsl/test/claim/react_markup_witness.dag --function react_markup_keystone_holds --claim-rungunbc run --source-root dsl --entry dsl/test/claim/gunbhub_react_browse_witness.dag --function gunbhub_browse_keystone_holds --claim-rungunbc run --source-root dsl --entry dsl/test/claim/markup_serializer_witness.dag --function markup_serializer_keystone_holds --claim-run(regression check on Fragment-IR serializer IC #4940)