jouleclaw-memory:📓 a note is written only with a citation into words the person signed (Ed25519 under the notebook owner's key) and a span inside them, so a page, an email or a tool's output cannot become a note whatever it says. Recall returns the quote with the note. Maintenance archives a note past its validity or superseded by a newer note about the same thing, with the reason, and deletes nothing; an archived note is readable and restorable and does not crowd live ones out of the top k. Every write, archive and restore is a hash-chained log entry; an edited or cut history does not verify. SPEC §23. jouleclaw-skill::personal: finds emails, phone numbers, Luhn-valid card numbers, mod-97-valid IBANs, IPv4 addresses, credential-shaped tokens and the person's contacts' names, by shape and deterministically, and leaves what only looks personal (a failed Luhn, a date, a version, a name inside a word). Impersonal wraps an inducer and refuses a skill whose query class or answer holds one: a skill that answers with a placeholder is wrong where it is used. redact() names what it removed. SPEC §12.1. Falsified, each turns a test red: unsigned words accepted, maintenance that deletes, an unchained log, archived notes crowding recall, no Luhn check, a personal skill learned, and the answer left unchecked. Co-Authored-By: Claude Opus 5.5 <[email protected]>
16 lines
621 B
TOML
16 lines
621 B
TOML
[package]
|
|
name = "jouleclaw-memory"
|
|
version.workspace = true
|
|
edition.workspace = true
|
|
license.workspace = true
|
|
repository.workspace = true
|
|
authors.workspace = true
|
|
description = "JouleClaw agent memory layer — CoALA-typed (working/episodic/semantic/procedural), content-addressed, signed-receipt-ready facts, with deterministic BM25 reference recall."
|
|
|
|
[dependencies]
|
|
serde = { workspace = true }
|
|
serde_json = { workspace = true }
|
|
blake3 = { workspace = true }
|
|
thiserror = { workspace = true }
|
|
# The notebook verifies the person's signed words a note cites (notebook.rs).
|
|
ed25519-dalek = { workspace = true }
|