Mounts and the Consumption Skill
RememberStack has two deliberately separate truth layers. Claims are
immutable source testimony (“what was asserted, by whom, when”);
facts—relations and observations—are the adjudicated worldview (“what the
system holds or held true”): supersession-adjudicated, clocked on two time
axes (when a fact held in the world, and when the system learned it),
evidence-counted per distinct source—repetition is not corroboration—and
contradiction-tracked. The fact_claim_evidence association is the auditable
bridge between the layers, recording which claims support or contradict each
fact. Query claims to inspect testimony; query facts to answer current or
historical truth questions, then follow the bridge to see why the system
believes or believed the fact.
(Internally these guarantees are decisions D41 and D54.)
Agents that can navigate files should treat memory like a read-only codebase. Mounts make that cheap. Query surfaces (API / CLI / MCP) cover what files cannot: semantic search, live graph traversal, time-travel, open SQL, and hydration.
TL;DR for agents
| Situation | Do this |
|---|---|
| Mounts available | ls / read / grep first |
| Need current truth | Leave files; call facts_context or query facts_current |
| Need source testimony | claims_and_sources_context or claims views — not claim validity as “true now” |
| Load-bearing decision | Verify on the spine after any mount/K orientation |
| No mounts | API/CLI/MCP carry full parity (including artifact handles) |
Two truth layers never change: claims = testimony; facts = adjudicated current belief. Bridge: fact_claim_evidence.
The four read-only views
| View | Contains | Prefer for |
|---|---|---|
| P3 corpus tree | Generated indexes + stable document/entity paths | First navigation |
| E0 artifacts | Converted Markdown, structure, derived media | Readable source representation |
| Raw originals | Uploaded bytes (off nav path; audited) | Read the original, including before a converter is available |
| Plane K checkout | Compiled + authored knowledge pages | Orientation — then verify facts |
Raw sits outside normal navigation so Markdown-first browsing stays cheap.
Library API (not a Compose service)
The smoke Compose profile does not ship a separate “mount daemon.” Paths come from the self-host mount publisher:
- Returns a typed
PublishedMountsvalue bound to one deployment - Marked read-only as a usage contract; provider mounts enforce permissions
- Consumption-skill renderer refuses paths from another deployment
# conceptual — see package surfaces / profiles
published = mount_publisher.publish(deployment_id=...)
rendered = skill_surface.render(mounts=published)
skill_path = skill_surface.publish(directory=harness_skill_directory, rendered=rendered)Connect existing bucket mounts
The self-host publisher builds the P3 directory from published snapshots. It does not install a bucket filesystem or mount SeaweedFS/S3 for you. Without configured raw and artifact roots, those returned paths are empty placeholders; they cannot serve uploaded files.
Mount the deployment's raw and artifacts buckets using your storage provider's filesystem integration, with read-only access and raw data-access audit logging. Then pass the existing bucket-root directories to the publisher:
python -m rememberstack.profiles.selfhost project --plane p3
python -m rememberstack.profiles.selfhost mounts \
--root /srv/remember-views \
--raw-root /mnt/remember-raw \
--artifacts-root /mnt/remember-artifactsAlternatively set REMEMBERSTACK_SELFHOST_RAW_MOUNT_ROOT and
REMEMBERSTACK_SELFHOST_ARTIFACTS_MOUNT_ROOT. Command-line paths override those
settings. Configured paths must already be directories; a missing mount path
fails publication instead of creating an empty substitute. Directory validation
cannot verify that a provider is mounted or that auditing and read-only access
are enabled; configure those at the mount/provider layer. The publisher does not
change filesystem permissions or intercept direct raw reads.
After a P3 rebuild and mount publication, a live document's stub exposes its
latest durably stored original through stored_raw_uri, even if conversion is
parked with no_route. Append that object key to the returned raw root to open
the bytes. A newer stored original and the current processed version are labeled
separately; storing new bytes does not replace the processed summary or Markdown.
Pending managed admission does not advertise an original that has not been
written. Existing snapshots remain unchanged until rebuilt and republished.
Filesystem first; query when files cannot
| Filesystem | Query surface |
|---|---|
| Navigate, read, grep | Open SQL (query_sql) and live graph SQL helpers |
| Browse K pages | Schema discovery (describe_query_space / GET /query/space) |
| Open artifact Markdown | Semantic/lexical nomination, graph helpers, time-travel |
| Fact↔evidence hydration, saved queries, decision transcripts, deltas |
Unmounted environments get the same operations over the network; the skill states that it is unmounted instead of advertising fake paths.
Generated consumption skill
ConsumptionSkillSurface reads live deployment metadata (name, language, scopes, K page count, active operation versions) plus published mounts and renders a versioned standard SKILL.md.
Skill contents (high level):
- Two-layer headline (claims vs facts)
- Three neutral choices — mounted files, open SQL/live-graph helpers, or the four assured operations
- Bound SQL examples (wrong claim-window query vs
facts_current, predicate vocab, audit trail, divergence) - Honest empty-K behavior
- Assured catalog only:
resolve_entity,claims_and_sources_context,facts_context,combined_context - Former patterns as
examples.*saved queries only
Atomic publish so harnesses never read a partial skill file.
What the skill prevents
| Mistake | Correct behavior |
|---|---|
| Claims as current truth | Facts for present tense |
examples.claims_as_of as belief | Assertion history only |
| Ignoring withdrawn support | Caveat + audit |
| One-sided contradictions | Report co-members |
| Compiled as live | Check freshness; verify facts |
| Mixing media locator with clocks | Three different coordinates |
Cold-agent skill check
Automated checks give a model only the rendered skill plus a task (no design docs, no repo context). The plan must:
- Orient on K (or fall back honestly when empty)
- Route current truth to facts
- Keep grains separate
- Treat withdrawn support carefully
- Report contradiction co-members
- Prefer mounts for readable work
- Hydrate to sources for audit
Wrong plans (including claim search as current-truth answers) fail.