From 67233c983fea5494c40b16884af8d6bba1651f79 Mon Sep 17 00:00:00 2001 From: Kartik4152 Date: Wed, 2 Sep 2026 15:08:08 +0700 Subject: [PATCH 1/2] chore(deploy): record staging cashapp retirement, pin lane 42 Base staging executed lane 42's deployer write on 2026-09-02 (tx 0x5cde17a0...dc451, source dfe1060), so Cash App reads a zero risk window on both live networks. Flip the staging evidence and spec rows, drop the extractor's staging LIVE_DISPUTABLE_PAYMENT_METHODS override from #311 (configuredRiskWindows derives from DISPUTABLE_PAYMENT_METHODS again), pin lane 42 as immutable-but-mounted, and update the docs. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01Mk9kaLm8nkbBN1TPbdNU1b --- AGENTS.md | 7 +++--- CLAUDE.md | 8 +++--- README.md | 8 +++--- deployments/dispute-stack-evidence.json | 2 +- deployments/immutableDeploymentLanes.ts | 12 +++++++++ deployments/parameters.ts | 6 ++--- .../scripts/extractors/disputeStack.ts | 25 +++---------------- scripts/active-dispute-stack.spec.cjs | 2 -- 8 files changed, 31 insertions(+), 39 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index 179f0d66..8bf7d8b3 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -114,9 +114,10 @@ local networks zero the window right after lane 39, and the lane skips wherever every retired window already reads zero. Base executed the call at Safe nonce 80 on 2026-08-28 (safeTxHash `0x16a7…4650`, tx `0x4824…6f8a`, artifacts `base_retire_cashapp_risk_window*`, whose Safe origin/description say "lane 41" — the retirement lane's number - before lane 41 was claimed by the UPI payment method), so Base evidence is already `0`. Base staging is still pending: the package - extractor's `LIVE_DISPUTABLE_PAYMENT_METHODS.base_staging` override, the staging evidence, and the spec's staging - window keep Cash App at 1209600 until the staging write executes, and that recording PR also pins lane 42. + before lane 41 was claimed by the UPI payment method). Base staging executed the deployer-EOA write on 2026-09-02 + (tx `0x5cde17a0c59ba4b606b19b9d09b468af06cd283d256984160e9627aaff4dc451`), so Cash App reads a zero window on both + networks, the evidence and package manifest carry `0` everywhere, and the lane — immutable and pinned after that + first execution — stays mounted and skips wherever every retired window already reads zero. - `deployments/predecessorDisputeStack.ts` keeps two pinned maps: `PREDECESSOR_DISPUTE_STACKS` describes the predecessor of the currently selected stack and feeds the lane-30 wrapper, the package's recognized-predecessor identities, and lane-34 tooling; `METHOD_SCOPED_PREDECESSOR_DISPUTE_STACKS` describes what lane 37 replaces (the diff --git a/CLAUDE.md b/CLAUDE.md index cfb983be..3687aa11 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -151,10 +151,10 @@ Current numbered lanes include: - `40` (immutable): dedicated-vault activation (tag-only; staging EOA steps, one guarded Base cutover batch, deferred predecessor writer removal); - `41`: generic UPI/INR payment method (tag-only, Base staging only); -- `42`: dispute risk-window retirement (tag-only on live networks; zeroes the - `RETIRED_DISPUTABLE_PAYMENT_METHODS` windows on the lane-39 policy; Base - executed at Safe nonce 80 on 2026-08-28, staging EOA write and its evidence - flip still pending; pin after that execution). +- `42` (immutable): dispute risk-window retirement (tag-only on live networks; + zeroes the `RETIRED_DISPUTABLE_PAYMENT_METHODS` windows on the lane-39 + policy; Base executed via the Safe 2026-08-28, staging via the deployer + 2026-09-02; still mounted, skips while every retired window reads zero). There is no `26` script. Numbered files are identities, not proof that every script should execute. A numbered script is immutable after any production diff --git a/README.md b/README.md index bdb53ef4..b195064c 100644 --- a/README.md +++ b/README.md @@ -803,10 +803,10 @@ the `RETIRED_DISPUTABLE_PAYMENT_METHODS` risk windows on `DisputeProtectionPolic 14-day windows. Base executed it at Safe nonce 80 on 2026-08-28 (safeTxHash `0x16a7…4650`, tx `0x4824a78931e3785cd69e4aa1c669c2f86cf0ccbaf22066d54f7f7ace55156f8a`; batch and chunk plan under `deployments/outputs/safe-batches/base_retire_cashapp_risk_window*`; their "lane 41" label predates the UPI -payment method claiming that number), so the lane's tagged Base run now skips. Base -staging still carries the 14-day Cash App window until `yarn deploy:dispute-risk-windows:base_staging` executes the -deployer-EOA write; after that, the recording PR drops Cash App from the package extractor's staging -`LIVE_DISPUTABLE_PAYMENT_METHODS` override, flips the staging evidence and spec windows, and pins lane 42. +payment method claiming that number). Base staging executed the deployer-EOA write on 2026-09-02 +(tx `0x5cde17a0c59ba4b606b19b9d09b468af06cd283d256984160e9627aaff4dc451`). Cash App therefore reads a zero risk +window on both networks, the evidence and package manifest say `0` everywhere, and lane 42 is immutable and pinned +after that first execution; it stays mounted and its tagged runs skip while every retired window reads zero. ### Whitelist Bootstrap diff --git a/deployments/dispute-stack-evidence.json b/deployments/dispute-stack-evidence.json index 9ebfad2d..72936d49 100644 --- a/deployments/dispute-stack-evidence.json +++ b/deployments/dispute-stack-evidence.json @@ -14,7 +14,7 @@ "0xf752c7d19698ecb0bb8988abf9b9a53a4c3657f3bc8850a6fb59fdf3e3ce8cd3": "0" }, "base_staging": { - "0x10940ee67cfb3c6c064569ec92c0ee934cd7afa18dd2ca2d6a2254fcb009c17d": "1209600", + "0x10940ee67cfb3c6c064569ec92c0ee934cd7afa18dd2ca2d6a2254fcb009c17d": "0", "0x1d966dbd6aeb8674d7c05174bd0ded7b56a798672bfb862ef20bbe8c2bbfce18": "0", "0x3ccc3d4d5e769b1f82dc4988485551dc0cd3c7a3926d7d8a4dde91507199490f": "1209600", "0x554a007c2217df766b977723b276671aee5ebb4adaea0edb6433c88b3e61dac5": "0", diff --git a/deployments/immutableDeploymentLanes.ts b/deployments/immutableDeploymentLanes.ts index a00c0435..3d9534eb 100644 --- a/deployments/immutableDeploymentLanes.ts +++ b/deployments/immutableDeploymentLanes.ts @@ -102,6 +102,18 @@ export const IMMUTABLE_DEPLOYMENT_LANES = { "V3DisputeMethodScopedVaultActivation", ], }, + // Executed on Base staging 2026-09-02 from dfe1060 (tx 0x5cde17a0…4dc451); the Base window was zeroed by the + // Safe at nonce 80 on 2026-08-28 before this lane's first run. Lane stays mounted; its skip reads live windows. + "42_retire_dispute_risk_windows.ts": { + deployedSourceSha: "dfe1060e09a5d7d9c1b57dbfd835ecf378e1e9f4", + sha256: "5aeddc6c46ad489fefbe53cf537c0c70eefebf3ce531a56149a4f2e67e3ad014", + activeSource: undefined, + retired: false, + tags: [ + "42_retire_dispute_risk_windows", + "DisputeRiskWindowRetirement", + ], + }, } as const; export type DeploymentLanes = Readonly< diff --git a/deployments/parameters.ts b/deployments/parameters.ts index 0174e9cd..5ccf2163 100644 --- a/deployments/parameters.ts +++ b/deployments/parameters.ts @@ -168,9 +168,9 @@ export const DISPUTABLE_PAYMENT_METHODS: string[] = [ "venmo", ]; -// Payment methods governance removed from dispute protection after lane 39 configured them. Lane 42 zeroes -// their risk windows wherever they are still set (Base executed at Safe nonce 80 on 2026-08-28; Base staging -// pending). DISPUTABLE_PAYMENT_METHODS already excludes them; staging evidence flips after the staging write. +// Payment methods governance removed from dispute protection after lane 39 configured them. Lane 42 zeroed +// their risk windows on both live networks (Base Safe nonce 80 on 2026-08-28; Base staging deployer write on +// 2026-09-02) and now skips everywhere; DISPUTABLE_PAYMENT_METHODS and the evidence exclude them. export const RETIRED_DISPUTABLE_PAYMENT_METHODS: string[] = [ "cashapp", ]; diff --git a/packages/contracts/scripts/extractors/disputeStack.ts b/packages/contracts/scripts/extractors/disputeStack.ts index 9d56f90c..72573425 100644 --- a/packages/contracts/scripts/extractors/disputeStack.ts +++ b/packages/contracts/scripts/extractors/disputeStack.ts @@ -114,19 +114,6 @@ const NETWORKS = [ }, ] as const; -/** - * The risk windows currently active on-chain. Staging still carries the legacy - * Cash App window until its governed policy update is executed; deployment - * parameters intentionally omit it from every future configuration. - */ -const LIVE_DISPUTABLE_PAYMENT_METHODS: Record< - (typeof NETWORKS)[number]["manifestName"], - readonly string[] -> = { - base: DISPUTABLE_PAYMENT_METHODS, - base_staging: [...DISPUTABLE_PAYMENT_METHODS, "cashapp"], -}; - const RUNTIME_IDENTITY_NAMES: RuntimeIdentityName[] = [ "Orchestrator", "OrchestratorV2", @@ -425,16 +412,10 @@ function deploymentBlockNumber( return blockNumber.toString(); } -function configuredRiskWindows( - network: keyof typeof LIVE_DISPUTABLE_PAYMENT_METHODS, -): Record { +function configuredRiskWindows(network: string): Record { const activePaymentMethods = getActivePaymentMethods(network); - const liveDisputablePaymentMethods = LIVE_DISPUTABLE_PAYMENT_METHODS[network]; - if (!liveDisputablePaymentMethods) { - throw new Error(`Unsupported dispute stack network ${network}`); - } - const configured = new Set(liveDisputablePaymentMethods); - if (liveDisputablePaymentMethods.some((method) => !activePaymentMethods.includes(method))) { + const configured = new Set(DISPUTABLE_PAYMENT_METHODS); + if (DISPUTABLE_PAYMENT_METHODS.some((method) => !activePaymentMethods.includes(method))) { throw new Error("Disputable payment methods must be active"); } const entries = activePaymentMethods.map((method) => [ diff --git a/scripts/active-dispute-stack.spec.cjs b/scripts/active-dispute-stack.spec.cjs index c82405a9..f4c741b2 100644 --- a/scripts/active-dispute-stack.spec.cjs +++ b/scripts/active-dispute-stack.spec.cjs @@ -333,8 +333,6 @@ const RISK_WINDOWS_BY_NETWORK = { base: BASE_RISK_WINDOWS, baseStaging: { ...BASE_RISK_WINDOWS, - "0x10940ee67cfb3c6c064569ec92c0ee934cd7afa18dd2ca2d6a2254fcb009c17d": - "1209600", "0x1d966dbd6aeb8674d7c05174bd0ded7b56a798672bfb862ef20bbe8c2bbfce18": "0", "0xe99a5081226cbbff9440a63da5caa04fa30f210c12c4dd9976132ac075054cd9": "0", "0xf81480907d808d639ad3230869e4b05a3b01b2d34e323af40f2efab807effd32": "0", From 43ad93185521ed09c71d455d19f2636bf7c03ee5 Mon Sep 17 00:00:00 2001 From: Kartik4152 Date: Wed, 2 Sep 2026 15:14:58 +0700 Subject: [PATCH 2/2] test(deploy): add lane 42 to the immutable-manifest pin fixture Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01Mk9kaLm8nkbBN1TPbdNU1b --- scripts/test-opt-in-dispute-lifecycle-deployment.cjs | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/scripts/test-opt-in-dispute-lifecycle-deployment.cjs b/scripts/test-opt-in-dispute-lifecycle-deployment.cjs index e7d3676d..997efe8d 100644 --- a/scripts/test-opt-in-dispute-lifecycle-deployment.cjs +++ b/scripts/test-opt-in-dispute-lifecycle-deployment.cjs @@ -508,6 +508,17 @@ test("immutable lane manifest pins the exact deployed sources", () => { "V3DisputeMethodScopedVaultActivation", ], }, + "42_retire_dispute_risk_windows.ts": { + deployedSourceSha: "dfe1060e09a5d7d9c1b57dbfd835ecf378e1e9f4", + sha256: + "5aeddc6c46ad489fefbe53cf537c0c70eefebf3ce531a56149a4f2e67e3ad014", + activeSource: undefined, + retired: false, + tags: [ + "42_retire_dispute_risk_windows", + "DisputeRiskWindowRetirement", + ], + }, }); });