Wiki source management composes Git-backed Wiki/RDF sources into one semantic corpus without flattening ownership boundaries.
The first product slice is deliberately read-only:
wiki.ymldeclares root inputs and externalsources:.wiki.lockpins exact source commits for reproducible builds.wiki installmaterializes sources under.wiki/sources/.wiki queryreads a default union view so the composed corpus feels like one Wiki.wiki graph listexposes root and source graph URIs so SPARQL can inspect provenance withGRAPH.
Why named graphs
An umbrella second brain should let a user query across personal, team, and reference brains together. It should also answer which source owns a result. RDF named graphs provide that boundary without inventing a new query model.
The graph URIs are stable handles:
- Root corpus:
{graph.context.wiki}graphs/root - Installed source:
{graph.context.wiki}graphs/source/{source-name}
Git URLs, requested refs, resolved commits, cache paths, and dependency owners remain metadata. They do not change the graph URI every time a source updates.
What this is not
This slice does not implement writable source mutation.
Deferred work includes:
- SPARQL Update mapped back to Markdown or YAML files.
- Editing installed source caches in place.
- Fork, branch, worktree, or pull request workflows for upstream contribution.
- Live remote SPARQL federation.
- DVC-backed artifact storage.
- Worlds runtime execution over composed graphs.
Those may become separate capabilities, but they need the read-only provenance layer first.
Example
wiki:
inputs:
- wiki
sources:
- name: company-brain
type: git
url: git@github.com:acme/company-brain.git
ref: main
path: wiki
After wiki install, inspect graph boundaries:
wiki graph list
Query the whole umbrella corpus:
SELECT ?s ?name WHERE {
?s schema:name ?name .
}
Query only the company brain:
SELECT ?s ?name WHERE {
GRAPH <https://example.org/wiki/graphs/source/company-brain> {
?s schema:name ?name .
}
}
Ask which graph supplied each result:
SELECT ?g ?s ?name WHERE {
GRAPH ?g {
?s schema:name ?name .
}
}