M5.3: scope memory
A project's notes have their own folder, memory/nisse-dev/projects/<project>/, with its own index; remember and forget take scope (general, or project: always the current item's own, so no item writes another project's notes, and a conversation has none). At an item's start the transcript gets the general index and its project's, never another's. Index links are pages from the vault's root, as SilverBullet names them. The closing pass's memory_done can name repository documents the item left out of date; the harness says so in the thread and records it. The prompt: the repository is the authority, and a note that disagrees is corrected. With the operator: ARCHITECTURE.md isn't put into every item's context (its size); the infrastructure world model waits for nisse-ops. The walk writes project notes and checks they come only from that project's items. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01J5Utyfzw7gF7UhjRDEtjTk
This commit is contained in:
1 parent
427278ac80
commit
fe4548459f
8 files changed
+301
-66
No files matched your search
@@ -40,7 +40,9 @@ def test_the_same_name_replaces_and_the_index_follows(memory: Memory) -> None:
|
||||
memory.remember("a-fact", "Ay", "a", provenance={})
|
||||
assert memory.remember("a-fact", "Ay, again", "a2", provenance={})
|
||||
index = memory.snapshot().text
|
||||
assert index.endswith("- [[a-fact]] — Ay, again\n- [[b-fact]] — Bee")
|
||||
assert index.endswith(
|
||||
"- [[memory/nisse-dev/a-fact]] — Ay, again\n- [[memory/nisse-dev/b-fact]] — Bee"
|
||||
)
|
||||
memory.forget("a-fact")
|
||||
assert "a-fact" not in memory.snapshot().text
|
||||
with pytest.raises(VaultError, match="no such note"):
|
||||
@@ -60,8 +62,34 @@ def test_a_note_needs_a_description_and_a_fact(memory: Memory) -> None:
|
||||
|
||||
def test_the_snapshot_is_hashed_and_made_if_missing(memory: Memory) -> None:
|
||||
first = memory.snapshot()
|
||||
assert first.path == f"{FOLDER}/index.md"
|
||||
assert first.paths == (f"{FOLDER}/index.md",)
|
||||
assert "Nothing yet." in first.text
|
||||
assert memory.snapshot().sha == first.sha # same index, same hash
|
||||
memory.remember("x", "Ex", "f", provenance={})
|
||||
assert memory.snapshot().sha != first.sha
|
||||
|
||||
|
||||
def test_a_projects_notes_have_their_own_folder_and_index(memory: Memory) -> None:
|
||||
memory.remember("general-one", "General", "g", provenance={})
|
||||
memory.remember("deploy", "Deploys by tag", "d", provenance={}, project="sandbox")
|
||||
memory.remember("other", "Other's", "o", provenance={}, project="other")
|
||||
root = memory._vault.root / FOLDER
|
||||
assert (root / "projects" / "sandbox" / "deploy.md").exists()
|
||||
top = memory.snapshot().text
|
||||
assert "- [[memory/nisse-dev/general-one]] — General" in top
|
||||
assert "deploy" not in top.split("Projects:")[0]
|
||||
assert "- [[memory/nisse-dev/projects/sandbox/index]] — notes about sandbox" in top
|
||||
seen = memory.snapshot("sandbox")
|
||||
assert seen.paths == (
|
||||
f"{FOLDER}/index.md",
|
||||
f"{FOLDER}/projects/sandbox/index.md",
|
||||
)
|
||||
assert (
|
||||
"- [[memory/nisse-dev/projects/sandbox/deploy]] — Deploys by tag" in seen.text
|
||||
)
|
||||
assert "projects/other/other]]" not in seen.text
|
||||
memory.forget("deploy", "sandbox")
|
||||
assert memory.snapshot("sandbox").paths == (f"{FOLDER}/index.md",)
|
||||
assert "sandbox/index" not in memory.snapshot().text
|
||||
with pytest.raises(VaultError, match="not a project's name"):
|
||||
memory.remember("x", "d", "f", provenance={}, project="../x")
|
||||
Reference in new issue
Block a user