checkpoint
Snapshot current working state to let the next session resume with the right context.
Instructions
Snapshot current working state (intent/established/pursuing/open_questions).
A summary of where the work stands, so the next session picks up the right bearing via pulse(). Fields are free-length; still prefer a readable summary here and put timeless detail into note() -- checkpoints are read for bearing, not as an archive. One fact per note(), each cited back here by [[uid]] and linked with link_memories(); pulse() returns the latest checkpoint IN FULL, so every session pays for whatever was parked in these fields. Stored as type='checkpoint'.
A domain holds ONE active checkpoint. While one is already filed at
domain, the call is refused and nothing is written: the refusal
lists it under checkpoints. Read it with get_memory(uid) and decide
whether its work is done. Done: forget(uid, reason='...'), then call
again. Not done: carry what still holds into these fields and call
again with supersedes='', which archives it as superseded by the
new one. A checkpoint past the age limit set in the dashboard refuses
every write under its domain the same way, flagged overdue, until
it is settled.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| also | No | other domain paths this belongs to, comma-separated: the subjects that cut across the tree `domain` sits in, such as the end-to-end flow a routine is one step of. Every read scoped to one of them returns it. A path `domain` already sits under is dropped as redundant. At most 200 characters each. | |
| tags | No | comma-separated keywords and synonyms. Retrieval is BM25 over content, tags and domain paths, and tags weigh second only to the body, so they make a memory findable by words its own text never uses: the identifier, the error string, the plain phrasing someone will type. A memory with none is reachable only by quoting itself. At most 1000 characters. | |
| title | Yes | one line naming what this memory is about, in the words someone would look for it by. A list shows it instead of the opening of the body, and it outweighs every other field in search, so a title that repeats the type ("note about the parser") names nothing. At most 120 characters; a name that needs more is summarizing the body. | |
| domain | No | the subject this belongs to, as a path from the outermost scope in ('acme/x100/p200'). File it as deep as the fact is specific -- a note about one routine goes on the routine, and still comes back when someone asks about the module or the product above it. At most 200 characters. | |
| intent | Yes | what the work is for, in a sentence or two. | |
| session | No | groups what one conversation writes. Leave it empty to use this server process's own stamp. | |
| pursuing | Yes | what comes next, specific enough to start on. | |
| supersedes | No | the active checkpoints this one replaces, comma-separated uids: every one already filed at `domain`, and every overdue one above it that a refusal named. Each is archived with this one as its successor. | |
| established | Yes | what is done and what was decided, with the [[uid]] of each note that holds the detail. | |
| open_questions | Yes | what is still undecided or unverified. |