diff --git a/docs/graph-explorer-contract.md b/docs/graph-explorer-contract.md
index 961c24c..f0283eb 100644
--- a/docs/graph-explorer-contract.md
+++ b/docs/graph-explorer-contract.md
@@ -34,6 +34,13 @@ The manifest tells a graph shell where to load data, which fields are stable,
which layers exist, which filter fields are available, and which modes the host
supports.
+Fabric currently declares `profile_persistence: local`. That means the shell
+stores named map views in browser `localStorage`, supports duplicate/delete
+inside that browser, and can copy a URL with the current query parameters and a
+state blob. Local profile ids can be reopened in the same browser profile; the
+copied state blob is the portable sharing path until a host-backed profile API
+is added.
+
The payload is compatible with Cytoscape-style element arrays:
```json
@@ -140,13 +147,13 @@ The extracted `graph-explorer-engine` should own:
- filter and manual override UI
- hover popups and selection detail panels
- profile UI when the host declares profile endpoints
-- URL state and copied state blobs
+- browser-local profiles, URL state, and copied state blobs
- schema definitions and compatibility tests
Host repos should own:
- graph projection and metadata enrichment
-- profile persistence
+- host-side profile persistence, when a repo needs shared/team profiles
- authentication and authorization
- domain-specific graph modes
- deep links back to source systems
diff --git a/railiance_fabric/graph_explorer.py b/railiance_fabric/graph_explorer.py
index be166ea..e136e3d 100644
--- a/railiance_fabric/graph_explorer.py
+++ b/railiance_fabric/graph_explorer.py
@@ -175,10 +175,10 @@ def fabric_graph_explorer_manifest(base_url: str = "") -> dict[str, Any]:
"description": "Highlight dependencies that have no accepted provider binding.",
},
],
- "profile_persistence": "none",
+ "profile_persistence": "local",
"shareable_state": {
"url_parameters": True,
- "profile_id": False,
+ "profile_id": True,
"state_blob": True,
},
}
diff --git a/railiance_fabric/graph_explorer_ui.py b/railiance_fabric/graph_explorer_ui.py
index 74d2021..06d1c9e 100644
--- a/railiance_fabric/graph_explorer_ui.py
+++ b/railiance_fabric/graph_explorer_ui.py
@@ -151,10 +151,12 @@ def graph_explorer_page() -> str: