Graft provides persistent artifacts, exact dependency selections, host decision history, and shared vocabulary. Native graph stores, LinkML compilation, commit plans, snapshots, calculations, managed OKF trees, and graph agent adapters are removed without compatibility wrappers (#74).
The public interface uses S7 store handles and typed references, content, selections, decisions, recall results, and vocabulary releases. The former artifact-prefixed functions are removed without compatibility aliases (#90).
The getting-started guide and runnable project-memory example show how to give an ellmer agent in shinychat a reviewed notebook that survives new conversations and app restarts, including corrections with retained evidence (#41).
graft_accept() and graft_withdraw() take a file lock per stream, so several R processes can record decisions in one local store, as a Shiny app on Posit Connect does; and a caller that waits longer than graft_store(lock_timeout =) gets a graft_store_busy_error with nothing recorded. The lock needs a file system that honours advisory locks. Consumer contract 4.1.0 (#96).
graft_accept(), graft_withdraw(), graft_recall(), and graft_history() support reviewed reuse with explicit predecessor and retry controls. Current recall checks eligibility, purpose, retained evidence, and the decision head; historical inspection stays separate (#90).
graft_backup(), graft_verify_backup(), and graft_restore() create and verify bounded complete store bundles bound to a host-supplied scope and generation. Restores require an externally retained receipt and an empty quarantine target; applications still authorize restore using independent current registry state (#86).
graft_contract_version() reports consumer contract 4.0.0 and the artifact, manifest, replacement, backup, selection, decision, vocabulary, binding, and vocabulary-release formats. Existing artifact identities and wire formats are unchanged (#90).
graft_manifest(), graft_plan_replacement(), and graft_replace() verify complete bounded store inventories and copy exact survivors into an empty quarantine store. An unexpected entry fails the inventory, including anything under locks/ other than a stream’s lock file. Plans exclude declared dependents, affected selections, and whole affected decision histories; applications still own Forget approval, generation retirement, restore admission, and disposal (#48).
graft_publish_vocabulary() and graft_read_vocabulary() retain shared concepts, relationships, exact data-dict bindings, source bytes, and literal context across dictionary corrections. They return a typed VocabularyRelease (#76, #90).
graft_save() accepts plain text or raw bytes and single dependency references; graft_save_file() explicitly ingests a file. graft_read() returns exact retained content as an Artifact (#90).
graft_store() opens local stores with immutable revisions and verified exact reads. graft_store_postgres() uses host-selected PostgreSQL scopes with transaction rollback and serialized scope writes (#47, #71, #90).
graft_streams() lists the decision streams in a store with each stream’s current decision, so an application can show what it has kept without keeping its own catalog. It verifies every journal it reads, is bounded by stream count and aggregate metadata bytes, and works the same on local and PostgreSQL stores. It returns decisions only, never artifact content. Consumer contract 4.1.0 (#96).
graft_tool() exposes current reviewed memory through a native read-only ellmer tool and optional shinychat result display, checking application eligibility on every invocation (#90).
graft_with_store_lock() holds a local store’s lock while an application changes it. Every write holds the lock shared, and manifests, replacement plans and copies, backups, and restores hold it exclusively, so they can run while other processes write; a host forgetting an artifact holds it across the plan, the copy, and its switch to the replacement. graft_plan_replacement() accepts a plan with nothing to forget, which leaves out only unreferenced content from failed saves. Consumer contract 4.2.0 (#96).