Skip to content

docs: rewrite propose/dispute UI pages for the Explorer dapp - #31

Open
droplet-rl wants to merge 2 commits into
masterfrom
droplet/T90K0AL22-C0BC0FGQADS-1789755208-825919
Open

droplet-rl wants to merge 2 commits into
masterfrom
droplet/T90K0AL22-C0BC0FGQADS-1789755208-825919

Conversation

@droplet-rl

Copy link
Copy Markdown
Contributor

Phase 1 of deprecating the Oracle dapp (oracle.uma.xyz) in favour of the Explorer dapp (explorer.uma.xyz). Requested by @lee in Slack.

What changed

Old New
using-uma/proposing-via-the-oracle-dapp.md — "Proposing via the Oracle Dapp" using-uma/proposing-via-the-explorer-dapp.md — "Proposing via the Explorer Dapp"
using-uma/disputing-oracle-data.md — "Disputing Oracle Data" using-uma/disputing-via-the-explorer-dapp.md — "Disputing via the Explorer Dapp"

Both pages now lead with the scope limit: the Explorer only serves Polymarket, Predict.fun and Outcome, and OO requests from other integrations are UI-unsupported once the Oracle dapp is retired.

Proposing — rewritten end to end. The old page was three screenshots of the Oracle dapp sidebar describing only the MOOv2 deltas. It now covers the Explorer lifecycle tabs and filters, the acknowledgement checkbox → connect wallet → Propose a price dialog flow, outcome presets vs raw int256, the bond/approval semantics, and the four MOOv2 proposer-whitelist button states.

Disputing — rewritten end to end. This page was stale well beyond the dapp swap: it pointed at oracle.umaproject.org, testnet.oracle.umaproject.org, Görli and a Görli mock oracle, and referenced a "Proposals" tab that no longer exists. It now covers finding proposals under the Proposed tab, the dispute acknowledgement + bond flow, and the post-dispute Under disputeFinal answer states.

It also documents a difference worth knowing: OOv2 disputes revert once the challenge period lapses, whereas MOOv2 proposals stay disputable until they are actually settled.

Housekeeping

  • .gitbook.yaml redirects added from both old slugs, so existing links keep working.
  • The inbound link from resources/osnap/osnap-proposal-verification.md repointed to the new path.
  • The three old Oracle dapp screenshots (image (38|40|41).png) are no longer referenced — they were only used by the proposing page and no longer match the UI. The asset files are left in place.

Verification

Copy was taken from UMAprotocol/mcp-otb oracle/ui at 28e1bd89 — the commit currently live on explorer.uma.xyz (Vercel project otb-oracle) — and every quoted UI string was confirmed present in the deployed JS bundles rather than only in master.

Two things for the reviewer

  1. Private proposals are not documented. oracle/ui has a "Propose on-chain" / "Propose privately" method selector for Managed Oracle requests, gated on VITE_SIGNED_PROPOSAL_ENABLED / VITE_SIGNED_PROPOSAL_SUBMISSION_ENABLED (both default false). I could not read the production env, so I left it out rather than document a path that may not be visible. Happy to add a section if it is live.
  2. The oSnap dispute link is now semantically off. oSnap is not one of the three supported integrations, so the oSnap verification page pointing at an Explorer-only dispute guide will mislead after deprecation. Path is fixed so nothing breaks, but the content needs a separate decision.

Remaining Oracle dapp references elsewhere in the docs (faqs.md, resources/network-addresses, default-proposer-whitelist.md, oSnap, developers/optimistic-oracle/getting-started.md) are itemised in the Slack thread and deliberately left for a follow-up PR.

🤖 Generated with Claude Code

Phase 1 of the oracle.uma.xyz -> explorer.uma.xyz deprecation.

- Rewrite "Proposing via the Oracle Dapp" as "Proposing via the Explorer
  Dapp": Explorer lifecycle tabs and filters, the propose acknowledgement
  + wallet + bond-approval flow, outcome presets vs raw int256, and the
  MOOv2 proposer-whitelist button states.
- Rewrite "Disputing Oracle Data" as "Disputing via the Explorer Dapp".
  The old page was stale beyond the dapp swap: it pointed at
  oracle.umaproject.org, testnet.oracle.umaproject.org, Görli and a Görli
  mock oracle. Replaced with the Explorer dispute flow, the challenge
  window difference between OOv2 and MOOv2, and the post-dispute
  Under dispute / Final answer states.
- Both pages state that the Explorer only serves Polymarket, Predict.fun
  and Outcome, and that other OO requests are UI-unsupported after the
  Oracle dapp is retired.
- Rename both files to explorer slugs, add .gitbook.yaml redirects from
  the old slugs, and repoint the inbound oSnap link.
- Drop the three old Oracle dapp screenshots; they no longer match the UI.

Content verified against UMAprotocol/mcp-otb oracle/ui at the commit
currently deployed to explorer.uma.xyz (28e1bd89).

Co-Authored-By: Claude <noreply@anthropic.com>
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 18, 2026

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review Completed 2026-09-18T18:31:05.790594Z a7443e9 PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: a7443e9876

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

3. The **Dispute this proposal** dialog confirms that disputing escalates the request to UMA's dispute resolution and requires posting a bond. Review the proposed outcome and the **Bond required**. If your balance is short, the dialog shows _"Insufficient balance to cover the bond."_ and blocks submission.
4. Submit and confirm in your wallet. Where your existing token allowance does not already cover the bond, your wallet will request an unlimited token approval for the oracle contract first — only the required bond is transferred, and the approval applies only to that oracle. The button narrates progress as **Preparing…**, **Switching network…**, **Approving unlimited allowance…**, then **Submitting dispute…**.

If the dispute window has already closed, the button is replaced by a disabled **Dispute window closed** state — the proposal is past its challenge window or under extended review and can no longer be disputed.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Keep extended-review proposals in the dispute window

For a flagged MOOv2 proposal, “under extended review” means the challenge period has been extended specifically so participants can still dispute it, as documented in protocol-overview/how-does-uma-resolve-prediction-markets.md:24; the MOOv2 explanation immediately below also says proposals remain disputable until settlement. Saying that extended review closes the window may cause users to abandon a still-actionable invalid proposal, so distinguish extended review from an actually closed dispute state.

Useful? React with 👍 / 👎.

Disputing through a UI is done on the **Explorer dapp** at [explorer.uma.xyz](https://explorer.uma.xyz). The Explorer replaces the legacy Oracle dapp (`oracle.uma.xyz`), which is being deprecated.

{% hint style="warning" %}
**The Explorer only serves Polymarket, Predict.fun and Outcome requests.** Optimistic Oracle requests from any other integration are not shown in the Explorer and will be unsupported through a UI once the Oracle dapp is deprecated. Disputers on other requests will need to dispute programmatically by calling `disputePrice` on the oracle contract directly.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Route unsupported oracle versions to the correct dispute method

For an unsupported integration using Optimistic Oracle V3, calling disputePrice cannot dispute its assertion: OOV3 exposes disputeAssertion(bytes32,address), as documented in developers/optimistic-oracle-v3/data-asserter.md:137. Because this warning covers requests from any other integration, users can follow an invalid transaction procedure during a time-limited challenge window; the fallback instructions need to branch by oracle version rather than universally prescribing disputePrice.

Useful? React with 👍 / 👎.


#### Proposer whitelist on Managed Optimistic Oracle V2

MOOv2 requests enforce a proposer whitelist. Risk Labs manages the default whitelist — see [Default Proposer Whitelist](default-proposer-whitelist.md) for the criteria and update cadence.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Describe whitelist enforcement as request-specific

For a MOOv2 request whose manager sets isEnforced to false, any address may propose, so the categorical claim that all MOOv2 requests enforce a whitelist is incorrect. using-uma/proposing-programmatically.md:13-15 documents both the per-request enforcement flag and the request-manager override; describe the default and effective request setting instead, otherwise eligible users may incorrectly conclude that they cannot propose.

Useful? React with 👍 / 👎.

## Disputing Proposals&#x20;

If the oSnap request does not meet the Rules, it should be disputed. Disputed requests can not be executed no matter how UMA resolves the dispute. This [section](../../using-uma/disputing-oracle-data.md) outlines the steps to dispute an invalid oSnap request, or any other invalid assertions to UMA's Optimistic Oracle.
If the oSnap request does not meet the Rules, it should be disputed. Disputed requests can not be executed no matter how UMA resolves the dispute. This [section](../../using-uma/disputing-via-the-explorer-dapp.md) outlines the steps to dispute an invalid oSnap request, or any other invalid assertions to UMA's Optimistic Oracle.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Do not present the Explorer guide as an oSnap procedure

For a reader trying to challenge an oSnap request, this link does not provide the promised procedure: its destination explicitly says the Explorer only supports Polymarket, Predict.fun, and Outcome, and its UI steps cover only MOOv2/OOv2 requests. Replace this with oSnap-specific programmatic or legacy-UI instructions rather than sending users to an unsupported flow while claiming it outlines the steps.

Useful? React with 👍 / 👎.

@droplet-rl

Copy link
Copy Markdown
Contributor Author

I've used my 1 automated round on this PR, so I'm ignoring further automated-reviewer activity. To re-activate me: have a human @-mention @droplet-rl in a comment (resets the budget), or assign me to the PR (raises the budget to 3 rounds).

- Dispute fallback now branches by oracle version. The blanket
  "call disputePrice" was wrong for assertion-based integrations:
  OOv3 exposes disputeAssertion(bytes32,address). oSnap is on OOv3.
- Stop presenting "under extended review" as a closed dispute window.
  Flagged MOOv2 proposals get an *extended* challenge period precisely
  so participants have more time to dispute, and stay disputable until
  settled — the previous wording could have led a reader to abandon a
  still-actionable invalid proposal.
- Describe the MOOv2 proposer whitelist as per-request rather than
  categorical. Requests default to defaultProposerWhitelist unless the
  requestManager overrides, and the whitelist carries an isEnforced
  flag; when false, any address may propose.
- Repoint the oSnap dispute section at the OOv3 disputeAssertion flow
  instead of the Explorer-only guide, and state plainly that oSnap is
  not served by the Explorer.
- Also document the third no-action button state ("Proposing/Disputing
  unavailable"), which both pages had omitted.

Co-Authored-By: Claude <noreply@anthropic.com>
@droplet-rl

Copy link
Copy Markdown
Contributor Author

All four Codex findings were valid. Fixed in 778a7c3 — I verified each against the cited sources plus the deployed oracle/ui before changing anything.

P1 — disputePrice is wrong for OOv3. Confirmed: data-asserter.md:137 documents disputeAssertion(bytes32 assertionId, address disputer). Since that warning covers "any other integration," it was prescribing a call that cannot dispute an assertion. The fallback now branches by oracle version (OOv2/MOOv2 → disputePrice, OOv3 → disputeAssertion). Good catch — this was the most consequential one, because it sat on the path oSnap disputers arrive from.

P1 — extended review ≠ closed window. Also correct, and it contradicted my own page. how-does-uma-resolve-prediction-markets.md:22 is explicit that flagged MOOv2 proposals get an extended challenge period "that allows additional time for all UMA participants to review and potentially dispute." My wording came from lifting the UI's tooltip (heroes.tsx:293) verbatim without reconciling it against the MOOv2 paragraph three lines below. Reworded, with a hint stating that a proposal under extended review is actionable rather than expired.

P2 — whitelist enforcement is per-request. Correct. getProposerWhitelistWithEnforcementStatus returns an isEnforced bool, and requests default to defaultProposerWhitelist unless the requestManager overrides. The UI's own Whitelist not configured state corroborates it. Table now reads "Per request" / "None", and the section describes the default, the override and the isEnforced flag.

P2 — oSnap link. Agreed, and this is the item I flagged for a reviewer myself. Now resolvable rather than deferrable, because finding #2 supplies the right destination: oSnap is the Optimistic Governor, migrated to OOv3 (audit-and-bug-bounty-programs.md:19), so the section now points at disputeAssertion and states that oSnap is not served by the Explorer.

One thing I found independently while checking the quoted strings: both pages described only two of the three no-action states. The UI also renders a disabled Proposing unavailable / Disputing unavailable button when a request is neither read-only nor link-outable (heroes.tsx:144,284). Added.

Two items I deliberately did not fix, both needing a human decision:

  1. osnap-proposal-verification.md:9 still points at oracle.umaproject.org and describes a "Verify tab" — the same class of staleness I removed from the dispute page. I limited myself to the section Codex flagged rather than quietly rewriting an adjacent page.
  2. More to the point: resources/osnap/README.md says oSnap support was deprecated 2025-12-15, nine months ago. I've made the dispute instructions correct, but the real question is whether this page should still be live. That's a content call, not a docs-mechanics one.

I also re-verified the unchanged claims rather than assuming: both Polygon addresses respond to defaultLiveness() (7200) on-chain, MOOv2 returns a real defaultProposerWhitelist() while OOv2 reverts on it (so the enforcement split is right), and the quoted strings — all four whitelist states, Connect to Propose/Connect to Dispute Proposal (composed as Connect to {label} in OracleActionButton.tsx:86), Under dispute, Final answer, View vote on UMA ↗ — match source verbatim.

Note on process: the automated round fired on Codex's "Running" placeholder, ~5 minutes before the findings actually landed, so I polled until the review posted rather than replying to an empty comment. Per the one-round limit I won't re-summon it. If the two open items above need iteration, assign me to the PR and I'll pick them up.

@droplet-rl

Copy link
Copy Markdown
Contributor Author

🔎 View trace

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