Outbound connections
Outbound traffic occurs only when an operator configures or uses an integration:
Hosted LLM use requires an explicit egress acknowledgement. Local LLM endpoints
do not require that acknowledgement, but they are still network destinations
chosen by the operator. Suchi logs a redacted inventory of its managed egress
destinations at boot;
suchi doctor prints the same inventory without exposing
credentials. A pre-consume script is not network-isolated and its destinations
cannot be inventoried by Suchi; constrain process or container egress when
needed.
Classifier question answers are transient. Suchi validates them against the
offered ID/answer and current document text, then maps them to fixed local
actions. It does not persist question-specific raw answers, evidence quotes, or
prompt transcripts. Approval and audit rows retain only bounded automation
ID/name attribution, confidence, policy, and the resulting metadata proposal.
Encryption
Use TLS at the reverse proxy or configureTLS_CERT_FILE and TLS_KEY_FILE.
For storage, full-volume encryption is the recommended baseline because it
covers original blobs, derived files, SQLite metadata, FTS text, thumbnails,
and generated views together.
Suchi seals these database values with AES-256-GCM before storing them:
- remembered PDF passwords
- mailbox passwords and OAuth credentials
- Archive Configuration-managed LLM API keys
$DATA_DIR/.decrypt-key with restrictive permissions.
Possession of a database copy alone does not reveal those values. Possession of
both the database and key does.
API tokens and browser session identifiers are stored as digests. Back up the
entire data directory so the database, blobs, and credential key remain a
recoverable set.
Browser cookies are marked Secure when PUBLIC_URL uses HTTPS. Signing out
deletes the current session, revokes the current API token when applicable, and
expires the browser cookie.
Suchi does not provide application-level encryption for original blobs or
SQLite content in v0.1. Use encrypted storage and encrypted off-host backups
when the host or backup medium is outside your trust boundary.
Filing systems provide application access boundaries, not separate
SQLite/FTS databases, CAS stores or encryption keys. Users/groups and model/OCR/server
configuration remain shared. Instance administrators and host/backup operators are
trusted across systems; a prefix is neither physical isolation nor a compliance claim.
Equal bytes may share an immutable CAS object even when their document rows belong
to different systems.
Logs and audit data
Application logs use identifiers, sizes, states, and hashes rather than OCR or document text. Audit events record metadata changes and request IDs, not document content or plaintext credentials. Health and metrics endpoints expose operational state, not archive content. OIDC accounts store the provider issuer and opaque subject on theusers row
because that pair is the returning identity key. Retained
user.email_changed audit metadata contains the old/new addresses, source, and
revoked-browser-session count. Retained user.oidc_bound metadata contains the
issuer, email, role, new-user flag, revoked-session count, and SHA-256 of the
NUL-delimited issuer/subject pair; it does not copy the opaque subject itself.
Both kinds also retain the request ID and numeric account reference.
These identity-security rows are excluded from ordinary
AUDIT_RETENTION_DAYS pruning. They remain visible to database/backup operators
and configured audit sinks until deliberately removed; they are instance-wide,
not part of the filing-system Activity feed. Sink delivery remains
post-commit/best-effort and is not a tamper-evident ledger.
Account-email changes add no SMTP service, recovery mail, old-address
notification, or new egress destination. OIDC synchronization contacts only
the already configured identity provider through the ordinary authorization
flow.
HTTP access logs record matched route patterns, not raw paths or query strings;
share-link credentials are omitted from audit payloads and downstream sinks.
Older builds recorded share bearers in access logs and creation audit records.
Review retained copies and revoke affected passwordless shares if those records
left the archive’s trusted operator boundary; upgrading does not erase old logs.
Unexpected server and LLM-provider failures are sanitized before reaching the
UI. A mailbox owner or administrator running Test connection receives the
mail provider’s connection or authentication diagnostic so they can repair the
account; it is not exposed to other users. Preview matches reads at most 25
unchecked messages using IMAP envelope metadata and attachment filenames, then
returns at most five matching samples to the authorized user. Message bodies
are not downloaded, persisted, or logged by preview. The LLM connection test returns
validated synthetic classification fields and latency, never raw model output
or archive text.
Ask your documents is read-only and transient. Suchi stores no conversation
rows, and the browser retains at most the 20 newest turns while the application
is mounted. The server finds only non-trashed documents in the current filing
system that the user may enter and open. Switching systems destroys the browser
conversation and invalidates late responses.
When sensitive consent is off, only unset, Public, and Internal documents are
eligible; unknown sensitivity values fail closed. Confidential and Restricted
documents require the per-conversation option. Clear, document-context or
model changes, and turning that option off clear the relevant in-memory history.
The drawer identifies the local model or hosted model service receiving document text.
The administrator-owned Reading depth preset changes the maximum authorized
text sent per question, which can affect provider cost, latency, and privacy
exposure. See
Ask your documents: Reading-depth presets
for the exact bounds and fallbacks.
The model receives document text as explicitly untrusted data and has no tools
or actions. Previous assistant answers provide continuity but never become
document text. Only documents linked from the prior answer are checked and
reloaded in their requested order. Before rendering, Suchi checks the answer
JSON and verifies that its numbered links refer to supplied documents. It does
not judge whether every written claim is correct.
Suggested details are persistent archive metadata rather than conversation
history. They retain a bounded quote, extractor version, review state, and a
reviewer when a person made the decision. With Apply when confident enabled,
new dates at or above the configured threshold can feed Calendar, rich queries,
and later answers without human review; Review first leaves them pending.
Existing decisions remain unchanged, and saving settings does not bulk-accept
pending dates.
Logs never include questions, answers, titles, document text, or extracted
quotes. The question-assembly event contains only the selected reading-depth
mode, matching-section count, document count, and bounded text size. Separate
access logs contain the HTTP method, path, status, byte count, duration, and request ID;
hosted-model egress events contain the provider host and model name. Sanitized
failures may also be recorded.
Deletion and retention
Deleting a document first moves it to Trash, where it remains recoverable for 30 days. Suchi purges expired Trash at startup and daily; confirmed permanent deletion can remove one document or empty the caller’s Trash sooner. A purge removes document-owned database state, revokes share links containing the document, and removes rendered files. Original and derived CAS bytes remain on disk until the operator runs offline garbage collection with all archive writers stopped. Database snapshots and external backups may retain deleted data until their separate backup lifecycle expires. Retained identity events and user issuer/subject bindings are account-security metadata, not document-owned data. Document purge and ordinary audit retention do not remove them. Whole-directory snapshots and external backups may retain both current and historical addresses according to their separate lifecycle. Share links are random, revocable bearer tokens containing documents from one system. A Network link uses the normal Suchi origin; a Public link uses an optional share-only internet ingress and must expire within one year. Recipient requests recheck that the creator is active, can still enter that system and can still share each live document. Removing membership revokes that user’s system shares, API tokens and pending mobile pairings; re-admission does not revive them. Revocation stops future access but cannot retract downloaded bytes.Operator checklist
- Restrict host and
DATA_DIRaccess. - Use TLS and an accurate
PUBLIC_URL. - Encrypt the volume and off-host backups where required.
- Protect
.decrypt-key, API tokens, and provider credentials. - Enable only the integrations whose egress you accept.
- Test restore and deletion procedures before relying on them.