Severity: High — surfaced in the architect review (2026-06-20).
R13 selective encryption (iter-22) protects private Concepts, but the surrounding secret hygiene is incomplete:
- The encryption key (
$SECONDBRAIN_KEY_FILE / ~/.secondbrain/secret.key) is not matched by any .gitignore rule.
sync.ensure_repo() creates the OKF bundle repo with git init only — the bundle repo gets no .gitignore at all (scripts/sync.py:28).
For a privacy product this is the one mistake you cannot make: if a key file or brain.db ever lands inside the bundle directory, the next sync commits and pushes it.
Acceptance criteria
Severity: High — surfaced in the architect review (2026-06-20).
R13 selective encryption (iter-22) protects private Concepts, but the surrounding secret hygiene is incomplete:
$SECONDBRAIN_KEY_FILE/~/.secondbrain/secret.key) is not matched by any.gitignorerule.sync.ensure_repo()creates the OKF bundle repo withgit initonly — the bundle repo gets no.gitignoreat all (scripts/sync.py:28).For a privacy product this is the one mistake you cannot make: if a key file or
brain.dbever lands inside the bundle directory, the nextsynccommits and pushes it.Acceptance criteria
.gitignore(and a generated bundle-repo.gitignore) exclude*.key,secret.key,brain.db*, and any conflict/trash artifacts that must not be pushed.sync.ensure_repo()writes a.gitignoreinto the bundle repo on init.sync.