generated from coulomb/repo-seed
spec(SHARD-WP-0005 T2): split page identity / placement / content equivalence
Fixes bug B-1: page identity is a stable assigned handle (survives edits), not a content fingerprint; fingerprints identify versions/content for the equivalence mechanism. Chain: identity -> placements -> equivalence. (§7.2) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -288,17 +288,32 @@ All shapes reduce to a common skeleton: **`(content | source, structure, provena
|
||||
[derivation rule])`**. The page model stores the richest faithful form as canonical and treats
|
||||
any Markdown rendering of a non-Markdown shape as a *lossy projection* (I-4 + fidelity report).
|
||||
|
||||
### 7.2 Identity, placement, addressing
|
||||
### 7.2 Identity, placement, addressing — three distinct concepts
|
||||
|
||||
- **Identity** is a content-derived or native-id-wrapped key, *shard-scoped* so native UUIDs
|
||||
survive projection and don't collide.
|
||||
- **Placement** is separate: one identity → N placements (paths/shards) = a DAG. No single
|
||||
canonical path (I-9).
|
||||
- **Span addressing** — adopt native span IDs where minted (Roam `:block/uid`, Logseq `id::`,
|
||||
Notion/CRDT UUID); else content fingerprint or path+range. The Xanadu tumbler is the ideal
|
||||
the scheme aims at without requiring.
|
||||
- **Provenance envelope** rides on every page and span (source shard, freshness, liveness,
|
||||
overlay status, authz context, divergence, derivation lineage).
|
||||
The earlier draft used "identity" for two different things and (worse) suggested deriving page
|
||||
identity from a content fingerprint — which would make *editing a page change its identity* and
|
||||
break every reference to it (review bug B-1). They are pulled apart here:
|
||||
|
||||
- **Page identity — a *stable handle*.** A shard-scoped, durable key that **survives edits**:
|
||||
the backend's native page/note id where one exists (Roam/Notion/Trilium uid, a git path
|
||||
treated as a name, a wiki page name), wrapped in a shard scope so it survives projection and
|
||||
never collides across shards. Identity is *assigned/minted, not computed from content*.
|
||||
References, placement, transclusion targets, and overlays all key on identity.
|
||||
- **Placement — *where* an identity sits.** One identity → N placements (paths/shards) = a DAG;
|
||||
no single canonical path (I-9). Placement can change without changing identity.
|
||||
- **Content equivalence — *detecting sameness*, never identity.** A **content fingerprint** (or
|
||||
span-set overlap) identifies a *version / a piece of content*, used to detect that two
|
||||
*distinct identities* hold the same or derived content (the equivalence/chorus mechanism,
|
||||
§8.4). A fingerprint is never a page's identity: same page, edited → new fingerprint, **same
|
||||
identity**; two pages, identical content → same fingerprint, **different identities**.
|
||||
- **Span addressing** — a sub-page address within an identity: adopt native span IDs where
|
||||
minted (Roam `:block/uid`, Logseq `id::`, Notion/CRDT UUID); else a *position* address
|
||||
(path+range) or a *content-fingerprint* address for equivalence/transclusion. The Xanadu
|
||||
tumbler is the portable ideal the scheme aims at without requiring.
|
||||
- **Provenance envelope** rides on pages and spans (see §7.3 for its layered, low-cost form).
|
||||
|
||||
So the chain is: **identity (stable) → placements (N, mutable) → equivalence (cross-identity
|
||||
sameness, fingerprint-based)** — three concepts, three mechanisms, never conflated.
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -52,7 +52,7 @@ folded in) plus a new **"Known scaling risks & open problems"** section.
|
||||
|
||||
```task
|
||||
id: SHARD-WP-0005-T1
|
||||
status: todo
|
||||
status: done
|
||||
priority: high
|
||||
state_hub_task_id: "0bb17223-b458-41a4-b86c-c36b2689cf81"
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user