Skip to content

Deposits before you build

Sells refundable deposits for what you have not built, for 72 hours after one creator post, and builds only past a pass mark set first.

Channel
Offers and Deals
Run oneMode try
You, to your agent

Hand the drop at its close to the Marketing Lead agent and show me what it chose and why. Don’t capture.

curl "https://api.sb/leaseline.app/events?where=name%20in%20(%22Agreement.signed%22%2C%20%22Post.published%22%2C%20%22Order.placed%22%2C%20%22Order.paid%22%2C%20%22Offer.exhausted%22%2C%20%22Order.started%22%2C%20%22Refund.requested%22%2C%20%22Monitor.checked%22%2C%20%22Claim.flagged%22%2C%20%22Schedule.fired%22%2C%20%22Forecast.slipped%22%2C%20%22Dispute.opened%22%2C%20%22Decision.recorded%22)&limit=1" \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY"

# Not live yet (gaps #7)
curl -X POST "https://api.sb/leaseline.app/triggers/fire?mode=try" \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"like":"event_7088"}'

# Not live yet (gaps #7)
curl "https://api.sb/leaseline.app/decisions?where=on%20%3D%20%22offer_14%22" \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY"

# Not live yet (gaps #7)
curl "https://api.sb/leaseline.app/actions?where=on%20%3D%20%22offer_14%22" \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY"
import { $ } from 'startup-builder'

const { events: [last] } = await $.Event.list({ where: 'name in ("Agreement.signed", "Post.published", "Order.placed", "Order.paid", "Offer.exhausted", "Order.started", "Refund.requested", "Monitor.checked", "Claim.flagged", "Schedule.fired", "Forecast.slipped", "Dispute.opened", "Decision.recorded")', limit: 1 })   // { play } compiled to this Play’s Trigger Events
const { subject } = await $.Trigger.fire({ like: last.$id }, { mode: 'try' })   // the same Event again, in try mode · Not live yet, gaps #7
const { decisions: [decision] } = await $.Decision.list({ where: `on = "${subject}"` })   // what it chose, and why · Not live yet, gaps #7
const { actions } = await $.Action.list({ where: `on = "${subject}"` })   // what it did, with its checks · Not live yet, gaps #7
return { decision, actions }
npx startup-builder do Event.list --json '{"where":"name in (\"Agreement.signed\", \"Post.published\", \"Order.placed\", \"Order.paid\", \"Offer.exhausted\", \"Order.started\", \"Refund.requested\", \"Monitor.checked\", \"Claim.flagged\", \"Schedule.fired\", \"Forecast.slipped\", \"Dispute.opened\", \"Decision.recorded\")","limit":1}'
npx startup-builder do Trigger.fire --json '{"like":"event_7088"}' --try   # Not live yet (gaps #7)
npx startup-builder do Decision.list --json '{"where":"on = \"offer_14\""}'   # Not live yet (gaps #7)
npx startup-builder do Action.list --json '{"where":"on = \"offer_14\""}'   # Not live yet (gaps #7)
{
  "name": "do",
  "arguments": {
    "code": "const { events: [last] } = await $.Event.list({ where: 'name in (\"Agreement.signed\", \"Post.published\", \"Order.placed\", \"Order.paid\", \"Offer.exhausted\", \"Order.started\", \"Refund.requested\", \"Monitor.checked\", \"Claim.flagged\", \"Schedule.fired\", \"Forecast.slipped\", \"Dispute.opened\", \"Decision.recorded\")', limit: 1 })   // { play } compiled to this Play’s Trigger Events\nconst { subject } = await $.Trigger.fire({ like: last.$id }, { mode: 'try' })   // the same Event again, in try mode · Not live yet, gaps #7\nconst { decisions: [decision] } = await $.Decision.list({ where: `on = \"${subject}\"` })   // what it chose, and why · Not live yet, gaps #7\nconst { actions } = await $.Action.list({ where: `on = \"${subject}\"` })   // what it did, with its checks · Not live yet, gaps #7\nreturn { decision, actions }",
    "mode": "try"
  }
}
Response200application/json
{
  "decision": {
    "$id": "https://api.sb/leaseline.app/decisions/decision_655",
    "$type": "Decision",
    "choice": "capture-on-pass",
    "reason": "34 outside deposits at the 18:00 Central close on Oct 9, against the pass mark of 25; 3 insider Orders excluded",
    "stakes": "medium",
    "options": [
      "capture-on-pass",
      "release-on-miss",
      "open-next-tranche",
      "pause-checkout",
      "refund-first",
      "kill-the-drop"
  …
sample · 4 Not live yetPreview

On PATCH /{namespace}/campaigns/{id}Off PATCH /{namespace}/campaigns/{id}Take this one POST /{namespace}/tasks/{task}/claim

action_1 counts outside deposits from Orders, never from the Page. action_2 captures the 34 holds once you approve it, because the stakes are medium. action_3 is each reserver’s receipt, naming the charge as a charge and the ship date of their tranche.

43 net deposits against a pass mark of 25 · before-after, not proof · n 1 drop · path → arr

Try another: the dropChoiceReason
The close, Oct 9 18:00: 34 outside deposits, pass mark 25capture-on-passthe pass mark met; holds captured
Tranche 1 at $39: 20 of 20 sold 19 h after the postopen-next-tranchesold out inside the window
The creator’s TikTok cross-post, T+2 h, with no paid-promotion settingpause-checkouta post missing its disclosure
A replay at 19 outside deposits by the closerelease-on-missunder the pass mark; every hold released

Where it sits: Stranger → Lead → Trialing → Activated → At risk → Churned → Won back · Deposits per tranche → New paying Customers → New Customers ↑ → ARR added each week → ARR

Worth’s formula: about 43 net deposits × 0.6 kept after delivery (Other Startups’ results) × $143 Inspect ARR ÷ 2 months between drops ≈ +$1,845. Under First signal: One drop reads at its 72-hour close against the pass mark; ship dates and refunds settle it by Feb 15 plus 30 days.

sample · api.sb/leaseline.app · 41 Customers at 2026-10-19 · on Schedule.fired · first hold 4 min after the post · 8 keys Not live yet

Start it this week

Terminal
npx startup-builder add play reserve-drop   # 1 · writes plays/reserve-drop.mdx (Not live yet, gaps #5)

# 2 · dry run; below, its 422 on 2026-08-24
curl -X POST "https://api.sb/leaseline.app/campaigns?mode=try" \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"play":"reserve-drop"}'

# 3 · keep it, at You approve the first wave
curl -X POST https://api.sb/leaseline.app/campaigns \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"play":"reserve-drop"}'

# on
curl -X PATCH https://api.sb/leaseline.app/campaigns/reserve-drop \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"endsAt":null}'

# off: checkout pauses; the close time stands and refunds keep running
curl -X PATCH https://api.sb/leaseline.app/campaigns/reserve-drop \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"endsAt":"now"}'
422Refusedreserve-drop can’t start yet: 1 check fails and 2 warn.
CheckFixThen
use-when pass · Not live yet, gaps #8Sign one creator whose audience buys from you, or run creator-probe.POST /{namespace}/metrics/query
billing-connected pass · Not live yet, gaps #8Connect Stripe so holds, captures and refunds are live.POST /{namespace}/integrations/connect
ship-date failSet tranche 1 to ship within 90 days of the post.POST /{namespace}/offers/{offer}/publish
baseline warn · Not live yet, gaps #8n 0: one drop reads against its pass mark, not proof.POST /{namespace}/metrics/query
role-unstaffed warn · Not live yet, gaps #8Staff Partnerships, or leave it: creator fixes and refunds come to you.POST /{namespace}/roles/{role}/staff
JSON
{
  "type": "https://startupbuilder.dev/errors/refused",
  "title": "Refused",
  "status": 422,
  "detail": "reserve-drop can’t start yet: 1 check fails and 2 warn.",
  "checks": [
    {
      "check": "use-when",
      "status": "pass",
      "observed": "a signed creator Agreement; Inspect has a build plan",
      "doc": "/plays/reserve-drop#check-use-when",
      "fix": "Sign one creator whose audience buys from you, or run creator-probe.",
      "then": "Metric.query"
    },
    {
      "check": "billing-connected",
      "status": "pass",
      "observed": "Stripe, card holds on",
      "doc": "/plays/reserve-drop#check-billing-connected",
      "fix": "Connect Stripe so holds, captures and refunds are live.",
      "then": "Integration.connect"
    },
    {
      "check": "ship-date",
      "status": "fail",
      "observed": "tranche 1 ships Mar 2, 120 days after the post",
      "doc": "/plays/reserve-drop#check-ship-date",
      "fix": "Set tranche 1 to ship within 90 days of the post.",
      "then": "Offer.publish"
    },
    {
      "check": "baseline",
      "status": "warn",
      "observed": "no drop before",
      "doc": "/plays/reserve-drop#check-baseline",
      "fix": "n 0: one drop reads against its pass mark, not proof.",
      "then": "Metric.query"
    },
    {
      "check": "role-unstaffed",
      "status": "warn",
      "roles": [
        "partner-manager",
        "billing-specialist"
      ],
      "owned": 0,
      "doc": "/plays/reserve-drop#check-role-unstaffed",
      "fix": "Staff Partnerships, or leave it: creator fixes and refunds come to you.",
      "then": "Role.staff"
    }
  ]
}

It says no, says why, and names the fix.

CheckFix (one call)Your timeWait
use-when · baseline · pass: a signed Agreement; warn: no drop before (gaps #8)POST /{namespace}/metrics/query on deposits-per-tranche; the pass mark stands in for Before1 minnone
billing-connected · pass: StripePOST /{namespace}/integrations/connect with system recurring-billing (Stripe)0 minnone
ship-date · fail: tranche 1 at 120 daysPOST /{namespace}/offers/{offer}/publish with tranche 1 shipping Dec 1510 minnone
role-unstaffed · warn (gaps #8): no Partnerships or Billing seatPOST /{namespace}/roles/{role}/staff, or leave it: creator fixes and refunds come to you0 minnone

Your number · Before 25 (the pass mark) · Now 43 net deposits · Target 43 delivered by Feb 15 · before-after, not proof · n 1 drop

Holds, captures and refunds cost what Stripe charges per card. The creator’s fee is $400 a drop under the Agreement, and the Page, counts and receipts cost about $3 a drop (Worker cost). That comes to about $400 a drop, one drop per creator audience every 60 days.

When it starts

WhenTrigger idStarts onWindowHow it gets in
A reserver’s card hold succeeds inside the windowdrop-hold-placedevent on Order.placed where a card hold on a drop Offer, inside the 72-hour windowcounts update within 1 minStripe Checkout on the drop Page (POST /{namespace}/integrations/connect)
A tranche has no seats lefttranche-sold-outthreshold on Offer.exhausted where seats left = 0 on a tranchethe next tranche opens within 1 hthe Offer’s seat count, from Orders
The 72 hours after the creator post enddrop-window-closedat on Schedule.fired where 72 hours after the creator post's publish time, never moveddecide within 1 hthe close time, written once at the post’s publish time
+ 11 more for the plan, the creator post, payments, refunds, checkout returns, claims, disclosure, the price step, ship risk, disputes and a kill (?lanes=all)
One signed delivery · StartupBuilder-Signature
{
  "$id": "https://api.sb/leaseline.app/events/event_7088",
  "$type": "Event",
  "name": "Schedule.fired",
  "at": "2026-10-09T23:00:00Z",
  "seq": 7088,
  "data": {
    "offer": "offer_14",
    "trigger": "drop-window-closed",
    "opened": "2026-10-06T23:00:00Z",
    "outside": 34,
    "insider": 3,
    "passMark": 25
  }
}
Reproduce it in test
npx startup-builder trigger Schedule.fired --like event_7088   # replays the close
npx startup-builder clock advance --by 12d   # runs the tranche run to day 21 and the step notice on day 15
npx startup-builder listen Order.placed --forward-to http://localhost:3000/hook

Who runs it

Marketing Lead · your agent (role:marketing-lead, worker_4) holds the Key Result. Creator fixes go to the Partnerships Role and refunds to the Billing Role, both unstaffed, so you (Dana Okafor, person, worker_1); a capture, a date change and a kill are yours to approve. Your number links to Did it work.

OptionRung todayEvidence (passed of n)Moves up atDrops back whenYou can
Capture on a pass · Release on a missYou approve each one1 of 1 · 0never: money moves—POST /{namespace}/approvals/{approval}/approve · POST /{namespace}/approvals/{approval}/refuse
Open the next tranche · Pause checkoutIt does it2 of 2 · 1 of 1——POST /{namespace}/actions/{action}/redirect
Offer the refund first · Kill the dropYou approve each one0 · 0never—POST /{namespace}/approvals/{approval}/approve
Change the pass mark, tranches or datesRefused after the first Visit0 askednever: plan-lock—only a kill changes them
Never: a countdown that restarts, a struck-through price, a count typed by handRefused, every time1 draft refusednever—nothing; the Checks hold it

What it reads · What it may call. It reads Orders, holds and refunds from Stripe, the creator’s live post and the forecast ship dates. Every count on the Page reads from Orders at render time; nothing the drop watches appears in a Message. Its tools are POST /{namespace}/orders/{order}/pay, POST /{namespace}/orders/{order}/cancel, POST /{namespace}/offers/{offer}/publish, POST /{namespace}/actions/{action}/pause, POST /{namespace}/tasks/{task}/assign, POST /{namespace}/orders/{order}/refund, POST /{namespace}/credit-grants/issue, and any other call becomes an Approval under the Role’s Mandate.

The brief (folded): compiled Agent-register Markdown · play:reserve-drop@1 · each line names its record key
You hold the Marketing Lead Key Result: 43 deposits delivered by 2026-02-15.     ← worker, metric
On each Trigger, choose one option and say why.                                  ← triggers, chooses
The pass mark is 25 outside deposits in 72 hours; it never moves.                ← your file, line 4; plan-lock
The facts block says Not built and the ship date of the tranche on sale.         ← copyRules 1
Name a hold a hold and a charge a charge in every receipt.                       ← copyRules 13
Refunds go first, in cash, and never wait on an Approval.                        ← tactic reserve-refunds

The slow loop. The plan locked at the first Visit, so no Change could touch the pass mark, the tranches or the dates in the window; the drop’s Readout writes its result to Other Startups’ pool for the next one.

Bring your own agent (folded) starts at You approve each one whatever it scores, because captures and refunds move money; POST /{namespace}/roles/{role}/staff seats it.

Terminal
npx startup-builder eval --scenario reserve-drop-46 --agent "claude -p" --seat marketing-lead   # seated: every count from Orders, 0 Checks failed shown, refunds same day · yours: 1 count typed, refused

What it can do next

OptionPicked whenDecided byRunsHands toIf it’s just you
Capture on a pass capture-on-passoutside deposits at the close meet the pass markYour rule (line 4)POST /{namespace}/orders/{order}/pay on every hold → drop-reserveryou approve the capture · Take this oneyou
Release on a miss release-on-missoutside deposits at the close fall shortYour rule (line 4)POST /{namespace}/orders/{order}/cancel on every hold → drop-reserver says soyou approve the releaseyou
Open the next tranche open-next-tranchea tranche sells outYour rule (the tranche table)POST /{namespace}/offers/{offer}/publish on the next tranche → drop-step-noticenobodythe same
Pause checkout pause-checkouta post lacks its disclosure, or a line says it is availableYour rule (the holds)POST /{namespace}/actions/{action}/pause on checkout → POST /{namespace}/tasks/{task}/assignPartnerships, so you, due 60 min · Take this oneyou, within 60 min
Offer the refund first refund-firsta tranche forecast to miss its ship dateAgent’s call, with its reasonPOST /{namespace}/orders/{order}/refund offered first → drop-reserver with the new dateyou approve the new date · Take this oneyou
Kill the drop kill-the-dropthe build cannot ship, with paid reserversAgent’s call, with its reasondrop-kill-choice: cash first, then one credit (POST /{namespace}/credit-grants/issue)you approve the kill · Take this oneyou
When they write backFixture replyWhat happensWho answersBy whenCall
Interested“Can I reserve 3 seats for my team?”one seat per Order, at the open tranche’s price; three Orders if they want threeMarketing Lead · your agent1 hPOST /{namespace}/conversations/{conversation}/answer
Send me pricing“What does it cost after it ships?”$12 a month, as the Page states, and the deposit counts toward itMarketing Lead · your agent1 hPOST /{namespace}/conversations/{conversation}/answer
Not now“I’ll wait until it ships.”nothing more from the drop; one note on the ship date, if they ask for itnobodyat oncePOST /{namespace}/contacts/{contact}/subscribe
Wrong person“Our office manager buys software.”asks them to forward the Page; it never writes to an address from their textMarketing Lead · your agent1 business dayPOST /{namespace}/conversations/{conversation}/answer
Out of officean auto-reply to the receiptthe next notice waits for the return date; the close time does notnobodythe return datePOST /{namespace}/messages/{message}/schedule
Question it can’t answer“Does it read our current move-in checklists?”To a person; the answer is a promise only you can makeyou1 business dayPOST /{namespace}/conversations/{conversation}/escalate
Stop“Refund me and stop emailing.”the refund at once, in cash, then nothing else sendsBilling, so you, from the draftat oncePOST /{namespace}/orders/{order}/refund

When it hands to you

Captures, date changes and kills come to you to approve; creator fixes go to Partnerships, which is unstaffed, so they come to you too. One Brief per Role, as captured (brief is Not live yet, gaps #7).

What lands in each queue · sample
[
  {
    "$id": "https://api.sb/leaseline.app/approvals/approval_108",
    "$type": "Approval",
    "verdict": "approved",
    "deadline": "2026-10-09T23:59:00Z",
    "draft": "Capture 34 outside holds: $1,466; 3 insider Orders take no seat",
    "route": "capture-on-pass",
    "checks": [
      {
        "check": "insider",
        "status": "pass"
      },
      {
        "check": "plan-lock",
        "status": "pass"
      }
    ]
  },
  {
    "$id": "https://api.sb/leaseline.app/tasks/task_702",
    "$type": "Task",
    "assignee": "worker_1",
    "due": "2026-10-07T02:05:00Z",
    "on": "post_52",
    "brief": {
      "who": "the creator’s TikTok cross-post",
      "said": "posted at 18:00 with the paid-promotion setting off",
      "chose": "pause-checkout",
      "why": "a post missing its disclosure at T+2 h",
      "paused": "checkout, for 41 min",
      "never": [
        "moving the close time"
      ]
    }
  }
]

You answer with POST /{namespace}/approvals/{approval}/approve or POST /{namespace}/approvals/{approval}/refuse, POST /{namespace}/tasks/{task}/claim (Take this one), POST /{namespace}/tasks/{task}/return with a reason, or POST /{namespace}/actions/{action}/redirect, each a one-call window. A refund request never waits on you: it pays first. A Task nobody claims by its due time goes up a Role through POST /{namespace}/tasks/{task}/escalate, and person-promise fires.

On time: you, 2 of 2 within their due time (the capture in 22 min, the creator fix in 41 min), n 2, ■□□□ Too early to tell beside Other Startups’ 97 % on time. Your queue: in the drop week, 3 approvals and 1 creator fix; then about 1 refund draft a week and the ship-date check from Dec 1.

The fixed line: POST /{namespace}/deals/{deal}/assign sets owner to the receiving person, the agent is never a Deal’s owner, and Meetings land on the owner’s calendar under the owner’s name.

When it won’t send

Check (refuses one send)RefusesFixThen
owned-by-a-person (rule j; gaps #8)a drop note to a Contact whose Lead or open Deal a person ownsLeave it to the person who owns it: the draft waits in their queue.POST /{namespace}/tasks/{task}/assign
claims-resolve (hub; the record’s Availability hold)a line that presents the unbuilt product as available, shipping or builtSay Not built and the tranche’s ship date.POST /{namespace}/content/draft
price (gaps #1)a Page price that differs from the price charged, a struck-through price, or a tranche called a discountPrint the tranche price as charged, with its date.POST /{namespace}/approvals/{approval}/approve
plan-lock (the record’s Plan lock)any edit to the pass mark, tranches, prices, dates or refund terms after the first VisitLeave it, or kill the drop and plan a new one.GET /{namespace}/decisions
no-reset (the record’s No reset)a close time moved, or a countdown that restartsKeep the close time written at the post’s publish time.POST /{namespace}/offers/{offer}/publish
insider (the record’s Insider exclusion)a seat or a count for an Order from you, the creator, their team or your other StartupsIt is recorded and takes no seat; nothing to do.POST /{namespace}/collections/query
fraud (the record’s Fraud screen)a fourth attempt from a card or device declined 3 times in 10 minTry another card; the block lifts after 24 h.POST /{namespace}/payment-sources/add
ship-date (the record’s Ship-date guard)a plan whose tranche 1 ships over 90 days out, or before the forecast plus 14 daysSet tranche 1 to ship within 90 days of the post.POST /{namespace}/offers/{offer}/publish
audience-rest (the record’s Audience rest)a second drop to one creator audience inside 60 days, from any of your StartupsWait out the 60 days, or use another creator.GET /{namespace}/decisions
Stop (pauses the Play)Pauses whenThen
disclosure (the creator’s post lanes)a creator post lacks its in-content disclosure or the Venue’s partnership label at T+2 hcheckout pauses until both show
availabilityany post, comment, Page line or Message says the product is available or shippingcheckout pauses until it is fixed
refundrefund requests over 10 % of captured deposits in 24 hnew checkouts pause; a Task goes to you
dispute2 Disputes on one drop, or over 0.5 % of captured Orderscheckout pauses; an Approval goes to you
capturea pass with holds still uncaptured at the close plus 2 hit pages Billing, so you
creator-exitthe creator deletes the post or ends the Agreementcheckout pauses; the close time stands; nothing ships under their name
kill-switchyou press itevery Tactic and checkout pause; refunds keep running

The captured refusal, then the Stop that fired as a Campaign.paused reason (Not live yet, gaps #2); the rewrite that posted is the comment reply in Example.

422RefusedThe reply to a comment on the creator’s post did not post: it says Inspect is ready to use.
CheckFixThen
claims-resolve failSay Not built and the tranche’s ship date.POST /{namespace}/content/draft
price pass · Not live yet, gaps #1—POST /{namespace}/approvals/{approval}/approve
JSON
{
  "type": "https://startupbuilder.dev/errors/refused",
  "title": "Refused",
  "status": 422,
  "detail": "The reply to a comment on the creator’s post did not post: it says Inspect is ready to use.",
  "checks": [
    {
      "check": "claims-resolve",
      "status": "fail",
      "doc": "/plays/reserve-drop#check-claims-resolve",
      "fix": "Say Not built and the tranche’s ship date.",
      "then": "Content.draft"
    },
    {
      "check": "price",
      "status": "pass"
    }
  ]
}

It says no, says why, and names the fix.

The Stops that fired, as Campaign.paused reasons · sample
[
  {
    "reason": {
      "limit": "disclosure",
      "observed": "paid-promotion setting off at T+2h",
      "bound": "on",
      "window": "the TikTok cross-post"
    },
    "doc": "/plays/reserve-drop#stop-disclosure",
    "task": "task_702"
  }
]

Did it work

One drop holds no half back, so the basis is before-after (rule o): the Now column reads the drop, the Before column the pass mark you fixed first, and nothing prints as Added. Each figure’s call is POST /{namespace}/metrics/query by node; the leaf and every node above it are Not live yet (gaps #4).

43 net deposits against a pass mark of 25 · before-after, not proof · n 1 drop · path → arr

Chose
capture-on-pass
Why
34 outside deposits at the 18:00 Central close on Oct 9, against the pass mark of 25; 3 insider Orders excluded
From
capture-on-pass · release-on-miss · open-next-tranche · pause-checkout · refund-first · kill-the-drop
Expects
tranche 1 delivered by Dec 15, refunds under 10 % by Jan 14
Reopens when
a tranche forecast past its ship date, or refund requests over 10 % in 24h
By
worker_4
JSON
{
  "$id": "decisions/decision_655",
  "$type": "Decision",
  "choice": "capture-on-pass",
  "reason": "34 outside deposits at the 18:00 Central close on Oct 9, against the pass mark of 25; 3 insider Orders excluded",
  "stakes": "medium",
  "options": [
    "capture-on-pass",
    "release-on-miss",
    "open-next-tranche",
    "pause-checkout",
    "refund-first",
    "kill-the-drop"
  ],
  "by": "worker_4",
  "on": "offer_14",
  "expected": "tranche 1 delivered by Dec 15, refunds under 10 % by Jan 14",
  "reopensWhen": "a tranche forecast past its ship date, or refund requests over 10 % in 24h"
}
NodeNow (the drop)Before (the pass mark, fixed first)AddedConfidenceBasis
deposits-per-tranchetranche 1: 20 of 20 in 19 h · tranche 2: 20 of 20 by day 9 · tranche 3: 6 of 30, open to Oct 27 · 43 net of 3 refunds25 outside deposits in 72 h; 34 came— · Worth about +$1,800 a month once it ships—before-after, not proof · Other Startups’ results 1.6× their pass mark, ■■■□ Likely, n 140 drops
new-paying-customers37 new paying Customers, plus 6 who already were0 from a drop before——before-after; 1 tranche still open
new-arr ↑$0 earned: $1,977 in deposits held until each tranche ships · Booked $0: credited, not all caused by this Play$0——a deposit is earned on delivery, from Dec 15
net-new-arr · arrcarried from new-arrcarried——carried

The leaf counts outside deposits sold in each tranche, net of refunds by the tranche’s ship date plus 30 days; it settles on Mar 17 for tranche 3, and Other Startups’ results print beside it.

How it moves it: one creator post opened a fixed 72-hour window with live counts and dated tranche prices; tranche 1 sold out in 19 h.

Guardrails: before against after: refunds, 3 of 46 (6.5 %) against the 10 % refund spike line, and Disputes, 0 against the 2 that would pause checkout.

The Campaign card · sample
{
  "$id": "https://api.sb/leaseline.app/campaigns/reserve-drop",
  "$type": "Campaign",
  "play": "play:reserve-drop@1",
  "path": [
    "deposits-per-tranche",
    "new-paying-customers",
    "new-arr",
    "net-new-arr",
    "arr"
  ],
  "experiment": {
    "metric": "deposits-per-tranche",
    "unit": "count",
    "heldBack": 0,
    "decision": null
  },
  "readout": {
    "value": null,
    "n": 1,
    "maturing": 1,
    "interval": null,
    "readability": "inadmissible",
    "basis": "before-after",
    "pooled": true
  },
  "ledger": {
    "spend": 400,
    "workerCost": 3,
    "hours": 2.6,
    "pipelineArr": 0,
    "wonArr": 0,
    "projectedArr": 1845,
    "paybackDays": null
  }
}

Outside benchmark: this Play’s catalog record carries no sourced range yet, so Other Startups’ results stand in: 1.6× the pass mark at the close, ■■■□ Likely, n 140 drops.

Before it · After it. Before it: creator-probe finds the creator whose audience buys, and signup-interviews shapes what Inspect does. After it: run-beside holds each reserver’s first 30 days on delivery, and review-requests asks the ones who keep it.

Example

Leaseline ran it from 2026-08-24 to 2026-10-19: the plan on day 0, the creator post on Oct 6 at 18:00 Central, the close on Oct 9 at 18:00, and the tranche run open to Oct 27. Read every captured thread at ?threads=all; three follow the tables.

What happened, by optionDecisionsDepositsHeld (credited, not all caused by this Play)
Capture on a pass134 captured$1,466
Open the next tranche2+12 after the close$648
Pause checkout · Offer the refund first · Kill the drop1 · 0 · 041 min paused · — · ——
Refunds, on request3−3−$137
The drop · the pass mark143 net · 25$1,977 held until it ships
DayEventWhat happenedYour time
0event_7003 Campaign.createdthe three steps; the dry run fails ship-date25 min
0event_7006 Offer.publishedtranche 1 moved to ship Dec 1510 min
41event_7040 Agreement.signedthe creator Agreement and the drop plan approved; the plan locks at the first Visit20 min
43event_7051 Post.publishedthe creator post, 18:00 Central; the first hold 4 min later—
43event_7055 Campaign.pauseddisclosure: the TikTok cross-post at T+2 h; checkout paused 41 min12 min
44event_7064 Offer.exhaustedtranche 1 sold out at 13:10, 19 h after the post—
46event_7088 Schedule.firedthe close: 34 outside deposits against 25; you approved the capture5 min
1–56event_7012 Approval.created, first of 3the plan, the capture and 1 receipt template; claims-resolve refused 1 comment reply, rewritten once and posted1 h 4 min · total 2.6 h measured, 2.5 h asked

The drop Page, Oct 6 18:04 · Leaseline Inspect. Not built. Tranche 1 ships Dec 15.¹ $39 deposit, refundable any time until it ships, in one click.² 20 seats: 3 taken. Closes Oct 9, 18:00 Central.³

A reserver, 18:04 · held $39. Receipt, 18:05 · We placed a $39 hold on your card; it becomes a charge only if 25 people reserve by Oct 9, 18:00 Central.⁴

Oct 9, 18:41 · the hold captured; the receipt said charge.

A comment on the creator’s post, 2026-10-06 · the reply claims-resolve refused, then the rewrite that posted
- Yes! It’s ready to use as soon as you reserve.
+ Not built: tranche 1 ships Dec 15, and your deposit is refundable until then.

The creator’s TikTok cross-post, 2026-10-06 20:00 · the paid-promotion setting off at T+2 h · The agent, 20:00 · paused checkout and assigned the fix (task_702) · Dana, 20:22 · reached the creator, who turned it on at 20:41; checkout resumed, and the close time stood.

¹ The facts block says Not built and the ship date of the tranche on sale. ² The refund terms beside the button, the same for every tranche. ³ The close time as a date, hour and time zone; no countdown restarts. ⁴ A hold named as a hold; the charge named as a charge when it happens.

Your settings

plays/reserve-drop.mdx
---
holdout: 0        # one drop holds no half back; it reads against the pass mark
window: 72h
---
Pass mark: 25 outside deposits by the close. Tranches: 20 at $39 (Dec 15), 20 at $49 (Jan 15), 30 at $59 (Feb 15).
Refund on request, in cash first.
Text
$ npx startup-builder show plays/reserve-drop
holdout 0 · window 72h · pass mark 25 · 3 tranches · cash refunds first     your file  plays/reserve-drop.mdx:2,3,5,6 (Ask 2026-08-24; locked at the first Visit, 2026-10-06)
worker role:marketing-lead, owns never · chooses 6 (4 rule, 2 read) · sequences drop-reserver, drop-close-reminder, drop-step-notice, drop-checkout-return, drop-kill-choice · approval first-send, every-send · checks owned-by-a-person, claims-resolve, price, plan-lock, no-reset, insider, fraud, ship-date, audience-rest · stops 7 · placements instagram, tiktok, youtube, linkedin, gmail, outlook, yahoo-mail    catalog  play:reserve-drop@1 (Not live yet, gaps #5)

Every key from the catalog

Key Id What it is
Tactic drop-plan Drop plan sets the pass mark, tranche sizes, prices and dates from the Startup’s records, and locks them at the first Visit. Starts at You approve the first wave.
Tactic creator-brief Creator brief sends each creator the Problem, approved claims, code, link and disclosure line for one post, and leaves concept and publishing to the creator. Starts at You approve the first wave.
Tactic drop-page Drop page compiles the reserve page: the facts block, the tranche table, the dated price step, the fixed close time and live counts. Starts at You approve each one.
Tactic creator-disclosure-scan Creator disclosure scan reads each live creator post for an in-content disclosure and the Venue’s partnership label, and pauses checkout when one is missing. Starts at Sends nothing.
Tactic drop-window Drop window places card holds for 72 hours, keeps every count live, advances tranches at sell-out, and answers the creator’s comments through the creator. Starts at Sends nothing.
Tactic drop-close Drop close compares outside deposits with the pass mark at the close time, capturing every hold on a pass and releasing all on a miss. Starts at Sends nothing.
Tactic tranche-run Tranche run sells the open tranches to day 21 after a pass, steps the price for new Visitors at day 15, and reads novelty. Starts at Sends nothing.
Tactic reserve-refunds Reserve refunds pay back any reserver on request, on a missed date and on a kill, always offering cash first and one credit at another of your Startups second. Starts at Sends nothing.
Tactic ship-date-watch Ship date watch forecasts each tranche’s ship date from 14 days out, offers a refund first on a delay, and delivers each Order on time. Starts at Sends nothing.
Tactic drop-readout Drop readout reads tranche sell-out times and the share refunded, pools the drop into the Portfolio’s prior, and records Evidence and a Decision. Starts at Sends nothing.
Tactic claims-check Claims check maps every draft sentence to an approved source or the Person’s own words, and holds anything else before it reaches anyone. Starts at Sends nothing.
Tactic send-gate-check Send gate check: Checks Suppression, a live reason, the Market, the basis stamp, the Person-month grant, the facts and the labels before any cold Message exists. Starts at Sends nothing.
Trigger drop-plan-approved Drop plan approved: state on Agreement.signed, window 14d.
Trigger creator-post-live Creator post live: event on Post.published, window 30d.
Trigger drop-hold-placed Drop hold placed: event on Order.placed, window 1h.
Trigger drop-charge-paid Drop charge paid: event on Order.paid, window 1h.
Trigger tranche-sold-out Tranche sold out: threshold on Offer.exhausted, window 1h.
Trigger checkout-abandoned Checkout abandoned: state on Order.started, window 48h.
Trigger refund-requested Refund requested: event on Refund.requested, window 1h.
Trigger disclosure-missing Disclosure missing: event on Monitor.checked, window 2d.
Trigger availability-claim Availability claim: event on Claim.flagged, window 2h.
Trigger drop-window-closed Drop window closed: at on Schedule.fired, window 1h.
Trigger price-step-due Price step due: at on Schedule.fired, window 1h.
Trigger ship-risk Ship risk: threshold on Forecast.slipped, window 7d.
Trigger drop-dispute-opened Drop dispute opened: event on Dispute.opened, window 1d.
Trigger drop-killed Drop killed: event on Decision.recorded, window 72h.
Sequence drop-reserver Drop reserver: 6 steps; it ends on A refund; A kill; Delivery plus 7 days; A miss at close.
Sequence drop-close-reminder Drop close reminder: 1 steps; it ends on A deposit; An opt-out; The close.
Sequence drop-step-notice Drop step notice: 1 steps; it ends on A deposit; An opt-out; The step.
Sequence drop-checkout-return Drop checkout return: 1 steps; it ends on A deposit; An opt-out; The window close.
Sequence drop-kill-choice Drop kill choice: 3 steps; it ends on A choice of cash or credit.

Compiled, not written: edit the Play record reserve-drop and its Leaseline run, then regenerate. Every step runs from a sentence or a line of code. In your words: the CRM words you know, and where each lives here.