| Commit message (Collapse) | Author | Age | Files | Lines | |
|---|---|---|---|---|---|
| * | remake: turning a running swarm strict, keeping what an operator signed | tv | 3 days | 1 | -0/+68 |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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. | ||||
| * | dashboard: remake switch delay | tv | 5 days | 1 | -1/+1 |
| | | |||||
| * | remake: decouple grace time from node's keepalive | tv | 10 days | 1 | -0/+1 |
| | | |||||
| * | api: off clock refuses aborting expired remake | tv | 10 days | 1 | -14/+29 |
| | | |||||
| * | remake coordination use document, not automerge | tv | 11 days | 1 | -1/+1 |
| | | |||||
| * | remake needs sane clock | tv | 11 days | 1 | -1/+18 |
| | | |||||
| * | remake: move proposal to its own module | tv | 12 days | 1 | -251/+5 |
| | | |||||
| * | describe remake test failures in simulation | tv | 2026-10-26 | 1 | -0/+30 |
| | | |||||
| * | add remake tests on the simulator | tv | 2026-10-26 | 1 | -0/+55 |
| | | |||||
| * | allow aborting remake with unreachable coordiantor | tv | 2026-10-26 | 1 | -4/+26 |
| | | |||||
| * | wrap unix timestamps in newtype | tv | 2026-10-26 | 1 | -16/+17 |
| | | |||||
| * | allow humand-friendly durations in API | tv | 2026-10-26 | 1 | -7/+28 |
| | | |||||
| * | remove /admin/compaction endpoint | tv | 2026-10-26 | 1 | -22/+3 |
| | | |||||
| * | remove unit suffixes from fields | tv | 2026-10-26 | 1 | -27/+30 |
| | | |||||
| * | unify API error responses | tv | 2026-10-26 | 1 | -12/+1 |
| | | |||||
| * | add clock module | tv | 2026-10-25 | 1 | -7/+8 |
| | | | | | | The Clock module is the system clock that every unix timestamp new goes through. It comes with an offset that only tests can set. | ||||
| * | bump abort margin & allow aborting active remake | tv | 2026-10-25 | 1 | -38/+174 |
| | | |||||
| * | add force module usable by API and CLI | tv | 2026-10-25 | 1 | -40/+7 |
| | | |||||
| * | compact remake fixes base at the commit | tv | 2026-10-24 | 1 | -17/+29 |
| | | | | | | | | Instead of fixing base heads at when proposed, compact fixes them when committing. This shrinks the window where writes can be lost if their author restarts to the switch delay; during replace and import remakes writes can still be lost during the voting period. | ||||
| * | allow superseding expired remakes | tv | 2026-10-24 | 1 | -23/+188 |
| | | |||||
| * | add votes register | tv | 2026-10-24 | 1 | -4/+25 |
| | | |||||
| * | put remake content into blobs | tv | 2026-10-24 | 1 | -12/+16 |
| | | |||||
| * | introduce majority voting on remakes | tv | 2026-10-24 | 1 | -42/+27 |
| | | |||||
| * | allow import remake using the raw document | tv | 2026-10-24 | 1 | -6/+85 |
| | | |||||
| * | add the import kind of remake | tv | 2026-10-24 | 1 | -2/+8 |
| | | |||||
| * | rename cluster to swarm everywhere! | tv | 2026-10-21 | 1 | -2/+2 |
| | | |||||
| * | make remake switch delay configurable | tv | 2026-10-21 | 1 | -1/+33 |
| | | |||||
| * | add the replace kind of remake | tv | 2026-10-21 | 1 | -1/+11 |
| | | | | | | | | | | | | | | | 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": "" } ] } } | ||||
| * | allow choosing the base in remakes | tv | 2026-10-21 | 1 | -4/+53 |
| | | | | | | | | | | POST /admin/remakes accepts "baseHeads": ["<hex>", ...], for example the heads of an earlier GET /store?heads=true. Every head must be in the coordinating node's document, otherwise the request gets a 400. Without it, the base is the current heads. This works for any kind. | ||||
| * | turn compaction into a kind of remake | tv | 2026-10-21 | 1 | -2/+55 |
| | | |||||
| * | rename compaction to remake | tv | 2026-10-21 | 1 | -0/+474 |
