Feature summary
Add a red "Revoke Operator" button to the Manage tab's BuyerOperatorCard in packages/ai-credits-widget. Clicking it opens a confirmation dialog explaining that revoking will deduct any bonus balance and stop any active stream bonuses; confirming triggers the revoke action.
Problem or opportunity
BuyerOperatorCard.tsx (packages/ai-credits-widget/src/components/manage/) already shows operator-consent state (operatorConsented, operatorConsentPending) and a "Sign Consent"/"Consented" action, but there is no way for a user to revoke operator status once granted. Users need a clear, deliberate way to revoke, with an explicit warning about the consequences (bonus deduction, stream bonuses stopped) before they do it.
Proposed solution
- Add a red "Revoke Operator" button to
BuyerOperatorCard.tsx, shown when operatorConsented is true, using the existing Button component with the existing error/red color token (no new button variant).
- On click, open a confirmation dialog using the existing imperative dialog system (
createDialog/GoodWidgetDialog in packages/ui/src/components/Dialog.tsx) — no new dialog component.
- Dialog copy explains: revoking removes the operator's ability to act on your behalf; any bonus balance will be deducted, and any active stream bonuses will stop.
- On confirm, call a new
revokeOperatorConsent action (to be added to widgetRuntimeContract.ts/backendClient.ts, since no revoke action currently exists in this package) which calls the antseed-integration backend's operator-reset endpoint . assume it will be on /v1/accounts/revoke-operator and it will require signature hash in similar format to other permissioned endpoints.
Required states, flows, and behaviors
operatorConsented === true → "Revoke Operator" button visible (red).
operatorConsented === false (no operator granted) → button not shown.
- Click "Revoke Operator" → confirmation dialog opens; no action taken yet.
- Confirm in dialog → revoke action fires; on success, card updates to reflect no operator consented (mirrors the existing "Sign Consent" success-state update).
- Cancel/dismiss dialog → no change, operator remains active.
- Revoke action failure → error surfaced consistent with existing error handling in
BuyerOperatorCard.tsx.
Acceptance criteria
Additional context
Requested by Hadar Rottenberg (Bounty Lead) in #goodbounties-lead, 2026-08-10 — standalone from issue #150 (explicit consent-step gating/copy), per Hadar's confirmation. Depends on the antseed-integration operator-reset endpoint (companion bounty, tracked separately) for the actual on-chain/backend revoke call — flag as an open dependency for the plan stage if that endpoint isn't ready yet. Relevant files: packages/ai-credits-widget/src/components/manage/BuyerOperatorCard.tsx, packages/ai-credits-widget/src/operatorConsent.ts, packages/ai-credits-widget/src/widgetRuntimeContract.ts, packages/ai-credits-widget/src/backendClient.ts, packages/ui/src/components/Dialog.tsx.
Create the plan (keep this section in the issue body)
Based on the above description create an execution plan in a new sub-issue and preserve the original issue content unchanged.
Do not execute the plan until given instructions to do so.
Sub-issue requirements:
- Title format:
[DRAFT][PLAN] <what issue is being planned>
- Type:
Task
- Description must start with:
<sub-issue title>
- Link the sub-issue back to this parent issue.
Instructions when creating the plan:
- Map relevant files that are too be used as reference from all repos mentioned
- import existing @GoodDollar packages
- Map new components that should be created. Assess when a new component should be created in the new savings widget package or made part of the reusable packages/ui
Plan specification required sections:
- Required states, flows, and behaviors
- Execution plan
- acceptance criteria
- human-reviewer checklist
Feature summary
Add a red "Revoke Operator" button to the Manage tab's
BuyerOperatorCardinpackages/ai-credits-widget. Clicking it opens a confirmation dialog explaining that revoking will deduct any bonus balance and stop any active stream bonuses; confirming triggers the revoke action.Problem or opportunity
BuyerOperatorCard.tsx(packages/ai-credits-widget/src/components/manage/) already shows operator-consent state (operatorConsented,operatorConsentPending) and a "Sign Consent"/"Consented" action, but there is no way for a user to revoke operator status once granted. Users need a clear, deliberate way to revoke, with an explicit warning about the consequences (bonus deduction, stream bonuses stopped) before they do it.Proposed solution
BuyerOperatorCard.tsx, shown whenoperatorConsentedis true, using the existingButtoncomponent with the existing error/red color token (no new button variant).createDialog/GoodWidgetDialoginpackages/ui/src/components/Dialog.tsx) — no new dialog component.revokeOperatorConsentaction (to be added towidgetRuntimeContract.ts/backendClient.ts, since no revoke action currently exists in this package) which calls the antseed-integration backend's operator-reset endpoint . assume it will be on /v1/accounts/revoke-operator and it will require signature hash in similar format to other permissioned endpoints.Required states, flows, and behaviors
operatorConsented === true→ "Revoke Operator" button visible (red).operatorConsented === false(no operator granted) → button not shown.BuyerOperatorCard.tsx.Acceptance criteria
Button/Dialogcomponents and color tokens — no new UI primitives added.Additional context
Requested by Hadar Rottenberg (Bounty Lead) in #goodbounties-lead, 2026-08-10 — standalone from issue #150 (explicit consent-step gating/copy), per Hadar's confirmation. Depends on the antseed-integration operator-reset endpoint (companion bounty, tracked separately) for the actual on-chain/backend revoke call — flag as an open dependency for the plan stage if that endpoint isn't ready yet. Relevant files:
packages/ai-credits-widget/src/components/manage/BuyerOperatorCard.tsx,packages/ai-credits-widget/src/operatorConsent.ts,packages/ai-credits-widget/src/widgetRuntimeContract.ts,packages/ai-credits-widget/src/backendClient.ts,packages/ui/src/components/Dialog.tsx.Create the plan (keep this section in the issue body)
Based on the above description create an execution plan in a new sub-issue and preserve the original issue content unchanged.
Do not execute the plan until given instructions to do so.
Sub-issue requirements:
[DRAFT][PLAN] <what issue is being planned>Task<sub-issue title>Instructions when creating the plan:
Plan specification required sections: