Skip to content

1.0.0-alpha.6: share a vault, and see who changed what - #24

Merged
usermaneGermane merged 1 commit into
mainfrom
v3-sharing
Nov 11, 2026
Merged

usermaneGermane merged 1 commit into
mainfrom
v3-sharing

Conversation

@usermaneGermane

Copy link
Copy Markdown
Owner

SecretSpace 3, phase 4, client side: share a vault with other accounts, and see who changed what. A test version (pre-release); it needs SecretSpace Server 2.0.0-alpha.3.

Sharing

  • Vaults → Members. An owner adds an account of the same server as owner, editor or reader.
  • Fingerprint check. Before the first share the other person's fingerprint is shown to compare with them. It covers both of their public keys. The device remembers the keys it has seen and stops if the server later gives different ones.
  • Remove = new key. Removing a member syncs the vault, re-encrypts it under a new key and wraps that key to everyone who stays, in one call. Other devices take the new key at their next sync. Change key does the same without removing anyone.
  • Leave. A member who is not an owner sees Leave instead of Delete.
  • Read only. A reader gets no Edit, Archive, Revert or Clear history, and the vault is not offered when adding an entry. A change to a read-only vault that still reaches a save is undone from the file.

Who changed what

  • Change log in every vault (changelog.py). Each save adds signed lines: who, when, what kind of change, which entry, which fields. Never a value. The lines are made in one place, by comparing with the vault as last written, and sync merges them.
  • Signing key. Ed25519, derived from the account key, so existing accounts and their recovery copies need no change.
  • Changed by. In a vault with other members, the details card and each earlier version say who changed them.
  • Vaults → Activity. Every member can read the log; a line whose signature does not match its author is marked. Owners can also open the server's log there.
  • Not recorded, on purpose: who viewed an entry or copied a password.

Not in this step

  • Adding someone before they have an account, invite codes, the company web admin.

Tests

  • New test_account_sharing.py: 57 tests, two accounts on two devices through the test copy of the server.
  • 25 deliberately broken guards: 24 caught at once, a test was added for the last.
  • Full suite green locally.
  • Lab flow through the real windows (three accounts, three devices): 101/101, twice.

tests/sync_server/passman_server.py is the merged server 2.0.0-alpha.3, byte for byte.

🤖 Generated with Claude Code

https://claude.ai/code/session_011ojnyVg7ccsR3pZ64s7aRH

SecretSpace 3, phase 4 (needs SecretSpace Server 2.0.0-alpha.3).

Sharing
- Vaults -> Members: an owner adds an account of the same server as owner,
  editor or reader. Before the first share the other person's fingerprint is
  shown to compare; it covers both of their public keys. The vault key goes
  to them wrapped to their public key only.
- Remove takes a member out and gives the vault a new key in the same step
  (account_sync.change_key): the vault is synced, re-encrypted, and the new
  key wrapped to everyone who stays. Other devices take the new key at their
  next sync. Change key does the same without removing anyone.
- A member can leave. A reader gets no Edit / Archive / Revert, and a change
  to a read-only vault that reaches a save is undone from the file.
- Each device remembers the keys it has seen for a person and stops when the
  server later gives different ones.

Who changed what
- changelog.py: every save adds signed lines to the vault's own change log
  (who, when, what kind of change, which entry, which fields - never a
  value), made by comparing with the vault as last written. The log is
  encrypted with the vault and merged by sync.
- The signing key (Ed25519) is derived from the account key, so existing
  accounts have one without any change to their files.
- updated_by on entries and by on earlier versions; shown in the details
  card and in History in a vault that has other members.
- Vaults -> Activity lists the log for every member and marks a line whose
  signature does not match its author. Owners can also read the server's
  log there.
- Not recorded, on purpose: who viewed an entry or copied a password.

Tests: test_account_sharing.py (two accounts on two devices through the
test copy of the server).

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011ojnyVg7ccsR3pZ64s7aRH
@usermaneGermane
usermaneGermane merged commit e14bf1c into main Nov 11, 2026
6 checks passed
@usermaneGermane
usermaneGermane deleted the v3-sharing branch November 11, 2026 20:50
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.

1 participant