generated from coulomb/repo-seed
feat(views): wire derived views onto InformationSpace + integration (WP-0010 T5)
Expose backlinks(name), recent_changes(), all_pages(), site_map() on InformationSpace. Integration test exercises all four over two shards (BackLinks aggregate across shards, AllPages/SiteMap span the union, RecentChanges merges an alias decision with shard edits). SCOPE updated; WP-0010 done. 152 tests green. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -23,6 +23,16 @@ from shard_wiki.coordination import (
|
||||
from shard_wiki.model import Page
|
||||
from shard_wiki.policy import DEFAULT_POLICY, Policy
|
||||
from shard_wiki.union import Resolution, UnionGraph
|
||||
from shard_wiki.views import (
|
||||
AllPagesEntry,
|
||||
BackLink,
|
||||
ChangeEntry,
|
||||
SiteMapNode,
|
||||
all_pages,
|
||||
build_backlinks,
|
||||
recent_changes,
|
||||
site_map,
|
||||
)
|
||||
|
||||
__all__ = ["InformationSpace"]
|
||||
|
||||
@@ -92,3 +102,21 @@ class InformationSpace:
|
||||
draft as local truth (I-5: overlay before mutation, always)."""
|
||||
overlay = self.overlay(name, body, actor=actor)
|
||||
return self.apply_overlay(overlay.overlay_id)
|
||||
|
||||
# --- derived views (SHARD-WP-0010): recomputable, provenance-carrying, presentation-free ---
|
||||
|
||||
def backlinks(self, name: str, *, camelcase: bool = False) -> tuple[BackLink, ...]:
|
||||
"""Pages across the union that link to ``name`` (UC-18)."""
|
||||
return build_backlinks(self.union, camelcase=camelcase).to(name)
|
||||
|
||||
def recent_changes(self, *, limit: int | None = None) -> tuple[ChangeEntry, ...]:
|
||||
"""The merged newest-first change feed: coordination journal + shard signals (UC-17)."""
|
||||
return recent_changes(self.union, self.log, self.space_id, limit=limit)
|
||||
|
||||
def all_pages(self) -> tuple[AllPagesEntry, ...]:
|
||||
"""The union's distinct pages, chorus/equivalence-collapsed with divergence noted."""
|
||||
return all_pages(self.union)
|
||||
|
||||
def site_map(self) -> SiteMapNode:
|
||||
"""The union namespace tree built from page placements."""
|
||||
return site_map(self.union)
|
||||
|
||||
Reference in New Issue
Block a user