What
A neighbour saw the ceiling collapse; a fellow tenant smelled the gas. Today their account can only be typed into the tenant's timeline as an Other entry with no independent binding. Add a witness observation record: a paired peer (already authenticated by sync pairing) writes a short statement and optional captures on their own device, signs it with their device key, and sends it as a sealed delta; the case owner's vault commits it into custody as a distinct record type with the witness key fingerprint, and the packet renders it as "observation recorded by another device (fingerprint), not by the tenant". The witness keeps a signed copy.
Why it matters
Corroboration is the record-strength assessment's strongest factor (strength.py), and the project already has instrument corroboration (sensor.py) and partner capsules (capsule.py), but not a person on another device. Pairing gives a key without an identity system, which matches the no-accounts principle. This is presentation and custody, never a legal claim: the packet must not call it testimony, and the copy is held to the same "not legal advice" boundary as letters.
Scope
- A record type in
model.py and evidence.py; a sync message; a verifier decision-table row; a strength factor.
- CLI
witness add|export; the app flow on the witness side; EN/ES copy.
- Disclosure policy: witness fingerprint and statement included, witness device metadata stripped.
Out of scope
- Identity verification of the witness.
- Notarisation or any legal-form language.
Done when
- A witness record from a paired device verifies with its signature; a modified statement fails.
- A witness record from an unpaired key is refused at merge.
- The packet shows the record under a distinct heading with the fingerprint and the "not testimony" boundary text present in both languages.
Pointers
src/habitable/pairing.py, src/habitable/sync.py, src/habitable/evidence.py, src/habitable/strength.py, src/habitable/capsule.py, docs/verifier-decision-table.md, docs/sharing-trust-model.md
Proposed with AI assistance.
What
A neighbour saw the ceiling collapse; a fellow tenant smelled the gas. Today their account can only be typed into the tenant's timeline as an
Otherentry with no independent binding. Add a witness observation record: a paired peer (already authenticated by sync pairing) writes a short statement and optional captures on their own device, signs it with their device key, and sends it as a sealed delta; the case owner's vault commits it into custody as a distinct record type with the witness key fingerprint, and the packet renders it as "observation recorded by another device (fingerprint), not by the tenant". The witness keeps a signed copy.Why it matters
Corroboration is the record-strength assessment's strongest factor (
strength.py), and the project already has instrument corroboration (sensor.py) and partner capsules (capsule.py), but not a person on another device. Pairing gives a key without an identity system, which matches the no-accounts principle. This is presentation and custody, never a legal claim: the packet must not call it testimony, and the copy is held to the same "not legal advice" boundary as letters.Scope
model.pyandevidence.py; a sync message; a verifier decision-table row; a strength factor.witness add|export; the app flow on the witness side; EN/ES copy.Out of scope
Done when
Pointers
src/habitable/pairing.py,src/habitable/sync.py,src/habitable/evidence.py,src/habitable/strength.py,src/habitable/capsule.py,docs/verifier-decision-table.md,docs/sharing-trust-model.mdProposed with AI assistance.