rememberstack 0.1.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- rememberstack/__init__.py +9 -0
- rememberstack/adapters/__init__.py +42 -0
- rememberstack/adapters/codex_writer.py +221 -0
- rememberstack/adapters/markitdown_converter.py +42 -0
- rememberstack/adapters/openrouter.py +136 -0
- rememberstack/adapters/selfhost/__init__.py +54 -0
- rememberstack/adapters/selfhost/forget.py +66 -0
- rememberstack/adapters/selfhost/git.py +374 -0
- rememberstack/adapters/selfhost/lance.py +328 -0
- rememberstack/adapters/selfhost/minio.py +279 -0
- rememberstack/adapters/selfhost/mounts.py +249 -0
- rememberstack/adapters/selfhost/object_store.py +130 -0
- rememberstack/adapters/selfhost/projection.py +80 -0
- rememberstack/adapters/selfhost/queue.py +137 -0
- rememberstack/adapters/selfhost/telemetry.py +45 -0
- rememberstack/adapters/selfhost/watcher.py +70 -0
- rememberstack/adapters/testing/__init__.py +15 -0
- rememberstack/adapters/testing/cost_meter.py +13 -0
- rememberstack/adapters/testing/model_provider.py +83 -0
- rememberstack/adapters/testing/queue.py +43 -0
- rememberstack/adapters/testing/telemetry.py +22 -0
- rememberstack/client.py +19 -0
- rememberstack/core/__init__.py +127 -0
- rememberstack/core/blockizer.py +189 -0
- rememberstack/core/chunker.py +216 -0
- rememberstack/core/consumption_skill.py +275 -0
- rememberstack/core/conversion.py +76 -0
- rememberstack/core/core_manifest.py +598 -0
- rememberstack/core/extension_packs.py +124 -0
- rememberstack/core/forget.py +17 -0
- rememberstack/core/knowledge_authored.py +276 -0
- rememberstack/core/knowledge_compile.py +215 -0
- rememberstack/core/knowledge_fact_sheet.py +210 -0
- rememberstack/core/knowledge_hashing.py +68 -0
- rememberstack/core/knowledge_planner.py +64 -0
- rememberstack/core/knowledge_writer.py +175 -0
- rememberstack/core/ranking.py +200 -0
- rememberstack/core/recipe_linter.py +149 -0
- rememberstack/core/section_snap.py +209 -0
- rememberstack/core/storage_routing.py +27 -0
- rememberstack/eval/__init__.py +53 -0
- rememberstack/eval/consumption.py +141 -0
- rememberstack/eval/contradiction.py +184 -0
- rememberstack/eval/harness.py +136 -0
- rememberstack/eval/lifecycle.py +400 -0
- rememberstack/eval/operational_scale.py +49 -0
- rememberstack/eval/resolution.py +255 -0
- rememberstack/eval/retrieval_spikes.py +50 -0
- rememberstack/eval/skeleton.py +231 -0
- rememberstack/llm/__init__.py +1 -0
- rememberstack/model/__init__.py +589 -0
- rememberstack/model/adjudication.py +100 -0
- rememberstack/model/auth.py +27 -0
- rememberstack/model/blocks.py +30 -0
- rememberstack/model/chunks.py +190 -0
- rememberstack/model/claims.py +162 -0
- rememberstack/model/client.py +98 -0
- rememberstack/model/clustering.py +54 -0
- rememberstack/model/component_version.py +124 -0
- rememberstack/model/consumption.py +88 -0
- rememberstack/model/conversion.py +31 -0
- rememberstack/model/deployment.py +53 -0
- rememberstack/model/documents.py +168 -0
- rememberstack/model/envelope.py +513 -0
- rememberstack/model/evaluation.py +72 -0
- rememberstack/model/forget.py +143 -0
- rememberstack/model/git.py +13 -0
- rememberstack/model/knowledge.py +840 -0
- rememberstack/model/knowledge_authored.py +325 -0
- rememberstack/model/knowledge_planner.py +431 -0
- rememberstack/model/lifecycle.py +42 -0
- rememberstack/model/model_provider.py +78 -0
- rememberstack/model/mounts.py +24 -0
- rememberstack/model/object_store.py +21 -0
- rememberstack/model/operational_scale.py +59 -0
- rememberstack/model/operations.py +153 -0
- rememberstack/model/processing.py +228 -0
- rememberstack/model/queue.py +73 -0
- rememberstack/model/recipes.py +83 -0
- rememberstack/model/relations.py +79 -0
- rememberstack/model/resolution.py +83 -0
- rememberstack/model/retrieval_spikes.py +62 -0
- rememberstack/model/sections.py +120 -0
- rememberstack/model/telemetry.py +30 -0
- rememberstack/ports/__init__.py +29 -0
- rememberstack/ports/auth.py +16 -0
- rememberstack/ports/connector.py +23 -0
- rememberstack/ports/cost_meter.py +17 -0
- rememberstack/ports/forget.py +20 -0
- rememberstack/ports/git.py +20 -0
- rememberstack/ports/model_provider.py +28 -0
- rememberstack/ports/mounts.py +16 -0
- rememberstack/ports/object_store.py +27 -0
- rememberstack/ports/p1_index.py +92 -0
- rememberstack/ports/purge.py +93 -0
- rememberstack/ports/queue.py +23 -0
- rememberstack/ports/telemetry.py +21 -0
- rememberstack/profiles/__init__.py +22 -0
- rememberstack/profiles/selfhost.py +324 -0
- rememberstack/profiles/selfhost_forget.py +158 -0
- rememberstack/profiles/selfhost_operations.py +95 -0
- rememberstack/py.typed +1 -0
- rememberstack/spine/__init__.py +93 -0
- rememberstack/spine/admission.py +26 -0
- rememberstack/spine/backfill.py +168 -0
- rememberstack/spine/catalog_contract.py +742 -0
- rememberstack/spine/chunk_catalog.py +237 -0
- rememberstack/spine/claim_catalog.py +298 -0
- rememberstack/spine/clustering.py +740 -0
- rememberstack/spine/component_versions.py +208 -0
- rememberstack/spine/consumption.py +81 -0
- rememberstack/spine/deployment_bootstrap.py +445 -0
- rememberstack/spine/document_catalog.py +621 -0
- rememberstack/spine/entity_registry.py +205 -0
- rememberstack/spine/extension_packs.py +220 -0
- rememberstack/spine/fact_catalog.py +571 -0
- rememberstack/spine/forget.py +1753 -0
- rememberstack/spine/knowledge.py +5467 -0
- rememberstack/spine/lifecycle.py +1071 -0
- rememberstack/spine/migrations/__init__.py +1 -0
- rememberstack/spine/migrations/_helpers.py +153 -0
- rememberstack/spine/migrations/env.py +58 -0
- rememberstack/spine/migrations/script.py.mako +27 -0
- rememberstack/spine/migrations/versions/__init__.py +1 -0
- rememberstack/spine/migrations/versions/p0_02_0001_extensions_enums.py +189 -0
- rememberstack/spine/migrations/versions/p0_02_0002_infrastructure_registries.py +321 -0
- rememberstack/spine/migrations/versions/p0_02_0003_entities_evaluation_e0_e1.py +631 -0
- rememberstack/spine/migrations/versions/p0_02_0004_claims_facts_evidence.py +411 -0
- rememberstack/spine/migrations/versions/p0_02_0005_projection_knowledge_retrieval.py +391 -0
- rememberstack/spine/migrations/versions/p0_02_0006_partitions_views.py +158 -0
- rememberstack/spine/migrations/versions/p2_06_0007_invalidated_outcome.py +26 -0
- rememberstack/spine/migrations/versions/p3_01_0008_document_version_target.py +58 -0
- rememberstack/spine/migrations/versions/p3_05_0009_reconcile_stage.py +27 -0
- rememberstack/spine/migrations/versions/p3_07_0010_lifecycle_eval_suite.py +25 -0
- rememberstack/spine/migrations/versions/p4_01_0011_survivor_view_rewrite.py +57 -0
- rememberstack/spine/migrations/versions/p6_02_0012_knowledge_compile_recovery.py +58 -0
- rememberstack/spine/migrations/versions/p6_04_0013_knowledge_writer_ledger.py +46 -0
- rememberstack/spine/migrations/versions/p6_05_0014_knowledge_planner_runtime.py +217 -0
- rememberstack/spine/migrations/versions/p6_06_0015_authored_dispatch_runtime.py +38 -0
- rememberstack/spine/migrations/versions/p7_02_0016_operational_eval_suite.py +19 -0
- rememberstack/spine/migrations/versions/p7_05_0017_hard_forget.py +55 -0
- rememberstack/spine/observation_adjudication.py +778 -0
- rememberstack/spine/operations.py +298 -0
- rememberstack/spine/projection.py +662 -0
- rememberstack/spine/recipes.py +276 -0
- rememberstack/spine/resolver.py +763 -0
- rememberstack/spine/review.py +650 -0
- rememberstack/spine/settings.py +22 -0
- rememberstack/spine/supersession.py +510 -0
- rememberstack/spine/sync.py +128 -0
- rememberstack/spine/work_ledger.py +816 -0
- rememberstack/surfaces/__init__.py +110 -0
- rememberstack/surfaces/cli.py +447 -0
- rememberstack/surfaces/consumption_skill.py +87 -0
- rememberstack/surfaces/graph_queries.py +698 -0
- rememberstack/surfaces/http_api.py +377 -0
- rememberstack/surfaces/mcp.py +67 -0
- rememberstack/surfaces/query_engine.py +1591 -0
- rememberstack/surfaces/recipe_executor.py +185 -0
- rememberstack/surfaces/recipe_surface.py +219 -0
- rememberstack/surfaces/remote_mcp.py +133 -0
- rememberstack/surfaces/sdk.py +324 -0
- rememberstack/workers/__init__.py +155 -0
- rememberstack/workers/base.py +312 -0
- rememberstack/workers/e0.py +577 -0
- rememberstack/workers/e1.py +425 -0
- rememberstack/workers/e2.py +525 -0
- rememberstack/workers/e3.py +434 -0
- rememberstack/workers/forget.py +299 -0
- rememberstack/workers/knowledge_authored.py +146 -0
- rememberstack/workers/knowledge_driver.py +735 -0
- rememberstack/workers/knowledge_fact_sheet.py +123 -0
- rememberstack/workers/knowledge_planner.py +325 -0
- rememberstack/workers/knowledge_writer.py +393 -0
- rememberstack/workers/operations.py +42 -0
- rememberstack/workers/p1.py +234 -0
- rememberstack/workers/p2.py +513 -0
- rememberstack/workers/p2_analytics.py +276 -0
- rememberstack/workers/p3.py +673 -0
- rememberstack/workers/reconcile.py +485 -0
- rememberstack/workers/sync.py +168 -0
- rememberstack-0.1.0.dist-info/METADATA +213 -0
- rememberstack-0.1.0.dist-info/RECORD +186 -0
- rememberstack-0.1.0.dist-info/WHEEL +4 -0
- rememberstack-0.1.0.dist-info/entry_points.txt +2 -0
- rememberstack-0.1.0.dist-info/licenses/LICENSE +201 -0
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
"""Typed D74 hard-forget manifests, progress, and boundary failures."""
|
|
2
|
+
|
|
3
|
+
from enum import StrEnum
|
|
4
|
+
import hashlib
|
|
5
|
+
import json
|
|
6
|
+
from typing import Annotated
|
|
7
|
+
from typing import Self
|
|
8
|
+
from typing import TypeAlias
|
|
9
|
+
from uuid import UUID
|
|
10
|
+
|
|
11
|
+
from pydantic import BaseModel
|
|
12
|
+
from pydantic import ConfigDict
|
|
13
|
+
from pydantic import Field
|
|
14
|
+
from pydantic import model_validator
|
|
15
|
+
from pydantic import StringConstraints
|
|
16
|
+
|
|
17
|
+
from rememberstack.model.object_store import ObjectKey
|
|
18
|
+
from rememberstack.model.queue import UTCDateTime
|
|
19
|
+
|
|
20
|
+
Sha256: TypeAlias = Annotated[
|
|
21
|
+
str, StringConstraints(pattern=r"^[0-9a-f]{64}$", strict=True)
|
|
22
|
+
]
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class ForgetManifestStatus(StrEnum):
|
|
26
|
+
"""Exact values of the binding PostgreSQL ``forget_manifest_status`` enum."""
|
|
27
|
+
|
|
28
|
+
PREPARING = "preparing"
|
|
29
|
+
ACCEPTED = "accepted"
|
|
30
|
+
COMPLETE = "complete"
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
class ForgetManifest(BaseModel):
|
|
34
|
+
"""One immutable, content-free lineage-erasure manifest (D74)."""
|
|
35
|
+
|
|
36
|
+
model_config = ConfigDict(frozen=True, extra="forbid")
|
|
37
|
+
|
|
38
|
+
schema_version: int = Field(default=1, ge=1, le=1)
|
|
39
|
+
forget_id: UUID
|
|
40
|
+
deployment_id: UUID
|
|
41
|
+
doc_id: UUID
|
|
42
|
+
requested_at: UTCDateTime
|
|
43
|
+
source_identity_hash: Sha256 | None = None
|
|
44
|
+
content_hashes: tuple[Sha256, ...] = ()
|
|
45
|
+
chunk_ids: tuple[UUID, ...] = ()
|
|
46
|
+
claim_ids: tuple[UUID, ...] = ()
|
|
47
|
+
mention_ids: tuple[UUID, ...] = ()
|
|
48
|
+
resolved_entity_ids: tuple[UUID, ...] = ()
|
|
49
|
+
fact_ids: tuple[UUID, ...] = ()
|
|
50
|
+
entity_ids: tuple[UUID, ...] = ()
|
|
51
|
+
object_keys: tuple[ObjectKey, ...] = ()
|
|
52
|
+
projection_prefixes: tuple[ObjectKey, ...] = ()
|
|
53
|
+
k_artifact_ids: tuple[UUID, ...] = ()
|
|
54
|
+
|
|
55
|
+
@model_validator(mode="after")
|
|
56
|
+
def require_canonical_sets(self) -> Self:
|
|
57
|
+
"""Require every tuple-set to be sorted and duplicate-free for stable bytes."""
|
|
58
|
+
fields = (
|
|
59
|
+
"content_hashes",
|
|
60
|
+
"chunk_ids",
|
|
61
|
+
"claim_ids",
|
|
62
|
+
"mention_ids",
|
|
63
|
+
"resolved_entity_ids",
|
|
64
|
+
"fact_ids",
|
|
65
|
+
"entity_ids",
|
|
66
|
+
"object_keys",
|
|
67
|
+
"projection_prefixes",
|
|
68
|
+
"k_artifact_ids",
|
|
69
|
+
)
|
|
70
|
+
for field in fields:
|
|
71
|
+
values = getattr(self, field)
|
|
72
|
+
rendered = tuple(_sort_value(value=value) for value in values)
|
|
73
|
+
if rendered != tuple(sorted(set(rendered))):
|
|
74
|
+
raise ValueError(f"{field} must be sorted and duplicate-free")
|
|
75
|
+
return self
|
|
76
|
+
|
|
77
|
+
def canonical_bytes(self) -> bytes:
|
|
78
|
+
"""Render stable portable bytes used by the append idempotency contract."""
|
|
79
|
+
payload = self.model_dump(mode="json")
|
|
80
|
+
return json.dumps(
|
|
81
|
+
payload, ensure_ascii=False, separators=(",", ":"), sort_keys=True
|
|
82
|
+
).encode("utf-8")
|
|
83
|
+
|
|
84
|
+
def sha256(self) -> str:
|
|
85
|
+
"""Return the lowercase SHA-256 of the canonical manifest bytes."""
|
|
86
|
+
return hashlib.sha256(self.canonical_bytes()).hexdigest()
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
class ForgetManifestRecord(BaseModel):
|
|
90
|
+
"""Local PostgreSQL materialization and verification progress for one manifest."""
|
|
91
|
+
|
|
92
|
+
model_config = ConfigDict(frozen=True, extra="forbid")
|
|
93
|
+
|
|
94
|
+
forget_id: UUID
|
|
95
|
+
deployment_id: UUID
|
|
96
|
+
doc_id: UUID
|
|
97
|
+
manifest: ForgetManifest | None
|
|
98
|
+
manifest_hash: Sha256 | None
|
|
99
|
+
status: ForgetManifestStatus
|
|
100
|
+
prepared_at: UTCDateTime
|
|
101
|
+
accepted_at: UTCDateTime | None
|
|
102
|
+
completed_at: UTCDateTime | None
|
|
103
|
+
last_verified_at: UTCDateTime | None
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
class ForgetError(RuntimeError):
|
|
107
|
+
"""Base class for a known hard-forget boundary failure."""
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
class ForgetInProgressError(ForgetError):
|
|
111
|
+
"""A public or ordinary-work call reached a deployment under the D74 barrier."""
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
class ForgetManifestConflictError(ForgetError):
|
|
115
|
+
"""One forget identity was reused with different immutable manifest bytes."""
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
class ForgetManifestNotFoundError(ForgetError):
|
|
119
|
+
"""The requested deployment-owned forget manifest does not exist."""
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
class ForgetTargetNotFoundError(ForgetError):
|
|
123
|
+
"""The requested deployment does not own the target document lineage."""
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
class ForgetRedactionRequiredError(ForgetError):
|
|
127
|
+
"""Owner-controlled K paths still cite the target and must be redacted first."""
|
|
128
|
+
|
|
129
|
+
def __init__(self, *, paths: tuple[str, ...]) -> None:
|
|
130
|
+
"""Retain the exact sorted blocking repository paths for the caller."""
|
|
131
|
+
super().__init__("owner redaction is required before hard-forget acceptance")
|
|
132
|
+
self.paths = paths
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
class ForgottenSourceError(ForgetError):
|
|
136
|
+
"""An ingest matched an irreversible source-identity or content guard."""
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
def _sort_value(*, value: object) -> str:
|
|
140
|
+
"""Render one manifest set member to its canonical lexical sort key."""
|
|
141
|
+
if isinstance(value, ObjectKey):
|
|
142
|
+
return value.root
|
|
143
|
+
return str(value)
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"""Shared value identifying a checked-out or published Plane-K revision."""
|
|
2
|
+
|
|
3
|
+
from typing import Annotated
|
|
4
|
+
|
|
5
|
+
from pydantic import ConfigDict
|
|
6
|
+
from pydantic import Field
|
|
7
|
+
from pydantic import RootModel
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class KRevision(RootModel[Annotated[str, Field(min_length=1)]]):
|
|
11
|
+
"""Opaque git revision returned by the narrow Plane-K remote seam."""
|
|
12
|
+
|
|
13
|
+
model_config = ConfigDict(frozen=True)
|