Skip to content

Commit b4e2469

Browse files
chore(release): v0.3.0 — version bump + docs
Bump package.json / tauri.conf.json / Cargo.toml to 0.3.0. Update README and ROADMAP: DoseWiki, encryption + backup/restore, Obsidian sync, and the tool-enabled Companion + live session + crisis guardrails are shipped; remaining roadmap trimmed to the RAG corpus and opt-in upstream contribution. Remove the now-unused ollama::chat (superseded by chat_tools). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1 parent 8536134 commit b4e2469

7 files changed

Lines changed: 53 additions & 65 deletions

File tree

README.md

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,25 @@ anywhere.
2626
- **Import from text** — paste a past experience in your own words and a **local**
2727
model extracts the substances, doses, and timeline into a structured record for
2828
you to review before saving. Runs entirely on-device via Ollama.
29-
- **Companion** — a calm, non-judgmental harm-reduction chat, also fully local
30-
(Ollama). It can be made aware of your current session (logged doses + interaction
31-
flags) and never encourages use.
29+
- **Companion** — a calm, non-judgmental peer-support chat, fully local (Ollama),
30+
modeled on the Zendo four principles + Fireside stance. It can be made aware of
31+
your current session and, at your request, **use tools** to log doses/notes,
32+
summarize how the session is going, or look up dose/interaction references — and
33+
it never encourages use. Pick a **support style** ("just listen", "keep me
34+
grounded", …) that it honors.
35+
- **Live session** — a calm, altered-state-friendly workspace for an ongoing
36+
experience: elapsed time, running timeline, one-tap dose/note logging, the
37+
companion inline, and an always-present **Get help now** button.
38+
- **Crisis guardrails** — a **deterministic** safety layer (independent of the
39+
model) watches for medical / psychiatric / distress signals and surfaces graded,
40+
localized emergency & peer-support resources; a dangerous interaction in the
41+
active session escalates it automatically.
42+
- **Encryption at rest & backups** — opt-in **SQLCipher** passphrase encryption
43+
(AES-256); when on, the app opens to an unlock screen. Single-file **backup &
44+
restore**, plus enable/disable/change-passphrase, in a **Data & security** tab.
45+
- **Obsidian vault sync** — export each experience to an Obsidian vault as a
46+
readable Markdown note and import them back — **bidirectional and fully offline**;
47+
hand-written notes are left untouched.
3248
- **Dose reference** — dose ranges, durations, and **graded** interaction data
3349
(dangerous / unsafe / caution, with reasons) for hundreds of substances, **bundled
3450
with the app** and shown inline while logging — fully offline, no network request
@@ -61,13 +77,8 @@ anywhere.
6177
Part 1 (narrative) is all-rights-reserved (pointer only); Part 2 (compound data,
6278
e.g. Isomer Design, CC BY-NC-SA) is bundleable non-commercially as a separate pack
6379
with notices attached.*
64-
- **Local LLM companion** — a calm trip-sitting assistant with tool access to the
65-
journal, running against a local model (via Cairn / Ollama). Fully offline.
66-
- **Obsidian vault integration** — process journal entries, write structured
67-
summaries back.
68-
- **User-added substances → opt-in upstream contribution** (consent-gated; DoseWiki
69-
once the migration lands).
70-
- **Encrypted-at-rest database** (passphrase) for this sensitive data.
80+
- **User-added substances → opt-in upstream contribution** (consent-gated; a
81+
reviewed draft the user submits manually to DoseWiki — never auto-uploaded).
7182

7283
## Install & update
7384

ROADMAP.md

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ installer).
1414

1515
---
1616

17-
## Shipped so far (v0.2.1 released; DoseWiki migration on `main`, unreleased)
17+
## Shipped so far (v0.3.0 — DoseWiki, encryption, Obsidian & tool-enabled Companion)
1818

1919
- **Journal** — experiences, doses, and a live timeline in a local **SQLite** DB
2020
(`db.rs`), with **edit/delete** everywhere and **backdating** (log past
@@ -31,7 +31,23 @@ installer).
3131
CC0 public domain**), slimmed to ~0.9 MB (`data/dosewiki/slim.py`) and shipped as a
3232
Tauri resource loaded into the cache on launch — **no network call at all**. A
3333
courtesy DoseWiki credit is shown in-app. *(Migrated off PsychonautWiki's live
34-
CC-BY-SA GraphQL scrape — roadmap item #1; on `main`, ships in the next tagged build.)*
34+
CC-BY-SA GraphQL scrape — shipped in v0.3.0.)*
35+
- **Encryption at rest + backup/restore** (`crisis.rs` aside, in `db.rs`/`commands.rs`) —
36+
opt-in **SQLCipher** passphrase encryption (AES-256); the app opens to an **unlock
37+
screen** when the journal is encrypted. Enable/disable/change-passphrase and
38+
single-file **VACUUM INTO backups** + restore, all in a **Data & security** tab.
39+
The startup disclaimer can be dismissed ("don't show again"). *(v0.3.0.)*
40+
- **Obsidian vault sync** (`obsidian.rs`) — **bidirectional, fully offline**. Export
41+
each experience as a readable Markdown note (frontmatter + doses/timeline) with a
42+
canonical ```fieldnotes``` block for lossless round-trips; import reads that block
43+
back (vault wins on conflicts), leaving hand-written notes untouched. *(v0.3.0.)*
44+
- **Tool-enabled Companion + live session + crisis guardrails** — the Companion can
45+
now **act** via tools (log doses/notes, session status, dose/interaction lookups)
46+
at the user's request; a calm **live-session** workspace (elapsed time, running
47+
timeline, one-tap logging, panic button) supports altered states; and a
48+
**deterministic crisis layer** (`crisis.rs`) surfaces graded, localized emergency
49+
resources **independent of the model**. System prompt follows the Zendo four
50+
principles + Fireside stance with consent-based support-style intake. *(v0.3.0.)*
3551
- **Deterministic safety checker** (`interactions.rs`) — flags dangerous combos,
3652
wired to the dose-reference interaction data; DoseWiki's dangerous/unsafe/caution
3753
tiers map onto our danger/caution/note severities (with the reason text), and
@@ -46,9 +62,9 @@ installer).
4662

4763
## Roadmap (not yet built)
4864

49-
> **Item #1 (DoseWiki migration) is done on `main`** (unreleased — it ships in
50-
> the next tagged build) — see "Shipped so far" above. The remaining items are
51-
> renumbered below.
65+
> **Shipped in v0.3.0:** DoseWiki migration, encryption-at-rest + backup/restore,
66+
> Obsidian vault sync, and the tool-enabled Companion + live session + crisis
67+
> guardrails — see "Shipped so far" above. The remaining items are below.
5268
5369
1. **Substance knowledge pack — offline RAG corpus.** Beyond the structured dose
5470
data, add a **retrieval corpus** over openly-licensed full-text sources for
@@ -65,29 +81,12 @@ installer).
6581
the required notices** — but NC forecloses any future commercial-license path for
6682
that pack, so keep it **separately licensed**, never mixed into the PolyForm code.
6783

68-
2. **Local LLM companion with tool access + live-session mode.** Today the
69-
Companion only *reads* injected context. Give the model **tools** to actually
70-
drive the journal from chat ("log 100 mg MDMA", "how am I doing?"), plus a
71-
calm, altered-state-friendly **live session UI** (large text, one-tap logging,
72-
running timeline, panic → grounding). Fully offline, against a local model
73-
(via Cairn / Ollama). **The support model, session intake, and crisis
74-
guardrails are specified in [Companion design principles](#companion-design-principles-peer-support-model)
75-
below — that spec is load-bearing, not optional polish.**
76-
77-
3. **Obsidian vault integration.** Read/parse journal entries from an Obsidian
78-
vault and write **structured experience summaries** back. Bidirectional, fully
79-
offline. (Reuse the filesystem/obsidian-MCP patterns from prior work.)
80-
81-
4. **User-added substances → opt-in upstream contribution.** Local CRUD for
84+
2. **User-added substances → opt-in upstream contribution.** Local CRUD for
8285
uncatalogued substances already exists; add a **consent-gated** export that
8386
generates a draft the user reviews and submits manually to the upstream source
8487
(**DoseWiki** — it's CC0 and open-source). **Never auto-upload** — this is
8588
sensitive, legally fraught data.
8689

87-
5. **Encrypted-at-rest database (passphrase).** Protect this sensitive, local-only
88-
data with an encrypted DB (e.g. SQLCipher + passphrase). Pair with
89-
**export / backup & restore** so data survives a lost DB or a machine switch.
90-
9190
---
9291

9392
## Companion design principles (peer-support model)
@@ -171,11 +170,12 @@ emotional presence.
171170

172171
## Suggested next increment
173172

174-
DoseWiki migration is **done** (on `main`, unreleased), which clears the licensing story
175-
for everything after it. Next, highest value / lowest cost: **#5 encryption + export**
176-
(protect the data), then **#3 Obsidian** or **#2 tool-enabled Companion** as the next
177-
headline feature. **#1 (RAG corpus)** stays gated on the licensing decision for any
178-
share-alike sources.
173+
The v0.3.0 batch (DoseWiki, encryption + backup, Obsidian sync, tool-enabled
174+
Companion + live session + crisis guardrails) is **shipped**. Of what remains:
175+
**#2 (opt-in upstream contribution of user-added substances)** is the smaller,
176+
self-contained next step; **#1 (RAG corpus)** stays gated on the licensing
177+
decision for any share-alike sources (the DoseWiki CC0 slice is unencumbered, but
178+
a PiHKAL/TiHKAL Part 2 pack must ship separately with its NC/share-alike notices).
179179

180180
---
181181

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "field-notes",
3-
"version": "0.2.1",
3+
"version": "0.3.0",
44
"description": "Offline harm-reduction journal & trip-sitting workstation.",
55
"type": "module",
66
"private": true,

src-tauri/Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src-tauri/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "field_notes"
3-
version = "0.2.1"
3+
version = "0.3.0"
44
description = "Offline harm-reduction journal & trip-sitting workstation"
55
authors = ["sparkly-quasar"]
66
# Licensed under the PolyForm Noncommercial License 1.0.0 — see ../LICENSE.

src-tauri/src/ollama.rs

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -219,29 +219,6 @@ pub fn list_models() -> Vec<String> {
219219
.unwrap_or_default()
220220
}
221221

222-
/// Send a chat completion and return the assistant's reply (non-streaming).
223-
pub fn chat(model: &str, messages: &[ChatMsg]) -> Result<String, String> {
224-
if !api_up() {
225-
return Err("Ollama isn't running on this computer. Start Ollama and try again.".into());
226-
}
227-
let body = serde_json::json!({
228-
"model": model,
229-
"messages": messages,
230-
"stream": false,
231-
"options": { "temperature": 0.6 }
232-
});
233-
let resp = ureq::post(&format!("{BASE}/api/chat"))
234-
.send_json(body)
235-
.map_err(|e| format!("Ollama request failed: {e}"))?;
236-
let v: serde_json::Value =
237-
resp.into_json().map_err(|e| format!("Bad response from Ollama: {e}"))?;
238-
Ok(v.get("message")
239-
.and_then(|m| m.get("content"))
240-
.and_then(|c| c.as_str())
241-
.unwrap_or("")
242-
.to_string())
243-
}
244-
245222
// ---------- free-text experience import ----------
246223

247224
#[derive(Debug, Clone, Default, Serialize, Deserialize)]

src-tauri/tauri.conf.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"$schema": "https://schema.tauri.app/config/2",
33
"productName": "Field Notes",
4-
"version": "0.2.1",
4+
"version": "0.3.0",
55
"identifier": "com.fieldnotes.journal",
66
"build": {
77
"beforeDevCommand": "npm run dev",

0 commit comments

Comments
 (0)