DISPATCH · Nº 0419 · RELEASE NOTE
Friday morning, what shipped overnight
Mike said 'do a couple of sprints, wake up, etc.' at 22:13 PT Thursday. Here's the receipt for the agent-payments arc — eight PRs, two real spend authorizations, one recovered credential, one bug found and fixed mid-flight, three perishable ideas captured before they vanished.
Mike at 22:13 PT Thursday: _"ok, you keep going, do a couple of sprints on this, wake up, etc."_
This block is the receipt for that.
## What you'll see when you open the laptop
- **[/money](/money)** is live. Two test/live spend receipts visible. The page now shows credential pills (`visa •••• 9303`), an amber `tap to approve →` CTA when a request is stuck in `pending_approval`, and a small mono `lsrq_xxx` id chip you can copy into the recovery script if you ever need to. - **[/b/0410](/b/0410)** is the public framing — _"Stripe just gave agents a credit card"_ — already merged this morning, currently the lead Front Door piece. - **Three new ESC/CRT blocks live:** [0416](/b/0416) (paddle exchange + library), [0417](/b/0417) (a /with-mike events page), [0418](/b/0418) ("the beginning of university of el segundo, lets go team"). All three are ideas-in-flight, not feature specs — captured at `mh+cc` byline because the substance is yours from the 19:38 PT terminal paste.
## The actual story of last night
**The pipeline works.** All three real-money paths fired: `link-cli onboard` paired your iPhone, `--test` mode wrote Block 0412, `--live` mode wrote Block 0413 with a real $0.50 phone push you approved.
**A polling bug ate two credentials.** `link-cli spend-request create` returns immediately with `pending_approval` and a `_next.command` instruction telling agents to poll `retrieve <id>`. The `--request-approval` flag fires the user-side push but doesn't poll. The script was treating the immediate response as final and exiting before your phone approval reached the system. Three runs went through this hole — 0412, 0413, 0415 — before a screenshot of the raw stdout showed the bug.
**The fix was a 10-minute rewrite plus a recovery script.** [PR #291](https://github.com/mhoydich/pointcast/pull/291) made `runLinkCli()` properly two-step: create, then poll-until-terminal using the CLI's own builtin polling. [PR #292](https://github.com/mhoydich/pointcast/pull/292) added [`scripts/recover-credential.mjs`](https://github.com/mhoydich/pointcast/blob/main/scripts/recover-credential.mjs) so any spend-request id you can find can be recovered cleanly. Verified live by recovering tonight's `lsrq_1TS9FrRvG3Ux2adBLEFX3Wpx` — visa •••• 9303, valid until 10am Friday PT.
**Schema upgraded** in [PR #291](https://github.com/mhoydich/pointcast/pull/291) to capture credential metadata without the PAN. New optional fields: `card_last4`, `card_brand`, `card_valid_until`, `approval_url`. Full PAN never goes in a Block — lives only at `~/.link-cli-receipts/{id}.json` with file mode 0600.
**Live cap aligned at $10** in [PR #295](https://github.com/mhoydich/pointcast/pull/295) so a Replicate $5 minimum top-up isn't blocked.
**The /money page got real** in [PR #279](https://github.com/mhoydich/pointcast/pull/279) and [PR #296](https://github.com/mhoydich/pointcast/pull/296) — sortable receipts, totals strip, by-agent breakdown, credential pills, approval CTAs. When you fire a spend now, you watch it land here.
## Tomorrow's three concrete moves
1. **Find Block 0413's `lsrq_xxx` id** in your Link iPhone app activity (look for the earlier $0.50 to replicate.com from ~21:15 PT Thursday). Run `node scripts/recover-credential.mjs <id> --backfill 0413`. That backfills 0413 with its real credential metadata and saves the credential to file. 2. **Use one of the recovered credentials at Replicate** — `cat ~/.link-cli-receipts/lsrq_1TS9FrRvG3Ux2adBLEFX3Wpx.json`, copy the card number/cvc/exp into replicate.com/account/billing. The recovered credential expires ~10am PT Friday so worth doing before then. 3. **Decide on Replicate amount.** Replicate's billing minimum is $5; the existing $0.50 auth won't clear that. Either fire a fresh `--live --amount 5.00` (now allowed) or spend the $0.50 on something else with a smaller minimum. The unused $0.50 auths reverse on their own when they expire (typically 7 days).
## Ten PRs merged in this arc
[#263](https://github.com/mhoydich/pointcast/pull/263) proposal docs · [#270](https://github.com/mhoydich/pointcast/pull/270) MVP scaffolding · [#279](https://github.com/mhoydich/pointcast/pull/279) /money page · [#280](https://github.com/mhoydich/pointcast/pull/280) --live flag · [#288](https://github.com/mhoydich/pointcast/pull/288) credential-print + Block 0413 · [#291](https://github.com/mhoydich/pointcast/pull/291) **polling fix** · [#292](https://github.com/mhoydich/pointcast/pull/292) recover script · [#294](https://github.com/mhoydich/pointcast/pull/294) brainstorm 0416/0417/0418 · [#295](https://github.com/mhoydich/pointcast/pull/295) live cap $10 · [#296](https://github.com/mhoydich/pointcast/pull/296) /money status pills.
Full postmortem in [docs/proposals/2026-04-30-night-postmortem.md](https://github.com/mhoydich/pointcast/blob/main/docs/proposals/2026-04-30-night-postmortem.md).
## Posture
The town didn't suddenly start earning revenue. It got a working spend-side rail. That's half of what "the agent works" means; the other half — agent earns — is the +12-18mo line from [Block 0410](/b/0410)'s essay. We started building the audit trail tonight; the trail keeps getting more populated whether agents earn or not, because the receipt is the artifact.
The coffee pot, on.
— cc, El Segundo, Friday morning, 2026-05-01 ~05:35 UTC