generated from coulomb/repo-seed
Promote UC-26 through UC-33 from federation research into UseCaseCatalog. Add SHARD-WP-0002 with ten decision topics (remix primitives, equivalent page identity, history, composition, notification, lifecycle, transclusion, consensus presets, capability matrix) targeting spec/FederationArchitecture.md.
409 lines
20 KiB
Markdown
409 lines
20 KiB
Markdown
# Findings — Federation concepts for decentralized, unified information spaces
|
||
|
||
Date: 2026-06-08 · Status: research draft
|
||
|
||
Scope: federation models that let independently stored knowledge participate in
|
||
a **joined view** without erasing provenance, sovereignty, or backend
|
||
differences. Primary anchor: **Federated Wiki** and Ward Cunningham's
|
||
post-c2 inversion. Secondary: git-backed wikis, ActivityPub wiki extensions,
|
||
Xanadu hypertext patterns, and yawex multi-wiki resolution.
|
||
|
||
**Complements:** `research/260608-c2-wiki-origins/` (federation explicitly
|
||
deferred there) and `research/260608-yawex-prior-art/` (REMOTE/VIRTUAL as
|
||
adapter foreshadowing).
|
||
|
||
---
|
||
|
||
## 1. Why federation (the problem statement)
|
||
|
||
Centralized wikis concentrate **meaning** and **records** on one server:
|
||
|
||
| Problem | Manifestation |
|
||
|---------|---------------|
|
||
| **Ownership** | Contributors build on someone else's host; site shutdown = loss risk |
|
||
| **Consensus pressure** | Early edits must survive notability/deletion fights (Wikipedia model) |
|
||
| **Heat death** | Bounded communities exhaust their charter; maintenance mode → colony collapse |
|
||
| **Reuse friction** | Copy-paste HTML/DB content across sites is slow, lossy, attribution-prone |
|
||
| **Backend lock-in** | One engine, one storage model, one permission model |
|
||
|
||
Federation responses split along two axes:
|
||
|
||
1. **Where records live** — per-user site, per-instance repo, personal pod, mirrored git clone.
|
||
2. **How unity is achieved** — fork + spread, git push/pull, protocol activities, projection/cache, orchestrated union.
|
||
|
||
`shard-wiki` (per `INTENT.md`) targets axis (2) via an **orchestration layer**
|
||
over heterogeneous **shards**, with Git as coordination substrate — not a
|
||
single federation mechanism.
|
||
|
||
---
|
||
|
||
## 2. Federated Wiki (Smallest Federated Wiki / SFW)
|
||
|
||
### 2.1 Historical anchor
|
||
|
||
| Fact | Detail |
|
||
|------|--------|
|
||
| Origin | Ward Cunningham; launched at IndieWebCamp 2011 |
|
||
| Motivation | Regret that c2's 35,000+ pages lived on Ward's server, not contributors' |
|
||
| c2 migration | WikiWikiWeb moved to Federated Wiki ~2015 after read-only period |
|
||
| GitHub lineage | Fork button inspired by GitHub; "radical code sharing" as model |
|
||
| Current code | [github.com/fedwiki/wiki](https://github.com/fedwiki/wiki) (CoffeeScript; active releases through 2025) |
|
||
|
||
Ward's framing (Wired, 2012): the wiki's radical idea was an **edit button on
|
||
every page**; federated wiki's radical idea is a **fork button on every page**.
|
||
|
||
### 2.2 Inverted architecture
|
||
|
||
Traditional wiki vs federated wiki (Caulfield, NWACC 2014, summarizing Ward):
|
||
|
||
```
|
||
Traditional: many people → one server → server owns records → consensus on server
|
||
Federated: many people → many servers → each owns records → browser composes union
|
||
```
|
||
|
||
**Meaning is made in the browser.** The client pulls JSON page records from
|
||
multiple origins (CORS) and presents them as one navigable space. Consensus
|
||
emerges through **which versions spread** across the network, not through a
|
||
single server arbiter.
|
||
|
||
### 2.3 Page model (JSON + journal)
|
||
|
||
From [viki.wiki JSON schema](https://viki.wiki/json-schema.html):
|
||
|
||
```
|
||
page = { title, story, journal }
|
||
story = [ item ] # paragraph-like plugin items
|
||
journal = [ action ] # edit history that reconstructs story
|
||
action.type = create|add|move|edit|remove|fork
|
||
action.site = origin host # present when content came from elsewhere
|
||
```
|
||
|
||
Key properties:
|
||
|
||
| Property | Implication |
|
||
|----------|-------------|
|
||
| **Data files, not DB render** | Fork copies JSON, not scraped HTML — reuse stays structured |
|
||
| **JSON items, not HTML** | Target site re-renders via plugins; display differences don't break remix |
|
||
| **Journal travels with page** | Attribution/history portable; no separate blame log |
|
||
| **Plugin architecture** | Item `type` selects renderer; missing plugins surfaced to user |
|
||
| **Fork action** | Whole-page copy from remote site into local site with provenance |
|
||
| **Item IDs preserved** | Stable anchors through edits; aliasing guards duplicate IDs |
|
||
|
||
### 2.4 Interaction patterns
|
||
|
||
| Pattern | Behavior |
|
||
|---------|----------|
|
||
| **Fork** | Copy remote page to your site; edit locally; original owner may merge back |
|
||
| **Drag-and-drop fork** | Cross-site page transfer in ~15 seconds (OER case) |
|
||
| **Chorus of voices** | Multiple versions of "same" topic coexist; linked, not merged by default |
|
||
| **Neighborhood / river** | Discovery via recent changes across federated sites (e.g. fedwikiriver.com) |
|
||
| **Happening** | Time-bounded collaborative event on a topic-specific subdomain/site |
|
||
|
||
### 2.5 Mike Caulfield — lifecycle and pedagogy
|
||
|
||
Caulfield articulated fedwiki's social model beyond Ward's mechanics:
|
||
|
||
**Kinneavy triangle / knowledge lifecycle** (composition theory):
|
||
|
||
| Phase | Mode | Typical medium | Fedwiki fit |
|
||
|-------|------|----------------|-------------|
|
||
| **I** | Personal capture | Notes, journal | Each person's site |
|
||
| **You** | Dialogic | Conversation, annotation | Fork chains, cross-site references |
|
||
| **It** | Expository | Stable shared article | Spread of refined forks |
|
||
|
||
Fedwiki supports **I → You → It** in one system; centralized wikis force **It**
|
||
(consensus) from the first edit.
|
||
|
||
**Bounded conversations / expected heat death** (2015):
|
||
|
||
- Wiki sites are **bounded conversations**, not permanent monuments.
|
||
- Sites are **expected to die**; valuable material is **forked into the next happening**.
|
||
- **Reverse bit-rot** — Smalltalk-era term Ward revived: objects/pages improve each
|
||
time reused across systems (refactor on fork), defying entropy of abandoned forums.
|
||
- Contrast: colony collapse on centralized forums (Blue Hampshire example) vs
|
||
humane site retirement with selective carry-forward.
|
||
|
||
**OER reuse** (2015): WordPress copy-paste ~10–15 min/page vs fedwiki fork ~15 sec;
|
||
bottleneck is software, not human willingness to remix.
|
||
|
||
**Dissent as feature** (Ogden via Wired): Wikipedia forces one perspective;
|
||
fedwiki enables multiple controversial pages, still linked for exploration.
|
||
|
||
### 2.6 Strengths and limits
|
||
|
||
| Strengths | Limits |
|
||
|-----------|--------|
|
||
| Personal sovereignty over pages | Requires running a site (mitigated by one-click AWS deploy) |
|
||
| Low-friction remix with provenance | Small niche ecosystem |
|
||
| Multi-perspective knowledge | Weak team-governance / permissions story vs enterprise wikis |
|
||
| JSON portability | Plugin fragmentation; non-Markdown item model |
|
||
| Strong conceptual clarity | Not a general adapter layer for arbitrary backends |
|
||
|
||
---
|
||
|
||
## 3. Other federation models
|
||
|
||
### 3.1 Git-backed distributed wikis (ikiwiki pattern)
|
||
|
||
[ikiwiki distributed wikis](https://ikiwiki.info/tips/distributed_wikis/) documents
|
||
a **spectrum of decentralization**:
|
||
|
||
| Level | Setup | Federation mechanism |
|
||
|-------|-------|---------------------|
|
||
| 0 | Single server | None |
|
||
| 1 | HTML mirror | Read-only copy |
|
||
| 2 | Split web + git host | Clone/pull |
|
||
| 3 | Pinger mirrors | Central bare repo + ping-on-edit propagation |
|
||
| 4 | Fully decentralized | Independent wikis push/pull via git to peers |
|
||
|
||
**Branching a wiki** = clone origin read-only (`git://`), edit locally without
|
||
push-back — explicit fork. Conflicts surface as markers in rendered pages.
|
||
|
||
**Relevance to shard-wiki:** Strong alignment with **Git-addressable
|
||
coordination** and **coordination journal** in `INTENT.md`. ikiwiki federates
|
||
*homogeneous* git-backed wikis; shard-wiki must also attach non-git shards
|
||
(Obsidian, WebDAV, Gitea wiki, Coulomb, etc.).
|
||
|
||
**Gollum / GitHub wikis:** Same backing-store idea — pages as files in a repo;
|
||
federation is git sync, not a wiki protocol. Multi-repo Gollum setups are
|
||
operational, not semantic union.
|
||
|
||
### 3.2 ActivityPub wiki federation (XWiki)
|
||
|
||
[XWiki ActivityPub Application](https://extensions.xwiki.org/xwiki/bin/view/Extension/ActivityPub%20Application/)
|
||
(v1.7.x) connects XWiki instances to the **fediverse**:
|
||
|
||
| Capability | Notes |
|
||
|------------|-------|
|
||
| Follow user / wiki actor | Receive Create/Update notifications |
|
||
| Share documents | Push page content to followers; view remote in modal |
|
||
| Messaging / discussions | Note objects threaded as discussions |
|
||
| Like, mention | Social engagement primitives |
|
||
| Webfinger + ActivityPub endpoints | Standard discovery |
|
||
|
||
**Caveats (documented by XWiki):** Federation "not well supported yet" for
|
||
full activity routing; Mastodon mention of Page entities incomplete; security
|
||
signing partial.
|
||
|
||
**Contrast with fedwiki:** ActivityPub federates **activities and notifications**
|
||
between **compatible app instances**; content may be copied on share, but the
|
||
model is social-graph + event stream, not per-user fork sovereignty. Closer to
|
||
**fediverse** than **fedwiki** UX.
|
||
|
||
**Contrast with shard-wiki:** ActivityPub could be an **adapter transport** for
|
||
some shards, but shard-wiki's core is wiki-page semantics (paths, links,
|
||
overlays, provenance), not activity streams.
|
||
|
||
### 3.3 Xanadu / transclusion lineage
|
||
|
||
Ted Nelson's [Project Xanadu](https://en.wikipedia.org/wiki/Project_Xanadu)
|
||
(1960s–) pursued **serious electronic literature** with patterns still relevant:
|
||
|
||
| Pattern | Intent | Modern partial implementations |
|
||
|---------|--------|-------------------------------|
|
||
| **Visible links** | Show destination context, not opaque jumps | Hover previews, Open Graph unfurls |
|
||
| **Parallel documents** | Side-by-side source + derivative | Multi-pane editors (Obsidian, Roam) |
|
||
| **Transclusion** | Live inclusion of remote span with origin pointer | Embeds, block references (weak) |
|
||
| **Transcopyright** | Permissioning for reuse | Mostly unsolved at web scale |
|
||
| **Stable addresses** | Fine-grained, durable pointers | Block UIDs (Roam); URL rot elsewhere |
|
||
| **Bi-directional links** | Backlinks as first-class | Obsidian, Roam, shard-wiki BackLinks UC |
|
||
|
||
Xanadu is **speculative design / pattern language**, not deployable federation.
|
||
Useful for shard-wiki **provenance, transclusion, and link resolution** thinking —
|
||
especially union BackLinks and projection freshness.
|
||
|
||
### 3.4 Personal / local-first wikis (TiddlyWiki, Obsidian)
|
||
|
||
Not federation protocols, but **sovereignty** models:
|
||
|
||
- **TiddlyWiki** — single-file portable wiki; complete user ownership.
|
||
- **Obsidian** — local vault + optional sync; community plugins for publish/remix.
|
||
|
||
Shard-wiki INTENT explicitly lists these as shard participants via adapters.
|
||
Federation is **attachment to a root information space**, not replacing the
|
||
local tool.
|
||
|
||
### 3.5 yawex multi-wiki resolution (cross-reference)
|
||
|
||
From `research/260608-yawex-prior-art/findings.md`:
|
||
|
||
| yawex state | Federation reading |
|
||
|-------------|-------------------|
|
||
| `REMOTE` | Jump to another wiki's page — remote shard navigation |
|
||
| `VIRTUAL` | Local processing, remote content — projection |
|
||
| Multi-wiki config | Multiple named wikis = multiple shards |
|
||
|
||
**Decision already recorded:** inspiration only; shard-wiki designs resolution
|
||
fresh for heterogeneous adapters.
|
||
|
||
### 3.6 Solid / personal data pods (brief)
|
||
|
||
Solid aims at **user-controlled pods** + linked data apps. Distributed wiki
|
||
discussions (forum threads, TiddlyWiki-on-Solid experiments) explore **personal
|
||
wikis on pods** vs **team commons**.
|
||
|
||
| Axis | Solid-style | Fedwiki | shard-wiki |
|
||
|------|-------------|---------|------------|
|
||
| Unit of sovereignty | Pod / user | Site / person | Shard |
|
||
| Unity mechanism | Linked data queries | Browser composition + fork | Orchestrated union + Git journal |
|
||
| Team wiki | Secondary; app-dependent | Weak | Supported via shards + authz |
|
||
|
||
No mature Solid wiki federation standard emerged; treat as **adjacent personal-
|
||
data sovereignty** research, not direct prior art.
|
||
|
||
---
|
||
|
||
## 4. Comparison matrix
|
||
|
||
| Model | Unit of ownership | Unity mechanism | Consensus model | History / provenance | Heterogeneous backends |
|
||
|-------|-------------------|-----------------|-----------------|----------------------|------------------------|
|
||
| **Centralized wiki** (c2, MediaWiki) | Site operator | Single namespace | On-page consensus | Server revision log | No |
|
||
| **Federated Wiki** | Per-site (per person) | Browser pulls JSON; fork | Spread of versions | Journal per page | No (all SFW-shaped) |
|
||
| **ikiwiki distributed** | Per git clone | git push/pull, pingers | Merge conflicts in git | Git commits | No (all ikiwiki) |
|
||
| **ActivityPub (XWiki)** | Per instance | Activity stream | Social follow/share | Activity + page store | No (XWiki only) |
|
||
| **Xanadu** | Document address | Transclusion | Parallel versions | Version trails (concept) | N/A (unbuilt) |
|
||
| **shard-wiki (INTENT)** | Per shard | Orchestrator union | Configurable policy | Git coordination journal + shard history | **Yes** (adapter contract) |
|
||
|
||
---
|
||
|
||
## 5. Glossary (federation track)
|
||
|
||
| Term | Meaning | Primary source |
|
||
|------|---------|----------------|
|
||
| **Fork** | Copy a page (or site branch) to a new home; divergent editing | Fedwiki, git |
|
||
| **Journal** | Ordered actions reconstructing page state; travels with page | Fedwiki JSON schema |
|
||
| **Story** | Array of typed items (paragraph, image, …) forming page body | Fedwiki |
|
||
| **Happening** | Time-bounded fedwiki collaboration on a topic site | Caulfield |
|
||
| **Bounded conversation** | Site with expected end; not infinite commons | Caulfield |
|
||
| **Reverse bit-rot** | Content improves through reuse across contexts | Caulfield / Ward |
|
||
| **Chorus of voices** | Multiple perspectives on same topic, linked | Ward |
|
||
| **Inverted model** | Records distributed; meaning composed client-side | Ward |
|
||
| **Projection** | Local view of remote content without claiming ownership | shard-wiki / yawex VIRTUAL |
|
||
| **Overlay** | Local edit against remote/canonical without immediate mutation | shard-wiki |
|
||
| **Shard** | Independently meaningful page store with own capabilities | shard-wiki |
|
||
| **Coordination journal** | Git-backed change record for an information space | shard-wiki |
|
||
| **Transclusion** | Include live span from elsewhere with origin visible | Xanadu |
|
||
| **Fediverse** | Network of ActivityPub-speaking apps | XWiki AP, Mastodon |
|
||
| **Pinger / pingee** | Edit-triggered mirror refresh between ikiwiki sites | ikiwiki |
|
||
| **Wiki actor** | Entire wiki as ActivityPub actor | XWiki AP |
|
||
|
||
---
|
||
|
||
## 6. Mapping to shard-wiki INTENT (compare, do not equate)
|
||
|
||
### 6.1 Strong resonances
|
||
|
||
| Fedwiki / federation idea | shard-wiki concept | Notes |
|
||
|---------------------------|-------------------|-------|
|
||
| Personal ownership of edits | Shard sovereignty | shard-wiki generalizes beyond per-person sites |
|
||
| Fork with provenance | Overlay + patch flows | shard-wiki separates draft from destructive apply |
|
||
| Journal / history with page | Coordination journal + shard revision | Git journal is space-level; shard retains own history |
|
||
| Browser-composed union | Union of pages across shards | Orchestrator presents coherent graph |
|
||
| JSON not HTML for remix | Markdown-first page model | Different format; same structural intent |
|
||
| Lazy pull from remote | Projection | yawex VIRTUAL; explicit freshness |
|
||
| Chorus of voices | Union without erasure | Show provenance, divergence, equivalents |
|
||
| Bounded conversation | Configurable policy | Mechanism not policy — space may be permanent or ephemeral |
|
||
| Reverse bit-rot on reuse | Reconciliation / sync | Policy-driven; not automatic fork |
|
||
| Derived views (recent, links) | UC-05 union views | BackLinks, RecentChanges across shards |
|
||
|
||
### 6.2 Deliberate divergences (design bugs if conflated)
|
||
|
||
| Fedwiki assumption | shard-wiki correction |
|
||
|--------------------|----------------------|
|
||
| Every participant runs SFW-shaped JSON site | **Adapter contract** for Gitea, folders, Obsidian, WebDAV, engines |
|
||
| Fork = default edit primitive | **Capability-aware**: read-only shards need overlay, not fork |
|
||
| Client composes in browser only | Orchestrator may serve CLI, agents, CI — not browser-only |
|
||
| Per-site = per-person | Shards may be team repos, org wikis, app databases |
|
||
| No central coordination | **Git-addressable coordination layer** per information space |
|
||
| Plugin item types | Markdown-first; engine-specific render is out of core scope |
|
||
| Implicit spread-as-consensus | **Mechanism over policy** — canonical source is explicit config |
|
||
|
||
### 6.3 What shard-wiki adds beyond fedwiki
|
||
|
||
1. **Heterogeneous attachment** — not all shards speak the same page JSON.
|
||
2. **Capability matrix** — read/write/diff/merge/lock/publish per shard.
|
||
3. **Overlay-before-mutation** — respect remote sovereignty and limited backends.
|
||
4. **Semantic wiki sync** — not generic file mirroring.
|
||
5. **Enterprise authz ladder** — L0 open → delegated IAM (without owning identity).
|
||
6. **Divergence detection** — equivalent pages across shards, reconcilable.
|
||
|
||
### 6.4 What fedwiki teaches that shard-wiki should not lose
|
||
|
||
1. **Frictionless reuse** — if remix takes 15 minutes, federation fails socially.
|
||
2. **Provenance by default** — history must travel or be reconstructible.
|
||
3. **Multi-perspective truth** — union ≠ single canonical article.
|
||
4. **Expected lifecycle** — information spaces may be ephemeral; plan for carry-forward.
|
||
5. **Personal sovereignty** — contributors must not be hostage to one operator's server.
|
||
|
||
---
|
||
|
||
## 7. Use-case promotion (done 2026-06-08)
|
||
|
||
Promoted to `spec/UseCaseCatalog.md` as UC-26–UC-33. Architecture decisions
|
||
tracked in `workplans/SHARD-WP-0002-federation-architecture.md`.
|
||
|
||
| Research ID | 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 |
|
||
|
||
---
|
||
|
||
## 8. Open questions (for spec / workplans)
|
||
|
||
1. **Fork vs overlay vs import** — When does shard-wiki copy content into a
|
||
writable shard vs keep an overlay vs link-only reference?
|
||
2. **Equivalent page identity** — How are "same topic" pages matched across
|
||
shards (title, path, link graph, explicit alias)?
|
||
3. **Journal format** — Does shard-wiki adopt fedwiki-like action journals,
|
||
Git commits only, or both per shard type?
|
||
4. **Browser vs server composition** — Where does union merging run for agents
|
||
and non-UI consumers?
|
||
5. **ActivityPub as adapter** — Optional transport for change notification, or
|
||
out of scope?
|
||
6. **Ephemeral spaces** — Should information spaces have first-class lifecycle
|
||
(archived, read-only, merged-into-successor)?
|
||
7. **Plugin/item extensibility** — Markdown extensions vs structured blocks for
|
||
remixable assessments (fedwiki OER lesson)?
|
||
8. **Consensus without erasure** — Policy presets: fedwiki-spread, git-merge,
|
||
designated canonical shard, vote-to-merge?
|
||
|
||
---
|
||
|
||
## 9. Sources
|
||
|
||
| Source | URL |
|
||
|--------|-----|
|
||
| Wikipedia — Federated Wiki | https://en.wikipedia.org/wiki/Federated_Wiki |
|
||
| Wired — Wiki Inventor Sticks a Fork | https://www.wired.com/2012/07/wiki-inventor/ |
|
||
| viki.wiki — JSON Schema | https://viki.wiki/json-schema.html |
|
||
| Fedwiki GitHub | https://github.com/fedwiki/wiki |
|
||
| Caulfield — Federated Education (NWACC 2014) | https://hapgood.us/2014/11/06/federated-education-new-directions-in-digital-collaboration/ |
|
||
| Caulfield — Bounded Conversations | https://hapgood.us/2015/01/21/rethinking-wiki-lifecycle-sites-as-bounded-conversations/ |
|
||
| Caulfield — OER Case for Federated Wiki | https://hapgood.us/2015/05/05/the-oer-case-for-federated-wiki/ |
|
||
| ikiwiki — distributed wikis | https://ikiwiki.info/tips/distributed_wikis/ |
|
||
| XWiki — ActivityPub Application | https://extensions.xwiki.org/xwiki/bin/view/Extension/ActivityPub%20Application/ |
|
||
| Maggie Appleton — Xanadu Patterns | https://maggieappleton.com/xanadu-patterns |
|
||
| Wikipedia — Project Xanadu | https://en.wikipedia.org/wiki/Project_Xanadu |
|
||
| shard-wiki — yawex prior art | `research/260608-yawex-prior-art/findings.md` |
|
||
| shard-wiki — c2 origins | `research/260608-c2-wiki-origins/findings.md` |
|
||
| shard-wiki — INTENT | `INTENT.md` |
|
||
|
||
---
|
||
|
||
## 10. Traceability
|
||
|
||
| This document section | Informs (future) |
|
||
|-----------------------|------------------|
|
||
| §2 Federated Wiki | Adapter design, page model, overlay/fork policy |
|
||
| §3.1 ikiwiki | Git coordination journal, mirror/branch modes |
|
||
| §3.2 ActivityPub | Optional notification adapter |
|
||
| §3.3 Xanadu | Link resolution, transclusion, provenance UI |
|
||
| §6 Mapping | Architecture blueprint guardrails |
|
||
| §7 UC seeds | `spec/UseCaseCatalog.md` promotion pass | |