feat(deploy): retire cashapp dispute risk window - #310
Merged
Conversation
Kartik4152
force-pushed
the
kartik/cashapp-dispute-removal
branch
from
August 28, 2026 17:31
185a11e to
7ef7a78
Compare
Governance removes Cash App from the dispute-protected payment methods. On DisputeProtectionPolicy a zero risk window makes onIntentSignaled a no-op and isDisputeProtectionEnabled false, so the live change is one setRiskWindow(cashapp, 0) per network on the lane-39 policy. Lane 41 targets the new RETIRED_DISPUTABLE_PAYMENT_METHODS parameter: live networks run only under its DEPLOY_ACTIVE_TAG, staging executes the deployer-EOA write, Base queues one Safe call written by deploy_summary, and local networks zero the window right after lane 39. It leaves DISPUTABLE_PAYMENT_METHODS and dispute-stack-evidence.json untouched because the package extractor requires them to agree; both flip in the recording PR after every network executes, when the lane is pinned. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Mk9kaLm8nkbBN1TPbdNU1b
The Base Safe executed setRiskWindow(cashapp, 0) at nonce 80 on 2026-08-28 (safeTxHash 0x16a7...4650, tx 0x4824a789...56f8a), and Rebase lane 41 onto that state: keep it as the pending Base-staging write, commit the Base batch and chunk-plan artifacts, align the spec with the trimmed disputable list, and describe the remaining staging evidence flip and lane pin in the docs. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Mk9kaLm8nkbBN1TPbdNU1b
Main's #314 claimed lane 41 for the UPI payment method and executed it on Base staging, so the risk-window retirement lane moves to the next unused number. File, tag, deploy scripts, summary tags, spec, and docs follow; the committed Base batch artifacts stay byte-identical because their "lane 41" origin label records the proposal as executed. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Mk9kaLm8nkbBN1TPbdNU1b
Kartik4152
force-pushed
the
kartik/cashapp-dispute-removal
branch
from
September 2, 2026 07:47
7ef7a78 to
0958c43
Compare
Kartik4152
added a commit
that referenced
this pull request
Sep 2, 2026
* feat(deploy): retire cashapp dispute risk window Governance removes Cash App from the dispute-protected payment methods. On DisputeProtectionPolicy a zero risk window makes onIntentSignaled a no-op and isDisputeProtectionEnabled false, so the live change is one setRiskWindow(cashapp, 0) per network on the lane-39 policy. Lane 41 targets the new RETIRED_DISPUTABLE_PAYMENT_METHODS parameter: live networks run only under its DEPLOY_ACTIVE_TAG, staging executes the deployer-EOA write, Base queues one Safe call written by deploy_summary, and local networks zero the window right after lane 39. It leaves DISPUTABLE_PAYMENT_METHODS and dispute-stack-evidence.json untouched because the package extractor requires them to agree; both flip in the recording PR after every network executes, when the lane is pinned. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Mk9kaLm8nkbBN1TPbdNU1b * chore(deploy): record Base cashapp risk-window execution The Base Safe executed setRiskWindow(cashapp, 0) at nonce 80 on 2026-08-28 (safeTxHash 0x16a7...4650, tx 0x4824a789...56f8a), and Rebase lane 41 onto that state: keep it as the pending Base-staging write, commit the Base batch and chunk-plan artifacts, align the spec with the trimmed disputable list, and describe the remaining staging evidence flip and lane pin in the docs. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Mk9kaLm8nkbBN1TPbdNU1b * refactor(deploy): renumber retirement lane to 42 after UPI took 41 Main's #314 claimed lane 41 for the UPI payment method and executed it on Base staging, so the risk-window retirement lane moves to the next unused number. File, tag, deploy scripts, summary tags, spec, and docs follow; the committed Base batch artifacts stay byte-identical because their "lane 41" origin label records the proposal as executed. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Mk9kaLm8nkbBN1TPbdNU1b --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.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
Governance removed Cash App from the dispute-protected payment methods. On
DisputeProtectionPolicya zero risk window is what "not dispute protected" means (onIntentSignaledearly-returns,isDisputeProtectionEnabledfalse), so the live change is onesetRiskWindow(keccak256("cashapp"), 0)onDisputeProtectionPolicyMethodScopedStakedper network; PayPal and Venmo keep 14 days.Status: Base is done — Safe nonce 80 executed 2026-08-28 10:20 UTC (safeTxHash
0x16a751458a0f011fecf113c6c8dbbf26eecd930a91c594c9f3ba66266e7a4650, tx0x4824a78931e3785cd69e4aa1c669c2f86cf0ccbaf22066d54f7f7ace55156f8a), and #311 already trimmedDISPUTABLE_PAYMENT_METHODS/ the Base evidence. Base staging still has the 14-day Cash App window; this PR adds the lane that performs that write and records the Base execution.Changes
deploy/42_retire_dispute_risk_windows.ts(new, lane-33 shape): readsRETIRED_DISPUTABLE_PAYMENT_METHODS = ["cashapp"], asserts each is active, and for every non-zero window checks the owner (MULTI_SIG[network] || deployer), executes directly when a local account owns the policy (re-reads, fails if still set), otherwise queues onesetRiskWindow(method, 0)Safe call. Live networks run only underDEPLOY_ACTIVE_TAG=42_retire_dispute_risk_windows; local networks zero the window right after lane 39; skip = every retired window already zero (so a tagged Base run is now a no-op).deployments/parameters.ts: addsRETIRED_DISPUTABLE_PAYMENT_METHODS;DISPUTABLE_PAYMENT_METHODSuntouched (already["paypal","venmo"]from fix: keep Cash App outside dispute protection #311).deployments/outputs/safe-batches/base_retire_cashapp_risk_window{.json,.sha256.json,.json.chunks.json}: the executed Base batch and chunk plan (proposed viayarn safe:propose-chunks, simulated from the Safe at block 50561373).deploy/deploy_summary.ts: lists the lane-41 tags so a tagged run writes the collector's batch.scripts/retire-dispute-risk-windows.spec.cjs(8 tests): identity + retired ∩ disputable = ∅, EOA path touches only cashapp, Safe path queues exactly the encoded call, no-op when cleared, owner mismatch rejects, inactive retired method rejects, untagged live skip before any chain read,deploy_summarycarries the tag.deploy:dispute-risk-windows:{base_staging,base}andtest:retire-dispute-risk-windowsscripts, release-readiness CI step,tsconfig.dispute-deployment.jsonentries, lane docs in README/AGENTS/CLAUDE.Test Plan
yarn test:retire-dispute-risk-windows— 8/8 (on the rebase)yarn typecheck:dispute-deploymentyarn test:method-scoped-vault-deployment8/8,yarn test:intent-guardian-fee-update4/4yarn chain+yarn deploy:localhost(pre-fix: keep Cash App outside dispute protection #311): lane 41 executedsetRiskWindow(cashapp, 0)via the deployer after lane 39Remaining after merge
yarn deploy:dispute-risk-windows:base_stagingfrom the merged SHA (deployer-EOA write; needs a validALCHEMY_API_KEY— Hardhat'sbase_stagingnetwork hardcodes that URL).cashappfrom the extractor'sLIVE_DISPUTABLE_PAYMENT_METHODS.base_staging, set the staging window to"0"indispute-stack-evidence.jsonandactive-dispute-stack.spec.cjs, pin lane 42 inimmutableDeploymentLanes.ts, then the next package RC (rc.10 in chore: prepare contracts-v2 0.4.1-rc.10 #312 only carries the Base flip).🤖 Generated with Claude Code
https://claude.ai/code/session_01Mk9kaLm8nkbBN1TPbdNU1b