aboutsummaryrefslogtreecommitdiffstats
path: root/src/remake/mod.rs
Commit message (Collapse)AuthorAgeFilesLines
* remake: no --follow-strict-remakes; a strict remake failing says whotv3 days1-3/+1
| | | | | | | | | | | | | | | | | A strict remake takes a majority of members whose --strict-keys take its manifest's signer: no node votes for one without, so --follow-strict-remakes (1173) goes. A node that doesn't vote still switches once the others commit, as with any remake. So that an operator can tell why one fails: a strict remake aborted for want of a majority (the voting period over, or a majority out of reach) says in its reason (GET /admin/remakes/{id}, and the coordinator's log) which members didn't vote, and that a member votes for one only with its manifest signed by a key of its --strict-keys. Each of those logs why itself (`Not voting for a strict remake`). The sim a_strict_remake_too_few_take: only a takes the manifest; the remake aborts, naming b and c.
* remake: turning a running swarm strict, keeping what an operator signedtv3 days1-0/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Until a swarm is strict, the user a change names is its node's word, so any member could have planted registry entries, policy, bans or user-signed values as any user, plain or signed by a key it put there itself; writing the strict policy trusted all of it as it was. A remake of a new kind, `strict`, turns a swarm strict instead: * Its content is a manifest (access::strict): the swarm, the strict policy, and each value kept at the places values are signed, by the SHA-256 of its JSON, signed by an operator (ssh-keygen -Y sign -n continuum-strict). * Every node builds the next epoch as compaction does, keeping at the signed places only the values the manifest names, as they were at the base, and writing its policy (RemakeKind::protocol, the one kind that changes protocol data). Writes after the base reach the new epoch only by replays, judged by the strict policy. * A node votes for one only with its manifest signed by one of --strict-keys, keys given out of the document; without any, for none (logged once, `Not voting for a strict remake`), unless --follow-strict-remakes. A coordinator proposes only what it would vote for (403). Once a majority commits one, every node switches, as with any remake: refusing to switch would only cut a node off. * GET /admin/strict-manifest gives the manifest keeping everything held now, the values for review and the heads they are at; continuum-signed strict shows them, signs once confirmed and proposes at those heads. The sim a_swarm_turning_strict_through_a_remake: a member plants a registry entry as a manager; the operator's manifest leaves it out; a and b, given the key, commit; c, without, follows; the entry is gone and the policy strict everywhere.
* swarm: changes taken unjudged, dropped (REFUSALS)tv4 days1-0/+17
| | | | | | | | | A node refusing changes a peer brought tells it which broke a rule; the peer judges them itself, and if its rules refuse them too, drops them with all built on them (its document forked without them, a fresh actor), quarantining its own writes among them. Wire version 42. Auth plan M6 (rejoin on taint).
* remake: forgetting and releasing name their usertv4 days1-0/+13
| | | | | | | Forget records and released quarantines name the user who made them, so they are judged by its capabilities. Auth plan M6.
* dashboard: polish remake ringstv5 days1-1/+17
|
* dashboard: add epoch switch indicatortv7 days1-7/+27
|
* dashboard: map remake votestv7 days1-0/+37
|
* add remake benchmarkstv9 days1-0/+2
|
* document: allow writes during rejointv10 days1-32/+52
|
* LWW everywhere, mostlytv10 days1-0/+12
|
* remake: copy stale view when writes stoptv10 days1-0/+5
| | | | This ensures that stale reads show every write that was answered.
* document: reject writes during rejointv10 days1-5/+13
|
* use Automerge as Document instead of AutoCommittv11 days1-4/+15
| | | | This allows a lot of operations to drop mut.
* remake coordination use document, not automergetv11 days1-10/+10
|
* remake needs sane clocktv11 days1-0/+4
|
* remake: move proposal to its own moduletv12 days1-1/+4
|
* move ChangeSet from swarm to documenttv12 days1-1/+1
|
* talk about "transport" unless mycelium is meanttv2026-10-271-3/+3
|
* add remake tests on the simulatortv2026-10-261-0/+2
|
* add remake statstv2026-10-261-0/+42
|
* introduce bounded blob downloadstv2026-10-261-4/+7
|
* wrap unix timestamps in newtypetv2026-10-261-3/+3
|
* remove /admin/compaction endpointtv2026-10-261-2/+0
|
* add clock moduletv2026-10-251-0/+9
| | | | | The Clock module is the system clock that every unix timestamp new goes through. It comes with an offset that only tests can set.
* build_genesis -> remake_genesis (fixup)tv2026-10-251-1/+1
|
* allow to remake genesistv2026-10-251-0/+1
|
* follow and download from ready members onlytv2026-10-241-0/+20
|
* put remake content into blobstv2026-10-241-0/+7
|
* add chunked download and use it during rejointv2026-10-241-0/+10
|
* introduce majority voting on remakestv2026-10-241-3/+9
|
* add the import kind of remaketv2026-10-241-1/+9
|
* consistently use the words node, peer, and seedtv2026-10-231-1/+1
|
* rename cluster to swarm everywhere!tv2026-10-211-2/+2
|
* add the replace kind of remaketv2026-10-211-1/+1
| | | | | | | | | | | | | | POST /admin/remakes accepts specs with replace kind, e.g.: { "kind": "replace", "baseHeads": ["..."], "spec": { "document": { "accounts": { ... } }, "rules": [ { "from": "users", "to": "accounts" }, { "from": "users/admin", "drop": true }, { "from": "", "to": "" } ] } }
* turn compaction into a kind of remaketv2026-10-211-1/+4
|
* rename compaction to remaketv2026-10-211-0/+150