Option
release of project
How a new version reaches the visitors: all at once, or gradually, to a share of them first, watched against the version that runs and widened step by step or taken back by itself.
Value
{ gradual, steps, every, watch }. gradual: true makes every publish gradual, as forjr publish --gradual makes one. steps are the shares of the callers the new version is given, [0.05, 0.25, 1] when left out, and every the time at each step, '10 minutes'. A caller is given a version by a fingerprint of their id against the release: a visitor by the id of their cookie, a signed-in person by their user id, a key by its id, so the same person stays on one version through the release, on every machine. A page keeps the version it was drawn with, and a run the version it started on.
watch holds the new version to the old one over each step: it is taken back where its share of the calls that fail for no fault of the caller passes the old one's by failures (0.01), or where it answers slower at the 95th share both by slower (a fifth, 0.2) and by slowerBy ('5 ms'), once each version had calls calls (200) in the step: a call of a millisecond that takes a millisecond and a half is no reason, and one of 40 ms against 10 is. The times are the calls' as measured, not rounded. Otherwise it is widened at the end of its step. A release taken back switches every visitor to the old version, keeps the new one loaded for the runs that started on it, and writes why, with the numbers of both, each time to a tenth of a millisecond, into the log and into the note of its point.
Example
export const shop = project('shop', {
release: { gradual: true, steps: [0.1, 0.5, 1], every: '30 minutes', watch: { calls: 500 } },
})Errors
code.F9108: a version whose table change is hard cannot go gradually.
code.F1011: every or watch.slowerBy is no length of time.