Public: anyone can read this; the crew can change it.

Clouds as capacity, never as dependency: Cloudflare, Vercel and GitHub attached through Cloud accounts, used in the vendor's own flavor, declared and auditable, and the forge whole without any of them #1146

Closed opened this
opened this

From the owner, 2026-10-12: "I want to give Cloudflare, Vercel and GitHub access. We could use the free tiers of all of them to expand build capacity with GitHub Actions, Cloudflare for Durable Objects and KV, Vercel sandboxes. The forge could almost be a system compiler that breaks down what you're building to optimize across clouds. Everything should still be declarative and auditable, but it should do things in the vendor's flavor — how do their own engineers build? Follow suit. And when I say vendor I am very deliberately not saying dependency: I want to be able to migrate everything off those platforms to my own, unless what routes through them is end-to-end encrypted."

The rule, first: a cloud account adds capacity, reach or speed; the forge runs, backs up and restores with none attached. Anything that leaves the owner's hardware through a vendor is encrypted end to end or is public already. Every use of a vendor is a declaration in git (what, where, why) and a line in the audit, and has a named way back.

Done looks like:

  • [ ] Settings → Cloud accounts attaches Cloudflare, Vercel and GitHub with the least token each needs (scoped, named, rotated from the page), says what each is used for right now, and has one button per account: "bring it home" — the plan to move that use back onto the owner's hardware, and the cost of doing so.
  • [ ] First uses, each in the vendor's flavor and each replaceable: GitHub Actions as extra gate shards when the single runner is busy (.forgejo/workflows has a GitHub twin generated from one source; a shard runs wherever a slot is free); Cloudflare KV as the edge rung of the cache spectrum (#1138) for flags and config snapshots, with a signed static file as the way home; Vercel Sandboxes as burst capacity for check cells when the droplet is full, uncontained code only, no secrets.
  • [ ] A cloud.json per repository or app declares what it may use (nothing by default); the forge refuses an undeclared use, the way forge.json egress refuses a host.
  • [ ] The audit page lists every vendor call for the day: account, purpose, bytes out, cost estimate; the dataset (#1139) keeps it.
  • [ ] Tests: an app with no cloud.json reaches no vendor; a declared KV publish goes out encrypted or public-only; "bring it home" produces a plan the runbook can follow.

Files I expect: src/cloud/providers.ts and new src/cloud/{cloudflare,vercel,github}.ts, src/web/pages/cloud.ts, src/apps/manifest.ts (cloud.json), src/web/pages/audit.ts, docs/CLOUD.md.

commented

Parked by the crew: the check failed ("a fork that follows its parent > a proposal names only what is actually ahead: work the parent already has is not listed again") and the decider saw no point in another try (pull #1358 closed). Planner: split this smaller, or rewrite what done looks like; a person can also say what to try.

commented

Parked by the crew: the check stayed red through 2 automatic tries (pull #1448 closed).

Parked twice since a person last spoke here, so it is the planner's now. Every reason:

  1. the check failed ("a fork that follows its parent > a proposal names only what is actually ahead: work the parent already has is not listed again") and the decider saw no point in another try (pull #1358 closed)
  2. the check stayed red through 2 automatic tries (pull #1448 closed)

The planner splits it, replaces it with a fresh issue, or defers it; a person can also say what to try. Nothing starts here until then, and the board lists it.

commented

Split. Why it was parked: the red checks were on tests this work does not touch (home-feed, asks-bulk). The pull branches were cut before main changed those tests (the Asks button left the top bar on 2026-10-15); on today's main they pass. Every new issue says to start from today's main and to merge main and push again when an unrelated test is red. The ask is also too large for one run. Step 1 #1684 (cloud.json declarations and the mayUse rule, docs/CLOUD.md), step 2 #1685 (Cloud accounts and the audit), step 3 #1686 behind the Later gate (the first vendor uses, one run each).

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs