Files
shard-wiki/workplans/SHARD-WP-0002-federation-architecture.md
tegwick 714eaf6b5a synthesis v2: extend shard spectrum to full dive set (13 spectra); re-fold into SHARD-WP-0002
Extend the cross-dive synthesis from nine systems to the full fourteen
(added Joplin, Logseq, the CRDT cohort Anytype/AFFiNE/AppFlowy, Trilium).
Spectra grown 11 -> 13: new merge-model (none/git/conflict-notes/
native-CRDT) and content-opacity (plaintext/whole-shard-E2EE/per-item),
plus identity-vs-placement emphasis (Trilium note/branch DAG), Logseq's
in-file id:: addressing sweet spot, build-your-own derived query index,
and a six-mode attachment taxonomy (file-store native/interchange-mirror,
in-engine-host, local-REST, external-API, CRDT-replica, P2P). New
through-lines: CRDT changes the merge math; identity != placement;
metadata can be computed; attach surface != native store (+ substrate
migration). UC fold-in extended UC-44-59 -> UC-44-67.

Folded into SHARD-WP-0002: T11 thirteen spectra; T12 computed metadata +
multi-placement/DAG identity; T13 CRDT-log supplement; T14 full six-mode
attachment taxonomy; T15 HTML source model; T16 identity!=placement +
derived index. Context inputs += four dives; acceptance UC-26-67. No new
tasks, no new UCs (synthesis only).

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

31 KiB
Raw Blame History

id, type, title, domain, repo, status, owner, topic_slug, created, updated, depends_on, state_hub_workstream_id
id type title domain repo status owner topic_slug created updated depends_on state_hub_workstream_id
SHARD-WP-0002 workplan federation architecture design whynot shard-wiki active tegwick whynot 2026-06-08 2026-06-14
SHARD-WP-0001
2af4c46d-cbfd-40ea-a94b-d9e60b0f9945

SHARD-WP-0002 — Federation architecture design

Goal

Produce a federation architecture specification for shard-wiki: positioning against prior art (Federated Wiki, git-backed wikis, ActivityPub), documented decisions and tradeoffs, and ADR-ready design notes that resolve the open questions raised by research/260608-federation-concepts/ and UseCaseCatalog UC-26UC-33.

Primary deliverable: spec/FederationArchitecture.md (created and filled by this workplan's tasks).

Secondary deliverable (T11T16): the shard adapter contract constraints distilled from the engine deep dives (T11T15, added 2026-06-13) and the modern-tool dives + cross-dive synthesis (T16 and scope extensions, added 2026-06-14), feeding spec/TechnicalSpecificationDocument.md. Federation architecture decides what the union does; the adapter contract decides what a backend must expose to participate. The two are co-dependent (the capability matrix T10 consumes the contract vocabulary T11 defines), so they live in one workplan.

The cross-dive synthesis (research/260614-shard-spectrum-synthesis/findings.md, v2 2026-06-14 — extended to the full dive set incl. Joplin, Logseq, the CRDT cohort Anytype/AFFiNE/AppFlowy, and Trilium) reframes the contract around thirteen capability spectra (addressing, content identity, identity-vs-placement, structure, history, merge model, native query, translation, attachment mode, operational envelope, access grant, content opacity, write granularity) — positions on a spectrum anchored at both ends by a real system, with federation ops degrading by position — rather than a flat verb checklist.

Context

  • Federation research: research/260608-federation-concepts/findings.md
  • Engine deep dives (adapter-contract inputs, T11T15):
    • research/260608-wikiengines-overview/findings.md (landscape; capability heterogeneity, write granularity)
    • research/260613-xwiki-deep-dive/findings.md (DB/component app-platform)
    • research/260613-twiki-deep-dive/findings.md (file+RCS app-platform)
    • research/260613-foswiki-deep-dive/findings.md (Foswiki::Store versioned store interface = adapter-contract prior art)
  • Conceptual + modern-tool dives (T16 + scope extensions, 2026-06-14):
    • research/260614-xanadu-deep-dive/findings.md (reference-not-copy, transclusion, tumbler span addressing — ideal)
    • research/260614-zigzag-deep-dive/findings.md (information space as co-equal dimensions; clone = transclusion — ideal)
    • research/260614-roam-deep-dive/findings.md (block-DB, store UUIDs, Datalog, in-app host)
    • research/260614-obsidian-deep-dive/findings.md (file-over-app, in-file ^id, MetadataCache derived index, dual attach, ecosystem popularity)
    • research/260614-notion-deep-dive/findings.md (closed SaaS, external-API-only, DB schema+relations, operational envelope, scoped grant)
    • research/260614-joplin-deep-dive/findings.md (SQLite-local, interchange/sync-mirror attach, E2EE content opacity, local-REST)
    • research/260614-logseq-deep-dive/findings.md (block-graph on plain files, in-file id::, derived Datalog index, file→SQLite substrate migration)
    • research/260614-localfirst-workspaces-deep-dive/findings.md (Anytype/AFFiNE/AppFlowy: CRDT substrate, native merge, P2P/E2EE, CRDT-replica attach)
    • research/260614-trilium-deep-dive/findings.md (note cloning → DAG / identity≠placement, inherited+templated computed metadata, HTML-native, scripting+ETAPI, per-item opacity)
    • research/260614-shard-spectrum-synthesis/findings.md (synthesis v2: the thirteen capability spectra, shard family matrix, UC→task fold-in)
  • Use cases: spec/UseCaseCatalog.md § A (UC-26UC-67; UC-34UC-43 are the engine-attachment cases, UC-44UC-67 the conceptual + modern-tool cases)
  • Aspiration: INTENT.md (orchestrator, not engine; mechanism over policy; capability-aware adapters; Markdown-first, backend-neutral)
  • Related workplan: SHARD-WP-0001 (page resolution, namespaces, overlays, provenance — federation architecture must align with, not duplicate, those outputs)

Non-goal: Implement federation. This workplan produces architecture and decision records only.

Decision topics (overview)

Topic Key tradeoff Primary UCs
Orchestrator positioning Adapter layer vs fedwiki-style homogeneous network UC-02, UC-26
Remix primitives Fork vs overlay vs import vs link-only UC-04, UC-26, UC-29
Equivalent page identity Title/path/alias/graph matching; chorus vs canonical UC-27, UC-07
History model Per-shard journal vs Git coordination journal vs both UC-29, UC-33
Union composition Server orchestrator vs client composition UC-05, UC-27
Change notification Git ping, ActivityPub, poll — adapter transports UC-31
Space lifecycle Permanent vs ephemeral; archive and carry-forward UC-28, UC-30
Transclusion depth Whole-page projection vs inline span UC-03, UC-32
Consensus presets Spread, merge, designated canonical — policy not core UC-07, UC-27
Capability matrix Which federation ops require which adapter capabilities UC-02UC-07

Adapter-contract topics (T11T16, from engine + modern-tool dives)

Topic Key tradeoff Primary UCs
Adapter contract & capabilities Thirteen spectra (not flat verbs); write granularity; operational envelope; access grant; merge model; content opacity UC-02, UC-35, UC-38, UC-57, UC-61, UC-64
Structured page model Typed frontmatter vs sidecar vs blob; bodiless / multi-record; DB schema+relations; computed (inherited/templated) metadata; non-Markdown assets; query-defined pages; multi-placement (DAG) identity UC-34, UC-39, UC-55, UC-58, UC-54, UC-66, UC-67
History portability Supplement (DB-internal incl. Notion/Joplin/Trilium; CRDT-log) vs import (open file history) UC-36, UC-41
Adapter binding Full mode taxonomy: file-store (native or interchange/sync-mirror) / in-engine-host / local-REST / external-API / CRDT-replica / P2P-no-central-endpoint; per-binding choice; backend-swap / substrate-migration UC-38, UC-40, UC-43, UC-50, UC-57, UC-60, UC-62, UC-64, UC-65
Syntax translation Lossless round-trip vs lossy-with-fidelity-report (HTML/blocks/CRDT) vs read-only degradation UC-42, UC-59, UC-03
Addressing, identity & navigation (T16) Span addressing; content identity; identity≠placement; transclusion-as-reference; derived query index; dimensional/query views UC-44, UC-45, UC-46, UC-47, UC-48, UC-51, UC-52, UC-54, UC-63, UC-66

Architecture positioning and boundaries

id: SHARD-WP-0002-T1
status: todo
priority: high
state_hub_task_id: "ea8fdb22-6c7f-4ac1-9799-1346abf3c3b7"

Write the opening sections of spec/FederationArchitecture.md:

  • shard-wiki as orchestration layer over heterogeneous shards (contrast Federated Wiki homogeneous JSON sites, ikiwiki homogeneous git wikis, ActivityPub activity streams).
  • Explicit compare, do not equate mapping from federation research §6.
  • Architectural boundaries: what core owns vs adapters vs UI vs policy config.
  • Relationship to SHARD-WP-0001 outputs (resolution, namespaces, overlays).

Tradeoffs to document: Central Git coordination journal vs fully decentralized peer sync; browser-composed union vs server-side orchestrator for agents/CLI.


Remix primitives: fork, overlay, import, reference

id: SHARD-WP-0002-T2
status: todo
priority: high
state_hub_task_id: "fb7d4bce-5d2e-4602-9b63-85934d90e82d"

Define when each remix primitive applies and how they interact:

Primitive Typical trigger Writes to remote?
Reference Link only No
Projection Read remote page No (cache optional)
Overlay Edit read-only shard No until explicit apply
Import / fork Copy into writable shard Source unchanged

Resolve federation research open question #1. Cover capability-limited shards (read-only, no diff/merge). Map to UC-26, UC-04, UC-29.

Tradeoffs: Fedwiki fork-as-default vs overlay-before-mutation; copy cost and attribution portability vs link-only federation.


Equivalent page identity and multi-version presentation

id: SHARD-WP-0002-T3
status: todo
priority: high
state_hub_task_id: "8f2a333d-ddcc-4cc6-b6ed-1ba9b178eee3"

Specify how shard-wiki identifies "the same topic" across shards:

  • Matching signals: normalized title, path, explicit alias table, link-graph equivalence, manual curator binding.
  • Presentation: chorus-of-voices (UC-27) vs designated canonical (policy).
  • Link to UC-07 divergence detection and reconciliation triggers.

Tradeoffs: Automatic matching false positives vs manual curation burden; showing all versions vs default canonical with alternates visible.


History, attribution, and coordination journal

id: SHARD-WP-0002-T4
status: todo
priority: high
state_hub_task_id: "5f39f48d-5142-4078-a84f-3245ec1add7e"

Define how edit history and attribution flow across federation operations:

  • Per-shard revision model (Git commit, engine history, fedwiki-style journal where applicable).
  • Information-space coordination journal role for cross-shard operations (fork, import, reconcile, space branch).
  • Portable attribution requirements for UC-29 (frictionless remix).

Tradeoffs: Fedwiki journal-per-page vs Git-only; duplication of history vs reconstructibility from coordination journal; storage cost of embedded media on import.


Union composition layer

id: SHARD-WP-0002-T5
status: todo
priority: medium
state_hub_task_id: "3ff71e11-d0e9-4fda-b916-d6c34c51aa51"

Decide where the union view is assembled:

  • Orchestrator API (server-side graph for agents, CI, non-browser clients).
  • Optional client-side composition (fedwiki-style browser pull) as a consumer pattern, not the only path.
  • Caching, freshness, and invalidation interaction with UC-03, UC-05, UC-31.

Tradeoffs: Single composition point (simpler provenance) vs distributed composition (fedwiki resilience); cache staleness vs live-pull latency.


Change notification and subscription transports

id: SHARD-WP-0002-T6
status: todo
priority: medium
state_hub_task_id: "9596e5e8-8d6b-4ed4-bcbc-ebb45e3168be"

Specify change-notification as an optional adapter capability:

  • Transports: git hook / pinger (ikiwiki), ActivityPub Create/Update (XWiki), WebDAV ETag, polling fallback.
  • What a subscription triggers: projection refresh, reconciliation queue, RecentChanges union entry (UC-31, UC-17).
  • Out-of-scope vs in-scope for v1.

Tradeoffs: Push freshness vs implementation complexity; ActivityPub as notification-only vs content-bearing share; dependency on external fediverse infrastructure.


Information space lifecycle

id: SHARD-WP-0002-T7
status: todo
priority: medium
state_hub_task_id: "38134064-51ce-4f5a-80bf-b2cfbe381c59"

Model lifecycle states for root entities / information spaces:

  • Active, read-only archived, retired (detached), merged-into-successor.
  • Carry-forward workflow (UC-28, UC-30): selective import from archived shard.
  • Space-level fork / branch (UC-33): coordination journal + shard config branch.

Tradeoffs: First-class ephemeral "happenings" vs permanent spaces only; automatic archive vs manual; whether retirement deletes projections or preserves read-only union entries.


Transclusion and projection depth

id: SHARD-WP-0002-T8
status: todo
priority: medium
state_hub_task_id: "5607732b-612a-4550-bb17-b8cd34979cf4"

Distinguish projection levels:

Level UC Behavior
Whole-page projection UC-03 Lazy full page from remote shard
Block/span transclusion UC-32 Inline embed with origin + freshness
Link reference UC-08 Pointer only

Define provenance display requirements and staleness semantics for UC-32. Reference Xanadu transclusion patterns without adopting unbuilt Xanadu scope.

Tradeoffs: Live transclusion fragility (link rot, remote down) vs snapshot on import; core orchestrator support vs Markdown extension + adapter.


Consensus and reconciliation policy catalog

id: SHARD-WP-0002-T9
status: todo
priority: medium
state_hub_task_id: "adfca8b3-eb21-497d-9f51-65dc9269c810"

Document configurable policy presets (mechanism over policy):

  • Fedwiki-spread (versions coexist; popularity implicit).
  • Designated canonical shard (explicit write target).
  • Git-merge reconciliation (ikiwiki-style).
  • Overlay-only (no destructive merge on read-only sources).
  • Vote-to-merge / editorial gate (optional, UI-layer).

Map presets to UC-07, UC-27. Core provides primitives; policy selects preset.

Tradeoffs: Default policy for L0 open mode vs team mode; exposing conflicts vs auto-merge when backends support it.


Federation operations capability matrix

id: SHARD-WP-0002-T10
status: todo
priority: medium
state_hub_task_id: "c7a93d06-8631-43b4-bc7f-1b0a1cd1436f"

Produce a capability matrix: which federation operations require which adapter capabilities (read, write, diff, merge, lock, version, publish, notify, transclude-source).

Cross-check against INTENT capability-aware adapters principle. Identify graceful degradation paths for limited backends (read-only participant, projection-only, patch target).

This matrix consumes the capability vocabulary defined in T11 — keep the two in sync. Feeds spec/TechnicalSpecificationDocument.md adapter contract section.


Shard adapter contract (folded from engine deep dives, 2026-06-13)

These tasks distill the cross-cutting adapter-contract constraints surfaced by the four engine deep dives (wiki-engines landscape, XWiki, TWiki, Foswiki). They answer what a backend must expose to participate as a shard, complementing the federation tasks above (which answer what the union does). Output target: spec/TechnicalSpecificationDocument.md (adapter contract section), cross-linked from spec/FederationArchitecture.md.

Recurring cross-engine insight to honor: structure and history in text files federate far more easily than in a database, and Foswiki::Store already proves the versioned-interface-with-swappable-backends pattern the contract should adopt.

Adapter contract: capability model & versioned interface

id: SHARD-WP-0002-T11
status: todo
priority: high
state_hub_task_id: "a7379621-6694-488b-94ca-846b8e27e745"

Define the capability-aware shard adapter contract as a versioned interface, taking Foswiki::Store + Foswiki::Meta as direct prior art (a real engine that already separates store backend from core behind a stable interface).

  • Operation verbs: read, write, diff, merge, lock, version, publish, notify, transclude-source, translate-syntax, structured-payload (reconcile with T10).
  • Capability profile = the thirteen spectra (synthesis v2 §2), each a position not a boolean, so federation ops degrade by position:
    1. addressing granularity (none → path → page-level store id → in-file span → in-file block id:: → store-UUID → portable tumbler)
    2. content identity (none → path/title → fingerprint → span-set)
    3. identity vs placement (path=identity → identity separated from placement: Trilium note/branch; a page in many locations = a DAG)
    4. structure (flat MD → frontmatter/key:: → %META% → typed objects → DB schema+relations → object-graph/ontology → computed: inherited+templated)
    5. history (none → internal-only / CRDT-log → open-file → git-native)
    6. merge model (none → git/text → conflict-notes/keep-both → native-CRDT)
    7. native query (none → text → build-your-own derived index → datalog/graph → DB query)
    8. translation (native → lossless → lossy-with-fidelity-report; incl. HTML)
    9. attachment mode (file-store [native or interchange/sync-mirror] → in-engine-host → local-REST → external-API → CRDT-replica → P2P/no-central-endpoint)
    10. operational envelope (local/unbounded → realtime CRDT/WebSocket → rate-limited/ eventually-consistent/paginated)
    11. access grant (open → token → OAuth scoped+revocable → P2P key/invite)
    12. content opacity (plaintext → encrypted-at-rest whole-shard → per-item)
    13. write granularity (whole-file → per-page/note → per-block)
  • Versioning/compatibility rules for the contract itself; capability discovery (static profile vs runtime negotiation).

Inputs: 260608-wikiengines-overview §3, §5; 260613-foswiki-deep-dive §2, §6; 260614-shard-spectrum-synthesis §2, §5 (v2). Provides the vocabulary T10's matrix consumes. UCs: UC-02, UC-35, UC-38, UC-57, UC-61, UC-64.

Tradeoffs: Rich capability set (precise degradation) vs contract complexity; static profile vs runtime capability negotiation.


Page model: structured / typed payload representation

id: SHARD-WP-0002-T12
status: todo
priority: high
state_hub_task_id: "7334a4a4-ba75-4fac-a8b4-8350d342b299"

Decide how the backend-neutral, Markdown-first page model carries structured data without flattening:

The model must stretch many ways at once (synthesis v2 §3): prose Markdown, typed and computed records, non-Markdown assets, reference/query-defined pages, and multi-placement (DAG) identity.

  • Source shapes: XWiki XObjects against an XClass; TWiki/Foswiki DataForms stored as %META:FIELD% in text; Foswiki MetaDataPlugin multiple records per topic; Semantic MediaWiki annotations; Notion databases (schema + typed properties + inter-record relations + rollups/formulas) — the apex of database-as-pages.
  • Representation choice: typed frontmatter vs sidecar file vs opaque provenance blob. Prefer in-text structure (frontmatter/%META%, git-diffable); tolerate DB structure via sidecar + fidelity report (T15).
  • Bodiless pages (UC-39): may a page be purely structured, no Markdown body?
  • N typed records per page (not one form) must be representable.
  • Non-Markdown content types (UC-55): drawings (Excalidraw), spatial canvases (JSON Canvas), images, attachments — typed asset vs opaque blob vs content-type registry, with provenance, not flattened away.
  • Inter-record relations (UC-58): represented as typed links in the union link graph, a separate relation index (cf. ZigZag many-to-many), or both (T16).
  • Query-defined / reference pages (UC-44, UC-54): a page whose canonical form is a span manifest (Xanadu EDL) or a saved query (Dataview/Notion linked DB) — coordinate with T16.
  • Computed metadata (UC-67): Trilium attributes are inherited (down the tree) + templated, so effective metadata = own + inherited + templated. Represent effective-vs-own with per-attribute provenance (own / inherited-from / template); decide materialize (snapshot) vs compute-live.
  • Multi-placement / DAG identity (UC-66): Trilium note (identity) vs branch (placement) — a page may occupy several locations at once. Separate page identity from placement (one entity, N placements/paths/shards); no single canonical path — coordinate with T16 (the namespace-level clone/reference primitive).

Inputs: xwiki §2.3; twiki §2.3; foswiki §4; notion §2§3; obsidian §3; trilium §2§3; localfirst-workspaces §1§3; shard-spectrum-synthesis §3 (v2). UCs: UC-34, UC-39, UC-55, UC-58, UC-54, UC-44, UC-66, UC-67.

Tradeoffs: Lossless fidelity vs a uniform queryable model; diff/search over structured fields vs prose; one coherent model vs many content shapes; effective-vs-own metadata snapshot vs live computation.


History portability: supplement vs import

id: SHARD-WP-0002-T13
status: todo
priority: high
state_hub_task_id: "6837862a-8f57-410d-9200-a6a5dcf1a7b9"

Define how the coordination journal relates to an engine's native history (aligns with and refines T4):

History is a spectrum (synthesis v2 §2): none → internal-only / CRDT-log → open-file → git-native.

  • Adopt — already git-native (Git folder/repo, Obsidian-with-Git, Logseq files): use as-is.
  • Supplement — engine history is non-portable: DB-internal (Confluence, MediaWiki, XWiki xwikircs, Notion, Joplin/Trilium revisions) or a CRDT update log (Anytype/AFFiNE/AppFlowy): the journal begins now / mirrors forward / snapshots the replica (UC-36).
  • Import — engine history is an open file format (TWiki/yawex RCS .txt,v, Foswiki PlainFile timestamped copies): backfill into Git preserving author/timestamp (UC-41).
  • Authoritative journal vs mirror-reconciled-back; one-time vs continuous.

Inputs: xwiki §2.4; twiki §2.1; foswiki §2.2; notion §4; joplin §1; trilium §1; localfirst-workspaces §4. UCs: UC-36, UC-41.

Tradeoffs: Import fidelity vs effort; duplicated history vs single source of truth.


Adapter binding: attach path, hosting, backend-swap

id: SHARD-WP-0002-T14
status: todo
priority: medium
state_hub_task_id: "f8835969-d118-4738-952a-5e67e5209f3d"

Decide how and where an adapter binds to a backend:

Full attachment-mode taxonomy (synthesis v2 §2, §3), with a backend possibly offering more than one — so attach mode is a per-binding, capability-gated choice, not a fixed property:

  • File-store direct — read the on-disk store as a folder shard, in two sub-kinds:
    • native store — Obsidian vault, Logseq pages/+journals/ (with a format profile parsing id::/key::), TWiki data/, Git repo: offline, git-native, but risks inconsistent reads under a running engine (UC-40, UC-53, UC-62).
    • interchange / sync mirror — a tool's documented sync representation on a third-party target (Joplin items on WebDAV/Nextcloud/S3): app-independent, read/projection/ overlay-mostly (the tool owns the format; never re-sync) (UC-60).
  • In-engine hosted adapter — adapter runs inside the app via its extension API (XWiki components; TWiki/Foswiki handlers; Roam Depot over roamAlphaAPI; Obsidian plugin over App.vault; Logseq plugin; Trilium scripting code notes): high fidelity, needs deploy access (UC-38, UC-50).
  • Local-REST — a localhost API served by the running app (Joplin Data API; Trilium ETAPI): app-must-run, token auth (UC-38, links UC-57).
  • External-API only — attach from outside via a remote REST API, no in-engine hosting (Notion): full write-through without deploy access, but bounded by the operational envelope (rate limit, eventual consistency, payload caps) and a scoped, revocable access grant that enforces no-silent-mutation (UC-57).
  • CRDT replica — hold a local CRDT replica (Anytype/AFFiNE/AppFlowy: any-sync/ Yjs/Yrs): the backend merges natively — respect CRDT semantics, don't git-merge; or a self-host sync endpoint (AFFiNE/AppFlowy Cloud) (UC-64).
  • P2P / no-central-endpoint — bind a replica or a named peer/node, not a URL (Anytype any-sync), content possibly E2EE (UC-65).
  • Dual / multi attach — a backend offering several modes (Obsidian/Logseq: file or plugin; TWiki: file or API; Joplin: mirror or Data API): pick per binding; declare which is authoritative (UC-53).
  • Backend-swap / substrate-migration tolerance — shard identity/provenance survives a storage change (Foswiki RCS↔PlainFile; folder→Git; Logseq file→SQLite DB-graph) — bind to capabilities, not to "it's files" (UC-43).

Inputs: twiki §5§6; xwiki §3; foswiki §2; roam §5; obsidian §4; notion §4, §6; joplin §2, §4; logseq §4§5; localfirst-workspaces §4; trilium §5; shard-spectrum-synthesis §3 (v2). UCs: UC-38, UC-40, UC-43, UC-50, UC-53, UC-57, UC-60, UC-62, UC-64, UC-65.

Tradeoffs: Fidelity vs deploy access; consistency vs offline capability; external write-through vs rate-limit/eventual-consistency ceiling; CRDT-replica liveness vs snapshot simplicity.


Syntax translation & content fidelity

id: SHARD-WP-0002-T15
status: todo
priority: medium
state_hub_task_id: "22b57b3a-b06b-4ff0-a34a-667a0386bf25"

Specify how non-Markdown shards participate in the Markdown-first model:

Translation is a spectrum (synthesis §2): native → lossless → lossy-with-fidelity-report.

  • Read native markup (TWiki/Foswiki TML, XWiki syntax) into the page model and accept Markdown overlays back via bidirectional, lossless translation (UC-42).
  • Feasibility proof: Foswiki WysiwygPlugin (TML→HTML for editing, HTML→TML losslessly on save).
  • Lossy-with-fidelity-report (UC-59) — for models that do not round-trip: Notion blocks/rich-text/databases (export is lossy); Trilium HTML (CKEditor — more tractable than blocks but still lossy); CRDT/object models. Translate lossily but make fidelity loss visible — a per-shard/per-page report of what projects cleanly vs. degrades, with non-mappable elements preserved as provenance/sidecar. Fidelity becomes data (union without erasure). Distinct from the lossless case (UC-42).
  • HTML as a source model (Trilium) joins TML/Notion-blocks/CRDT in the translation capability — HTML↔Markdown, lossy-aware.
  • Graceful degradation: when neither lossless nor acceptable lossy translation is available, the shard is a read-only/projection participant (UC-03), never silently corrupted.
  • Open: may overlays be stored in Markdown, or must they round-trip in native syntax?

Inputs: foswiki §5; twiki §2.4; xwiki §2.5; notion §3; trilium §4. UCs: UC-42, UC-59, UC-03.

Tradeoffs: Translation coverage vs read-only floor; Markdown overlays (portable) vs native-syntax overlays (safe round-trip); lossy-but-usable vs read-only-but-faithful.


Addressing, content identity, and dimensional / query navigation

id: SHARD-WP-0002-T16
status: todo
priority: medium
state_hub_task_id: "b00ca669-59d6-454a-8d6e-f34694e35192"

New thread from the conceptual (Xanadu, ZigZag) + modern-tool (Roam, Notion, Obsidian/ Dataview) dives and the synthesis (260614-shard-spectrum-synthesis §4). No existing task owns the addressing/identity/navigation layer that transclusion, overlay, equivalence, and dimensional views depend on. Refines T8 (transclusion/projection depth) and T5 (union composition); consumes T11 capabilities.

  • Span addressing — a portable sub-page address. Adopt native span IDs where the backend mints them (Roam :block/uid, Notion/CRDT UUID, Joplin/Trilium page-level id) or carries them in-file (Obsidian ^id, Logseq id:: — block-level AND git-diffable, the sweet spot); fall back to content fingerprint or path+range otherwise. Open: wrap native IDs in a shard-scoped address so they survive projection and don't collide across shards (Xanadu tumbler is the unreached ideal). (UC-51, UC-44.)
  • Content identity — detect that two pages are the same / derived content by fingerprint or span-set overlap, path-independently — the equivalence mechanism UC-27 left open. Enables reverse transclusion (UC-45). (UC-46.)
  • Identity vs placement — separate page identity from placement (Trilium note vs branch: a page cloned into many locations = a DAG). One entity, N placements (paths/ shards); no single canonical path — the namespace-level form of the clone/reference primitive. (UC-66, UC-22.)
  • Transclusion as one reference-not-copy primitive — unify Xanadu transclusion, ZigZag clone, Roam/Obsidian/Logseq embed, Notion synced block, Trilium note cloning over the addressable union (synthesis v2 §3). Compose-by-reference pages (UC-44) and reverse lookup (UC-45) are views over it.
  • Dimensional / query navigation — model the union so each relationship (namespace, genealogy, version, shard, equivalence, links) is a navigable dimension (ZigZag), and a page can be query-defined (Dataview/Notion linked DB, UC-54). Delegate view computation to a shard's native query engine where present (Roam/Logseq Datalog, Notion/AppFlowy DB query, XWiki XWQL); else build a derived index over the projection (Logseq DataScript-over-files pattern, UC-63). (UC-47, UC-48, UC-52, UC-54, UC-63.)
  • Boundary: this is a derived lens over canonical files+journal, never a new store (ZigZag dive §6); the many-to-many link graph stays a graph index, not a rank.

Inputs: xanadu §2§5; zigzag §2§6; roam §2§4, §7; notion §2; obsidian §2§3; logseq §1§3; trilium §2§3; shard-spectrum-synthesis §3§5 (v2). UCs: UC-44, UC-45, UC-46, UC-47, UC-48, UC-51, UC-52, UC-54, UC-63, UC-66.

Tradeoffs: Native-ID adoption (cheap, backend-coupled) vs a portable address scheme (harder, uniform); core navigation API vs internal organizing concept; query delegation (fast, backend-dependent) vs orchestrator-computed (uniform, costly).


Acceptance criteria

  • spec/FederationArchitecture.md exists with all ten federation topic sections (T1T10) and an explicit decisions / deferred / open table per topic.
  • The adapter contract section of spec/TechnicalSpecificationDocument.md exists, populated by T11T16, with the capability vocabulary (T11, the thirteen spectra) reconciled against the T10 federation-ops matrix.
  • Each decision honors INTENT: mechanism over policy, union without erasure, overlay before mutation, no silent remote mutation, shard sovereignty, capability-aware adapters, Markdown-first / backend-neutral.
  • UC-26UC-67 are traceable to architecture / adapter-contract sections (UC-34UC-43 to T11T15; UC-44UC-67 to T11T16 per research/260614-shard-spectrum-synthesis/findings.md §4, v2).
  • Conflicts or dependencies on SHARD-WP-0001 outputs are listed (e.g. namespace model affects equivalent-page identity; page model T12 affects resolution/overlays).
  • SHARD-WP-0001 and SHARD-WP-0002 can proceed in parallel where topics are independent; merge conflicts in spec are resolved before implementation workplan starts.

Suggested task order

Federation architecture (T1T10):

  1. T1 positioning (frames everything)
  2. T2 remix primitives + T3 equivalent identity (parallel)
  3. T4 history model
  4. T5 composition + T6 notification (parallel)
  5. T7 lifecycle + T8 transclusion (parallel)
  6. T9 policy catalog + T10 capability matrix (parallel, finalize doc)

Adapter contract (T11T16) — can start in parallel with T1; T11 first as it frames the rest, and pair it with T10 (shared capability vocabulary): 7. T11 contract & the thirteen capability spectra (frames T12T16; sync with T10) 8. T12 page model + T13 history portability (parallel; T13 aligns with T4) 9. T14 binding + T15 syntax translation (parallel) 10. T16 addressing, identity & navigation (refines T8/T5; finalize adapter-contract spec)