Files
shard-wiki/spec/UseCaseCatalog.md
tegwick 6878a0c184 research: Oddmuse deep dive (minimal single-script wiki); UC-82
SHARD-WP-0003 T7. The minimal file-store floor: one Perl CGI script over
plain-text page files + a keep/ revision dir, no DB/API. Anchors the
graceful-degradation baseline / minimal capability-profile floor -- every
richer shard is measured against it; capability-awareness in its purest form
(profile must express absence; truncated history reported honestly). UC-82.
Enriched UC-40/01/36/41. Marks T7 done. Feeds SHARD-WP-0002 T11/T13.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-14 20:59:20 +02:00

2170 lines
125 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# UseCaseCatalog
Status: **draft** · Date: 2026-06-08 · Updated: 2026-06-14
Promoted from `research/260608-c2-wiki-origins/`,
`research/260608-yawex-prior-art/`, `research/260608-federation-concepts/`,
`research/260608-wikiengines-overview/`, `research/260613-xwiki-deep-dive/`,
`research/260613-twiki-deep-dive/`, `research/260613-foswiki-deep-dive/`,
`research/260614-xanadu-deep-dive/`, `research/260614-zigzag-deep-dive/`,
`research/260614-roam-deep-dive/`, `research/260614-obsidian-deep-dive/`,
`research/260614-notion-deep-dive/`, `research/260614-joplin-deep-dive/`,
`research/260614-logseq-deep-dive/`,
`research/260614-localfirst-workspaces-deep-dive/`,
`research/260614-trilium-deep-dive/`, `research/260614-wikijs-deep-dive/`, and
`research/260614-federated-wiki-deep-dive/`, and
`research/260614-wikibase-deep-dive/`, and
`research/260614-forge-wikis-deep-dive/`, and
`research/260614-tiddlywiki-deep-dive/`, and
`research/260614-ikiwiki-deep-dive/`, and
`research/260614-quip-deep-dive/`, and
`research/260614-mojomojo-deep-dive/`, and
`research/260614-oddmuse-deep-dive/`.
See InfoTechPrimers on coulomb.social for use-case catalog conventions.
## Conventions
Each use case lists:
- **Actor** — who initiates the action
- **Goal** — observable outcome
- **Source** — research lineage (`c2`, `yawex`, `federation`, `wikiengines`, `intent`, or combined)
- **Notes** — shard-wiki-specific constraints or open design points
Priority hints: **MVP** = likely early value; **Later** = important but not first slice.
---
## A. Information space and federation
*shard-wiki orchestration scenarios (INTENT + yawex federation seeds).*
### UC-01 — Standalone open wiki (L0)
**Actor:** Anonymous contributor
**Goal:** Read and write wiki pages with full history and no external dependencies.
**Source:** intent, c2
**Notes:** Ward Cunningham / c2-style open mode (`WhyWikiWorks`). Recovery via Git
history, not gatekeeping. Aligns with L0 in `spec/ArchitectureBlueprint.md`. **Oddmuse** is
a living minimal instance — one CGI script, open editing, plain-text files (UC-82,
`research/260614-oddmuse-deep-dive/findings.md` §1) — the graceful-degradation floor a
standalone open wiki can sit on.
**Priority:** MVP
### UC-02 — Attach a shard to an information space
**Actor:** Maintainer
**Goal:** Attach a repository, directory, or other backend as a shard of a root entity.
**Source:** intent, yawex
**Notes:** yawex `Conf::TestWiki / FriendsWiki` foreshadows multiple roots/shards.
Preserve shard sovereignty and adapter capability profile. Attach paths now span a wide
range: file-store clone (UC-40/UC-76), in-engine host (UC-38/50), external-API (UC-57/80),
CRDT-replica (UC-64), P2P (UC-65), and — for a **DB-backed engine with no file store/API**
**direct relational read** of its schema (UC-81,
`research/260614-mojomojo-deep-dive/findings.md` §2).
**Priority:** MVP
### UC-03 — Project a remote shard page locally
**Actor:** Reader
**Goal:** View a page from a remote or read-only shard as a local projection with
provenance and freshness visible.
**Source:** intent, yawex
**Notes:** yawex `VIRTUAL` state = projection/cache. Lazy projection; no silent
mutation.
**Priority:** Later
### UC-04 — Overlay edit on read-only shard
**Actor:** Author
**Goal:** Propose changes to a remote/read-only page as overlay, draft, or patch
before destructive apply.
**Source:** intent, yawex
**Notes:** yawex append/comment workflow; c2 ThreadMode → refactor pattern.
Overlay-before-mutation principle.
**Priority:** Later
### UC-05 — Union derived views
**Actor:** Reader
**Goal:** Navigate BackLinks, RecentChanges, AllPages, SiteMap, or Search across
all attached shards as a federated graph.
**Source:** intent, c2, yawex
**Notes:** Present on both c2 (community nerve center) and yawex core pages.
BackLinks over the union link-graph is the strongest core candidate; per-shard
vs union scope remains open (see UC-19UC-21). ZigZag deep dive reframes these views
under one vocabulary: each is a **dimension + raster** (RecentChanges along `d.recent`,
AllPages along `d.alphabetical`, SiteMap as an H-view over the namespace dimensions),
navigable via UC-47 (`research/260614-zigzag-deep-dive/findings.md` §5). Note: the
many-to-many link/backlink graph stays a **separate graph index**, not a zz-rank.
**Priority:** Later
### UC-06 — Authenticated team wiki (L2+)
**Actor:** Authenticated principal
**Goal:** Read and write under role-based authorization with identity from an
external provider.
**Source:** intent, yawex
**Notes:** yawex htpasswd + per-topic `AccessControl` is prior art only;
shard-wiki delegates authentication, owns authorization
(`spec/ArchitectureBlueprint.md`). yawex's model traces to **TWiki's per-topic
`ALLOW/DENY TOPICVIEW/CHANGE/RENAME`** — the origin reference for shard-wiki's
optional per-page ACL at L4 (`research/260613-twiki-deep-dive/findings.md` §4). **Wiki.js**
is the modern form: **path-based rule ACL** (allow/deny by path pattern per group) +
delegated auth modules (`research/260614-wikijs-deep-dive/findings.md` §4) — a projection
should **honor/surface restricted regions**, not silently drop or expose them.
**Priority:** Later
### UC-07 — Detect and reconcile cross-shard divergence
**Actor:** Maintainer
**Goal:** Identify when equivalent pages in different shards have diverged and
reconcile them under explicit policy.
**Source:** intent
**Notes:** Union without erasure — conflicts visible, not hidden. Complements
UC-27 (multi-version view) and SHARD-WP-0002 consensus-policy task.
**Priority:** Later
### UC-26 — Fork page from remote shard into writable shard
**Actor:** Author
**Goal:** Copy a page from a remote or read-only shard into a local writable
shard for independent editing, with provenance preserved.
**Source:** federation, intent
**Notes:** Fedwiki fork primitive. shard-wiki may realize as import, overlay
seed, or writable copy per policy — distinct from UC-04 (overlay without copy)
and UC-03 (projection only). Fork vs overlay vs import decided in
`SHARD-WP-0002`. Should record a **created-from genealogy edge** in the coordination
journal so the lineage is navigable as a dimension (UC-49,
`research/260614-zigzag-deep-dive/findings.md` §9). The fedwiki deep dive details the
concrete shape: fork is **own-site-only write + a `fork` journal entry recording the source
site**, and a forked journal stays **detailed enough to locate the upstream cut-point**
(`research/260614-federated-wiki-deep-dive/findings.md` §2, §4) — enabling later
carry-forward/re-fork (UC-28) and modelling the genealogy edge as **provenance** (UC-71/72).
**Priority:** Later
### UC-27 — View multiple versions of equivalent page
**Actor:** Reader
**Goal:** See coexisting versions of the same topic from different shards or
authors without collapsing them into one canonical page.
**Source:** federation, intent
**Notes:** Fedwiki "chorus of voices"; INTENT union without erasure. Equivalent-
page identity model TBD (`SHARD-WP-0002`) — Xanadu deep dive offers a path-independent
detection mechanism via content-identity / span-set intersection (UC-46,
`research/260614-xanadu-deep-dive/findings.md` §5, §8.2). Links UC-07 divergence
detection.
**Priority:** Later
### UC-28 — Carry forward pages from closed or archived shard
**Actor:** Maintainer or author
**Goal:** Selectively import or re-project valuable pages from an archived,
read-only, or retired shard into an active information space.
**Source:** federation
**Notes:** Caulfield bounded conversation / reverse bit-rot. Optional space
lifecycle policy. Complements UC-02 attach and UC-26 fork at scale. Obsidian's
**Importer** (1.4M) plugin (Evernote/Notion/Bear/Apple Notes → Markdown) shows demand
for importing from foreign tools (`research/260614-obsidian-deep-dive/findings.md` §7).
**Priority:** Later
### UC-29 — Remix with portable attribution
**Actor:** Author
**Goal:** Reuse content across shards or spaces with attribution and edit
history intact, without manual copy-paste.
**Source:** federation, intent, xanadu
**Notes:** Fedwiki journal travels with page; shard-wiki coordination journal +
per-shard history. Frictionless reuse principle (~15s not ~15min). Xanadu
**transcopyright**: a reference carries provenance *and reuse terms* with it, so
attribution/permission travel with the span — but reuse policy stays configurable, not
baked into the substrate (`research/260614-xanadu-deep-dive/findings.md` §6); links the
authz-in-core L0→L4 ladder decision. Remix should also record a **genealogy edge**
(UC-49) so reuse lineage is navigable, not just attributed.
**Priority:** Later
### UC-30 — Time-bounded collaboration space
**Actor:** Facilitator
**Goal:** Run a collaboration period on a dedicated information space or shard
subset, then archive it while allowing selective carry-forward.
**Source:** federation
**Notes:** Fedwiki "happening"; lifecycle is configurable policy, not a hard-
coded core behavior. Relates to UC-28.
**Priority:** Later
### UC-31 — Subscribe to remote shard changes
**Actor:** Maintainer or reader
**Goal:** Receive timely notice when pages change on attached remote shards,
triggering projection refresh or reconciliation review.
**Source:** federation, intent
**Notes:** ikiwiki pinger/pingee; ActivityPub Create/Update; polling fallback.
Transport is adapter concern; freshness surfaced in UC-24. XWiki deep dive adds a
concrete push transport: an engine event bus (`ObservationManager`
`DocumentUpdatedEvent`) consumed by a listener, vs polling REST history
(`research/260613-xwiki-deep-dive/findings.md` §2.5, §8 Q4). Notion adds **webhooks**
(2026) delivering page/database change events — a SaaS push transport, weighed against
eventual consistency and the rate limit (`research/260614-notion-deep-dive/findings.md`
§4). **Joplin** is poll-based and turns concurrent edits into **conflict notes**
(keep-both, not silent overwrite) — conflict-as-data, links UC-07
(`research/260614-joplin-deep-dive/findings.md` §2). The **ikiwiki** dive details the
canonical pinger: an instance sends an **XML-RPC ping** to a peer when it changes, prompting
the peer to **pull and rebuild** — a subscribe/notify *mechanism* over a **git-distributed
mesh** (UC-79, `research/260614-ikiwiki-deep-dive/findings.md` §2), the federation flavor
beside fedwiki fork/journal (UC-72) and Wikibase `SERVICE` (UC-74).
**Priority:** Later
### UC-32 — Transclude remote span with live freshness
**Actor:** Author or reader
**Goal:** Embed a portion of a remote page inline with visible origin and
refreshable content.
**Source:** federation, intent
**Notes:** Xanadu transclusion pattern; stronger than UC-03 whole-page
projection. Provenance and staleness must be explicit. Xanadu deep dive sharpens this:
transclusion should be **content-identity based and bidirectional** (content is "knowably
in more than one place" and aware of its appearances), not a one-way path fetch —
enables UC-45 reverse lookup (`research/260614-xanadu-deep-dive/findings.md` §4). See
UC-44 for the whole-page composition-manifest form. **Roam ships this**: block embeds
transclude by `:block/uid` live (not copied), proving transclusion is a cheap data-layer
capability over an addressable store (`research/260614-roam-deep-dive/findings.md` §3,
§7) — argues for transclusion in core over the union, surfaced by UI. Depends on span
addressing (UC-51). **Logseq** does the same on *files*: `{{embed ((uuid))}}` transcludes
by an in-file block ID (`research/260614-logseq-deep-dive/findings.md` §2).
**Priority:** Later
### UC-33 — Git-branch an information space
**Actor:** Maintainer
**Goal:** Fork the coordination journal and attached shard configuration into a
divergent information space without destroying the original.
**Source:** federation, intent
**Notes:** ikiwiki wiki-branch pattern; Git-backed coordination per INTENT.
Space-level fork — distinct from UC-26 page-level fork.
**Priority:** Later
### UC-34 — Attach a structured or semantic shard without lossy flattening
**Actor:** Maintainer
**Goal:** Attach an engine whose pages carry structured or queryable data beyond
Markdown (Semantic MediaWiki annotations, XWiki objects/forms) and project it
without silently discarding the structure.
**Source:** wikiengines, intent
**Notes:** Engine scan shows "wiki page" spans flat Markdown to queryable
knowledge objects. Markdown-first must **degrade gracefully**, not flatten:
needs a passthrough / sidecar-metadata / provenance escape hatch. Page-model
question deferred to `SHARD-WP-0002` (findings §6 Q1). Distinct from UC-02
(assumes Markdown-shaped pages). XWiki is the concrete exemplar: pages carry typed
XObjects against an XClass schema (`research/260613-xwiki-deep-dive/findings.md`
§2.3); UC-39 covers the extreme where the page is *only* structure. TWiki shows the
**git-friendly** variant: TWiki Forms store fields as `%META:FIELD%` *inside the
topic text file*, so structure is diffable rather than locked in a DB
(`research/260613-twiki-deep-dive/findings.md` §2.3). Roam is the modern exemplar:
`key:: value` attributes over a datom graph, queryable via Datalog
(`research/260614-roam-deep-dive/findings.md` §3, §4) — structure to preserve via
sidecar metadata, and a candidate for query delegation (UC-52). Obsidian shows the
**git-diffable in-file** variant: YAML frontmatter/properties live in the Markdown text
and are queried by the Dataview plugin (`research/260614-obsidian-deep-dive/findings.md`
§3) — structure as portable text, not DB state. **Notion** is the apex of the DB-locked
end: typed database properties with relations/rollups/formulas, lossy to Markdown —
see UC-58 (`research/260614-notion-deep-dive/findings.md` §2). **Logseq** sits between:
`key:: value` block/page properties live in the Markdown text (git-diffable) yet are
queried via a derived Datalog graph (`research/260614-logseq-deep-dive/findings.md` §2§3)
— in-text structure at block granularity. **Trilium** adds **computed** structure: labels
+ typed relations that are **inherited + templated**, so effective metadata ≠ stored
metadata — see UC-67 (`research/260614-trilium-deep-dive/findings.md` §3).
**Priority:** Later
### UC-35 — Attach a shard with coarse write granularity
**Actor:** Maintainer
**Goal:** Attach a backend whose unit of write is not the page — a single-file
wiki (TiddlyWiki) or a whole-space/DB-transaction engine — and have shard-wiki
respect that granularity instead of assuming per-page writes.
**Source:** wikiengines, intent
**Notes:** Capability-aware adapters: the **capability profile must encode write
granularity** (per-page / per-file / per-space / append-only). Overlay and
patch flows must adapt (findings §5 #1). Affects conflict scope and locking. Roam marks
the **fine extreme** — block-level writes (`block.create/update/move/delete`), the
opposite of TiddlyWiki's whole-file granularity
(`research/260614-roam-deep-dive/findings.md` §6). The **TiddlyWiki** dive confirms the
coarse anchor and its consequence: in single-file mode a save **rewrites the whole HTML
file**, so an overlay to *any* page **conflicts with any concurrent write** (no per-page
atomicity) — whereas its Node `.tid` substrate is **file-per-tiddler** (fine), so the *same
engine* sits at both ends by substrate (UC-78,
`research/260614-tiddlywiki-deep-dive/findings.md` §1, §3; cf. UC-43/UC-62).
**Priority:** Later
### UC-36 — Supply a git-addressable history to an internal-history engine
**Actor:** Maintainer
**Goal:** Attach an engine whose revisions live only in its own database
(Confluence, MediaWiki) and give the information space a portable, git-backed
history it otherwise lacks.
**Source:** wikiengines, intent
**Notes:** Many engines expose revisions but not portable, git-style history.
The **coordination journal** supplies the Git-addressable layer (INTENT). Open:
is the journal authoritative or a mirror reconciled back to the engine
(findings §6 Q3)? Complements UC-07 divergence and UC-24 provenance. XWiki's
internal RCS table (`xwikircs`) is a concrete instance
(`research/260613-xwiki-deep-dive/findings.md` §2.4). This UC is *supplementation*
(the engine's past is DB-locked); where history is already in an open file format
(TWiki RCS `.txt,v`) it can instead be **imported** — see UC-41. Demand evidence:
**Obsidian Git is a top-7 plugin (2.7M)** — users manually bolt portable git history
onto a vault that has none natively (`research/260614-obsidian-deep-dive/findings.md`
§5, §7), exactly the gap the coordination journal fills as core. **Notion** is the
closed-SaaS instance: internal page history bounded by plan, **not portable** and not
exported as git (`research/260614-notion-deep-dive/findings.md` §4) — a supplementation
case like Confluence/MediaWiki, not an import case. **Joplin** keeps internal note
revisions locally, likewise not portable (`research/260614-joplin-deep-dive/findings.md`
§1) — supplement. **CRDT** shards (Anytype/AFFiNE/AppFlowy) keep a CRDT update log, not
git — also supplement, or snapshot the replica
(`research/260614-localfirst-workspaces-deep-dive/findings.md` §4). **Wiki.js** is the
*adopt* case via mirror: its Git storage module commits every change to a repo, so the
engine's history **is** git even though its canonical store is a DB (UC-68,
`research/260614-wikijs-deep-dive/findings.md` §2).
**Priority:** Later
### UC-37 — Attach a static engine export as a read-only backup shard
**Actor:** Maintainer
**Goal:** Attach a one-shot export with no live origin — a MediaWiki XML dump, an
HTML mirror, or an archived/read-only C2 — as a read-only cache/backup/patch
target.
**Source:** wikiengines, intent
**Notes:** Graceful degradation — a frozen export is still a legitimate
participant. Distinct from UC-03 (live projection with a reachable origin) and
UC-28 (carry pages *forward* into a new space); here the dump itself is the
shard. Read-only mode in `spec/ArchitectureBlueprint.md`.
**Priority:** Later
### UC-38 — Make a wiki engine federation-capable via its native extension API
**Actor:** Engine developer / integrator
**Goal:** Turn an existing wiki engine into a federation participant by hosting a
shard-wiki adapter *inside* the engine through its own extension interface, rather
than scraping it from outside.
**Source:** wikiengines, intent
**Notes:** Realizes INTENT *composable integration* — first UC for the **engine-side**
direction (others attach engines from outside). XWiki is the proof case: its
component model (`@Component` + role hint) can replace auth/storage/rights, its
REST API and `ObservationManager` give transport + change events, and UIX adds
surfacing — enough to host a high-fidelity adapter
(`research/260613-xwiki-deep-dive/findings.md` §3). Trade-off vs an external REST
adapter (needs deploy access, higher fidelity) is open (findings §8 Q3).
Generalizes beyond XWiki: TWiki's plugin handler API (`beforeSaveHandler`,
`afterRenameHandler`, REST handlers) is an equivalent host surface
(`research/260613-twiki-deep-dive/findings.md` §3). **Roam Depot** is the modern
template: an extension default-exports `onload`/`onunload` and drives
`window.roamAlphaAPI` read (`q`/`pull`) + write (`block.*`/`page.create`)
(`research/260614-roam-deep-dive/findings.md` §5) — note Roam's API runs *inside* the
client, so write-through requires in-engine hosting (findings §11 Q2). **Joplin** offers
*two* surfaces: an in-app plugin host (`joplin.data`/`workspace`/`contentScripts`) **and**
a **local Data API** (REST on `localhost:41184`, token, app-running) — a local-REST attach
sub-mode between in-engine host and external API (UC-57,
`research/260614-joplin-deep-dive/findings.md` §4). **Trilium** is the same dual pattern:
**scripting** (frontend/backend code notes against a Script API) as the in-app host, plus
**ETAPI** (token REST) as a designed external surface for a self-hosted server
(`research/260614-trilium-deep-dive/findings.md` §5). **Wiki.js** generalizes the host
surface into a **pluggable module system** (storage/auth/search/render/editor); its
**storage-module** interface is — with `Foswiki::Store` — concrete **adapter-contract
prior art** (versioned, multi-provider Git/FS/S3/Azure, backup-or-source-of-truth)
(`research/260614-wikijs-deep-dive/findings.md` §2, §8).
**Priority:** Later
### UC-39 — Attach a wiki-as-application-platform shard (pages as typed records)
**Actor:** Maintainer
**Goal:** Attach an engine where pages are structured records or forms with little
or no prose body (XWiki AppWithinMinutes apps / XObjects), and represent them in the
union without inventing a fake Markdown body.
**Source:** wikiengines, intent
**Notes:** The extreme of UC-34 — not *annotations on prose* but **bodiless
structured pages**. Forces the question: does the page model require a Markdown body,
or can a page be purely typed data (`research/260613-xwiki-deep-dive/findings.md`
§8 Q2)? Affects union views, diff, and search. Deferred to `SHARD-WP-0002`.
Foswiki shows a middle point: MetaDataPlugin stores **multiple** structured records
per topic, still as `%META%` in text (`research/260613-foswiki-deep-dive/findings.md`
§4) — the page model must allow N typed records, not one form. **Notion** pushes
further: a *database* is a collection with a schema whose rows are pages joined by typed
relations — see UC-58 (`research/260614-notion-deep-dive/findings.md` §2).
**Priority:** Later
### UC-40 — Attach a file-backed engine's on-disk store directly
**Actor:** Maintainer
**Goal:** Attach a live engine whose content is plain files on disk — TWiki
`data/<Web>/<Topic>.txt`, DokuWiki pages, a Gollum/ikiwiki repo — by reading its
**backing store directly** as a folder shard, instead of (or alongside) going
through its runtime API.
**Source:** wikiengines, intent
**Notes:** One backend, **two attachment paths** with different fidelity/consistency:
the on-disk store (offline-capable, git-native for repo-backed engines, but risks
reading inconsistent state under a running engine) vs the runtime API (consistent,
respects engine logic, but requires the engine up). Capability profile must express
the choice (`research/260613-twiki-deep-dive/findings.md` §5§6, §8 Q1). Distinct
from UC-37 (no live origin) and broader than UC-02's generic attach. Foswiki's
**PlainFile** store (timestamped whole-version copies, no RCS) is a cleaner
direct-attach target than RCS diffs (`research/260613-foswiki-deep-dive/findings.md`
§2.2). An **Obsidian vault** is the cleanest case of all — a plain Markdown folder,
Markdown-first and git-friendly — and uniquely **dual-attachable**: file-store direct
*or* via an in-app plugin adapter for write-through + live file events (UC-53,
`research/260614-obsidian-deep-dive/findings.md` §4, §10). Counter-example: **Joplin**'s
native store is a **DB** (SQLite), so its file-attach surface is the *sync/interchange
mirror* on a WebDAV/S3 target, not the native store — see UC-60
(`research/260614-joplin-deep-dive/findings.md` §2). **Wiki.js** is the clean middle: also
DB-canonical, but its Git storage module maintains a repo of **plain Markdown** that is the
ideal engine-maintained file-store attach — see UC-68
(`research/260614-wikijs-deep-dive/findings.md` §2).
**Priority:** Later
### UC-41 — Import an engine's native file history into the coordination journal
**Actor:** Maintainer
**Goal:** When an engine already keeps history in an open file format (TWiki/yawex
RCS `.txt,v`), **import that history** into the Git-backed coordination journal
preserving authorship and timestamps — not just start a fresh journal going forward.
**Source:** wikiengines, intent
**Notes:** History *migration with fidelity*, distinct from UC-36 *supplementation*
(where the engine's past is locked in a DB and the journal can only begin now). Open:
is the imported history authoritative or a one-time backfill
(`research/260613-twiki-deep-dive/findings.md` §8 Q2)? Strengthens recoverability
(INTENT *History as the safety net*).
**Priority:** Later
### UC-42 — Read and write a non-Markdown shard via lossless syntax translation
**Actor:** Author or maintainer
**Goal:** Attach a shard whose native markup is not Markdown (TWiki/Foswiki TML,
XWiki syntax) and read it into the Markdown-first model — and write Markdown overlays
back — through **bidirectional, lossless syntax translation**, instead of treating it
as read-only.
**Source:** wikiengines, intent
**Notes:** Realizes *Markdown-first, backend-neutral* for **prose** (UC-34/39 cover
*structure*). Feasibility proven by Foswiki's **WysiwygPlugin** (TML→HTML for editing,
HTML→TML losslessly on save) (`research/260613-foswiki-deep-dive/findings.md` §5).
Open: is round-trip lossless enough, or must overlays be stored in the shard's native
syntax to be safe (findings §9 Q2)? Without this, non-Markdown shards degrade to
read-only (UC-03) — a graceful-degradation floor, not the goal. **Trilium** is the
HTML-native case: text notes are HTML (CKEditor5), so participation needs HTML↔Markdown
translation — more tractable than Notion's blocks but still lossy for some constructs
(`research/260614-trilium-deep-dive/findings.md` §4, links UC-59). **Wiki.js** is
multi-format (**Markdown primary**, plus HTML and AsciiDoc) with pluggable editors — mostly
native, light translation for the non-MD pages (`research/260614-wikijs-deep-dive/findings.md`
§1).
**Priority:** Later
### UC-43 — Tolerate a shard's storage-backend swap without losing identity
**Actor:** Maintainer
**Goal:** Keep a shard attached, with its provenance and history intact, when its
underlying storage backend changes — e.g. a Foswiki wiki migrated RCS→PlainFile, or a
folder shard promoted into Git.
**Source:** wikiengines, intent
**Notes:** Foswiki proves backends are swappable under a stable identity via its
versioned `Foswiki::Store` interface (`research/260613-foswiki-deep-dive/findings.md`
§2). shard-wiki orchestration robustness: a shard's identity/attachment is **not** its
storage format. Open: detect the swap and preserve history across it (findings §9 Q3).
Relates to UC-40 (attach path) and UC-41 (history import) but is about *change under a
live attachment*, not initial attach. Live modern instance: **Logseq** is migrating its
substrate from Markdown-files to a SQLite "DB graph" under a stable graph identity
(`research/260614-logseq-deep-dive/findings.md` §5) — bind to capabilities, not to "it's
files".
**Priority:** Later
### UC-44 — Compose a page by reference (xanadoc / EDL manifest)
**Actor:** Author
**Goal:** Author a page whose canonical body is an ordered list of spans pulled by
reference from one or more shards, stored as a composition manifest rather than a copy.
**Source:** xanadu, intent
**Notes:** Xanadu EDL/xanadoc — a document that contains no content, only span
references plus link tables, assembled by the client
(`research/260614-xanadu-deep-dive/findings.md` §2). The reference-not-copy embodiment
of INTENT "lazy projection over eager copying" and "union without erasure". Stronger
than UC-32 (single inline span): the *whole page* is a manifest. Requires the wiki page
model to admit a reference-list canonical form — flag for page-model spec. Open:
core vs. adapter vs. reference-UI; MVP vs. deferred with UC-32 (findings §11 Q2).
**Priority:** Later
### UC-45 — Reverse transclusion: find all appearances of a span
**Actor:** Reader or maintainer
**Goal:** Given a span (paragraph/section/page), find every page and shard where that
content appears or is transcluded.
**Source:** xanadu, intent
**Notes:** Xanadu content "remembers its identity and traces back to all its
appearances" (`research/260614-xanadu-deep-dive/findings.md` §4). Union BackLinks
generalized from page links to sub-page content identity. Depends on a content-identity
mechanism (UC-46) and on span addressing as an adapter capability (`SHARD-WP-0002`).
Open: exact-identity only vs. fuzzy/derived tracking (findings §11 Q4).
**Priority:** Later
### UC-46 — Detect content-identity equivalence across shards
**Actor:** Reader or orchestrator
**Goal:** Determine that two pages in different shards are the same or derived content
by content/span overlap, without relying on matching titles or paths.
**Source:** xanadu, intent
**Notes:** Xanadu compares documents by **span-set intersection** over an invariant
content pool (`research/260614-xanadu-deep-dive/findings.md` §5). Supplies the
equivalent-page identity model left open in UC-27 with a *path-independent* detection
mechanism — equivalence is detected, not enforced (parallel versions stay visible per
UC-27, not collapsed). Adapter advertises its content fingerprint (Git blob hash,
normalized-text hash, none). Open: core vs. adapter-index; cost at wiki scale without
enfilades (findings §11 Q3).
**Priority:** Later
### UC-47 — Navigate the information space along a chosen relationship dimension
**Actor:** Reader
**Goal:** Traverse pages along a *selected* relationship axis — namespace, created-from
genealogy, version history, owning shard, equivalence, or recent-change order — rather
than a single fixed hierarchy.
**Source:** zigzag, intent
**Notes:** ZigZag/zzstructure treats each relationship as a first-class **dimension**;
a page is a cell at the intersection of many independent ranks
(`research/260614-zigzag-deep-dive/findings.md` §2, §5). Reframes the existing derived
views (UC-05, UC-17UC-20) as *dimensions + rasters* under one vocabulary. Embodies
union-without-erasure: every relationship co-equal, none privileged. Open: public
navigation API vs. internal model (findings §10 Q1). **AFFiNE** ships the commercial
proof: docs, whiteboards, and databases are *views of the same block set*
(`research/260614-localfirst-workspaces-deep-dive/findings.md` §2).
**Priority:** Later
### UC-48 — Pivot two relationships into a cross-tab view (H-view)
**Actor:** Reader
**Goal:** Cross-tabulate the union by two dimensions at once — e.g. namespace × shard,
or page × versions-across-shards — and pivot to re-cross by a different pair.
**Source:** zigzag
**Notes:** ZigZag **H-view** shows two dimensions through a cursor, one horizontal one
vertical, with only existing cells present (`research/260614-zigzag-deep-dive/findings.md`
§3). A differentiated exploration primitive for federation/provenance. Open: reference-UI
investment vs. research-only (findings §10 Q4). **AFFiNE**'s page/edgeless/DB modes over
one block set are this idea shipped (`research/260614-localfirst-workspaces-deep-dive/findings.md`
§2).
**Priority:** Later
### UC-49 — Navigate created-from / fork genealogy as a first-class dimension
**Actor:** Reader or maintainer
**Goal:** Follow a page's derivation lineage — what it was forked/remixed/imported
from, and what was derived from it — as a navigable rank.
**Source:** zigzag, federation, intent
**Notes:** Genealogy is a *functional* relation (one origin) that fits a zzstructure
dimension natively (`research/260614-zigzag-deep-dive/findings.md` §4, §5). Requires a
genealogy edge recorded at fork/remix/import time (UC-26, UC-29) in the coordination
journal. Makes provenance a traversal, not a buried footer (complements UC-24).
**Priority:** Later
### UC-50 — Attach a block-graph database wiki as a shard, mapping blocks to the page model
**Actor:** Maintainer
**Goal:** Attach a block-first, DB-backed graph tool (Roam-style) as a shard via its
query/CRUD API, mapping its blocks onto shard-wiki's Markdown page model without
flattening the structure.
**Source:** roam, intent
**Notes:** Roam's graph is a DataScript datom DB where a *page* is the node carrying
`:node/title` and nested *blocks* are addressable spans
(`research/260614-roam-deep-dive/findings.md` §2, §6). Clean mapping rule: titled node
= page, nested blocks = spans, attributes = sidecar metadata (honors UC-34 no-lossy-
flatten). DB-backed/API-attached path (like XWiki UC-38), **not** the file-store path
(UC-40). Write-through requires hosting the adapter inside the engine (Roam Depot),
else degrade to read/projection/overlay-target (findings §11 Q2). **Notion** is the
external-API variant of the same block-DB family: a server Postgres store with a real
**external** REST API, so write-through needs **no in-engine hosting** — but is bounded
by rate limits and eventual consistency (UC-57,
`research/260614-notion-deep-dive/findings.md` §4). **Logseq** is the *file-store* variant
of the block-tool family — block-graph semantics over plain Markdown files, not a DB — see
UC-62 (`research/260614-logseq-deep-dive/findings.md` §1§2).
**Priority:** Later
### UC-51 — Adopt a shard's native span IDs as portable span addresses
**Actor:** Orchestrator / adapter
**Goal:** Where a backend mints stable sub-page identifiers (Roam `:block/uid`), adopt
them as the span address for transclusion, overlay, and reverse-lookup, rather than
inventing one.
**Source:** roam, xanadu, intent
**Notes:** Roam ships the fine-grained stable address that Xanadu's tumblers
(`research/260614-xanadu-deep-dive/findings.md` §3) and the catalog left open — a short
opaque per-block UID, public and referenceable (`research/260614-roam-deep-dive/findings.md`
§2, §7). Enables UC-44/45 at sub-page granularity; falls back to content-fingerprint
(UC-46) or path+range where no native ID exists. Open: use native ID directly or wrap in
a shard-scoped address to avoid cross-shard collision and survive projection (findings
§11 Q1). Obsidian shows the **text-embedded** variant: `^block-id` and heading anchors
live in the Markdown text — git-diffable and portable (survives a file copy) but opt-in
(`research/260614-obsidian-deep-dive/findings.md` §2), vs Roam's mandatory DB-minted
UID. Notion is a second store-minted case: per-block **UUID v4**, exposed via the REST
API (`research/260614-notion-deep-dive/findings.md` §1). **Joplin** marks the spectrum's
middle: a store-minted **page-level** 32-char ID with `:/<id>` links that survive
rename/move (`research/260614-joplin-deep-dive/findings.md` §1) — coarser than a block
UUID, more stable than a path. **Logseq** is the **sweet spot**: a block-level `id:: uuid`
stored **in the Markdown text** — fine-grained *and* git-diffable/portable at once,
resolving the Roam(DB-minted) vs Obsidian(page-level) tension
(`research/260614-logseq-deep-dive/findings.md` §2). **CRDT** shards
(Anytype/AFFiNE/AppFlowy) mint object/block IDs as part of the CRDT structure — fine-
grained, store-assigned (`research/260614-localfirst-workspaces-deep-dive/findings.md`
§6).
**Priority:** Later
### UC-52 — Delegate derived views to a shard's native query engine
**Actor:** Orchestrator
**Goal:** When a shard exposes a native query engine, compute derived views (backlinks,
recent changes, typed queries) by delegating to it instead of scanning the projection.
**Source:** roam, intent
**Notes:** In Roam, derived views *are* Datalog queries over the datom graph
(`research/260614-roam-deep-dive/findings.md` §4). Makes "native query" an adapter
capability the orchestrator can key off (vs. computing views itself over the
projection). Operationalizes the ZigZag "dimensions + rasters" insight
(`research/260614-zigzag-deep-dive/findings.md` §5) and relates to UC-05/UC-34. Obsidian
nuance: query can be an *ecosystem plugin* (Dataview), **not core** — so "native query"
is adapter/plugin-provided and must not be assumed
(`research/260614-obsidian-deep-dive/findings.md` §7). **Notion** ships a native
database **query API** (filters/sorts) — a strong delegation target
(`research/260614-notion-deep-dive/findings.md` §2, §4). **Logseq** shows the third path:
Datalog over a **derived** index built from plain files — neither native-DB nor plugin;
when no engine exists, shard-wiki can build the index itself (UC-63,
`research/260614-logseq-deep-dive/findings.md` §3). **Wikibase** is the far end:
**SPARQL** over an RDF projection with **federated `SERVICE`** cross-endpoint joins
(`research/260614-wikibase-deep-dive/findings.md` §2) — a graph-query tier above
datalog/filters, and `SERVICE` is itself a query-time federation primitive (UC-74).
**Priority:** Later
### UC-53 — Attach a local-first Markdown vault with a live concurrent native editor
**Actor:** Maintainer
**Goal:** Attach an Obsidian-style local Markdown vault as a file-backed shard while its
own app continues to edit the files concurrently — watching for external changes,
re-projecting, and treating the app's config dir as opaque.
**Source:** obsidian, intent
**Notes:** Obsidian "file over app": vault = folder of `.md` + `.obsidian/` config;
files are canonical (`research/260614-obsidian-deep-dive/findings.md` §1). Cleanest
file-store attach (UC-40) — and uniquely **dual-mode**: zero-config direct attach
(read/projection/overlay) *or* an in-app adapter (Obsidian plugin) for write-through +
live `vault` events (UC-38, findings §4). Needs **external-writer tolerance**
(file-watch, re-project, conflict-with-live-app) distinct from multi-user write
conflicts. Exclude `.obsidian/` as shard-local config, not page content.
**Priority:** Later
### UC-54 — Define a page as a live query over the union
**Actor:** Author
**Goal:** Author a page whose body is materialized from a saved query over the union
(e.g. "all open tasks", "all pages tagged X"), refreshed as the union changes.
**Source:** obsidian, roam, intent
**Notes:** The Obsidian **Dataview** (4.4M downloads) / **Tasks** (3.6M) pattern, and
Roam `{{query}}` — query-defined dynamic pages
(`research/260614-obsidian-deep-dive/findings.md` §7). Distinct from UC-44 (reference/
span manifest) and UC-52 (delegating *computation* of an existing view): here the *page
itself* is a query. Open: core page type vs. adapter vs. reference-UI/plugin (findings
§11 Q2). May delegate execution to a shard's native query engine (UC-52). **Notion**
linked/filtered databases are the commercial instance — one row-set surfaced through many
filtered views (`research/260614-notion-deep-dive/findings.md` §2).
**Priority:** Later
### UC-55 — Carry non-Markdown content types as typed or opaque assets
**Actor:** Maintainer or author
**Goal:** Attach and present a shard's non-Markdown content — drawings (Excalidraw),
spatial canvases (JSON Canvas), images, attachments — as typed or opaque assets with
provenance, without flattening them into Markdown or dropping them.
**Source:** obsidian, intent
**Notes:** The **#1 Obsidian plugin is Excalidraw (6.4M)** — users keep non-Markdown
content in "Markdown" vaults (`research/260614-obsidian-deep-dive/findings.md` §7).
Extends UC-34's no-lossy-flatten rule from structured-text to binary/spatial content.
Pushes the **wiki page model**: page vs. typed asset vs. opaque blob — a page-model
decision, not just adapter config (findings §10). JSON Canvas is an open format worth
first-class support. **Joplin** resources (attachments, each with an ID, linked `:/<id>`)
are the same demand in a sync-mirror shard (`research/260614-joplin-deep-dive/findings.md`
§5). **Logseq whiteboards** (tldraw JSON) are the same in a file-store block shard
(`research/260614-logseq-deep-dive/findings.md` §6). **AFFiNE** edgeless canvas, **AppFlowy**
boards/calendars, and **Anytype** objects/files are the same demand in CRDT shards
(`research/260614-localfirst-workspaces-deep-dive/findings.md` §5).
**Priority:** Later
### UC-56 — Publish a curated projection to an external read-only target
**Actor:** Maintainer
**Goal:** Publish a selected projection of the union (or a shard) to an external
read-only target — a static site or hosted page set — preserving provenance.
**Source:** obsidian, intent
**Notes:** The Obsidian Publish / **Quartz** / Digital Garden pattern — outbound
publish (`research/260614-obsidian-deep-dive/findings.md` §7, §10). Formalizes the
`publish` capability from INTENT's adapter-capability list; **complements UC-37**
(inbound static-export *attach*) as its outbound mirror. Open: core vs. publish-adapter
family; interaction with overlays and projection freshness (findings §11 Q4). **Notion**
adds the closed-SaaS instance: **publish-to-web** renders pages as read-only public
pages (`research/260614-notion-deep-dive/findings.md` §4).
**Priority:** Later
### UC-57 — Attach a closed hosted shard via its external API only
**Actor:** Maintainer
**Goal:** Attach a closed, hosted SaaS (Notion-style) that has no file store and no
in-app plugin runtime, reachable only through its external REST API — honoring its rate
limits, eventual consistency, payload/pagination caps, and a scoped, revocable access
grant.
**Source:** notion, intent
**Notes:** Notion is external-REST-attachable with **no in-engine hosting** (contrast
Roam UC-50) but inside a tight operational envelope: ~3 req/s, eventual consistency,
recursive first-level-children fetch, and integrations that see **only explicitly
connected pages** (`research/260614-notion-deep-dive/findings.md` §4, §6). The capability
profile must encode this **operational envelope** and **scoped/revocable grant**;
projection is cache/poll/webhook, not a live read model. Best as projection/mirror/
overlay/backup; write-through possible but bounded. Links the authz-in-core decision and
"no silent remote mutation". Third attachment mode alongside file-store (UC-40) and
in-engine host (UC-38/50). Self-hostable variants: **AFFiNE Cloud** / **AppFlowy Cloud**
(self-host sync servers) and **Anytype**'s open API + MCP are endpoint forms within a
user's trust boundary (`research/260614-localfirst-workspaces-deep-dive/findings.md` §4,
§9) — see also UC-65 (P2P, no single endpoint). **Wiki.js** uses **GraphQL** (typed,
introspectable, selective-field) rather than REST — schema discovery + reduced over-fetch,
see UC-69 (`research/260614-wikijs-deep-dive/findings.md` §3). **Quip** adds a third payload
form: REST with an **HTML** import/export payload (vs Notion block-JSON, Wiki.js GraphQL) —
**lossy** to Markdown, embedded spreadsheets/live apps degrade, under **Salesforce**
enterprise identity (UC-80, `research/260614-quip-deep-dive/findings.md` §2, §3). So the
external-API mode carries a **payload-format facet** (block-JSON / GraphQL / HTML) in the
adapter profile.
**Priority:** Later
### UC-58 — Attach a typed database with schema, relations, and views
**Actor:** Maintainer
**Goal:** Attach a structured database (Notion-style) as a shard — preserving its
schema (typed properties), its inter-record **relations** and **rollups/formulas**, and
its multiple **views** — without flattening the schema or the relations into prose.
**Source:** notion, intent
**Notes:** The apex of UC-34/UC-39: not annotations on prose, nor one form per page, but
a **collection with a schema** whose rows are pages joined by **typed, bidirectional
relations**, shown through many views (table/board/calendar/gallery)
(`research/260614-notion-deep-dive/findings.md` §2). Presses the page model: collection +
schema + relations, not just a page (findings §9). Relations map to the union link graph
and/or a relation index (cf. ZigZag many-to-many, UC-47/48); views relate to UC-54.
Deferred to `SHARD-WP-0002`. **Local-first** variants exist: **Anytype**'s user-editable
typed object graph (types + relations = an ontology) and **AppFlowy**'s Notion-style DBs,
both CRDT-backed (`research/260614-localfirst-workspaces-deep-dive/findings.md` §1, §3) —
the typed-collection demand is not exclusive to hosted SaaS.
**Priority:** Later
### UC-59 — Translate a proprietary content model with an explicit fidelity report
**Actor:** Orchestrator / adapter
**Goal:** Project and edit a shard whose content model does not round-trip to Markdown
(Notion blocks/rich-text, databases, relations) by translating **lossily but
transparently** — surfacing what degraded or did not map, rather than silently dropping
it.
**Source:** notion, intent
**Notes:** Notion is the heaviest translation case — proprietary block + rich-text model,
and its own Markdown/CSV export is lossy (`research/260614-notion-deep-dive/findings.md`
§3). **Distinct from UC-42** (Foswiki TML↔HTML *lossless* round-trip): here translation
is fundamentally lossy, so **fidelity becomes data** — a per-shard/per-page report of
what projects cleanly vs. degrades, with non-mappable elements preserved as
provenance/sidecar. Embodies union-without-erasure by making *loss of fidelity* visible.
Open: report format and where it surfaces (findings §10 Q3).
**Priority:** Later
### UC-60 — Attach a tool's documented sync / interchange representation
**Actor:** Maintainer
**Goal:** Attach a backend's documented **sync or interchange representation** — a folder
of per-item files a tool writes to a third-party storage target — as a file-store shard,
without running the tool and without touching its native store.
**Source:** joplin, intent
**Notes:** Joplin's native store is **SQLite**, but on sync it serializes to per-item
**Markdown+metadata files** on filesystem / WebDAV / **Nextcloud** / Dropbox / OneDrive /
**S3** (`research/260614-joplin-deep-dive/findings.md` §2). That mirror is attachable
offline and app-independently *if* the adapter understands the documented item format
(body + metadata footer, `:/id` links, resources). **Distinct from UC-40** (native
on-disk store) and **UC-53** (app files *are* the store): here the attach surface is the
**interchange/sync representation**, and the tool **owns the format** → treat
read/projection/overlay-mostly, never re-sync (INTENT not-a-file-sync-daemon). Realizes
INTENT's WebDAV/Nextcloud/S3 participants. Needs a **format profile** in the adapter
(findings §8).
**Priority:** Later
### UC-61 — Attach an encrypted-at-rest shard with content opacity
**Actor:** Maintainer
**Goal:** Attach a shard whose stored content is encrypted (E2EE sync target) and
participate correctly when bodies are undecryptable — as backup / mirror / structure-
shell — without ever presenting ciphertext as readable content.
**Source:** joplin, intent
**Notes:** Joplin encrypts items **before** they leave the device, so the sync target
holds ciphertext (`research/260614-joplin-deep-dive/findings.md` §3). Introduces a new
capability dimension — **content opacity** (`plaintext → encrypted-at-rest/opaque`) —
proposed as a twelfth spectrum for the adapter contract (findings §8; extends
`research/260614-shard-spectrum-synthesis/findings.md` §2). Graceful degradation extreme:
IDs/counts/timestamps may be visible while bodies are opaque; never silently surface
undecryptable content. Open: does shard-wiki ever hold keys, or only treat such shards as
opaque backups (findings §9 Q1)? Ties [[shard-wiki-auth-in-core-decision]]. **Anytype**
reinforces this: any-sync is **E2EE by default** — backup nodes hold ciphertext they
cannot read (`research/260614-localfirst-workspaces-deep-dive/findings.md` §1), and it is
**P2P** (UC-65). **Trilium** refines the dimension to **per-item**: protected (encrypted)
notes coexist with plaintext notes in one shard, so opacity is per-note, not whole-shard
(`research/260614-trilium-deep-dive/findings.md` §6).
**Priority:** Later
### UC-62 — Attach a block-graph-on-plain-files shard
**Actor:** Maintainer
**Goal:** Attach a Logseq-style local outliner — block-graph semantics stored as plain
Markdown/Org files — preserving its in-file block IDs, block/page properties, and outline
tree, with a derivable query index.
**Source:** logseq, intent
**Notes:** Logseq is **file-over-app *and* block-graph**: blocks carry an in-file
`id:: <uuid>` property, `((uuid))` refs, and `key:: value` properties, with a DataScript
graph **derived** from the files (`research/260614-logseq-deep-dive/findings.md` §1§2).
The addressing **sweet spot** — block-level *and* git-diffable (UC-51) — resolving the
Roam(DB-minted)/Obsidian(page-level) tension. Attach **file-store direct with a Logseq
format profile** (parse `id::`/`((uuid))`/`key::`/outline) or via the in-app plugin
(`logseq.Editor`/`logseq.DB`). Distinct from UC-50 (Roam: block-DB, not files) and UC-53
(Obsidian: page-level, path-addressed). Watch the file→SQLite substrate migration
(UC-43).
**Priority:** Later
### UC-63 — Serve structured queries over a file-backed shard via a derived index
**Actor:** Reader or orchestrator
**Goal:** Run structured queries (tasks, tagged blocks, typed properties) over a
file-backed shard that exposes no native query engine, using an index the orchestrator or
adapter builds and rebuilds from the files.
**Source:** logseq, intent
**Notes:** Logseq proves a **file-backed** store supports rich **Datalog** queries via a
**derived DataScript index** (files canonical, graph derived —
`research/260614-logseq-deep-dive/findings.md` §1, §3). The converse of UC-52 (delegate to
a *native* engine): here shard-wiki **builds** the index over the projection when none
exists. Operationalizes the ZigZag dimensions / Roam-Notion query model on a file shard.
Open: built by adapter (per-shard) or core (over the union); persisted vs rebuilt
(findings §10 Q2). Belongs to the T16 navigation layer + T11 capabilities.
**Priority:** Later
### UC-64 — Attach a CRDT-synced local-first shard with native merge
**Actor:** Maintainer
**Goal:** Attach a CRDT-based local-first store (Anytype any-sync, AFFiNE Yjs, AppFlowy
Yrs) whose backend performs **conflict-free merge itself** — consuming a replica or
sync endpoint, respecting CRDT semantics rather than imposing git/text merge.
**Source:** localfirst-workspaces, intent
**Notes:** The cohort's defining trait: the store is a CRDT, so concurrent edits merge
mathematically (`research/260614-localfirst-workspaces-deep-dive/findings.md` §4). Adds a
**merge-model** capability (`none → git/text → native-CRDT`) — a proposed **thirteenth
spectrum** for the adapter contract (with Joplin's content-opacity twelfth). shard-wiki
must **not** git-merge a CRDT shard: speak the CRDT (hold a replica) for live/writable, or
stay **projection/overlay** that respects CRDT merge. History is the **CRDT update log**,
not git → supplement (UC-36). Attach a **local replica** (offline, full state) or a
self-host sync endpoint (UC-57). Like Joplin, do **not** re-drive the backend's sync
(not-a-file-sync-daemon). Open: embed a CRDT client vs consume snapshots; overlays as CRDT
ops vs out-of-band patches (findings §10 Q1Q2).
**Priority:** Later
### UC-65 — Attach a peer-to-peer / decentralized shard with no single endpoint
**Actor:** Maintainer
**Goal:** Attach a decentralized shard (Anytype any-sync: P2P, E2EE) that has **no single
canonical URL** — binding via a local replica or a named peer/backup node, with content
that may be encrypted.
**Source:** localfirst-workspaces, intent
**Notes:** any-sync is P2P with sync/file/consensus/coordinator nodes; **backup nodes hold
ciphertext they cannot read**; changes signed/encrypted with the user's key
(`research/260614-localfirst-workspaces-deep-dive/findings.md` §1, §4). The shard's
"address" is a space ID + replica/peer/invite, **not a URL** — a new binding mode beside
file-store / in-engine-host / external-API (UC-40/38/57). Combines with **content opacity**
(UC-61): E2EE shards are replica-only / opaque without keys. Open: shard address form;
whether shard-wiki holds keys (findings §10 Q3Q4). Ties [[shard-wiki-auth-in-core-decision]].
**Priority:** Later
### UC-66 — Attach a shard with a DAG hierarchy (note cloning)
**Actor:** Maintainer
**Goal:** Attach a shard where a page may occupy **multiple namespace locations at once**
(Trilium note cloning) — representing the multi-location membership, with page identity
separated from placement, without forcing a single canonical path.
**Source:** trilium, intent
**Notes:** Trilium models a **note** (identity, `noteId`) separately from its **branches**
(placements, `branchId`); a note with several branches is **cloned** into several tree
locations — so the hierarchy is a **DAG, not a tree**
(`research/260614-trilium-deep-dive/findings.md` §2). Breaks UC-22's single-path
assumption. shard-wiki should borrow the **identity ≠ placement** split (one page entity,
N placements/paths/shards) — also the right model for a page appearing under multiple
paths or across shards. The namespace-level form of the clone/reference primitive (T16;
cf. Xanadu/ZigZag clone, UC-44/45). Open: model as one page with N placements vs
transclusion into N locations (findings §11 Q1).
**Priority:** Later
### UC-67 — Preserve inherited and templated attributes (effective vs own metadata)
**Actor:** Reader or maintainer
**Goal:** Project a structured shard whose metadata is **computed** — a page's effective
attributes derive from its own values plus inherited (ancestor) and templated values —
distinguishing **effective vs own** with per-attribute provenance, not flattening.
**Source:** trilium, intent
**Notes:** Trilium attributes (labels `#tag`, typed relations `~relation`) can be
**inherited down the subtree** and injected by **templates** (`~template`), so effective
metadata = own + inherited + templated (`research/260614-trilium-deep-dive/findings.md`
§3). Extends UC-34/UC-58 with a new wrinkle: **metadata is computed, not just stored**
record each attribute's provenance (own / inherited-from / template). Open: materialize
effective values (snapshot) vs compute live from the shard's tree/templates (findings §11
Q2). Templates also reinforce UC-15 (blueprints).
**Priority:** Later
### UC-68 — Attach an engine-maintained bidirectional Git mirror of clean Markdown
**Actor:** Maintainer
**Goal:** Attach a DB-canonical engine that bidirectionally syncs its content to a Git
repo of **clean Markdown + YAML frontmatter** (Wiki.js Git storage module): use the repo
as a file-store shard (with git history) and optionally **write-through by committing
Markdown the engine ingests** — coordinating which side is source of truth, without
double-syncing.
**Source:** wikijs, intent
**Notes:** Wiki.js commits every page change to git as clean `.md`
(`injectMetadata()` prepends YAML frontmatter), bidirectionally with the remote repo
(`research/260614-wikijs-deep-dive/findings.md` §2). Cleaner than Joplin's proprietary
interchange mirror (UC-60) — it is **plain Markdown** — and richer than a read-only native
store (UC-40): the bidirectional ingest makes **git commit a write path** (overlay/patch
as a commit, no API). Caution: the **engine owns the DB↔git sync** — don't double-sync;
coordinate source-of-truth (configurable). Gives **git history natively** (UC-36, adopt
via mirror). Open: mirror-vs-DB source of truth; write-by-commit races (findings §9 Q1).
**Contrast (resolves the race for forge wikis):** a **git-forge wiki** (UC-76) is the
opposite — **git IS the canonical store, not a mirror**, so there is no engine DB↔git sync
to race and **write-by-commit is safe**
(`research/260614-forge-wikis-deep-dive/findings.md` §3). The dilemma here is specific to
*engine-maintained mirrors* (DB canonical), not to git-canonical stores.
**Priority:** Later
### UC-69 — Attach via a typed, introspectable API (schema discovery + selective projection)
**Actor:** Orchestrator / adapter
**Goal:** Attach a shard through a typed, introspectable API (Wiki.js GraphQL) — using
**schema introspection** for capability/shape discovery and **selective-field queries** to
fetch only what a projection needs.
**Source:** wikijs, intent
**Notes:** Wiki.js exposes a **GraphQL** API over all resources
(`research/260614-wikijs-deep-dive/findings.md` §3). Two advantages over a REST
external-API (UC-57): **introspection** = self-describing schema → feeds capability
discovery (T11); **selective fields** = fetch body vs metadata vs tags as needed →
reduces over-fetch (projection efficiency, operational envelope). An external-API
sub-mode beside Notion's REST.
**Priority:** Later
---
### UC-70 — Attach a Federated Wiki site as a shard (page JSON + CORS)
**Actor:** Orchestrator / adapter
**Goal:** Attach a **Federated Wiki** site as a shard via its **page JSON** served over
**HTTP with CORS** (`/<slug>.json`); project its pages and **fork** them to overlay
non-destructively.
**Source:** federation, intent
**Notes:** A fedwiki site is a sovereign server (Node.js, static-file, or serverless)
serving `{ title, story[], journal[] }` page JSON
(`research/260614-federated-wiki-deep-dive/findings.md` §1, §3). A **REST/file-store
hybrid** attachment mode: CORS-readable JSON over HTTP, or a static pile of `.json` files.
Writes are **own-site-only** — to change a remote page you **fork** it (UC-26), so this
shard is naturally a read/project + overlay target, never silent remote mutation. Feeds
SHARD-WP-0002 T14 (attachment mode), T11 (capability profile).
**Priority:** Later
### UC-71 — Coordination journal as an append-only semantic-action log with provenance
**Actor:** Core orchestrator
**Goal:** Model the coordination journal as a **per-page append-only log of semantic
actions** (`create`/`add`/`edit`/`move`/`remove`/`fork`) carrying **provenance entries**
(fork records the source site), with the page state **derived by replaying** the log and
divergence **located by comparing** logs.
**Source:** federation, intent
**Notes:** Directly adopts the fedwiki **journal** shape — the story is a materialized
view of the journal, fork entries serialize a **provenance DAG**, and per-entry sequence
numbers make the fork cut-point identifiable
(`research/260614-federated-wiki-deep-dive/findings.md` §2, §6). This is concrete prior art
for INTENT's coordination journal: a **third merge model** beside git 3-way and CRDT
auto-merge — a coarse semantic op-log applied manually via fork. Feeds SHARD-WP-0002 T13
(history portability / merge model) and T1T5 (federation).
**Priority:** Later
### UC-72 — Federate by fork-with-provenance across a neighborhood / chorus
**Actor:** Reader / curator
**Goal:** Assemble a **union from sovereign peer shards** discovered by **link and fork**
(a *neighborhood*) or by an explicit **roster**, **search across that set**, and preserve a
**chorus of co-equal, provenance-linked versions** without forcing a canonical — pulling
another's changes by forking them.
**Source:** federation, intent
**Notes:** Fedwiki's neighborhood (dynamic, link/fork-discovered) vs roster (curated)
membership and "chorus of voices" no-canonical stance
(`research/260614-federated-wiki-deep-dive/findings.md` §3, §4) model
**union-without-erasure** at the coordination layer: divergence is normal and visible,
reconciliation is an explicit human/policy step (mechanism over policy). Open: does a
chorus compose with shards that assert a canonical? Feeds SHARD-WP-0002 T1T5; relates
UC-05/UC-27 (union/chorus), UC-26 (fork).
**Priority:** Later
### UC-73 — Attach a typed entity-statement (RDF) knowledge-graph shard
**Actor:** Orchestrator / adapter
**Goal:** Attach a **Wikibase** instance as a **typed entity-statement shard** — items and
properties, statements = claim + qualifiers + references + rank — and project entities to a
rendered page view (lossy to Markdown) **without flattening away the graph**.
**Source:** wikiengines, intent
**Notes:** The **structure far-end** beyond Notion DB / XWiki XObjects / Trilium relations:
a true typed knowledge graph with `somevalue`/`novalue` known-unknowns
(`research/260614-wikibase-deep-dive/findings.md` §1). Content **is not Markdown** — render
is a lossy projection (UC-55), so attach as a structured shard and either keep the graph as
the canonical payload (T12) or offer a rendered view, never a silent flatten. Feeds
SHARD-WP-0002 T12 (typed-graph page payload), T16 (stable opaque identity).
**Priority:** Later
### UC-74 — Graph-query the union (SPARQL) and federate queries across endpoints
**Actor:** Reader / analyst
**Goal:** Query graph-capable shards with a **graph query language (SPARQL)** and **federate
queries across endpoints** (`SERVICE`) — a query-time cross-shard join distinct from
structural (fork/neighborhood) federation.
**Source:** wikiengines, intent
**Notes:** SPARQL over the RDF projection (Wikidata Query Service / Blazegraph) is the
**native-query far-end** above Roam/Logseq datalog and Notion filters (UC-52); `SERVICE` is
a **query-time federation** primitive beside fedwiki's structural federation (UC-72)
(`research/260614-wikibase-deep-dive/findings.md` §2). Open: union-level common query vs
pass-through to graph-capable shards. Feeds SHARD-WP-0002 native-query tiering; relates
UC-63 (derived index — WDQS is one).
**Priority:** Later
### UC-75 — Preserve statement-level provenance (references + rank)
**Actor:** Core orchestrator
**Goal:** Preserve **provenance at the assertion level** — references and **rank** attached
to each *statement*, not just per page or per shard — so contradictory values can coexist
with a curation signal.
**Source:** wikiengines, intent
**Notes:** Wikibase attaches **references** (sources) and a **rank**
(`preferred`/`normal`/`deprecated`) to each statement
(`research/260614-wikibase-deep-dive/findings.md` §1, §5) — provenance granularity **finer**
than shard-wiki's per-page model, and the *structured* analogue of fedwiki's chorus (UC-72)
and "view multiple versions" (UC-27). The page model + coordination journal should **allow**
sub-page/per-assertion provenance even if MVP records per page. Enriches UC-24; feeds
SHARD-WP-0002 T12 + provenance model.
**Priority:** Later
### UC-76 — Attach a git-forge wiki by cloning its dedicated wiki repo
**Actor:** Orchestrator / adapter
**Goal:** Attach a **Gitea / GitLab / GitHub wiki** by **cloning its dedicated
`<repo>.wiki.git`** — Markdown files are pages, the **git log is the coordination journal**,
and **commit/push is the write path** with no engine to race.
**Source:** wikiengines, intent
**Notes:** A forge wiki is a *separate git repo of Markdown*
(`research/260614-forge-wikis-deep-dive/findings.md` §1, §3) — the **home case**: page
model, history, and journal map 1:1 to shard-wiki's medium with minimal adapter. Unlike a
Wiki.js engine-maintained mirror (UC-68), **git IS the canonical store**, so write-by-commit
is safe (resolves catalog open-Q22). The **universal** attach path across all three forges.
INTENT names Gitea wikis explicitly. Feeds SHARD-WP-0002 T14 (file-store attach), T11.
**Priority:** MVP
### UC-77 — Attach/write a forge wiki via the forge's wiki API (capability varies)
**Actor:** Orchestrator / adapter
**Goal:** Attach or write a forge wiki via the **forge's wiki API** (GitLab Wikis API,
Gitea wiki endpoints) where git-clone is unavailable or API-write is preferred — with a
**git-only fallback** for forges lacking a wiki API (**GitHub**).
**Source:** wikiengines, intent
**Notes:** Capability **varies by forge**: GitLab and Gitea expose REST wiki endpoints
(list/get/create/edit/delete); **GitHub has no wiki content API** — git-only
(`research/260614-forge-wikis-deep-dive/findings.md` §2). The adapter models the API as an
**optional capability** over the universal git path; both converge on one git history. An
external-API host sub-mode (UC-38) beside the file-store attach (UC-76). Feeds
SHARD-WP-0002 T11 (capability flag), T14 (binding).
**Priority:** Later
### UC-78 — Attach a single-file self-contained wiki (whole-file write granularity)
**Actor:** Orchestrator / adapter
**Goal:** Attach a **single-file self-contained wiki** (a TiddlyWiki HTML file that bundles
both content and the app engine) as one shard — **parse the tiddler store out of the
container**, project pages, and treat **writing as rewriting the whole file**.
**Source:** wikiengines, intent
**Notes:** Classic TiddlyWiki is *one HTML file* = engine + every tiddler
(`research/260614-tiddlywiki-deep-dive/findings.md` §1) — the **portability and
write-granularity extreme**. Write granularity is **whole-file** (the coarsest tier): an
overlay to any one page still rewrites the entire artifact, so per-page atomicity does not
exist (T11) — model overlays/locks accordingly, or require the Node.js **`.tid`
file-per-tiddler** substrate for fine-grained write-through and keep single-file as
read/projection/backup. Treat the HTML as a **container format** (extract content tiddlers,
ignore the embedded engine). Feeds SHARD-WP-0002 T11 (whole-file tier), T14 (single-file vs
`.tid` binding; cf. UC-43/UC-62).
**Priority:** Later
### UC-79 — Attach a git-backed compile-to-static wiki (source is the shard)
**Actor:** Orchestrator / adapter
**Goal:** Attach a **compile-to-static** wiki (ikiwiki) where the **git Markdown source is
the shard** and the **compiled static HTML is a derived publish/projection**; optionally
participate in **git-distributed clone federation** with change-**pings**.
**Source:** wikiengines, federation, intent
**Notes:** ikiwiki compiles a VCS-backed (git) Markdown tree to static HTML; web edits are
commits, so git is canonical and HTML is regenerable build output
(`research/260614-ikiwiki-deep-dive/findings.md` §1, §3). **Attach the source repo, never
the build output** (the static site is a projection, UC-37/UC-56). Its federation is **git
replication + an XML-RPC pinger** (notify a peer to pull/rebuild, UC-31) — a third
federation flavor beside fedwiki fork/journal (UC-72) and Wikibase `SERVICE` (UC-74). Shares
the git+Markdown adapter with forge wikis (UC-76). Feeds SHARD-WP-0002 T4 (federation), T6
(publish/projection).
**Priority:** Later
### UC-80 — Attach a SaaS live-doc shard with embedded structured objects
**Actor:** Orchestrator / adapter
**Goal:** Attach a **SaaS live-document shard** (Salesforce Quip) whose pages **mix prose
with embedded live structured objects** (spreadsheets, live apps) via a **REST API with
lossy HTML import/export**, under **enterprise (Salesforce) identity**.
**Source:** wikiengines, intent
**Notes:** Quip is a closed-SaaS document+spreadsheet hybrid — a page is prose interleaved
with **inline spreadsheets/live apps**, reachable only by REST, content crossing as **HTML**
(lossy to Markdown; embedded objects degrade) (`research/260614-quip-deep-dive/findings.md`
§1, §2). Generalizes the external-API mode (UC-57) with an **HTML payload** variant beside
Notion block-JSON and Wiki.js GraphQL, and adds **inline embedded structured objects** to
the page model (UC-55/UC-58) — surface them with provenance, never silent-flatten (UC-59).
Honor **Salesforce ACL** (UC-06); default to read/projection/overlay given rate limits +
lossy export. Feeds SHARD-WP-0002 T11 (payload-format + content-opacity), T12 (inline
objects), T14.
**Priority:** Later
### UC-81 — Attach a DB-backed wiki with no file store/API by reading its store directly
**Actor:** Maintainer / adapter
**Goal:** Attach a **relational-DB-backed wiki with no file store and no content API**
(MojoMojo) by **reading its database directly** — mapping the **page + version tables** to
the wiki page model and **importing DB-resident history** to the coordination journal.
**Source:** wikiengines, intent
**Notes:** MojoMojo is a Perl Catalyst / DBIx::Class app whose pages, path tree, and full
revision history live in **SQL tables** (`page`/`page_version`/`content`/`attachment`); the
body is **Markdown in a column** (`research/260614-mojomojo-deep-dive/findings.md` §1, §2).
The **direct-DB-read** binding is the archetype for DB-backed engines lacking file/API
access (HTML scrape is the lossy fallback). **DB version rows** are a third history source
beside git commits and RCS files (T13). Caution: reading a third-party schema is a
**versioned coupling** that can drift across engine versions (UC-43); writing by direct DB
risks app invariants → default read/projection/overlay. Feeds SHARD-WP-0002 T14 (direct-DB
binding), T13.
**Priority:** Later
### UC-82 — Attach a minimal flat-file wiki as the graceful-degradation baseline
**Actor:** Maintainer / adapter
**Goal:** Attach a **minimal flat-file wiki** (plain-text page files + a simple revision
directory, Oddmuse) as the **graceful-degradation baseline** — the **floor** of the
capability profile — surfacing **partial/truncated history** honestly.
**Source:** wikiengines, c2, intent
**Notes:** Oddmuse is one Perl CGI script over plain-text page files (`page/`) with recent
revisions in `keep/` (older may be expired), no DB/API
(`research/260614-oddmuse-deep-dive/findings.md` §1, §2). The **minimal profile**:
file-store, page granularity, plain-text, **possibly-truncated** history, no query/structure,
open editing — every richer shard in the matrix is measured against this floor. The adapter
advertises a **sparse profile**; the orchestrator degrades to read/projection/overlay/backup
and must report history as **partial** when `keep/` is truncated (provenance honesty, UC-24).
Feeds SHARD-WP-0002 T11 (minimal/floor capability profile), T13 (partial-history import).
**Priority:** Later
---
## B. Knowledge work and collaboration
*Patterns from c2 social conventions and yawex authoring workflows.*
### UC-08 — Quick idea capture
**Actor:** Contributor
**Goal:** Capture a thought as a page and link to related pages, including ones
that do not exist yet.
**Source:** c2
**Notes:** c2 *incremental* and *open* design principles; Wiki = "quick web."
Markdown-first wikilink/red-link extension (yawex TRANSFORM) applies.
**Priority:** MVP
### UC-09 — Sandbox first edit
**Actor:** New contributor
**Goal:** Learn editing mechanics in a safe sandbox without affecting production
pages.
**Source:** c2
**Notes:** c2 `WikiWikiSandbox`, `WelcomeVisitors` onboarding path.
**Priority:** MVP
### UC-10 — Discussion to consensus document
**Actor:** Contributor (often acting as WikiMaster)
**Goal:** Refine a ThreadMode conversation into an unsigned DocumentMode page
that reflects community consensus.
**Source:** c2
**Notes:** ADD / EDIT / SPLIT / CAPTURE thread contributions; prefer rewrite
over stacked clarifications (`DocumentMode`, `GoodStyle`). Mechanism in core
vs reference UI TBD.
**Priority:** Later
### UC-11 — Distill experience into reusable knowledge
**Actor:** Practitioner
**Goal:** Turn field notes, threads, or project experience into durable,
reusable artifacts (patterns, methods, checklists).
**Source:** c2, yawex
**Notes:** c2 `PatternMode`, PPR "People, Projects & Patterns"; yawex blueprint
pages (UC-15). Not an encyclopedia (`WikiIsNotWikipedia`).
**Priority:** Later
### UC-12 — Practitioner field notes
**Actor:** Contributor
**Goal:** Maintain informal, subjective programming and project history that is
explicitly work-in-progress.
**Source:** c2
**Notes:** `InformalHistoryOfProgrammingIdeas`, `WorkInProgress`. Complements
UC-11; distinct from reference-grade documentation in `docs/` or `spec/`.
**Priority:** MVP
### UC-13 — Community presence
**Actor:** Visitor
**Goal:** Signal participation and discover who is active in the information
space.
**Source:** c2
**Notes:** c2 `RecentVisitors`, `PeopleIndex`. Optional attribution at L1+
(`ArchitectureBlueprint` L1 Attributed mode).
**Priority:** Later
### UC-14 — Self-curating knowledge base
**Actor:** Community
**Goal:** Improve collective quality through open editing, refactoring, and
convergent deduplication rather than gatekeeping.
**Source:** c2
**Notes:** `WhyWikiWorks`, `RefactorDontDelete`, `Convergent` design principle.
shard-wiki adds Git history as structural safety net beyond social norms.
**Priority:** MVP
### UC-15 — Create page from blueprint
**Actor:** Author
**Goal:** Instantiate a new page or topic structure from a template, duplicating
an agreed layout or subtree.
**Source:** yawex
**Notes:** yawex blueprint pages. Distinct from UC-08 (blank capture) and UC-10
(refactoring existing discussion). Obsidian's popular **Templater** (4.6M) / **QuickAdd**
(1.9M) plugins show templated creation is a top real-world need
(`research/260614-obsidian-deep-dive/findings.md` §7). **Trilium** templates (`~template`
relation) inject an attribute set + structure into instances — blueprint-as-typed-template
(`research/260614-trilium-deep-dive/findings.md` §3, links UC-67).
**Priority:** Later
### UC-16 — Append or comment without full edit
**Actor:** Author
**Goal:** Add material to a page without replacing the entire body — lightweight
patch, comment, or append workflow.
**Source:** yawex, c2
**Notes:** yawex append/comment; c2 ThreadMode ADD. Maps to overlay model (UC-04)
for read-only/remote shards; direct append where adapter allows.
**Priority:** Later
---
## C. Discovery and navigation
*Derived views and browse patterns from c2 and yawex.*
### UC-17 — Change radar
**Actor:** Reader or maintainer
**Goal:** See what changed recently across pages and who changed it.
**Source:** c2, yawex
**Notes:** c2 `RecentChanges`, `QuickChanges`, `RecentChangesJunkie`; yawex
`RecentChanges` core page. Union scope in UC-05; this UC covers the user need
at any scope.
**Priority:** MVP
### UC-18 — BackLinks navigation
**Actor:** Reader
**Goal:** Find pages that link to the current page.
**Source:** c2, yawex
**Notes:** Link-graph query. Strong core candidate for federated union (UC-05).
**Priority:** Later
### UC-19 — All pages and site map browse
**Actor:** Reader
**Goal:** Survey the full page inventory or hierarchical site structure.
**Source:** c2, yawex
**Notes:** yawex `AllPages`, `SiteMap` core pages; c2 `WikiList`, categories,
`RoadMaps`. Namespace/path model affects presentation (UC-22).
**Priority:** Later
### UC-20 — Full-text search
**Actor:** Reader
**Goal:** Find pages by content keyword or phrase.
**Source:** c2, yawex
**Notes:** yawex `SearchPage`; c2 `FindPage`, `SearchHelper`. Core vs
adapter-provided indexing TBD.
**Priority:** Later
### UC-21 — Serendipitous browse
**Actor:** Reader
**Goal:** Discover unexpected relevant pages without a specific search target.
**Source:** c2
**Notes:** `RandomPages`, `VisualTour`, `LikePages`, `StartingPoints`.
**Priority:** Later
### UC-22 — Namespace and path navigation
**Actor:** Reader or author
**Goal:** Resolve and navigate pages using relative (`../`), absolute (`/`), and
normalized paths within a topic hierarchy.
**Source:** yawex
**Notes:** yawex topics-as-directories; page-resolution state space is
inspiration only for federation design (not inherited as API). ZigZag deep dive: treat
the namespace hierarchy as **one dimension among many** (encoded left-child/right-sibling
as two zz-dimensions), not the privileged structure — consistent with mechanism over
policy; navigate it as one axis via UC-47 (`research/260614-zigzag-deep-dive/findings.md`
§4, §7.1). **Trilium** pushes further: its hierarchy is a **DAG** — a note can sit in
multiple locations (cloning), with **identity (note) separated from placement (branch)**
so there is no single canonical path (UC-66,
`research/260614-trilium-deep-dive/findings.md` §2).
**Priority:** Later
### UC-23 — Soft topic creation via red link
**Actor:** Author
**Goal:** Follow a link to a nonexistent page and create it on first write.
**Source:** c2, yawex
**Notes:** c2 `PageName?`; yawex red-`?` link semantics. TRANSFORM to
CommonMark wikilink + red-link extension.
**Priority:** MVP
---
## D. Provenance and page metadata
*yawex `Page::info` and c2 attribution norms.*
### UC-24 — Inspect page provenance
**Actor:** Reader
**Goal:** See source shard, modification time, freshness, editor attribution,
edit count, and whether the page has local overlays or diverges elsewhere.
**Source:** yawex, c2, intent
**Notes:** yawex `Page::info`; c2 optional `UserName` signing. INTENT explicit
provenance principle. Xanadu deep dive: provenance is *structural*, not decorative —
content remembers where it came from and where it is reused (UC-45), built into the
storage model rather than added after the fact
(`research/260614-xanadu-deep-dive/findings.md` §4, §8.1). **Wikibase** pushes provenance
*finer than the page*: **references + rank per statement** let sourced, even contradictory,
values coexist with a curation signal (UC-75,
`research/260614-wikibase-deep-dive/findings.md` §1, §5) — the page model should allow
sub-page/per-assertion provenance even if MVP records it per page.
**Priority:** Later
### UC-25 — Collaborative glossary and precise naming
**Actor:** Community
**Goal:** Build a shared vocabulary of precise page titles and linked terms that
reduce ambiguity across the information space.
**Source:** c2, yawex
**Notes:** c2 flat namespace + `WikiWord` / `Precise` principle; yawex
CamelCase and `[[free links]]`. Markdown-first link semantics TBD.
**Priority:** Later
---
## Traceability
| UC | c2 research | yawex research | federation research | wikiengines research | INTENT |
|----|-------------|----------------|---------------------|----------------------|--------|
| UC-01 | ✓ | | | | ✓ |
| UC-02 | | ✓ | | | ✓ |
| UC-03 | | ✓ | ✓ | | ✓ |
| UC-04 | ✓ | ✓ | ✓ | | ✓ |
| UC-05 | ✓ | ✓ | ✓ | | ✓ |
| UC-06 | | ✓ | | | ✓ |
| UC-07 | | | ✓ | | ✓ |
| UC-26 | | | ✓ | | ✓ |
| UC-27 | | | ✓ | | ✓ |
| UC-28 | | | ✓ | | |
| UC-29 | | | ✓ | | ✓ |
| UC-30 | | | ✓ | | |
| UC-31 | | | ✓ | | ✓ |
| UC-32 | | | ✓ | | ✓ |
| UC-33 | | | ✓ | | ✓ |
| UC-34 | | | | ✓ | ✓ |
| UC-35 | | | | ✓ | ✓ |
| UC-36 | | | | ✓ | ✓ |
| UC-37 | | | | ✓ | ✓ |
| UC-38 | | | | ✓ | ✓ |
| UC-39 | | | | ✓ | ✓ |
| UC-40 | | | | ✓ | ✓ |
| UC-41 | | | | ✓ | ✓ |
| UC-42 | | | | ✓ | ✓ |
| UC-43 | | | | ✓ | ✓ |
| UC-44 | | | ✓† | | ✓ |
| UC-45 | | | ✓† | | ✓ |
| UC-46 | | | ✓† | | ✓ |
| UC-47 | | | ‡ | | ✓ |
| UC-48 | | | ‡ | | |
| UC-49 | | | ‡ | | ✓ |
| UC-50 | | | | § | ✓ |
| UC-51 | | | | § | ✓ |
| UC-52 | | | | § | ✓ |
| UC-53 | | | | ¶ | ✓ |
| UC-54 | | | | ¶ | ✓ |
| UC-55 | | | | ¶ | ✓ |
| UC-56 | | | | ¶ | ✓ |
| UC-57 | | | | ◊ | ✓ |
| UC-58 | | | | ◊ | ✓ |
| UC-59 | | | | ◊ | ✓ |
| UC-60 | | | | ‖ | ✓ |
| UC-61 | | | | ‖ | ✓ |
| UC-62 | | | | ※ | ✓ |
| UC-63 | | | | ※ | ✓ |
| UC-64 | | | | ⌘ | ✓ |
| UC-65 | | | | ⌘ | ✓ |
| UC-66 | | | | ⊕ | ✓ |
| UC-67 | | | | ⊕ | ✓ |
| UC-68 | | | | ⚓ | ✓ |
| UC-69 | | | | ⚓ | ✓ |
| UC-70 | | | ✓⊞ | | ✓ |
| UC-71 | | | ✓⊞ | | ✓ |
| UC-72 | | | ✓⊞ | | ✓ |
| UC-73 | | | | ⬡ | ✓ |
| UC-74 | | | | ⬡ | ✓ |
| UC-75 | | | | ⬡ | ✓ |
| UC-76 | | | | ⎇ | ✓ |
| UC-77 | | | | ⎇ | ✓ |
| UC-78 | | | | ⊡ | ✓ |
| UC-79 | | | ✓ | ⊟ | ✓ |
| UC-80 | | | | ◧ | ✓ |
| UC-81 | | | | ⊙ | ✓ |
| UC-82 | ✓ | | | ⊚ | ✓ |
| UC-08 | ✓ | | |
| UC-09 | ✓ | | |
| UC-10 | ✓ | | |
| UC-11 | ✓ | ✓ | |
| UC-12 | ✓ | | |
| UC-13 | ✓ | | |
| UC-14 | ✓ | | ✓ |
| UC-15 | | ✓ | |
| UC-16 | ✓ | ✓ | |
| UC-17 | ✓ | ✓ | |
| UC-18 | ✓ | ✓ | |
| UC-19 | ✓ | ✓ | |
| UC-20 | ✓ | ✓ | |
| UC-21 | ✓ | | |
| UC-22 | | ✓ | |
| UC-23 | ✓ | ✓ | |
| UC-24 | ✓ | ✓ | ✓ |
| UC-25 | ✓ | ✓ | |
### c2 synthesis mapping
| Research ID | Catalog UC |
|-------------|------------|
| UC-C2-01 Quick idea capture | UC-08 |
| UC-C2-02 Collaborative glossary | UC-25 |
| UC-C2-03 Discussion → consensus doc | UC-10 |
| UC-C2-04 Pattern mining | UC-11 |
| UC-C2-05 Community guest book | UC-13 |
| UC-C2-06 Change radar | UC-17 |
| UC-C2-07 Self-curating knowledge base | UC-14 |
| UC-C2-08 Sandbox learning | UC-09 |
| UC-C2-09 Serendipitous browse | UC-21 |
| UC-C2-10 Practitioner field notes | UC-12 |
| UC-C2-11 Team memory for methods | UC-11, UC-12 |
| UC-C2-12 Soft creation of missing topics | UC-23 |
### yawex KEEP mapping
| yawex KEEP item | Catalog UC |
|-----------------|------------|
| Derived views (BackLinks, RecentChanges, AllPages, SiteMap, Search) | UC-05, UC-17UC-20 |
| Topic = namespace hierarchy | UC-22 |
| Append/comment workflow | UC-04, UC-16 |
| Blueprint pages | UC-15 |
| Provenance hooks | UC-24 |
| Page classes (local/global/virtual) | UC-02, UC-03 (shard roles) |
| Wikilink / red-link semantics | UC-08, UC-23, UC-25 |
### federation research mapping
| Research ID (findings §7) | Catalog UC |
|---------------------------|------------|
| UC-FED-01 Fork page from remote shard | UC-26 |
| UC-FED-02 View multiple versions of equivalent page | UC-27 |
| UC-FED-03 Carry forward from closed/archived shard | UC-28 |
| UC-FED-04 Remix with portable attribution | UC-29 |
| UC-FED-05 Time-bounded collaboration space | UC-30 |
| UC-FED-06 Subscribe to remote shard changes | UC-31 |
| UC-FED-07 Transclude remote span | UC-32 |
| UC-FED-08 Git-branch information space | UC-33 |
### wikiengines mapping
| Engine-landscape finding | Catalog UC |
|--------------------------|------------|
| Structured/semantic engines (Semantic MediaWiki, XWiki) — pages as queryable objects | UC-34 |
| Coarse write granularity (TiddlyWiki single-file; whole-space DB writes) | UC-35 |
| Internal-only revision history (Confluence, MediaWiki) needs portable git history | UC-36 |
| Static exports / read-only archives (MediaWiki XML dump, archived C2, HTML mirror) | UC-37 |
| Engine hosts adapter via native extension API (XWiki components/REST/UIX) | UC-38 |
| Wiki-as-application-platform, bodiless typed pages (XWiki AppWithinMinutes/XObjects) | UC-39 |
| Attach a file-backed engine's on-disk store directly (TWiki data dir, DokuWiki) | UC-40 |
| Import an engine's native file history (TWiki RCS `.txt,v`) into the journal | UC-41 |
| Lossless syntax translation for a non-Markdown shard (Foswiki WysiwygPlugin TML↔HTML) | UC-42 |
| Tolerate a shard's storage-backend swap (Foswiki RCS↔PlainFile) under stable identity | UC-43 |
Note: the landscape scan mostly **reinforced** existing UCs and the L0→L4 ladder
rather than adding scenarios — its primary yield is adapter-contract constraints
(`research/260608-wikiengines-overview/findings.md` §3, §5), tracked in
`workplans/SHARD-WP-0002-federation-architecture.md`. UC-34UC-37 are the
attachment scenarios it surfaced. UC-38UC-39 come from the **XWiki deep dive**
(`research/260613-xwiki-deep-dive/findings.md` §7); UC-40UC-41 from the **TWiki
deep dive** (`research/260613-twiki-deep-dive/findings.md` §7), which also enriched
UC-06 (TWiki per-topic ACL → yawex), UC-34 (file-embedded `%META%`), UC-36 (RCS vs
DB history), and UC-38 (TWiki plugin handlers as an adapter host). UC-42UC-43 come
from the **Foswiki deep dive** (`research/260613-foswiki-deep-dive/findings.md` §8),
which also enriched UC-39 (MetaDataPlugin multi-record), UC-40 (PlainFile store), and
logged the `Foswiki::Store` versioned interface as **adapter-contract prior art** for
`SHARD-WP-0002` (no UC — architecture).
### xanadu mapping
(† UC-44UC-46 are placed in the **federation** matrix column as the nearest existing
source; their true lineage is the **Xanadu deep dive**,
`research/260614-xanadu-deep-dive/findings.md`.)
| Xanadu mechanism (findings §) | Catalog UC |
|-------------------------------|------------|
| EDL/xanadoc — document as a manifest of span references, not content (§2) | UC-44 |
| Content "knowably in more than one place," remembers its appearances (§4) | UC-45 |
| Version/document comparison by span-set intersection, content identity (§5) | UC-46 |
| Content-identity, bidirectional transclusion (§4) | UC-32 (enriched) |
| Path-independent equivalence detection for parallel versions (§5) | UC-27 (enriched) |
| Transcopyright — reuse terms travel with the reference (§6) | UC-29 (enriched) |
| Structural provenance — content remembers origin and reuse (§4, §8.1) | UC-24 (enriched) |
Note: Xanadu is **conceptual prior art, not a candidate shard backend** — it never
shipped at scale and there is nothing to attach. Its yield is *mechanism*:
**reference-not-copy** documents (validating projection + overlay + union),
content-identity transclusion, and the still-open **portable span-address** problem
(tumblers), logged as adapter-contract architecture for `SHARD-WP-0002` (span
addressing as an adapter capability; content fingerprint; composition manifests;
reuse-terms metadata — `research/260614-xanadu-deep-dive/findings.md` §10). The dive
also recorded **design-bug boundaries**: shard-wiki **rejects** Xanadu's
single-global-docuverse premise, single-canonical-instance model, and baked-in economic
policy (findings §8.2), as these violate shard sovereignty, parallel-version support
(UC-27), and mechanism-over-policy.
### zigzag mapping
(‡ UC-47UC-49 are placed in the **federation** matrix column as the nearest existing
source; their true lineage is the **ZigZag deep dive**,
`research/260614-zigzag-deep-dive/findings.md`.)
| ZigZag / zzstructure mechanism (findings §) | Catalog UC |
|---------------------------------------------|------------|
| Each relationship is a first-class **dimension**; a page is a cell at many ranks (§2, §5) | UC-47 |
| **H-view** — pivot two dimensions into a cross-tab (§3) | UC-48 |
| **Genealogy** as a functional dimension fitting a zz-rank (§4, §5) | UC-49 |
| Hierarchy is **one dimension among many** (left-child/right-sibling) (§4, §7.1) | UC-22 (enriched) |
| Derived views = **dimensions + rasters** under one vocabulary (§5) | UC-05 (enriched; anchors UC-17UC-20) |
| Fork/remix records a navigable genealogy edge (§9) | UC-26, UC-29 (enriched) |
| **Clone** = "same content in many places" — converges with transclusion (§5) | links UC-32, UC-44/45 |
Note: ZigZag is **a data model + visualization paradigm, not a candidate shard
backend.** Recommendation recorded in the dive: adopt zzstructure as a **navigation /
visualization / indexing lens** — a *derived dimensional projection* over the union,
like BackLinks today — and **reject it as the storage substrate**
(`research/260614-zigzag-deep-dive/findings.md` §6, §7.2). Git and sovereign shards
remain canonical (INTENT Stability Note). The many-to-many hyperlink graph does **not**
fit zzstructure's one-neighbour-per-dimension rule and stays a separate graph index.
Architecture logged for `SHARD-WP-0002`: a dimensional projection layer; genealogy
edges in the coordination journal; clone↔transclusion as a possible shared primitive
(findings §9). Pairs with the Xanadu dive (clone ↔ transclusion convergence).
### roam mapping
(§ UC-50UC-52 are placed in the **wikiengines** matrix column as the nearest existing
source — Roam is a shipped tool — but their true lineage is the **Roam deep dive**,
`research/260614-roam-deep-dive/findings.md`.)
| Roam mechanism (findings §) | Catalog UC |
|-----------------------------|------------|
| Block-graph DataScript DB; page = `:node/title` node, blocks = spans (§2, §6) | UC-50 |
| `:block/uid` — shipped stable sub-page address (§2, §7) | UC-51 |
| Derived views = Datalog queries over the graph (§4) | UC-52 |
| Block embeds = shipped live transclusion by uid (§3) | UC-32 (enriched; + UC-44/45) |
| `key:: value` attributes + Datalog = structured/typed pages (§3, §4) | UC-34 (enriched; + UC-39) |
| Roam Depot `onload/onunload` + `roamAlphaAPI` = engine-hosts-adapter template (§5) | UC-38 (enriched) |
| Block-level write granularity = the fine extreme (§6) | UC-35 (enriched) |
| Hosted history is internal-only, not portable Git (§6, §8.2) | links UC-36 |
Note: Roam is the **modern bookend** to the Nelson dives — where Xanadu and ZigZag are
unbuilt ideals, Roam *shipped* fine-grained addressing, transclusion, bidirectional
links, and a queryable structured space. Its payoff is **empirical evidence** on
shard-wiki's open questions (span addressing is tractable via native block IDs;
transclusion is a data-layer capability; derived views are queries —
`research/260614-roam-deep-dive/findings.md` §7). **Boundary recorded:** Roam is *one
candidate shard* — DB-backed / API-attached (the XWiki family, not the file-store
family), block-first, with no portable Git history — **mapped into** shard-wiki's
Markdown-first page model, not adopted as a substrate and never the federation layer
(findings §8.2). Architecture logged for `SHARD-WP-0002` (T14): native-span-ID and
native-query capabilities, block↔page mapping, and Roam as a second
engine-hosts-adapter exemplar alongside XWiki.
### obsidian mapping
(¶ UC-53UC-56 are placed in the **wikiengines** matrix column as the nearest existing
source — Obsidian is a shipped tool — but their true lineage is the **Obsidian deep
dive**, `research/260614-obsidian-deep-dive/findings.md`.)
| Obsidian mechanism (findings §) | Catalog UC |
|---------------------------------|------------|
| File-over-app vault; cleanest file-backed Markdown shard, dual-attachable (§1, §4) | UC-53 (new); enriches UC-40, UC-02, UC-38 |
| Dataview/Tasks: a page materialized from a query (§7) | UC-54 (new) |
| Excalidraw/Canvas/attachments: non-Markdown content (§7) | UC-55 (new) |
| Obsidian Publish/Quartz: outbound publish (§7) | UC-56 (new) |
| In-file `^block-id` / heading anchors = git-diffable opt-in span IDs (§2) | UC-51 (enriched) |
| YAML frontmatter/properties = git-diffable in-file structured data (§3) | UC-34 (enriched) |
| Git plugin (top-7) = bolt-on portable history (§5, §7) | UC-36 (enriched) |
| Query is a plugin (Dataview), not core (§7) | UC-52 (enriched) |
| Importer plugin = import from foreign tools (§7) | UC-28 (enriched) |
| Templater/QuickAdd = templated creation (§7) | UC-15 (enriched) |
| MetadataCache: files-canonical / index-derived (§1, §6) | reinforces UC-05/1720 derived-view model |
#### Plugin-popularity → use-case signal
Per the research brief (let ecosystem popularity inform the catalog). All-time download
ranks read as **demand evidence** — full table in
`research/260614-obsidian-deep-dive/findings.md` §7. Headlines:
- **#1 is drawings** (Excalidraw 6.4M) → non-Markdown content is a *primary* real-world
use, not an edge case → **UC-55**.
- **Query-as-DB** (Dataview 4.4M, Tasks 3.6M) is top-tier but an *add-on* → query is an
adapter/plugin capability (**UC-52**) and motivates query-defined pages (**UC-54**).
- **Git is top-7** (2.7M) → users manually bolt on portable history → direct demand for
the coordination journal (**UC-36**).
- **Sync-to-anywhere** (Remotely Save 2.0M: S3/Dropbox/OneDrive/GDrive/WebDAV) →
demand to connect a vault to the heterogeneous backends INTENT targets — while
reaffirming the **not-a-file-sync-daemon** boundary (attach as shards, don't mirror).
Note: an Obsidian vault is **one file-backed candidate shard** — the cleanest,
INTENT-named, and the file-store counterpart to the DB-backed Roam shard — mapped into
the Markdown-first page model; **not** the federation layer and **not** a file-sync
target (`research/260614-obsidian-deep-dive/findings.md` §8.2). Architecture logged for
`SHARD-WP-0002` (T14): dual attachment mode, consume-native-derived-index capability,
non-Markdown content types in the page model, outbound publish, external-writer
tolerance.
### notion mapping
(◊ UC-57UC-59 are placed in the **wikiengines** matrix column as the nearest existing
source — Notion is a shipped tool — but their true lineage is the **Notion deep dive**,
`research/260614-notion-deep-dive/findings.md`.)
| Notion mechanism (findings §) | Catalog UC |
|-------------------------------|------------|
| Closed hosted SaaS, external-REST-only, rate-limited/eventually-consistent, scoped grant (§4, §6) | UC-57 (new) |
| Database = schema + typed properties + relations + rollups + views (§2) | UC-58 (new) |
| Proprietary block/rich-text, lossy to Markdown (§3) | UC-59 (new) |
| Per-block UUID v4 via REST = store-minted span address (§1) | UC-51 (enriched) |
| Server Postgres + external REST API = block-DB without in-engine hosting (§4) | UC-50 (enriched) |
| Database query API; filtered/linked DBs (§2, §4) | UC-52, UC-54 (enriched) |
| Database-as-pages apex; typed records + relations (§2) | UC-34, UC-39 (enriched) |
| Webhooks (2026) as push transport (§4) | UC-31 (enriched) |
| Internal-only page history, not portable (§4) | UC-36 (enriched) |
| Publish-to-web outbound (§4) | UC-56 (enriched) |
| Scoped, revocable per-integration grant; no silent mutation (§6) | UC-57 + [[shard-wiki-auth-in-core-decision]] |
Note: Notion is the **closed/hosted/schema-rich** extreme and the dive that stress-tests
*graceful degradation*, *no silent remote mutation*, and *Markdown-first that must
degrade*. It adds the **third attachment mode** — external-API-only (full write-through
without in-engine hosting, but bounded by rate limits and eventual consistency) —
alongside file-store (UC-40) and in-engine host (UC-38/50). It also *enforces* no silent
mutation via scoped, revocable per-integration page grants
(`research/260614-notion-deep-dive/findings.md` §6). **Boundary recorded:** one
external-API candidate shard — best as projection/mirror/overlay/backup — not a
substrate and not the federation layer. Architecture logged for `SHARD-WP-0002` (T14):
an operational-envelope capability section (rate limit, consistency class, payload caps,
push-vs-poll), access-grant semantics, a translation-fidelity capability, and the
three-way attachment-mode taxonomy.
### joplin mapping
(‖ UC-60UC-61 are placed in the **wikiengines** matrix column as the nearest existing
source — Joplin is a shipped tool — but their true lineage is the **Joplin deep dive**,
`research/260614-joplin-deep-dive/findings.md`.)
| Joplin mechanism (findings §) | Catalog UC |
|-------------------------------|------------|
| SQLite-local, Markdown-on-sync; per-item files on WebDAV/Nextcloud/S3 (§2) | UC-60 (new) |
| E2EE → ciphertext at rest; content opacity (§3) | UC-61 (new) |
| Store-minted page-level 32-char ID, rename-stable `:/id` links (§1) | UC-51 (enriched) |
| Native store is a DB; attach surface is the sync mirror, not the store (§2) | UC-40 (enriched) |
| Internal revisions, not portable (§1) | UC-36 (enriched) |
| Plugin host + local Data API (localhost:41184, token) (§4) | UC-38 (enriched; links UC-57) |
| Resources (attachments) with IDs (§5) | UC-55 (enriched) |
| Poll sync; conflict notes (keep-both) (§2) | UC-31 (enriched; links UC-07) |
Note: Joplin is the **SQLite-local / Markdown-on-sync** case — its best attach surface is
the **interchange/sync representation** (per-item files on a WebDAV/Nextcloud/S3 target),
offline and app-independent, landing on INTENT's named backends. It adds two findings for
the adapter contract: the **interchange/sync-representation attach surface** (distinct
from native on-disk store UC-40 and app-files UC-53), and **content opacity** (a proposed
twelfth capability spectrum for encrypted-at-rest shards, extending
`research/260614-shard-spectrum-synthesis/findings.md` §2). **Boundary recorded:** Joplin
is a **file-sync daemon over one store**; shard-wiki attaches its **mirror as pages** and
never re-syncs, and treats the DB-local store and encrypted content as opaque
(`research/260614-joplin-deep-dive/findings.md` §6). Architecture logged for
`SHARD-WP-0002` (T11/T14): interchange-format attach, content-opacity field, local-REST
sub-mode, format-aware file-store profiles.
### logseq mapping
(※ UC-62UC-63 are placed in the **wikiengines** matrix column as the nearest existing
source — Logseq is a shipped tool — but their true lineage is the **Logseq deep dive**,
`research/260614-logseq-deep-dive/findings.md`.)
| Logseq mechanism (findings §) | Catalog UC |
|-------------------------------|------------|
| Block-graph semantics on plain MD/Org files; in-file `id::`/`((uuid))`/`key::` (§1§2) | UC-62 (new) |
| Datalog over a **derived** DataScript index built from files (§1, §3) | UC-63 (new) |
| In-file block `id::` = block-level **and** git-diffable addressing (the sweet spot) (§2) | UC-51 (enriched) |
| File→SQLite "DB graph" substrate migration under stable identity (§5) | UC-43 (enriched) |
| Block-graph that is **files, not a DB** — file-store variant of the block-tool family (§1) | UC-50 (enriched) |
| Datalog over a derived index (third path: not native-DB, not plugin) (§3) | UC-52 (enriched) |
| `key:: value` block/page properties in-text (§2) | UC-34 (enriched) |
| Whiteboards (tldraw JSON) = non-Markdown content (§6) | UC-55 (enriched) |
| Block embeds `{{embed ((uuid))}}` = in-file transclusion (§2) | links UC-32 |
Note: Logseq is the **block-graph-on-plain-files** point the other modern tools leave
empty — the bridge between Roam (block-DB) and Obsidian (file-over-app) — and it
**resolves the addressing-spectrum tension**: block-level addressing that is also
git-diffable in-file text (`id::`). It confirms a **file-backed shard can serve rich
Datalog queries via a derived index** (files canonical, graph derived). **Boundary
recorded:** one block-graph-on-files candidate shard (the addressing sweet spot), best
attached file-store-direct with a Logseq **format profile**; not the federation layer;
substrate migrating file→SQLite (UC-43). Architecture logged for `SHARD-WP-0002`
(T11/T14/T16): Logseq format profile, derived-query-index capability, substrate-migration
tolerance, in-file block addressing as the concrete T16 span-address target.
### localfirst-workspaces mapping (Anytype · AFFiNE · AppFlowy)
(⌘ UC-64UC-65 are placed in the **wikiengines** matrix column as the nearest existing
source — these are shipped tools — but their true lineage is the **local-first workspaces
cohort dive**, `research/260614-localfirst-workspaces-deep-dive/findings.md`.)
| Cohort mechanism (findings §) | Catalog UC |
|-------------------------------|------------|
| CRDT store with native conflict-free merge (any-sync / Yjs / Yrs) (§4) | UC-64 (new) |
| P2P, no single canonical endpoint; E2EE (Anytype any-sync) (§1, §4) | UC-65 (new) |
| CRDT update log ≠ portable git history → supplement (§4) | UC-36 (enriched) |
| One block set as page / canvas / DB views (AFFiNE) (§2) | UC-47, UC-48 (enriched) |
| Edgeless canvas / boards / objects = non-Markdown content (§5) | UC-55 (enriched) |
| Self-host sync server (AFFiNE/AppFlowy Cloud) + Anytype open API/MCP (§4, §9) | UC-57 (enriched) |
| Typed object graph / user-editable ontology + Notion-style DBs, local-first (§1, §3) | UC-58 (enriched) |
| E2EE by default; backup nodes hold ciphertext (Anytype) (§1) | UC-61 (enriched) |
| Object/block IDs CRDT-assigned (fine-grained) (§6) | UC-51 (enriched) |
| Lossy Markdown export (§5) | links UC-59 |
Note: Anytype, AFFiNE, and AppFlowy form the **CRDT local-first workspace** family — the
first studied shards whose **store is a CRDT** (the backend merges concurrent edits
itself). This changes the adapter math: shard-wiki must **not impose git/text merge**
(speak the CRDT via a replica, or stay projection/overlay), history is a **CRDT update
log** (supplement), and the attach surface is a **replica or self-host sync endpoint**
Anytype adding **P2P + E2EE** (no single endpoint, opaque without keys). **Boundary
recorded:** CRDT local-first candidate shards — attach a replica/projection as pages,
respect native merge, never re-drive their sync; not substrates and not the federation
layer (`research/260614-localfirst-workspaces-deep-dive/findings.md` §7). Architecture
logged for `SHARD-WP-0002` (T11/T14): a **merge-model** capability (proposed thirteenth
spectrum: `none / git / native-CRDT`), a **CRDT-replica** substrate + **P2P/no-central-
endpoint** attach mode, an **endpoint-model** capability, and MCP as an integration
surface.
### trilium mapping
(⊕ UC-66UC-67 are placed in the **wikiengines** matrix column as the nearest existing
source — Trilium is a shipped tool — but their true lineage is the **Trilium deep dive**,
`research/260614-trilium-deep-dive/findings.md`.)
| Trilium mechanism (findings §) | Catalog UC |
|--------------------------------|------------|
| Note cloning → DAG hierarchy; note (identity) vs branch (placement) (§2) | UC-66 (new) |
| Attributes inherited + templated → effective vs own metadata (§3) | UC-67 (new) |
| DAG / multi-parent vs tree; identity ≠ placement (§2) | UC-22 (enriched) |
| Labels (`#tag`) + typed relations (`~relation`), computed (§3) | UC-34 (enriched) |
| Templates (`~template`) inject attribute sets (§3) | UC-15 (enriched) |
| HTML-native (CKEditor) → HTML↔Markdown lossy translation (§4) | UC-42 (enriched; links UC-59) |
| Per-note encryption (protected notes) = per-item opacity (§6) | UC-61 (enriched) |
| Scripting (code notes) in-app host + ETAPI external REST (§5) | UC-38 (enriched; links UC-57) |
| Render/script notes + attribute queries = dynamic content (§4§5) | links UC-54 |
| Typed relations = knowledge graph (§3) | links UC-58 |
| `noteId`/`branchId` 12-char IDs (§1) | links UC-51 |
Note: Trilium (active fork **TriliumNext**) is a SQLite-local PKB whose standout is **note
cloning** — a **DAG hierarchy** with **note identity separated from placement** (note vs
branch), the namespace-level form of the clone/reference primitive and the clean model for
a page in multiple locations/shards. It also makes **metadata computed** (own + inherited +
templated, UC-67) and refines **content opacity to be per-item** (per-note encryption,
UC-61). HTML-native (lossy to Markdown), dual extension surface (scripting + ETAPI).
**Boundary recorded:** one SQLite-local candidate shard, best attached via ETAPI; not a
substrate and not the federation layer. Architecture logged for `SHARD-WP-0002`
(T11/T12/T14/T15/T16): DAG namespace + identity/placement split, computed/inherited
metadata, per-item content opacity, HTML source model, scripting + ETAPI host surfaces.
### wikijs mapping
(⚓ UC-68UC-69 are placed in the **wikiengines** matrix column as the nearest existing
source — Wiki.js is a shipped engine — but their true lineage is the **Wiki.js deep dive**,
`research/260614-wikijs-deep-dive/findings.md`.)
| Wiki.js mechanism (findings §) | Catalog UC |
|--------------------------------|------------|
| Bidirectional Git storage module → clean Markdown + YAML frontmatter in a repo (§2) | UC-68 (new) |
| GraphQL API: introspectable schema + selective-field projection (§3) | UC-69 (new) |
| Pluggable **storage modules** (Git/FS/S3/Azure) = adapter-contract prior art; modular auth/search/render/editor (§2, §8) | UC-38 (enriched) |
| Git storage = clean Markdown in git — ideal engine-maintained file-store attach (§2) | UC-40 (enriched) |
| Git history natively via the storage module (adopt via mirror) (§2) | UC-36 (enriched) |
| GraphQL external-API variant (typed/introspectable/selective) (§3) | UC-57 (enriched) |
| Multi-format: Markdown primary; HTML/AsciiDoc (§1) | UC-42 (enriched) |
| Path-based rule ACL; delegated auth modules (§4) | UC-06 (enriched; links authz decision) |
| Engine-maintained clean git shard (§2, §5) | links UC-02 |
Note: Wiki.js is the **most shard-wiki-shaped engine** studied — DB-canonical but with a
**pluggable storage-module abstraction** that bidirectionally syncs **clean Markdown to
Git** (also FS/S3/Azure), each provider acting as **backup or source of truth**. That
interface is, with **Foswiki::Store**, concrete **prior art for the adapter contract**
(and the closer one — its medium is Markdown in Git). Its Git mirror is the **ideal
engine-maintained file-store attach** (clean MD + frontmatter + git history) and, being
**bidirectional**, makes **git commit a write path** (UC-68). It also uses **GraphQL**
(introspection → capability discovery; selective fields → efficient projection, UC-69) and
ships **authn-delegated auth modules + path-based rule ACL**. **Boundary recorded:** one
server-engine candidate shard; the Git mirror is the preferred attach surface but the
engine owns the DB↔git sync (don't double-sync); honor its access rules; not the federation
layer. Architecture logged for `SHARD-WP-0002` (T11/T14): storage-module abstraction as a
second adapter-contract prior art, engine-maintained Git mirror as attach+write surface,
GraphQL introspection for capability discovery + selective projection.
### federated-wiki mapping
(⊞ UC-70UC-72 are placed in the **federation** matrix column — Federated Wiki was first
surfaced in `research/260608-federation-concepts/` — but their deepened lineage is the
**Federated Wiki deep dive**, `research/260614-federated-wiki-deep-dive/findings.md`.)
| Federated Wiki mechanism (findings §) | Catalog UC |
|---------------------------------------|------------|
| Page JSON `{title, story[], journal[]}` over HTTP+CORS; static-file sites (§1, §3) | UC-70 (new) |
| Per-page append-only **journal** of semantic actions; story = derived replay; `fork` = provenance entry (§1, §2) | UC-71 (new) |
| **Neighborhood** (link/fork-discovered) + **roster** (curated) + chorus of forks (§3, §4) | UC-72 (new) |
| **fork** = non-destructive copy with source-site attribution (§2, §4) | UC-26 (enriched) |
| Forked journal carries upstream cut-point → carry-forward + re-fork (§2) | UC-28 (enriched) |
| **Happenings** = time-bounded collaboration leaving durable forks (§3) | UC-30 (enriched) |
| Chorus of co-equal, provenance-linked versions; no canonical (§4) | UC-05 / UC-27 (enriched) |
| Story-item (paragraph) write granularity; stable 16-hex item `id` (§1, §5) | links UC-35 |
| Journal-replay op-log = third merge model (vs git 3-way, CRDT) (§5, §8) | links UC-36 / UC-64 |
Note: Federated Wiki is the one studied system whose *core job is shard-wiki's own* — a
**union of pages from sovereign sites preserving provenance, assembled non-destructively**.
It is therefore prior art not for a *shard* but for three of our **pillars**: the
**coordination journal** (its per-page append-only **journal** of semantic actions, with
the **story** as a derived replay view, UC-71), **overlay-before-mutation** (its **fork**
own-site-only writes, source-site attribution, UC-26), and **union-without-erasure** (its
**neighborhood/roster** membership and **chorus** of provenance-linked forks, UC-72). As a
shard it attaches as a **REST/file-store hybrid** (page JSON + CORS, UC-70). **Boundary
recorded:** adopt the *model* (journal shape, fork-with-provenance, neighborhood) not the
client-only union-assembly locus or slug-as-identity; layer our cross-shard identity (T16)
above fedwiki's fork-DAG provenance edges. Architecture logged for `SHARD-WP-0002`
(T1T5, T11, T13, T16): journal-as-coordination-journal, story-item write granularity,
journal-replay as a third merge model, fork entries as identity≠placement provenance edges.
### wikibase mapping
(⬡ UC-73UC-75 are placed in the **wikiengines** matrix column; lineage = the **Wikibase
deep dive**, `research/260614-wikibase-deep-dive/findings.md`.)
| Wikibase mechanism (findings §) | Catalog UC |
|---------------------------------|------------|
| Items/properties + statements (claim+qualifiers+refs+rank); not-Markdown graph (§1) | UC-73 (new) |
| RDF projection + SPARQL (WDQS/Blazegraph) + federated `SERVICE` (§2) | UC-74 (new) |
| References + rank per statement = assertion-level provenance + coexistence (§1, §5) | UC-75 (new) |
| Typed records → typed *graph* entities (§1) | UC-34 (enriched) |
| Inter-record relations → typed graph edges with qualifiers (§1, §2) | UC-58 (enriched) |
| Native query → SPARQL/RDF + federated SERVICE (§2) | UC-52 (enriched) |
| Provenance → statement/value granularity (§1, §5) | UC-24 (enriched) |
| Opaque stable Q/P IDs; labels = annotations; identity ≠ label/placement (§3) | links UC-51 / T16 |
| WDQS = derived SPARQL index over canonical JSON entities via update stream (§3) | links UC-63 |
| Rank: contradictory values coexist with a curation signal (§1, §5) | links UC-27 / UC-72 |
Note: Wikibase (the engine behind **Wikidata**) is the **structure and native-query
far-end** of the studied set — a **typed knowledge graph** where a "page" is a set of
**statements** (claim + qualifiers + **references** + **rank**), not prose, queried with
**SPARQL** over an **RDF** projection (incl. **federated `SERVICE`** cross-endpoint joins).
Three things transfer cleanly: **opaque stable identity with labels-as-annotation** (the
cleanest real instance of identity ≠ placement, T16); **assertion-level provenance**
references + rank let contradictory values coexist with curation (the *structured* chorus,
UC-75/UC-27); and **a derived graph index over a canonical entity store** (WDQS = UC-63 at
scale). **Boundary recorded:** content is **not Markdown** — attach as a structured shard
and render lossily (UC-55/UC-73), never silent-flatten the graph; expose SPARQL as a
graph-query tier (UC-74), not the union default. Architecture logged for `SHARD-WP-0002`
(T12/T16): typed-graph page payload, opaque identity, native-query tiering (SPARQL +
federated SERVICE), sub-page provenance model.
### forge-wikis mapping
(⎇ UC-76UC-77 are placed in the **wikiengines** matrix column; lineage = the **git-forge
wikis deep dive**, `research/260614-forge-wikis-deep-dive/findings.md`.)
| Forge-wiki mechanism (findings §) | Catalog UC |
|-----------------------------------|------------|
| Wiki = separate `<repo>.wiki.git` of Markdown; git log = journal; clone/push = write (§1) | UC-76 (new) |
| Wiki content API varies: GitLab/Gitea yes, GitHub git-only (§2) | UC-77 (new) |
| git **is** the canonical store (not a mirror) → write-by-commit safe (§3) | UC-40 (enriched); resolves UC-68 Q22 |
| Dual-path attach: git clone vs forge wiki API (§2) | UC-02 (enriched) |
| git-IS-store vs Wiki.js engine-maintained git mirror (§3) | UC-68 (enriched) |
| Forge as API host for the wiki resource (GitLab/Gitea) (§2) | UC-38 (enriched) |
| Page = file; sub-page = path; identity = path (§1, §4) | links UC-25 |
| Overlay = branch/commit; forge lacks wiki-MRs → shard-wiki supplies review (§5) | links UC-04 |
Note: The git-forge wikis (Gitea, GitLab, GitHub) are the **home case** — a wiki that is
*literally a separate git repository of Markdown* (`<repo>.wiki.git`), so the **page model,
history, and coordination journal map 1:1** to shard-wiki's medium with a near-zero adapter.
The **git-clone path is universal** (all three); a **wiki content API** is an *optional,
capability-varying* alternative (GitLab/Gitea have one, **GitHub is git-only**) — exactly
the capability-awareness INTENT mandates (UC-77). The decisive contrast with Wiki.js
(UC-68): there the DB is canonical and git is a *mirror* (write carefully, open-Q22); here
**git IS the store**, so **write-by-commit is safe with no engine to race** — which
*resolves Q22 for this case*. **Boundary recorded:** identity = path (cross-shard identity
layered above, like a `wiki/` subdir shard); forge wikis lack wiki-MRs, so the
overlay→review→apply flow is shard-wiki's to provide. Architecture logged for
`SHARD-WP-0002` (T14/T11): `.wiki.git` clone as the canonical file-store attach, wiki API as
an optional per-forge capability, git log adopted directly as the journal.
### tiddlywiki mapping
(⊡ UC-78 is placed in the **wikiengines** matrix column; lineage = the **TiddlyWiki deep
dive**, `research/260614-tiddlywiki-deep-dive/findings.md`.)
| TiddlyWiki mechanism (findings §) | Catalog UC |
|-----------------------------------|------------|
| One HTML file = engine + all tiddlers; save rewrites whole file (§1) | UC-78 (new) |
| Whole-file write granularity = coarsest tier; no per-page atomicity (§1, §6) | UC-35 (enriched) |
| Single HTML file as a container-format file-store shard (§1) | UC-40 (enriched) |
| Tiddler = flat record with arbitrary fields + tags (§2) | UC-34 (enriched) |
| Filter expressions `[tag[x]sort[...]]` = native-query tier (§4) | UC-52 (enriched) |
| Single-file ↔ Node `.tid` file-per-tiddler substrate swap (§3) | UC-43 (enriched); links UC-62 |
| Transclusion `{{tiddler}}` / `{{tiddler!!field}}` (§2) | links UC-32 |
| Identity = `title` (file-local) (§2, §5) | links UC-25 |
Note: TiddlyWiki is the **write-granularity and portability extreme** — a complete wiki
(content **plus** the app engine) in **one self-contained HTML file**, where every save
**rewrites the whole file** (whole-file write granularity, the coarsest tier: no per-page
atomicity — model overlays/locks accordingly). Its Node.js substrate stores **one `.tid`
file per tiddler**, git-diffable and fine-grained — so TiddlyWiki **spans the granularity
spectrum by substrate** exactly as Logseq spans file/DB (UC-62) and UC-43 anticipates. The
tiddler is a **flexible record with arbitrary fields** (UC-34), and **filter expressions**
are a real native-query tier (UC-52). **Boundary recorded:** treat the single HTML file as a
**container format** — extract content tiddlers, ignore the embedded engine; prefer the
`.tid` substrate for fine-grained write-through, single-file as read/projection/backup.
Architecture logged for `SHARD-WP-0002` (T11/T14): whole-file as the coarsest write tier,
single-file-container vs `.tid`-dir dual binding.
### ikiwiki mapping
(⊟ UC-79 lineage = the **ikiwiki deep dive**, `research/260614-ikiwiki-deep-dive/findings.md`;
marked in both federation and wikiengines columns.)
| ikiwiki mechanism (findings §) | Catalog UC |
|--------------------------------|------------|
| VCS(git)-backed Markdown source compiled to static HTML; web edits = commits (§1, §3) | UC-79 (new) |
| `pinger`/`pingee` XML-RPC = notify a peer to pull/rebuild (§2) | UC-31 (enriched) |
| Compile union/shard to a static site = outbound publish (§3) | UC-56 (enriched) |
| Static HTML = read-only regenerable backup (§3) | UC-37 (enriched) |
| Clone/pull/push between instances; wiki = git branch-space (§2) | UC-33 (enriched) |
| `aggregate` (RSS/Atom → pages) = inbound feed projection (§2) | links UC-03 |
| VCS-agnostic backend behind a plugin layer (§1) | links UC-43 |
Note: ikiwiki is a **wiki compiler** — git-canonical Markdown **source** built into **static
HTML** — so it mostly **reinforces** the git-IS-store home case (UC-76/40), but adds two
genuinely new things: **compile-to-static** as a clean *canonical-source vs derived-output*
separation (attach the **source repo**, treat static HTML as a regenerable
projection/publish target, UC-37/UC-56), and a **third federation flavor** — **git
replication + an XML-RPC change-ping** (peers hold clones, merge to reconcile, notify to
pull) beside fedwiki fork/journal (UC-72) and Wikibase `SERVICE` (UC-74). **Boundary
recorded:** never attach the build output as canonical; the pinger is a subscribe/notify
*mechanism* (peers/timing/conflict stay policy). Architecture logged for `SHARD-WP-0002`
(T4/T6/T14): git-replication+ping federation, compile-to-static publish, source-repo attach
sharing the git+Markdown adapter.
### quip mapping
(◧ UC-80 lineage = the **Quip deep dive**, `research/260614-quip-deep-dive/findings.md`.)
| Quip mechanism (findings §) | Catalog UC |
|-----------------------------|------------|
| Closed-SaaS doc + embedded spreadsheets/live apps; REST + HTML import/export (§1, §2) | UC-80 (new) |
| External-API mode with **HTML payload** variant (vs Notion block-JSON, Wiki.js GraphQL) (§2) | UC-57 (enriched) |
| Inline spreadsheets/live apps = non-Markdown content (§1) | UC-55 (enriched) |
| Embedded structured objects within a prose page (§1) | UC-58 (enriched) |
| Internal revisions, API-limited (§2) | UC-36 (enriched) |
| Salesforce-tied enterprise ACL + SSO (§3) | UC-06 (enriched) |
| HTML→Markdown lossy; embedded objects degrade (§2) | links UC-59 |
| Section/anchor HTML splice = mid write granularity (§2) | links UC-35 |
Note: Quip is the **enterprise document-collab** contrast to Notion — a **document +
spreadsheet hybrid** where a page is **prose interleaved with embedded live structured
objects** (spreadsheets, kanban/calendar "live apps"), reachable **only by REST** with
content crossing as **HTML** (lossy to Markdown; embedded objects don't round-trip), gated by
**Salesforce identity/ACL**. It generalizes the external-API mode with an **HTML payload**
variant (beside Notion block-JSON and Wiki.js GraphQL) and pushes the page model toward
**inline embedded structured objects** (not just whole-page-as-record). **Boundary
recorded:** surface embedded spreadsheets/apps **as what they are** with provenance and make
the HTML→Markdown lossiness explicit (never silent-flatten, UC-59); honor Salesforce ACL;
default to read/projection/overlay given rate limits + lossy export. Architecture logged for
`SHARD-WP-0002` (T11/T12/T14): external-API payload-format facet + a "proprietary
lossy-exportable" content-opacity tier, inline-embedded-object page model, enterprise-ACL
binding.
### mojomojo mapping
(⊙ UC-81 lineage = the **MojoMojo deep dive**, `research/260614-mojomojo-deep-dive/findings.md`.)
| MojoMojo mechanism (findings §) | Catalog UC |
|---------------------------------|------------|
| Catalyst/DBIx::Class app; pages + history in SQL tables; no file store/API (§1, §2) | UC-81 (new) |
| Direct relational read (page/version tables) vs file attach (§2) | UC-02 / UC-40 (enriched) |
| DB version rows = history source for the journal (§1, §4) | UC-36 (enriched) |
| Relational page rows + parent/lineage as structure (§1) | UC-34 (enriched) |
| Markdown body in a DB column → extract, minimal translation (§1) | links UC-42 |
| Schema is a versioned coupling that can drift (§4) | links UC-43 |
Note: MojoMojo is the **classic relational-DB-backed wiki** — a Perl Catalyst / DBIx::Class
app whose pages, path tree, and full revision history live in **SQL tables**, with **no file
store and no content API**. It anchors the **direct-DB-read** binding: the canonical store is
a relational schema, and the adapter maps **schema → wiki page model + journal** (the body is
**Markdown in a column**, so extraction not format-translation is the work). **DB version
rows** become a third **history source** beside git commits and RCS files (T13). **Boundary
recorded:** reading a third-party schema is a **versioned coupling** that can drift (UC-43),
and writing by direct DB risks app invariants → default read/projection/overlay; HTML scrape
is the lossy last resort. Architecture logged for `SHARD-WP-0002` (T14/T13/T11): direct-DB
binding (or external-store-via-SQL-schema sub-mode), DB-version-row history import, sparse
"has-readable-DB" capability profile.
### oddmuse mapping
(⊚ UC-82 lineage = the **Oddmuse deep dive**, `research/260614-oddmuse-deep-dive/findings.md`;
also marked in the c2 column for the open-wiki ethos.)
| Oddmuse mechanism (findings §) | Catalog UC |
|--------------------------------|------------|
| Single Perl CGI; plain-text `page/` files + `keep/` revisions; no DB/API (§1, §2) | UC-82 (new) |
| Plain-text file-store at the simple end (§2) | UC-40 (enriched) |
| Open-editing by default (§3) | UC-01 (enriched) |
| `keep/` plain-text revisions, possibly truncated (§2) | UC-36 / UC-41 (enriched) |
| Sparse capability profile = absence is first-class (§3) | links UC-35 (capability-awareness) |
| Partial/truncated history must be surfaced honestly (§4) | links UC-24 |
Note: Oddmuse is the **minimal file-store floor** — one Perl CGI script over plain-text page
files (`page/`) with recent revisions in `keep/` (older may expire), no DB and no API. It is
the **graceful-degradation baseline** (UC-82): every richer shard in the synthesis matrix is
measured against this floor (file-store, page granularity, plain-text, **partial** history,
no query/structure, open editing). Its lesson for the contract is **capability-awareness in
its purest form** — the profile must express **absence** cleanly, and **truncated history**
must be reported honestly (history "begins at", UC-24), never implied as complete. **Boundary
recorded:** degrade to read/projection/overlay/backup; write-through (page + keep-revision
under the lock) only carefully. Architecture logged for `SHARD-WP-0002` (T11/T13): minimal/
floor capability profile, partial-history import with completeness metadata.
---
## Open questions
1. Which UC items are **MVP for L0 standalone** vs requiring federation or L2+?
2. Which derived views (UC-05, UC-17UC-20) are **core orchestrator** vs
**adapter-provided**?
3. Do c2 collaboration patterns (UC-10, UC-14) belong in **core**, **reference
UI**, or **`wiki/` social convention** only?
4. Should UC-12 and `WikiIsNotWikipedia` be elevated into
`ProductRequirementsDocument.md` as explicit product identity?
5. Which federation UCs (UC-26UC-33) are **MVP** vs deferred until
`SHARD-WP-0002` architecture decisions land?
6. Does UC-32 (transclusion) belong in core orchestrator or adapter/UI layer?
7. Is the **dimensional/zzstructure model** (UC-47/48) a public navigation API and UI
paradigm, or only an internal organizing concept for the derived views?
8. How is the **many-to-many link graph** reconciled with the rank-based dimensional
model — clones, a parallel graph index, or both? (ZigZag dive §10.)
9. Is **in-engine adapter hosting** (e.g. a Roam Depot extension for write-through) an
accepted deployment mode generally, or do we restrict API-only backends to
read/projection/overlay-target? (Roam dive §11 Q2; ties UC-38, UC-50.)
10. How does shard-wiki represent **non-Markdown content** (UC-55) — typed asset with a
Markdown stub, opaque blob with provenance, or a pluggable content-type registry?
11. Is a **query-defined page** (UC-54) a core page type, an adapter feature, or a
reference-UI/plugin concern? (Shared with catalog Q7.)
12. Is **external-API-only write-through** under a tight rate limit (Notion) viable at
wiki scale, or do we default such shards to read/projection/overlay/backup? (Notion
dive §10 Q1; ties UC-57.)
13. How are **inter-database relations** (UC-58) represented in the union — typed links
in the link graph, a separate relation index (cf. ZigZag many-to-many), or both?
14. For an **encrypted shard** (UC-61), what is visible without keys (IDs/structure vs
nothing), and does shard-wiki ever hold keys or only treat it as an opaque backup?
15. Is writing to a tool's **sync mirror** (UC-60) ever safe, or are interchange-format
shards read/projection/overlay-only by policy? (Joplin dive §9.)
16. Is the **derived query index** (UC-63) built by the adapter (per-shard) or the core
orchestrator (over the union), and is it persisted or rebuilt? (Logseq dive §10.)
17. When a tool offers **both file and DB substrates** (Logseq), does shard-wiki prefer
the git-diffable file graph or the richer DB graph, and can one binding follow the
migration? (UC-43, UC-62.)
18. For a **CRDT shard** (UC-64), does shard-wiki embed a CRDT client (Yjs/Yrs) to hold a
live replica, or consume periodic snapshots — and are overlays CRDT ops or out-of-band
patches? (Local-first workspaces dive §10.)
19. For a **P2P shard** (UC-65), what is the shard's address (space ID + peer / replica
path / invite-key), and does shard-wiki ever hold E2EE keys or only treat it as an
opaque replica? (UC-61.)
20. For a **DAG/cloned page** (UC-66), is it one page with multiple path placements, or a
page transcluded into multiple locations? Does shard-wiki adopt Trilium's identity ≠
placement (note/branch) split as its own page model? (Trilium dive §11.)
21. Are **inherited/templated attributes** (UC-67) materialized (snapshot) or computed
live from the shard's tree/templates, and how is per-attribute provenance recorded?
22. For an **engine-maintained Git mirror** (UC-68), is the mirror or the engine DB the
source of truth, and how do we write-by-commit without racing the engine's own sync?
23. Should the **coordination journal** (UC-71) adopt fedwiki's exact semantic-action
vocabulary (create/add/edit/move/remove/fork) at item granularity, or an abstract op
set other shards can also emit — and does a **chorus / no-canonical** union (UC-72)
compose with shards that assert a canonical? (Federated Wiki dive §9.)
24. Does shard-wiki model a **typed-graph page** natively (entities + statements, UC-73) or
always project Wikibase to a lossy Markdown/table view (UC-55) — and is **SPARQL/graph
query** (UC-74) a union-level capability or a pass-through to graph-capable shards? At
what granularity is **provenance** recorded — per page (MVP) or per statement (UC-75)?
(Wikibase dive §8.)
25. For a **git-forge wiki** (UC-76/77), when a forge offers **both** git-clone and a wiki
API (GitLab/Gitea), which does the adapter prefer by default — git (universal, full
history) with API as fallback? And does the **code-repo `wiki/` subdir** shard share one
git+Markdown adapter with the **forge wiki repo** shard (parameterized by repo/path), or
stay distinct? Since forge wikis lack wiki-MRs, does shard-wiki supply the
overlay→review→apply layer? (Forge-wikis dive §8.)
26. For a **single-file wiki** (UC-78), does shard-wiki support per-page overlays by
buffering and re-serializing the whole file, or require the Node `.tid` substrate for
write-through and treat single-file as read/projection/backup only? (TiddlyWiki dive §9.)
27. For a **compile-to-static** wiki (UC-79), does shard-wiki ever *drive* the build to
**publish the union** as a static site (act as the compiler), or only attach existing
source repos — and is the **pinger** modeled as shard-wiki's own subscribe/notify
primitive or only recognized when bridging two ikiwiki instances? (ikiwiki dive §8.)
28. For a **SaaS live-doc shard** (UC-80), is an **embedded live spreadsheet** a typed
sub-object with provenance (preferred) or a flattened static Markdown table — can
overlays target a spreadsheet cell or only prose — and given HTML-only lossy interchange,
is Quip ever write-through or read/projection/overlay/backup by default? (Quip dive §8.)
29. Does shard-wiki sanction **direct third-party DB reads** as a binding (UC-81), or
restrict them (schema coupling/drift, UC-43) to a best-effort mode — and is
**write-through by direct DB** ever allowed, or are DB-backed no-API engines
read/projection/overlay/backup only? (MojoMojo dive §7.)
30. How does shard-wiki represent a shard with **partial/truncated history** (UC-82, Oddmuse
`keep/` expiry) in the journal and provenance UI — an explicit "history begins at"
marker / completeness metadata? (Oddmuse dive §7.)
23. How does shard-wiki **honor/surface a shard's path-based access rules** (UC-06) in a
projection without re-implementing its ACL engine? (Wiki.js dive §9.)