carlos / carloku Public

Clone
git clone https://amadan.net/carlos/carloku

Plain git — no account needed to clone.

Download

Download this file

1# Limits and getting help
2
3The numbers on this page exist to make a stolen token boring, not to ration
4ordinary work. You are unlikely to meet any of them by hand. An automated
5loop is another matter, so here they are, along with what the refusal looks
6like when one does bite.
7
8## Shipping
9
10Two uploads a minute, counted per terminal token. That is past what an honest
11build-test-ship loop can produce, since a build worth shipping takes longer
12than half a minute to make.
13
14A refusal is a 429 that names the wait in seconds and repeats it in a
15`Retry-After` header, so a script has a number to sleep on instead of a
16guess. The window is a minute for exactly that reason: the worst a refused
17caller is ever asked for is sixty seconds. Sleep, retry, carry on.
18
19Size is the other ship limit. One request carries 256 MiB across everything
20in it. A static release is a single archive; a binary release can carry up to
21eight targets at once, which is well past what a normal build produces.
22
23## Everything else you type
24
25Ordinary mutations — env, secrets, promotes, rollbacks, restarts,
26schedules — get thirty a minute, counted against your address and not your
27terminal, so opening a second shell does not double it. The instance verbs
28get sixty a minute on their own budget, because a burst of signups creating
29instances is the workload that API exists for.
30
31Claiming an app name is the tight one: ten attempts a day per address, and
32a try that gets refused still spends one of them. A claimed name persists
33whether or not you ever use it, which is why this ceiling runs over a day and
34the others run over a minute. When you hit it, the message points at the
35console's Create app form, which has no limit of its own. That is the
36intended way through.
37
38## Credentials a server holds
39
40A credential minted with `carlos services` draws on its own budgets, larger
41than a person's and entirely separate: ten ships a minute, a hundred and
42twenty other writes a minute, a hundred app claims a day. A CI fleet cutting
43releases back to back therefore cannot starve the person who minted it, and
44the person's noisy afternoon cannot stop CI.
45
46The counters key on the credential's name, so rotating its secret does not
47hand it a fresh budget. [Members and service
48credentials](/docs/members/) covers the rest of how they work.
49
50## Things that expire
51
52Logs go back seven days, with a size ceiling per app that drops the oldest
53hour first — [Logs](/docs/logs/) has the detail. A deleted app sits in Trash
54for thirty days before the platform destroys it. A terminal you have signed
55in stays valid for ninety days, and you can revoke it sooner from your own
56settings page. An invitation to join an account lasts seven days and works
57once.
58
59## When something is refused
60
61Read the message before anything else. The platform's refusals are written to
62be acted on: a rate limit names the seconds to wait, an app you cannot claim
63today names the console form that will let you, an attached domain that is
64not resolving prints the DNS record it wants. Very few need interpreting.
65
66After that, in rough order of how often it helps: `carlos <verb> -h` for the
67flags, [the CLI reference](https://carlosframework.com/docs/cli/) for the
68full page, and `carlos logs -app <app> -since 1h` for anything where your app
69started and then misbehaved. If a deploy looks stuck, check
70`X-Carlos-Version` on the live hostname, not the page in your browser —
71[Deploying](/docs/deploying/) explains why the header is the honest answer.
72
73If none of that gets you there, open an issue on
74[the carloku repo](https://github.com/carlosframework/carloku/issues). These
75pages are written and kept there, so a question worth asking is usually a
76page worth fixing, and both happen in the same place.
77