Data model¶
Everything lives under the data root: --dir, else $MISEENPLACE_DIR, else ~/.local/share/miseenplace.
config.toml settings (actors, sources, storage)
data/audit_log.jsonl source of truth, append-only, fsynced
data/items.json snapshot cache, rebuilt from the log
Action Items.md rendered page
style/<source>.md your writing style (learn-style)
corpus/<source>/sent.jsonl your sent messages, deduplicated by message id
requests.jsonl what you asked your agent to do, verbatim
state/cursors/<source>/<name> one read position per consumer
state/inbox/<source>/<id>.json one queued message per file
state/drafts/<id>.json stored drafts (and .sending while claimed)
state/watch.log watcher errors
state/ and data/items.json are per machine or rebuildable and are not committed by the git backend.
Audit log¶
One JSON object per line, validated by schema/log-entry.schema.json:
{"seq": 3, "ts": "2026-10-21 09:00", "op": "add", "id": 1, "by": "agent", "changes": {"title": "Review parser PR"}}
Replay checks: sequence numbers have no gaps, by is a configured actor, and each old value in an update matches the replayed state. A broken log fails loudly instead of rendering a wrong page.
Items¶
Validated by schema/item.schema.json. Fields: id, title, kind (mine, waiting, reminder), state, eta, who, refs, notes, created, updated, plus optional work context: topic, context, next, blocker, think, priority (p0 to p3), spent, tags, decisions.
Inbox item¶
id, who, where, ts, text, url, status (new, open, auto-ignored, answered, todo, waiting, ignored, drafted), action and ref (the journal id or draft id it led to).
Draft¶
id (d plus 8 hex digits), target, text, sha256, created. The hash is checked on send; the file is claimed exclusively while sending so delivery happens once. A failed delivery leaves the draft sendable.
Personal data¶
Corpus, style and request files are personal. See Security.