Skip to content

CI MIRROR — do not merge - #5

Draft
JimCollinson wants to merge 52 commits into
mainfrom
feat/adr-0016-phase-1-authority-alignment
Draft

CI MIRROR — do not merge#5
JimCollinson wants to merge 52 commits into
mainfrom
feat/adr-0016-phase-1-authority-alignment

Conversation

@JimCollinson

Copy link
Copy Markdown
Owner

…point (ADR-0016 R2)

No commit may leave a live (non-withdrawn) group with zero active members of rank >= Admin (legacy Owner counts as Admin via role rank). Enforced by one shared helper on both delivery paths: commit authoring (seal_commit) and apply-side validation (finalize_applied_commit, after the state-hash equality check so the validated roster is provably the commit's roster_root roster). Withdrawal (group-ending) commits are exempt — the last admin's exit valve.

REST handlers whose acts can zero the admin set (remove, ban, role demotion; classic + TreeKEM variants) gain a friendly 409 pre-check with the ADR-0016 Phase 1 spec's exact error string, returned before any mutation or TreeKEM side effect.

Summary

  • What changed and why?

Validation

  • cargo fmt --all -- --check
  • cargo clippy --all-targets --all-features -- -D warnings
  • cargo nextest run --all-features --workspace

Coverage

  • Current line coverage:
  • Delta vs main:
  • Coverage workstream, if applicable:
  • Exclusions added: none / see docs/coverage-exclusions.md

Test Quality Checklist

  • Each new test has a why-named name that states the invariant or regression.
  • No new test is a tautology against the implementation.
  • Each new test checks one business invariant.
  • Assertion failures include enough context to diagnose the broken invariant.
  • Coverage delta is reported from CI or just coverage-summary.
  • Any coverage exclusion has a coverage-skip: comment and a matching register entry.

dirvine and others added 2 commits June 11, 2026 18:13
…etiring Owner

Accepts the saorsa-labs#107 design proposal by @JimCollinson: authority is decided by
role on the committed roster, never by creator identity; Owner is retired
in favour of flat Admin + Member with a last-admin invariant; ownership
transfer dissolves; migration via legacy alias (stored roster entries are
never rewritten). Generalises ADR-0014's single-writer rekey to a
deterministic committer among active admins, resolving its
permanently-absent-owner open question. Equal-revision fork-choice is
recorded as deferred future work.

Refs saorsa-labs#107.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…point (ADR-0016 R2)

No commit may leave a live (non-withdrawn) group with zero active members
of rank >= Admin (legacy Owner counts as Admin via role rank). Enforced by
one shared helper on both delivery paths: commit authoring (seal_commit)
and apply-side validation (finalize_applied_commit, after the state-hash
equality check so the validated roster is provably the commit's
roster_root roster). Withdrawal (group-ending) commits are exempt — the
last admin's exit valve.

REST handlers whose acts can zero the admin set (remove, ban, role
demotion; classic + TreeKEM variants) gain a friendly 409 pre-check with
the ADR-0016 Phase 1 spec's exact error string, returned before any
mutation or TreeKEM side effect.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
JimCollinson added a commit that referenced this pull request Jun 14, 2026
- Add reviewed fast local gate commands for feature and experiment branches

- Declare draft mirror PR #5 as the CI green of record
- Flatten owner-only actions to admin-or-higher and seed new groups with Admin

- Restrict role assignment to admin/member with exact ADR-0016 errors

- Add gate-runnable owner-retirement tests for policy, role changes, genesis, and legacy Owner
- Add mixed Owner/Admin/Member legacy roster replay test

- Pin legacy Owner roster serialization and roster-root hashes
- Remove creator/owner special-case gates from add, remove, and ban paths

- Add gate-runnable membership authority coverage for REST semantics and gossip apply
- Add clone-first last-admin self-leave precheck for non-creator DELETE /groups/:id

- Preserve legacy Moderator/Guest apply convergence while testing authoring and invariant boundaries
- Remove invite issue-side creator gate in favor of admin role lookup

- Derive invite-join creator provenance from base-state roster history

- Keep join-result routing keyed to inviter and add gate-runnable invite tests
JimCollinson added a commit that referenced this pull request Jun 16, 2026
- Record Slice 4 invite authority implementation evidence

- Document PR #5 rerun failures and blocked arbiter status
- Seed invite joiner state from carried base roster/hash for all planes

- Cover non-creator admin invite MemberAdded validation on non-TreeKEM groups
JimCollinson added a commit that referenced this pull request Jun 16, 2026
- Record non-TreeKEM invite base-state remediation evidence

- Classify PR #5 CI reruns under daemon-startup flake arbiter
- Leave base-state joiner stubs at the invite authority roster/hash frontier

- Strengthen non-TreeKEM admin invite regression for post-commit hash coherence
- Replace creator-only GroupCardPublished receive check with active Admin role lookup

- Preserve stable group id and signed card verification checks
- Move expected join-result inviter storage from a process global onto AppState

- Preserve TTL pruning and clear-after-use without holding locks across await
- Add real three-daemon REST flow for non-creator Admin invite issuance and join consumption

- Assert admin-authored MemberAdded convergence and historical creator provenance
- Reuse the real three-daemon non-creator-admin invite proof across presets

- Add private_secure coverage for expected-inviter TreeKEM join-result routing
- Make DELETE /groups/:id pure self-leave for creators, admins, owners, and members

- Add group disband CLI over state withdrawal and preserve state-withdraw alias

- Cover self-leave, last-admin rejection, withdrawal, and CLI alias behavior
- Emit existing GroupDeleted metadata/direct event from disband withdrawal

- Complete local and receiver cleanup for terminal withdrawal

- Update Slice 5 docs and disband authority coverage
- Preserve terminal withdrawn metadata while wiping group key material

- Reject authoring and stale-card reanimation after disband
- Reject post-withdraw metadata and TreeKEM queue/catch-up paths before mutation

- Require roster-admin authority before withdrawn card imports wipe live keyed groups

- Mark same-stable aliases withdrawn/keyless and clean alias-scoped listeners/caches
- Remove TreeKEM snapshots and journals on terminal local cleanup paths

- Reject withdrawn snapshot production and discard withdrawn replay journals
- Check durable named-groups state before replaying live TreeKEM journals

- Preserve withdrawn same-stable aliases and wipe stale journal material
- Assert sole-admin DELETE self-leave is rejected with ADR-0016 error

- Exercise explicit withdraw/disband and retained withdrawn shell
- Assert sole-admin DELETE rejects with ADR-0016 self-leave error

- Preserve rejoin coverage by adding a backup admin before successful leave
- Assert sole-admin self-leave returns the ADR-0016 409 contract before rejoin setup

- Install a backup admin before leave so invite rejoin still exercises the join path
- Recheck withdrawn same-stable terminality after secret-share and TreeKEM crypto before installing key material

- Update stale withdrawn-card integration test to require signed terminal commits for live keyed groups
- Snapshot live TreeKEM state before inviter-side MemberJoined add

- Roll back the live tree when epoch validation or terminality-guarded persist rejects

- Add lost-race and same-stable withdrawn alias regressions
- Recheck and repair withdrawn named-groups state before durable TreeKEM rename

- Serialize group-card imports with per-group membership locks

- Add disk-level lost-race regression for late terminal withdrawal
- Route non-TreeKEM ban writes through withdrawn-aware store helper

- Return conflict before save/publish if the group became withdrawn
- Add generated action-sequence property over REST-style and gossip-apply paths

- Assert rejected actions leave state unchanged and withdrawal remains reachable
- Exercise production REST pre-check helpers and seal_commit rejections for zero-admin attempts

- Track sequence outcomes and add deterministic accepted-action coverage
- Align API, CLI, GUI, and docs with flat Admin authority

- Add role-help coverage and last-admin precheck assertion
- Use disband wording in GUI withdrawal feedback

- Mark join-request listing as admin-only
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants