Files
shard-wiki/research/260614-xanadu-deep-dive/findings.md
tegwick 60e1aa661c research: Project Xanadu deep dive (EDL/reference-not-copy, transclusion, addressing); UC-44/45/46
Xanadu studied as conceptual ancestor, not a candidate shard. Yield:
reference-not-copy EDL/xanadoc validates projection+overlay+union;
content-identity bidirectional transclusion; portable span-address
(tumbler) problem logged as adapter-contract architecture for
SHARD-WP-0002. Recorded design-bug boundaries: reject
single-global-docuverse, single-canonical-instance, baked-in economic
policy. Added UC-44/45/46; enriched UC-24/27/29/32.

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

18 KiB
Raw Blame History

Findings — Project Xanadu: the docuverse, the EDL, and reference-not-copy

Date: 2026-06-14 Source kind: conceptual / architectural prior art (not a deployable engine, not a candidate shard backend) Lens: shard-wiki orchestration — projection, overlay, transclusion, provenance, addressing, coordination journal

Reading guide. Every previous deep dive (xwiki, twiki, foswiki) studied a shippable engine as a candidate shard. Xanadu is different: it is the deepest conceptual ancestor of shard-wiki's own model and is not a backend we would ever attach. It is studied here for its mechanisms — reference-not-copy documents, separated link tables, content-identity transclusion, stable fine-grained addressing — several of which shard-wiki already reinvents under different names (projection, overlay, union BackLinks, coordination journal). The job of this file is to (a) name what shard-wiki inherits, (b) flag what would be a design bug to inherit, and (c) extract use cases that are genuinely new versus the federation track already in the catalog.

Pairs with — and deliberately extends, does not repeat — research/260608-federation-concepts/findings.md §3.3, which treats Xanadu only as a six-row pattern table and (correctly) labels it "speculative design / pattern language, not deployable federation." This dive goes underneath those patterns into the actual data architecture (EDL, istream, enfilades, tumblers) because that is where the resonance with shard-wiki's storage-neutral page model lives.


1. Origin and status

Project Xanadu (Ted Nelson, 1960 ; the term hypertext and transclusion are his) is the original electronic-literature system: a global docuverse of permanent, addressable documents joined by visible, two-way links. It famously never shipped at scale; partial artifacts exist — Udanax Green / Udanax Gold (source released 1999 to establish prior art against patents), XanaduSpace, and OpenXanadu (2014, a small working browser demo built on the EDL format). Treat all of these as reference designs, not running software to integrate.

Why it matters to shard-wiki: Nelson's critique of the Web — "one-way, ever-breaking links and no management of version or contents" — is precisely the gap shard-wiki addresses for wikis. shard-wiki is, in effect, a pragmatic, federated, Git-backed, heterogeneous-backend descendant of the Xanadu idea, scoped to Markdown wiki pages and explicitly refusing Xanadu's one-global-store premise.


2. The headline insight — a document is a manifest of spans, not content

The single most shard-wiki-relevant Xanadu artifact is the EDL (Edit Decision List), also called a xanadoc:

  • A xanadoc is a connected document that contains no original content. It is a file listing (a) spans — "portions of content to bring in" addressed in remote sources — and (b) xanalinks — tables saying what to connect to what.
  • The client reads the EDL, fetches each span from its source, and assembles the document locally per the xanalinks. Content is referenced, never embedded.
  • Structure is strictly separated: spans first (content references), xanalinks after (relationships). Content and link structure live apart.

This is the same move shard-wiki makes:

Xanadu (xanadoc / EDL) shard-wiki concept
Document = ordered list of span references, no embedded content Projection — lazy, cache-like view assembled from shard storage, not a copy
Spans pulled from multiple remote sources at view time Union of pages across heterogeneous shards
Xanalinks stored separately from content Overlay — non-destructive edits/annotations as separate objects, "overlay before mutation"
"All media should be permanized and addressable" Coordination journal + Git content-addressable storage

shard-wiki's INTENT lines — "prefer lazy projection over eager copying" and "union without erasure" — are the xanadoc principle restated for wikis.


3. Addressing and the storage substrate

Xanadu's machinery underneath the EDL:

  • Tumblers (Miller / Gregory): a transfinite-number addressing scheme where one address simultaneously encodes machine, author, document version, byte span, and links. A single tumbler is a stable, fine-grained, hierarchical pointer into the whole docuverse.
  • istream (invariant stream): a growing pool of shareable content pieces. Documents do not store text; they reference istream content by virtual address. A family of enfilades (tree structures using dsps = relative displacements and wids = ranges) maps virtual addresses ↔ istream addresses bidirectionally.
  • Spanfilade: indexes which istream spans each document uses. Other filades: granfilade (storage across disks/network), POOMfilade (permutation-of-order matrix mapping document position → istream location).
  • Implicit substrate: content pieces are invariant (append-only, never rewritten); versions are new arrangements of shared, permanent pieces. Nothing is deleted, so references never break.

shard-wiki mapping:

  • istream + invariance ≈ Git's content-addressable, immutable blob store, and the coordination journal as the append-only record. shard-wiki gets "references never break" for Git-native shards for free; for non-Git shards it must approximate via the journal/projection cache.
  • Tumbler ≈ the still-open question of a portable, stable, fine-grained span address that survives projection, overlay, and versioning across heterogeneous backends. shard-wiki has no such addressing scheme yet; this is the hardest part Xanadu solved on paper and the part that never shipped. (See §10, §11.)

  • Links are first-class objects stored apart from content (the xanalinks tables), and are visible and followable from all endpoints (rule 7) — i.e. inherently bidirectional. Backlinks are not derived after the fact; they are the same object seen from the other end.
  • Transclusion = Nelson's "the same content knowably in more than one place." The content piece remembers its identity and can trace back to all its appearances. This is the crucial delta from every weak modern form (server-side includes, HTML embeds, Roam block-refs): those copy or cache; Xanadu keeps one permanent instance that is aware of where it is reused.

shard-wiki mapping:

  • Separate link tables ≈ overlays and union BackLinks as first-class. An overlay is shard-wiki's xanalink: a non-destructive object spanning content it does not own.
  • Content-identity, bidirectional transclusion is stronger than UC-32 as currently written (which is path/span fetch with freshness). Xanadu says the content itself knows its appearances → enables reverse transclusion ("where is this paragraph used across all shards?") and content-identity equivalence ("these two pages in different shards are versions of the same content"). These are new capabilities, surfaced as UC-45 and UC-46 below.

5. Versioning and comparison — by span-set intersection

Because a document is a set of spans over an invariant pool, comparing two documents or two versions = intersecting their span-sets (the spanfilade operation). Shared spans are literally shared subtrees; differences fall out of the set arithmetic. The same operation surfaces links between documents.

shard-wiki mapping: this is a content-identity diff/merge model. shard-wiki's diff/merge capability (an adapter capability in the contract) is today implicitly path/title- and text-based. Xanadu shows a path-independent alternative: detect that page A in shard X and page B in shard Y are the same or derived content by span overlap, without relying on matching titles or paths. This directly serves UC-27 (view parallel versions of equivalent pages) by giving an equivalence-detection mechanism rather than assuming naming conventions align across sovereign shards.


6. Rights and economics — transcopyright, micropayment, implicit permission

Three of the 17 rules are an economic/rights layer:

  • Rule 8: publication grants implicit permission to link/transclude.
  • Rule 9: granular royalty / micropayment on any accessed portion.
  • Transcopyright: pre-granted permission for virtual republication by reference, with the attribution chain to origin preserved automatically because the content is transcluded, not copied.

shard-wiki mapping — handle with the mechanism-over-policy rule:

  • The mechanism shard-wiki should provide: a reference (overlay/transclusion) that carries provenance and reuse terms with it, so attribution and permission travel with the span. This strengthens UC-29 (remix with portable attribution).
  • The policy (whether reuse requires permission, whether anything is metered) must not be hard-coded. Xanadu baked one global economic policy into the substrate; shard-wiki keeps editorial/economic policy configurable. Baking in a payments or permission model would be a design-bug per INTENT.
  • This intersects the settled authz-in-core / authn-delegated decision (shard-wiki-auth-in-core-decision): "publication grants implicit linking permission" is exactly a policy that an information space might or might not adopt on its L0→L4 ladder. shard-wiki must be able to represent the permission on a transclusion; it must not assume Xanadu's answer.

7. Xanadu through shard-wiki's lens — it is architecture, not a shard

Unlike the engine dives, there is no capability profile to fill in — Xanadu is not a backend you attach. The useful framing is the inverse: which shard-wiki primitives are Xanadu mechanisms in disguise?

shard-wiki primitive Xanadu mechanism Inheritance verdict
Projection (lazy view, no copy) xanadoc / EDL span assembly Inherit — same idea, scope to wiki pages
Overlay (non-destructive edit) xanalinks as separate objects Inherit — overlays are xanalinks
Union BackLinks two-way links visible from all endpoints Inherit — generalize to sub-page spans
Transclusion (UC-32) content-identity, content-aware reuse Inherit, strengthen — add reverse + equivalence
Coordination journal invariant istream / permanent storage Inherit (Git gives this for Git-native shards)
Stable span address tumblers Aspire — hard, partly unshippable; degrade gracefully
Editorial/economic policy transcopyright + micropayment Reject as substrate — keep configurable
One global docuverse the docuverse premise Reject — see §8.2

8. Mapping to shard-wiki INTENT (compare, do not equate)

8.1 Reinforcements

  • Reference-not-copy is the core of both. Xanadu validates shard-wiki's "lazy projection over eager copying" and "union without erasure" as a coherent, decades-deep design lineage, not an ad-hoc preference.
  • Provenance is structural, not decorative. In Xanadu, knowing where content came from and where it is reused is built into the storage model. shard-wiki's "never hide authorship, conflicts, freshness, backend limits" is the same commitment.
  • Links/edits as separate objects validates overlays-before-mutation and first-class BackLinks.

8.2 Deliberate divergences (design bugs if conflated)

  1. No single docuverse / no universal address space. Xanadu requires one global permanent store, universal addressing, and its own published clientserver protocol (rules 12, 17). shard-wiki's whole reason to exist is the opposite: federate heterogeneous, sovereign backends (Git repos, Gitea, Obsidian, WebDAV, Coulomb), each keeping its own storage, history, identity, and limits. Adopting Xanadu's universality would violate shard sovereignty and graceful degradation. shard-wiki's addressing must tolerate backends that cannot offer stable span addresses, treating fine-grained addressing as an adapter capability, not a precondition.
  2. One canonical content instance vs. parallel divergent versions. Xanadu transclusion centers a single source of truth. shard-wiki must support equivalent-but-divergent pages across shards with conflicts visible (UC-27), not collapsed into one instance. Content-identity is a detection tool here, not a mandate to unify.
  3. Baked-in economic/permission policy. See §6 — reject as substrate, keep as configurable policy.
  4. Permanence as a hard requirement. Xanadu forbids deletion globally. shard-wiki cannot impose that on sovereign shards; permanence holds for the coordination journal and Git-native shards, and is approximated (cache/projection/snapshot) for backends that delete. This is graceful degradation, not a weaker promise.

8.3 What Xanadu teaches that shard-wiki should not lose

  • A page view can legitimately be a composition manifest (a list of references), not a file. Build the page model so a page can be authored as references into other shards (UC-44), even if the common case is a plain Markdown file.
  • Content identity (not path/title) is the durable basis for transclusion, equivalence, and reverse lookup across sovereign shards (UC-45, UC-46). Lean on Git blob hashes where available; define a content-fingerprint fallback elsewhere.
  • Getting stable fine-grained addressing right is the hard, valuable, historically unshippable part. Scope it as an adapter capability with explicit degradation rather than promising tumbler-grade universality.

9. Use-case seeds → catalog (promoted 2026-06-14)

Last existing UC is UC-43. New UCs UC-44UC-46 added; several existing UCs enriched (no new scenario, stronger mechanism/notes).

Seed Catalog action
Compose-by-reference page — author a page whose body is an ordered list of spans pulled from multiple shards, stored as a manifest (xanadoc/EDL), not a copy UC-44 (new)
Reverse transclusion — find every page/shard where a given span (paragraph/section) appears or is transcluded UC-45 (new)
Content-identity equivalence — detect that two pages in different shards are the same or derived content via span/content overlap, without matching titles or paths UC-46 (new)
Content-identity, content-aware (bidirectional) transclusion enriches UC-32
Equivalence detection mechanism for parallel versions enriches UC-27
Reference carries provenance + reuse terms (transcopyright as representable policy) enriches UC-29; links shard-wiki-auth-in-core-decision
Provenance: content remembers its appearances enriches UC-24

10. Adapter-contract / architecture notes for SHARD-WP-0002

Logged as architecture (no UC):

  • Fine-grained span addressing is an adapter capability, not a core assumption. The shard adapter contract should model whether a shard can mint a stable address for a sub-page span that survives edits/versions (tumbler-grade), down through whole-page-only, down to path-only. Transclusion/overlay capabilities depend on it.
  • Content identity should be a contract-level concept: a shard advertises how it fingerprints content (Git blob hash, normalized-text hash, none). UC-45/UC-46 and cross-shard diff/merge consume it.
  • Composition manifests (UC-44) imply the wiki page model must permit a page whose canonical form is a reference list. This is an INTENT-level page-model decision — flag for the page-model spec, not just the adapter contract.
  • Reuse-terms metadata on a reference (UC-29 / §6) is policy data the core carries but does not interpret — consistent with mechanism-over-policy and the L0→L4 authz ladder.

11. Open questions (for spec / workplans)

  1. What is shard-wiki's portable span address? Git blob+range works for Git-native shards; what is the fallback for Obsidian/WebDAV/Gitea-wiki, and how does it survive a shard's storage swap (cf. UC-43 Foswiki RCS↔PlainFile)?
  2. Is compose-by-reference (UC-44) core orchestrator, adapter-provided, or reference-UI — and is it MVP or deferred with UC-32?
  3. Does content-identity equivalence (UC-46) belong in core (cross-shard union logic) or as an adapter-provided index? How expensive is span-set intersection at wiki scale without enfilades?
  4. How far do we take reverse transclusion (UC-45) — exact span identity only, or fuzzy/derived-content tracking? The latter is research-grade.
  5. Where does reuse-terms/transcopyright metadata sit on the L0→L4 ladder, and does any tier ever enforce it, or is it always advisory provenance?

12. Sources

Source Used for
Wikipedia — Project Xanadu (https://en.wikipedia.org/wiki/Project_Xanadu) 17 rules, tumblers, history, Web critique
xanadu.com — The Edit Decision List / Xanadoc File (https://xanadu.com/xuEDL.html) EDL/xanadoc structure: spans + xanalinks, client assembly
Wikipedia — Enfilade (Xanadu) (https://en.wikipedia.org/wiki/Enfilade_(Xanadu)) istream, enfilades (dsp/wid), spanfilade, granfilade, POOMfilade, version comparison by span-set intersection
Wikipedia — Transclusion (https://en.wikipedia.org/wiki/Transclusion) "same content knowably in more than one place," content-aware reuse, transcopyright, micropayment vs. weak modern forms
Maggie Appleton — Xanadu Patterns (https://maggieappleton.com/xanadu-patterns) pattern naming: visible links, parallel documents, transpointing windows, modular blocks, stable addresses, annotation

Cross-references: research/260608-federation-concepts/findings.md §3.3 (prior surface treatment), spec/UseCaseCatalog.md (UC-24, UC-27, UC-29, UC-32), workplans/SHARD-WP-0002-federation-architecture.md (adapter contract).


13. Traceability

  • New UCs: UC-44, UC-45, UC-46spec/UseCaseCatalog.md (section F, federation).
  • Enriched UCs: UC-24, UC-27, UC-29, UC-32.
  • Architecture (no UC): span-addressing capability, content-identity, composition manifest, reuse-terms metadata → SHARD-WP-0002.
  • Decision link: transcopyright-as-policy → shard-wiki-auth-in-core-decision.