Lacuna/Labs
btn-renew
white
#133 / 601

NAME

btn-renew — White read-cart in the 'Buttons (write ops, mint-flavor) (15)' group. Operator-commanded data surface in the Analysis tab.

SYNOPSIS

id btn-renew tier white section §6. White — atomic tools (142 baseline, 149 post-matrix) trigger operator-commanded tools cortex_query, list_listings / list_orders source carry-forward

DESCRIPTION

The renew button. Fires an Etsy renewal (which costs the operator). Eight-star consent gate.

White read-cart in the 'Buttons (write ops, mint-flavor) (15)' group. Operator-commanded data surface in the Analysis tab.

MECHANISM

PREfetchGUARDtier: whiteACTperformRESULTrenderON-ERRretry / esc
;;~ title    "Renew a listing"
;;~ author   "lacuna"
;;~ version  1
;;~ mode     automation
;;~ flavor   green
;;~ id       btn-renew
;;~ touches  (etsy-listings)
;;~ summary  "Renew a listing for another 4 months."

;; Renew a listing for another 4 months.
;;
;; Destructive write cart. Action-wrapper shape with the consent gate:
;;   precondition_fetch (ctx has id + payload + operator-confirmed)
;;     -> guard (consent required) -> perform -> result -> on_error.
;; operator_confirmed rides in args so the driver's destructive-verb
;; gate sees it. Rate-limit retries with backoff; auth-stale escalates.
;; State is `perform` (not `act`) so it never shadows the descriptor
;; constructor of the same name in cartPrelude.

(cart 'btn-renew
  '((author    . "lacuna")
    (version   . 1)
    (touches   . (etsy-listings))
    (read-only . #f)))

(define (start ctx)
  (let ((id      (ctx-get 'listing-id ctx))
        (consent (ctx-get 'operator-confirmed ctx)))
    (cond
      ((null? id)     (escalate 'missing-listing-id null))
      ((not consent)  (escalate 'consent-required null))
      (else           (next 'perform ctx)))))

(define (perform ctx)
  (let ((id (ctx-get 'listing-id ctx)))
    (act 'etsy/relist
         (list id (list 'operator_confirmed #t))
         'check-result)))

(define (check-result ctx)
  (let ((r (ctx-result ctx)))
    (cond
      ((eq? r 'ok)            (done))
      ((eq? r 'rate-limited)  (after 30 'perform ctx))
      ((eq? r 'auth-stale)    (escalate 'auth-relogin null))
      (else                   (escalate 'write-failed r)))))

source: curator-web/src/scheme/carts/etsy/btn-renew.sks · 46 lines

EXAMPLES

Operator renews a listing. Sakura checks expiry, confirms the cost, and ships the renewal. On Etsy fee changes the worker logs the new fee to Cortex so the next ROAS report is honest.

TIER

white
atomic · free · operator-commanded

FITNESS

Ready

Fits any shop today — this one has no sample-size floor.

SEE ALSO

HISTORY

canonical source: curator/docs/AUTOMATIONS-CANONICAL.md · §6-white-atomic-tools-142-baseline-149-post-matrix
last regenerated: 2026-06-05 20:31 UTC (mechanical — edits land in the MD or sidecars, not here)

KNOWN BUGS

(none recorded — flag in AUTOMATIONS-CANONICAL.md or open an issue against the cart file)