Skip to content

feat(deploy): retire cashapp dispute risk window - #310

Merged
Kartik4152 merged 3 commits into
mainfrom
kartik/cashapp-dispute-removal
Sep 2, 2026
Merged

feat(deploy): retire cashapp dispute risk window#310
Kartik4152 merged 3 commits into
mainfrom
kartik/cashapp-dispute-removal

Conversation

@Kartik4152

@Kartik4152 Kartik4152 commented Aug 28, 2026

Copy link
Copy Markdown
Contributor

Summary

Governance removed Cash App from the dispute-protected payment methods. On DisputeProtectionPolicy a zero risk window is what "not dispute protected" means (onIntentSignaled early-returns, isDisputeProtectionEnabled false), so the live change is one setRiskWindow(keccak256("cashapp"), 0) on DisputeProtectionPolicyMethodScopedStaked per network; PayPal and Venmo keep 14 days.

Status: Base is done — Safe nonce 80 executed 2026-08-28 10:20 UTC (safeTxHash 0x16a751458a0f011fecf113c6c8dbbf26eecd930a91c594c9f3ba66266e7a4650, tx 0x4824a78931e3785cd69e4aa1c669c2f86cf0ccbaf22066d54f7f7ace55156f8a), and #311 already trimmed DISPUTABLE_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): reads RETIRED_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 one setRiskWindow(method, 0) Safe call. Live networks run only under DEPLOY_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: adds RETIRED_DISPUTABLE_PAYMENT_METHODS; DISPUTABLE_PAYMENT_METHODS untouched (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 via yarn 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_summary carries the tag.
  • Wiring: deploy:dispute-risk-windows:{base_staging,base} and test:retire-dispute-risk-windows scripts, release-readiness CI step, tsconfig.dispute-deployment.json entries, lane docs in README/AGENTS/CLAUDE.

Test Plan

  • yarn test:retire-dispute-risk-windows — 8/8 (on the rebase)
  • yarn typecheck:dispute-deployment
  • yarn test:method-scoped-vault-deployment 8/8, yarn test:intent-guardian-fee-update 4/4
  • yarn chain + yarn deploy:localhost (pre-fix: keep Cash App outside dispute protection #311): lane 41 executed setRiskWindow(cashapp, 0) via the deployer after lane 39

Remaining after merge

  1. yarn deploy:dispute-risk-windows:base_staging from the merged SHA (deployer-EOA write; needs a valid ALCHEMY_API_KEY — Hardhat's base_staging network hardcodes that URL).
  2. Recording PR: drop cashapp from the extractor's LIVE_DISPUTABLE_PAYMENT_METHODS.base_staging, set the staging window to "0" in dispute-stack-evidence.json and active-dispute-stack.spec.cjs, pin lane 42 in immutableDeploymentLanes.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

@Kartik4152
Kartik4152 force-pushed the kartik/cashapp-dispute-removal branch from 185a11e to 7ef7a78 Compare August 28, 2026 17:31
Kartik4152 and others added 3 commits September 2, 2026 14:44
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
Kartik4152 force-pushed the kartik/cashapp-dispute-removal branch from 7ef7a78 to 0958c43 Compare September 2, 2026 07:47
@Kartik4152
Kartik4152 merged commit dfe1060 into main Sep 2, 2026
4 checks passed
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>
@Kartik4152
Kartik4152 deleted the kartik/cashapp-dispute-removal branch September 2, 2026 08:54
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