generated from coulomb/repo-seed
feat(coordination): git backend wiring + verbatim log migration (WP-0009 T4)
InformationSpace.git_backed(space_id, repo_path) wires the git coordination log; the default constructor stays in-memory for tests (new keyword-only store=). A one-time importer (migrate_space / import_log / JSONL export+import) replays an existing in-memory or JSON log into git verbatim — preserving seq, timestamp and actor (union-without-erasure) and refusing out-of-order import. Same fold after migration; no behavioural change to overlay/union. SCOPE updated; WP-0009 done. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -8,11 +8,15 @@ a network API is a later workplan.
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from pathlib import Path
|
||||
|
||||
from shard_wiki.adapters import ShardAdapter, assert_conformant
|
||||
from shard_wiki.coordination import (
|
||||
ApplyResult,
|
||||
DecisionLog,
|
||||
EventStore,
|
||||
EventType,
|
||||
GitEventStore,
|
||||
Overlay,
|
||||
OverlayEngine,
|
||||
)
|
||||
@@ -24,12 +28,31 @@ __all__ = ["InformationSpace"]
|
||||
|
||||
|
||||
class InformationSpace:
|
||||
def __init__(self, space_id: str, policy: Policy = DEFAULT_POLICY) -> None:
|
||||
def __init__(
|
||||
self,
|
||||
space_id: str,
|
||||
policy: Policy = DEFAULT_POLICY,
|
||||
*,
|
||||
store: EventStore | None = None,
|
||||
) -> None:
|
||||
"""Tie the slice together. ``store`` selects the coordination-log backend: the default
|
||||
in-memory store (tests) or a git-addressable one. Use :meth:`git_backed` for the latter."""
|
||||
self.space_id = space_id
|
||||
self.log = DecisionLog()
|
||||
self.log = DecisionLog(store)
|
||||
self.union = UnionGraph(space_id, log=self.log, policy=policy)
|
||||
self.overlays = OverlayEngine(space_id, self.log)
|
||||
|
||||
@classmethod
|
||||
def git_backed(
|
||||
cls,
|
||||
space_id: str,
|
||||
repo_path: str | Path,
|
||||
policy: Policy = DEFAULT_POLICY,
|
||||
) -> InformationSpace:
|
||||
"""An information space whose coordination log is git-addressable (history/patch/review/
|
||||
backup — I-6). The decision log lives in the git repo at ``repo_path``."""
|
||||
return cls(space_id, policy, store=GitEventStore(repo_path))
|
||||
|
||||
def attach(self, adapter: ShardAdapter) -> None:
|
||||
"""Attach a shard — only if it passes conformance (verified profile, I-3/§6.6)."""
|
||||
assert_conformant(adapter)
|
||||
|
||||
Reference in New Issue
Block a user