Skip to content

Closed vocabularies

1. The vocabularies

A closed vocabulary is a fixed list, and a value from outside it is refused. There are 9 of them, and each one is restated as a SQL CHECK constraint, so the database enforces the same list the code does.

Constant Members Values
MEMORY_TYPES 10 episodic, semantic, procedural, agent_insight, user_preference, error_pattern, verdict, precedent, arc, task
PARA_BUCKETS 4 projects, areas, resources, archive
TASK_STATUSES 4 todo, doing, blocked, done
EDGE_CLASSES 4 memory, person, provenance, task
MEMORY_RELS 9 supersedes, contradicts, caused_by, leads_to, part_of, relates_to, example_of, supports, laterally_related
PERSON_RELS 2 about_person, authored_by
PROVENANCE_RELS 1 from_session
TASK_RELS 2 blocks, subtask_of
EDGE_PROVENANCES 3 authored, sleep, import

2. MEMORY_TYPES

10 values, from packages/contracts/src/types.ts: episodic, semantic, procedural, agent_insight, user_preference, error_pattern, verdict, precedent, arc, task

The memory type vocabulary, closed. Ten values, restated by the files.memory_type CHECK constraint in SQL.

arc is in the vocabulary but absent from WRITABLE_MEMORY_TYPES: an arc is synthesized by the sleep cycle from many memories, so an agent naming one directly would be asserting a conclusion the corpus has not yet earned.

task is ONE axis with the other nine rather than a parallel kind column, because three overlapping type vocabularies is what made the predecessor memory system’s classification unanswerable. A task is a memory type whose retrieval, dedup, and curation treatment a filter states, not a second axis. Tasks are default-excluded from search and skipped by sleep. See @memhtml/index‘s assembleScope and the sleep phases’ excludeTypes.

3. PARA_BUCKETS

4 values, from packages/contracts/src/types.ts: projects, areas, resources, archive

PARA’s four buckets, closed and ordered. archive is a bucket rather than a status because eviction is a git mv. The path itself records the state, so git log --follow reads through it and diff -M reports the move as R100.

4. TASK_STATUSES

4 values, from packages/contracts/src/types.ts: todo, doing, blocked, done

A task’s own status, carried in memhtml-task-status, a SEPARATE axis from MemoryStatus, which stays active | archived for every type including task.

Two axes rather than four memhtml-status values because active/archived is what every archive, correction, and publish path switches on, and a fifth value there would silently change the meaning of each of them. Finishing a task stamps done AND archives the file through the same archiveMemory machinery, so done is not a resting state on its own and “what did I finish” is answered by the archive tree plus git log.

5. EDGE_CLASSES

4 values, from packages/contracts/src/edges.ts: memory, person, provenance, task

The four non-mixing edge classes. The class is what keeps a person or task edge out of PageRank, MMR, and the retention bridge count. Every memory-graph query filters edge_class = 'memory', and the SQL CHECK constraint refuses a rel that belongs to another class.

6. MEMORY_RELS

9 values, from packages/contracts/src/edges.ts: supersedes, contradicts, caused_by, leads_to, part_of, relates_to, example_of, supports, laterally_related

The nine memory rels. supersedes and contradicts are penalty-bearing: they gate the retention contested_status signal, so sleep promotes a corroborated one into both files rather than leaving it in the rebuildable index.

7. PERSON_RELS

2 values, from packages/contracts/src/edges.ts: about_person, authored_by

The two person rels, pointing at resources/people/*.

8. PROVENANCE_RELS

1 values, from packages/contracts/src/edges.ts: from_session

The one provenance rel, linking a memory to the session that produced it.

9. TASK_RELS

2 values, from packages/contracts/src/edges.ts: blocks, subtask_of

The two task rels, both between two task files.

Their own class for the same reason the person rels have one: task topology is working state, and a blocks edge entering PageRank would let an agent’s to-do list reweight the retention of its knowledge. @memhtml/store’s linkMemories refuses a task rel unless BOTH endpoints are tasks, and the edges CHECK refuses the rel under any other class.

10. EDGE_PROVENANCES

3 values, from packages/contracts/src/edges.ts: authored, sleep, import

Where an edge came from. derived edges are only ever sleep-provenanced.

11. Provenance

A loader generates this page from packages/contracts/src/types.ts and packages/contracts/src/edges.ts while the site builds, so no file in the repository holds it: each set is read as the array the schemas and the CHECK constraints are built from. Change the registry and this page changes with it.