station-v0.20 · marketplace→Studio + rate limits + allowlists + workflow_compose MCP + Publish button
Major push: creator economy loop closes end-to-end, airlock hardens with rate limits + allowlists, MCP surface adds workflow composition, Studio gains one-click marketplace publish.
Ships:
Creator loop
railcall market install <id>writes a Studio-consumable receipt with attribution — installed marketplace workflows land in Workflows tab with a purple 'marketplace' badge + 'by ' credit- Studio Workflows → new
Publishbutton per user-built row (server-side signs with your publisher keypair + POSTs to your marketplace seller account) - Publish preflight — checklist card if any prereq missing (keypair · session · seller profile · key registered), each with the exact CLI/URL fix
- Compose engine credits
command_id-bound steps as audited (bridge-composed workflows now PASS instead of UNAUDITED)
Airlock hardening
- Per-command daily rate limits (defaults: stripe 5/day, twilio 25/day, github 50/day, discord 200/day, local 500/day). Config: WS/rate_limits.json. Rate-limited attempts return blocked_by_policy WITHOUT consuming the approval.
- Recipient allowlists per command per field, enforced at Preview time (before approval is offered). Config: WS/allowlists.json. Empty list = deny-all; ['*'] = explicit allow-any.
- Approval-consume moved to before handler invocation — a failing handler still consumes the approval (single-attempt matches the airlock's one-decision contract)
MCP surface
- New tool:
railcall_workflow_compose— external AI turns English into a typed workflow spec, does NOT persist (returns spec for AI to inspect + human to review)
Studio UI
- Sidebar 'Sends' tab shows a live badge with the pending airlock queue count
- First-run wizard on Sends (empty vault + empty queue) — dismissible, links to /docs#airlock
- Programs tab renamed → Workflows (route unchanged for URL back-compat)
- Programs Run button (data-file dropdown → POST /api/flow/run → deep-link to Sends if bridged)
- Prompt secret redaction — 10 formats regex'd out before compose call
- Versioned workflow filenames (no silent overwrites on rebuild)
- h`` template escape-bug fix on Sends (wizard/bridged/lone sections)
Sha-256 (verify before pinning):
3af81ebdfdc7b6540634500ad660a5ff094bbf0370a63d0523b8020afb5762ed railcall_station.tar.gz
engine=6a0fb402 core=73887f55 built=2026-07-23