btn-ship-receipt
white
#141 / 601
NAME
btn-ship-receipt — White read-cart in the 'Buttons (write ops, mint-flavor) (15)' group. Operator-commanded data surface in the Analysis tab.
SYNOPSIS
id btn-ship-receipt
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
A write action behind a consent gate. Operator-commanded only. Eight-star canon — Sakura proposes via a chip; this is the verb that fires after the operator clicks yes.
White read-cart in the 'Buttons (write ops, mint-flavor) (15)' group. Operator-commanded data surface in the Analysis tab.
MECHANISM
;;~ title "Mark order shipped" ;;~ author "lacuna" ;;~ version 1 ;;~ mode automation ;;~ flavor green ;;~ id btn-ship-receipt ;;~ touches (etsy-receipts) ;;~ summary "Mark a receipt as shipped with tracking." ;; Mark a receipt as shipped with tracking. ;; ;; 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-ship-receipt '((author . "lacuna") (version . 1) (touches . (etsy-receipts)) (read-only . #f))) (define (start ctx) (let ((id (ctx-get 'listing-id ctx)) (tracking (ctx-get 'tracking ctx)) (consent (ctx-get 'operator-confirmed ctx))) (cond ((null? id) (escalate 'missing-listing-id null)) ((null? tracking) (escalate 'missing-tracking null)) ((not consent) (escalate 'consent-required null)) (else (next 'perform ctx))))) (define (perform ctx) (let ((id (ctx-get 'listing-id ctx)) (tracking (ctx-get 'tracking ctx))) (act 'etsy/mark-shipped (list id tracking (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)))))
EXAMPLES
Example forthcoming —
docs/automations/examples.json entry editable in place.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)