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,76 @@
|
|
|
1
|
+
"""The D38 conversion router: raw bytes → Markdown, one pluggable route per MIME.
|
|
2
|
+
|
|
3
|
+
The router is the per-deployment routing table; converters are interchangeable
|
|
4
|
+
implementations of one protocol. The route taken and the converter's identity
|
|
5
|
+
are recorded on every representation (D65), so a converter change is always a
|
|
6
|
+
version bump, never a silent difference.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from collections.abc import Mapping
|
|
10
|
+
from typing import Final
|
|
11
|
+
from typing import Protocol
|
|
12
|
+
from typing import runtime_checkable
|
|
13
|
+
|
|
14
|
+
from rememberstack.model import ConversionError
|
|
15
|
+
from rememberstack.model import ConversionResult
|
|
16
|
+
from rememberstack.model import UnroutableMimeError
|
|
17
|
+
|
|
18
|
+
PASSTHROUGH_CONVERTER_VERSION: Final = "passthrough-2026.07"
|
|
19
|
+
"""Pins the passthrough route's behavior (strict UTF-8 decode, no rewriting)."""
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
@runtime_checkable
|
|
23
|
+
class Converter(Protocol):
|
|
24
|
+
"""One conversion route: raw bytes of a supported MIME type → Markdown."""
|
|
25
|
+
|
|
26
|
+
@property
|
|
27
|
+
def name(self) -> str:
|
|
28
|
+
"""The route name recorded on representations (e.g. ``markitdown``)."""
|
|
29
|
+
...
|
|
30
|
+
|
|
31
|
+
@property
|
|
32
|
+
def version(self) -> str:
|
|
33
|
+
"""The converter version (D38): a bump creates new representations."""
|
|
34
|
+
...
|
|
35
|
+
|
|
36
|
+
def convert(self, *, content: bytes, mime: str) -> ConversionResult:
|
|
37
|
+
"""Produce the Markdown reading; raise ``ConversionError`` on bad input."""
|
|
38
|
+
...
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
class ConversionRouter:
|
|
42
|
+
"""Route an input MIME type to its configured converter (D38 routing table)."""
|
|
43
|
+
|
|
44
|
+
def __init__(self, *, routes: Mapping[str, Converter]) -> None:
|
|
45
|
+
"""Bind the deployment's MIME → converter table."""
|
|
46
|
+
self._routes = dict(routes)
|
|
47
|
+
|
|
48
|
+
def converter_for(self, *, mime: str) -> Converter:
|
|
49
|
+
"""Return the route for a MIME type; an unrouted type is a typed error."""
|
|
50
|
+
converter = self._routes.get(mime)
|
|
51
|
+
if converter is None:
|
|
52
|
+
raise UnroutableMimeError(f"no conversion route accepts mime {mime!r}")
|
|
53
|
+
return converter
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
class MarkdownPassthroughConverter:
|
|
57
|
+
"""The identity route for inputs that already are Markdown or plain text."""
|
|
58
|
+
|
|
59
|
+
@property
|
|
60
|
+
def name(self) -> str:
|
|
61
|
+
"""The route name recorded on representations."""
|
|
62
|
+
return "passthrough"
|
|
63
|
+
|
|
64
|
+
@property
|
|
65
|
+
def version(self) -> str:
|
|
66
|
+
"""The pinned passthrough behavior version."""
|
|
67
|
+
return PASSTHROUGH_CONVERTER_VERSION
|
|
68
|
+
|
|
69
|
+
def convert(self, *, content: bytes, mime: str) -> ConversionResult:
|
|
70
|
+
"""Decode the bytes as UTF-8 text; undecodable input is a typed failure."""
|
|
71
|
+
try:
|
|
72
|
+
return ConversionResult(document_md=content.decode("utf-8"))
|
|
73
|
+
except UnicodeDecodeError as err:
|
|
74
|
+
raise ConversionError(
|
|
75
|
+
f"input declared {mime!r} is not valid UTF-8 text"
|
|
76
|
+
) from err
|
|
@@ -0,0 +1,598 @@
|
|
|
1
|
+
"""Immutable, dependency-safe transcription of the normative core-v1 registry."""
|
|
2
|
+
|
|
3
|
+
from dataclasses import dataclass
|
|
4
|
+
from typing import Literal
|
|
5
|
+
from uuid import UUID
|
|
6
|
+
|
|
7
|
+
OntologyTier = Literal["core"]
|
|
8
|
+
OntologyStatus = Literal["active"]
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
@dataclass(frozen=True, slots=True)
|
|
12
|
+
class EntityTypeDefinition:
|
|
13
|
+
"""One immutable universal-core entity-type definition."""
|
|
14
|
+
|
|
15
|
+
type: str
|
|
16
|
+
parent_type: None
|
|
17
|
+
description: str
|
|
18
|
+
examples: tuple[str, ...]
|
|
19
|
+
schema_org_ref: str | None
|
|
20
|
+
tier: OntologyTier
|
|
21
|
+
pack_id: None
|
|
22
|
+
scope_id: UUID | None
|
|
23
|
+
status: OntologyStatus
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
@dataclass(frozen=True, slots=True)
|
|
27
|
+
class PredicateDefinition:
|
|
28
|
+
"""One immutable universal-core predicate definition."""
|
|
29
|
+
|
|
30
|
+
predicate: str
|
|
31
|
+
parent_predicate: str | None
|
|
32
|
+
description: str
|
|
33
|
+
examples: tuple[str, ...]
|
|
34
|
+
synonyms: tuple[str, ...]
|
|
35
|
+
schema_org_ref: str | None
|
|
36
|
+
tier: OntologyTier
|
|
37
|
+
pack_id: None
|
|
38
|
+
scope_id: UUID | None
|
|
39
|
+
usage_count: int
|
|
40
|
+
is_change_prone: bool
|
|
41
|
+
exclude_from_graph_distance: bool
|
|
42
|
+
status: OntologyStatus
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
@dataclass(frozen=True, slots=True)
|
|
46
|
+
class PredicateSignatureDefinition:
|
|
47
|
+
"""One immutable concrete universal-core domain/range signature."""
|
|
48
|
+
|
|
49
|
+
predicate: str
|
|
50
|
+
subject_type: str
|
|
51
|
+
object_type: str
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
@dataclass(frozen=True, slots=True)
|
|
55
|
+
class CoreManifest:
|
|
56
|
+
"""Complete immutable universal-core registry manifest."""
|
|
57
|
+
|
|
58
|
+
manifest_version: str
|
|
59
|
+
entity_types: tuple[EntityTypeDefinition, ...]
|
|
60
|
+
predicates: tuple[PredicateDefinition, ...]
|
|
61
|
+
predicate_signatures: tuple[PredicateSignatureDefinition, ...]
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
_CORE_TYPE_NAMES: tuple[str, ...] = (
|
|
65
|
+
"Person",
|
|
66
|
+
"Organization",
|
|
67
|
+
"Place",
|
|
68
|
+
"Document",
|
|
69
|
+
"Event",
|
|
70
|
+
"Concept",
|
|
71
|
+
"Project",
|
|
72
|
+
"Product",
|
|
73
|
+
)
|
|
74
|
+
"""The eight universal-core roots in display order — also the `any` expansion order."""
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
@dataclass(frozen=True, slots=True)
|
|
78
|
+
class PredicateDomainRange:
|
|
79
|
+
"""Compact domain/range unions for one predicate — the normative signature source.
|
|
80
|
+
|
|
81
|
+
Product form pairs every subject type with every object type; the same-kind
|
|
82
|
+
form (`part_of`) pairs each core type with itself. The concrete signature
|
|
83
|
+
rows are always derived by `_expand_signatures`, never hand-listed (D69,
|
|
84
|
+
refined 2026-07-18).
|
|
85
|
+
"""
|
|
86
|
+
|
|
87
|
+
predicate: str
|
|
88
|
+
subject_types: tuple[str, ...]
|
|
89
|
+
object_types: tuple[str, ...]
|
|
90
|
+
same_kind: bool = False
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
_ANY: tuple[str, ...] = _CORE_TYPE_NAMES
|
|
94
|
+
|
|
95
|
+
_PREDICATE_DOMAIN_RANGES: tuple[PredicateDomainRange, ...] = (
|
|
96
|
+
PredicateDomainRange(
|
|
97
|
+
predicate="works_for", subject_types=("Person",), object_types=("Organization",)
|
|
98
|
+
),
|
|
99
|
+
PredicateDomainRange(
|
|
100
|
+
predicate="member_of", subject_types=("Person",), object_types=("Organization",)
|
|
101
|
+
),
|
|
102
|
+
PredicateDomainRange(
|
|
103
|
+
predicate="affiliated_with",
|
|
104
|
+
subject_types=("Person", "Organization"),
|
|
105
|
+
object_types=("Organization",),
|
|
106
|
+
),
|
|
107
|
+
PredicateDomainRange(
|
|
108
|
+
predicate="founded",
|
|
109
|
+
subject_types=("Person", "Organization"),
|
|
110
|
+
object_types=("Organization",),
|
|
111
|
+
),
|
|
112
|
+
PredicateDomainRange(
|
|
113
|
+
predicate="located_in",
|
|
114
|
+
subject_types=("Organization", "Place", "Event"),
|
|
115
|
+
object_types=("Place",),
|
|
116
|
+
),
|
|
117
|
+
PredicateDomainRange(
|
|
118
|
+
predicate="part_of", subject_types=_ANY, object_types=_ANY, same_kind=True
|
|
119
|
+
),
|
|
120
|
+
PredicateDomainRange(
|
|
121
|
+
predicate="authored",
|
|
122
|
+
subject_types=("Person", "Organization"),
|
|
123
|
+
object_types=("Document",),
|
|
124
|
+
),
|
|
125
|
+
PredicateDomainRange(
|
|
126
|
+
predicate="created",
|
|
127
|
+
subject_types=("Person", "Organization"),
|
|
128
|
+
object_types=("Product", "Concept"),
|
|
129
|
+
),
|
|
130
|
+
PredicateDomainRange(
|
|
131
|
+
predicate="about", subject_types=("Document", "Event"), object_types=_ANY
|
|
132
|
+
),
|
|
133
|
+
PredicateDomainRange(
|
|
134
|
+
predicate="knows_about", subject_types=("Person",), object_types=("Concept",)
|
|
135
|
+
),
|
|
136
|
+
PredicateDomainRange(
|
|
137
|
+
predicate="knows", subject_types=("Person",), object_types=("Person",)
|
|
138
|
+
),
|
|
139
|
+
PredicateDomainRange(
|
|
140
|
+
predicate="participated_in",
|
|
141
|
+
subject_types=("Person", "Organization"),
|
|
142
|
+
object_types=("Event", "Project"),
|
|
143
|
+
),
|
|
144
|
+
PredicateDomainRange(
|
|
145
|
+
predicate="works_on",
|
|
146
|
+
subject_types=("Person", "Organization"),
|
|
147
|
+
object_types=("Project", "Product"),
|
|
148
|
+
),
|
|
149
|
+
PredicateDomainRange(
|
|
150
|
+
predicate="uses",
|
|
151
|
+
subject_types=("Person", "Organization"),
|
|
152
|
+
object_types=("Product",),
|
|
153
|
+
),
|
|
154
|
+
PredicateDomainRange(
|
|
155
|
+
predicate="reports_to", subject_types=("Person",), object_types=("Person",)
|
|
156
|
+
),
|
|
157
|
+
PredicateDomainRange(predicate="related_to", subject_types=_ANY, object_types=_ANY),
|
|
158
|
+
)
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
def _expand_signatures(
|
|
162
|
+
*, domain_ranges: tuple[PredicateDomainRange, ...]
|
|
163
|
+
) -> tuple[PredicateSignatureDefinition, ...]:
|
|
164
|
+
"""Expand the compact domain/range unions into concrete signature rows.
|
|
165
|
+
|
|
166
|
+
Product rows pair every subject type with every object type in subject-major
|
|
167
|
+
order; same-kind rows pair each core type with itself in display order. The
|
|
168
|
+
expansion is deterministic and yields exactly the 116 core-v1 rows, asserted
|
|
169
|
+
by `_assert_manifest_integrity`.
|
|
170
|
+
"""
|
|
171
|
+
signatures: list[PredicateSignatureDefinition] = []
|
|
172
|
+
for domain_range in domain_ranges:
|
|
173
|
+
pairs = (
|
|
174
|
+
tuple((name, name) for name in domain_range.subject_types)
|
|
175
|
+
if domain_range.same_kind
|
|
176
|
+
else tuple(
|
|
177
|
+
(subject, obj)
|
|
178
|
+
for subject in domain_range.subject_types
|
|
179
|
+
for obj in domain_range.object_types
|
|
180
|
+
)
|
|
181
|
+
)
|
|
182
|
+
signatures.extend(
|
|
183
|
+
PredicateSignatureDefinition(
|
|
184
|
+
predicate=domain_range.predicate, subject_type=subject, object_type=obj
|
|
185
|
+
)
|
|
186
|
+
for subject, obj in pairs
|
|
187
|
+
)
|
|
188
|
+
return tuple(signatures)
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
CORE_MANIFEST = CoreManifest(
|
|
192
|
+
manifest_version="core-v1",
|
|
193
|
+
entity_types=(
|
|
194
|
+
EntityTypeDefinition(
|
|
195
|
+
type="Person",
|
|
196
|
+
parent_type=None,
|
|
197
|
+
description="A human individual, living, deceased, or fictional.",
|
|
198
|
+
examples=("Ada Lovelace", "Grace Hopper"),
|
|
199
|
+
schema_org_ref="https://schema.org/Person",
|
|
200
|
+
tier="core",
|
|
201
|
+
pack_id=None,
|
|
202
|
+
scope_id=None,
|
|
203
|
+
status="active",
|
|
204
|
+
),
|
|
205
|
+
EntityTypeDefinition(
|
|
206
|
+
type="Organization",
|
|
207
|
+
parent_type=None,
|
|
208
|
+
description=(
|
|
209
|
+
"A structured group or legal or social entity that acts collectively."
|
|
210
|
+
),
|
|
211
|
+
examples=("Acme Corporation", "Open Source Initiative"),
|
|
212
|
+
schema_org_ref="https://schema.org/Organization",
|
|
213
|
+
tier="core",
|
|
214
|
+
pack_id=None,
|
|
215
|
+
scope_id=None,
|
|
216
|
+
status="active",
|
|
217
|
+
),
|
|
218
|
+
EntityTypeDefinition(
|
|
219
|
+
type="Place",
|
|
220
|
+
parent_type=None,
|
|
221
|
+
description="A physical, geographic, or named location.",
|
|
222
|
+
examples=("Prague", "Building 5"),
|
|
223
|
+
schema_org_ref="https://schema.org/Place",
|
|
224
|
+
tier="core",
|
|
225
|
+
pack_id=None,
|
|
226
|
+
scope_id=None,
|
|
227
|
+
status="active",
|
|
228
|
+
),
|
|
229
|
+
EntityTypeDefinition(
|
|
230
|
+
type="Document",
|
|
231
|
+
parent_type=None,
|
|
232
|
+
description=(
|
|
233
|
+
"An informational creative work that may be ingested, cited, authored, "
|
|
234
|
+
"or discussed."
|
|
235
|
+
),
|
|
236
|
+
examples=("Quarterly report", "Research paper"),
|
|
237
|
+
schema_org_ref="https://schema.org/CreativeWork",
|
|
238
|
+
tier="core",
|
|
239
|
+
pack_id=None,
|
|
240
|
+
scope_id=None,
|
|
241
|
+
status="active",
|
|
242
|
+
),
|
|
243
|
+
EntityTypeDefinition(
|
|
244
|
+
type="Event",
|
|
245
|
+
parent_type=None,
|
|
246
|
+
description="An occurrence bounded by time, place, or participants.",
|
|
247
|
+
examples=("Product launch", "Annual conference"),
|
|
248
|
+
schema_org_ref="https://schema.org/Event",
|
|
249
|
+
tier="core",
|
|
250
|
+
pack_id=None,
|
|
251
|
+
scope_id=None,
|
|
252
|
+
status="active",
|
|
253
|
+
),
|
|
254
|
+
EntityTypeDefinition(
|
|
255
|
+
type="Concept",
|
|
256
|
+
parent_type=None,
|
|
257
|
+
description=(
|
|
258
|
+
"An abstract idea, topic, category, method, or field of knowledge."
|
|
259
|
+
),
|
|
260
|
+
examples=("Machine learning", "Supply-chain resilience"),
|
|
261
|
+
schema_org_ref="https://schema.org/DefinedTerm",
|
|
262
|
+
tier="core",
|
|
263
|
+
pack_id=None,
|
|
264
|
+
scope_id=None,
|
|
265
|
+
status="active",
|
|
266
|
+
),
|
|
267
|
+
EntityTypeDefinition(
|
|
268
|
+
type="Project",
|
|
269
|
+
parent_type=None,
|
|
270
|
+
description="A coordinated effort with an intended outcome.",
|
|
271
|
+
examples=("ERP migration", "Project Atlas"),
|
|
272
|
+
schema_org_ref="https://schema.org/Project",
|
|
273
|
+
tier="core",
|
|
274
|
+
pack_id=None,
|
|
275
|
+
scope_id=None,
|
|
276
|
+
status="active",
|
|
277
|
+
),
|
|
278
|
+
EntityTypeDefinition(
|
|
279
|
+
type="Product",
|
|
280
|
+
parent_type=None,
|
|
281
|
+
description=(
|
|
282
|
+
"A good, system, service offering, or tool that people or "
|
|
283
|
+
"organizations create or use."
|
|
284
|
+
),
|
|
285
|
+
examples=("Beacon CRM", "Industrial sensor"),
|
|
286
|
+
schema_org_ref="https://schema.org/Product",
|
|
287
|
+
tier="core",
|
|
288
|
+
pack_id=None,
|
|
289
|
+
scope_id=None,
|
|
290
|
+
status="active",
|
|
291
|
+
),
|
|
292
|
+
),
|
|
293
|
+
predicates=(
|
|
294
|
+
PredicateDefinition(
|
|
295
|
+
predicate="related_to",
|
|
296
|
+
parent_predicate=None,
|
|
297
|
+
description=(
|
|
298
|
+
"A permissive relationship used only when no more specific governed "
|
|
299
|
+
"predicate fits."
|
|
300
|
+
),
|
|
301
|
+
examples=("Project Atlas related_to Beacon CRM",),
|
|
302
|
+
synonyms=("connected_to",),
|
|
303
|
+
schema_org_ref=None,
|
|
304
|
+
tier="core",
|
|
305
|
+
pack_id=None,
|
|
306
|
+
scope_id=None,
|
|
307
|
+
usage_count=0,
|
|
308
|
+
is_change_prone=False,
|
|
309
|
+
exclude_from_graph_distance=True,
|
|
310
|
+
status="active",
|
|
311
|
+
),
|
|
312
|
+
PredicateDefinition(
|
|
313
|
+
predicate="works_for",
|
|
314
|
+
parent_predicate="related_to",
|
|
315
|
+
description=(
|
|
316
|
+
"Employment or ongoing work relationship from a person to an "
|
|
317
|
+
"organization."
|
|
318
|
+
),
|
|
319
|
+
examples=("Ada works_for Acme",),
|
|
320
|
+
synonyms=("works_at", "employed_by", "employee_of"),
|
|
321
|
+
schema_org_ref="https://schema.org/worksFor",
|
|
322
|
+
tier="core",
|
|
323
|
+
pack_id=None,
|
|
324
|
+
scope_id=None,
|
|
325
|
+
usage_count=0,
|
|
326
|
+
is_change_prone=True,
|
|
327
|
+
exclude_from_graph_distance=False,
|
|
328
|
+
status="active",
|
|
329
|
+
),
|
|
330
|
+
PredicateDefinition(
|
|
331
|
+
predicate="member_of",
|
|
332
|
+
parent_predicate="related_to",
|
|
333
|
+
description=(
|
|
334
|
+
"Formal or informal membership of a person in an organization."
|
|
335
|
+
),
|
|
336
|
+
examples=("Ada member_of Standards Council",),
|
|
337
|
+
synonyms=("belongs_to", "is_member_of"),
|
|
338
|
+
schema_org_ref="https://schema.org/memberOf",
|
|
339
|
+
tier="core",
|
|
340
|
+
pack_id=None,
|
|
341
|
+
scope_id=None,
|
|
342
|
+
usage_count=0,
|
|
343
|
+
is_change_prone=True,
|
|
344
|
+
exclude_from_graph_distance=False,
|
|
345
|
+
status="active",
|
|
346
|
+
),
|
|
347
|
+
PredicateDefinition(
|
|
348
|
+
predicate="affiliated_with",
|
|
349
|
+
parent_predicate="related_to",
|
|
350
|
+
description=(
|
|
351
|
+
"A looser advisory, partner, alumni, or institutional affiliation "
|
|
352
|
+
"with an organization."
|
|
353
|
+
),
|
|
354
|
+
examples=(
|
|
355
|
+
"Ada affiliated_with University Lab",
|
|
356
|
+
"Acme affiliated_with Trade Alliance",
|
|
357
|
+
),
|
|
358
|
+
synonyms=("associated_with", "connected_with"),
|
|
359
|
+
schema_org_ref=None,
|
|
360
|
+
tier="core",
|
|
361
|
+
pack_id=None,
|
|
362
|
+
scope_id=None,
|
|
363
|
+
usage_count=0,
|
|
364
|
+
is_change_prone=True,
|
|
365
|
+
exclude_from_graph_distance=False,
|
|
366
|
+
status="active",
|
|
367
|
+
),
|
|
368
|
+
PredicateDefinition(
|
|
369
|
+
predicate="founded",
|
|
370
|
+
parent_predicate="related_to",
|
|
371
|
+
description=(
|
|
372
|
+
"Creation or establishment of an organization by a person or "
|
|
373
|
+
"organization."
|
|
374
|
+
),
|
|
375
|
+
examples=("Ada founded Beacon Labs", "Acme founded Acme Research"),
|
|
376
|
+
synonyms=("established", "started"),
|
|
377
|
+
schema_org_ref=None,
|
|
378
|
+
tier="core",
|
|
379
|
+
pack_id=None,
|
|
380
|
+
scope_id=None,
|
|
381
|
+
usage_count=0,
|
|
382
|
+
is_change_prone=False,
|
|
383
|
+
exclude_from_graph_distance=False,
|
|
384
|
+
status="active",
|
|
385
|
+
),
|
|
386
|
+
PredicateDefinition(
|
|
387
|
+
predicate="located_in",
|
|
388
|
+
parent_predicate="related_to",
|
|
389
|
+
description=(
|
|
390
|
+
"Physical or operational location of an organization, place, or "
|
|
391
|
+
"event within a place."
|
|
392
|
+
),
|
|
393
|
+
examples=("Acme located_in Prague", "Keynote located_in Hall A"),
|
|
394
|
+
synonyms=("based_in", "situated_in"),
|
|
395
|
+
schema_org_ref=None,
|
|
396
|
+
tier="core",
|
|
397
|
+
pack_id=None,
|
|
398
|
+
scope_id=None,
|
|
399
|
+
usage_count=0,
|
|
400
|
+
is_change_prone=True,
|
|
401
|
+
exclude_from_graph_distance=False,
|
|
402
|
+
status="active",
|
|
403
|
+
),
|
|
404
|
+
PredicateDefinition(
|
|
405
|
+
predicate="part_of",
|
|
406
|
+
parent_predicate="related_to",
|
|
407
|
+
description="Same-kind containment or component relationship.",
|
|
408
|
+
examples=("Division A part_of Acme", "Prague part_of Czechia"),
|
|
409
|
+
synonyms=("component_of", "contained_in"),
|
|
410
|
+
schema_org_ref=None,
|
|
411
|
+
tier="core",
|
|
412
|
+
pack_id=None,
|
|
413
|
+
scope_id=None,
|
|
414
|
+
usage_count=0,
|
|
415
|
+
is_change_prone=True,
|
|
416
|
+
exclude_from_graph_distance=False,
|
|
417
|
+
status="active",
|
|
418
|
+
),
|
|
419
|
+
PredicateDefinition(
|
|
420
|
+
predicate="authored",
|
|
421
|
+
parent_predicate="related_to",
|
|
422
|
+
description="Authorship of a document by a person or organization.",
|
|
423
|
+
examples=("Ada authored Quarterly report",),
|
|
424
|
+
synonyms=("wrote", "written_by"),
|
|
425
|
+
schema_org_ref=None,
|
|
426
|
+
tier="core",
|
|
427
|
+
pack_id=None,
|
|
428
|
+
scope_id=None,
|
|
429
|
+
usage_count=0,
|
|
430
|
+
is_change_prone=False,
|
|
431
|
+
exclude_from_graph_distance=False,
|
|
432
|
+
status="active",
|
|
433
|
+
),
|
|
434
|
+
PredicateDefinition(
|
|
435
|
+
predicate="created",
|
|
436
|
+
parent_predicate="related_to",
|
|
437
|
+
description=(
|
|
438
|
+
"Creation of a product or concept by a person or organization, "
|
|
439
|
+
"excluding document authorship."
|
|
440
|
+
),
|
|
441
|
+
examples=("Ada created Beacon CRM", "Acme created Resilience method"),
|
|
442
|
+
synonyms=("made", "developed"),
|
|
443
|
+
schema_org_ref=None,
|
|
444
|
+
tier="core",
|
|
445
|
+
pack_id=None,
|
|
446
|
+
scope_id=None,
|
|
447
|
+
usage_count=0,
|
|
448
|
+
is_change_prone=False,
|
|
449
|
+
exclude_from_graph_distance=False,
|
|
450
|
+
status="active",
|
|
451
|
+
),
|
|
452
|
+
PredicateDefinition(
|
|
453
|
+
predicate="about",
|
|
454
|
+
parent_predicate="related_to",
|
|
455
|
+
description="The entity or topic that a document or event concerns.",
|
|
456
|
+
examples=("Quarterly report about Acme", "Workshop about Machine learning"),
|
|
457
|
+
synonyms=("concerns", "regarding"),
|
|
458
|
+
schema_org_ref="https://schema.org/about",
|
|
459
|
+
tier="core",
|
|
460
|
+
pack_id=None,
|
|
461
|
+
scope_id=None,
|
|
462
|
+
usage_count=0,
|
|
463
|
+
is_change_prone=False,
|
|
464
|
+
exclude_from_graph_distance=False,
|
|
465
|
+
status="active",
|
|
466
|
+
),
|
|
467
|
+
PredicateDefinition(
|
|
468
|
+
predicate="knows_about",
|
|
469
|
+
parent_predicate="related_to",
|
|
470
|
+
description="A person's familiarity or expertise concerning a concept.",
|
|
471
|
+
examples=("Ada knows_about Compiler design",),
|
|
472
|
+
synonyms=("expert_in", "familiar_with"),
|
|
473
|
+
schema_org_ref="https://schema.org/knowsAbout",
|
|
474
|
+
tier="core",
|
|
475
|
+
pack_id=None,
|
|
476
|
+
scope_id=None,
|
|
477
|
+
usage_count=0,
|
|
478
|
+
is_change_prone=False,
|
|
479
|
+
exclude_from_graph_distance=False,
|
|
480
|
+
status="active",
|
|
481
|
+
),
|
|
482
|
+
PredicateDefinition(
|
|
483
|
+
predicate="knows",
|
|
484
|
+
parent_predicate="related_to",
|
|
485
|
+
description=("A social or professional acquaintance between two people."),
|
|
486
|
+
examples=("Ada knows Grace",),
|
|
487
|
+
synonyms=("acquainted_with",),
|
|
488
|
+
schema_org_ref="https://schema.org/knows",
|
|
489
|
+
tier="core",
|
|
490
|
+
pack_id=None,
|
|
491
|
+
scope_id=None,
|
|
492
|
+
usage_count=0,
|
|
493
|
+
is_change_prone=False,
|
|
494
|
+
exclude_from_graph_distance=False,
|
|
495
|
+
status="active",
|
|
496
|
+
),
|
|
497
|
+
PredicateDefinition(
|
|
498
|
+
predicate="participated_in",
|
|
499
|
+
parent_predicate="related_to",
|
|
500
|
+
description=(
|
|
501
|
+
"Participation by a person or organization in an event or project."
|
|
502
|
+
),
|
|
503
|
+
examples=(
|
|
504
|
+
"Ada participated_in Annual conference",
|
|
505
|
+
"Acme participated_in Project Atlas",
|
|
506
|
+
),
|
|
507
|
+
synonyms=("took_part_in", "joined"),
|
|
508
|
+
schema_org_ref=None,
|
|
509
|
+
tier="core",
|
|
510
|
+
pack_id=None,
|
|
511
|
+
scope_id=None,
|
|
512
|
+
usage_count=0,
|
|
513
|
+
is_change_prone=False,
|
|
514
|
+
exclude_from_graph_distance=False,
|
|
515
|
+
status="active",
|
|
516
|
+
),
|
|
517
|
+
PredicateDefinition(
|
|
518
|
+
predicate="works_on",
|
|
519
|
+
parent_predicate="related_to",
|
|
520
|
+
description=(
|
|
521
|
+
"Active work or contribution by a person or organization on a "
|
|
522
|
+
"project or product."
|
|
523
|
+
),
|
|
524
|
+
examples=("Ada works_on Project Atlas", "Acme works_on Beacon CRM"),
|
|
525
|
+
synonyms=("contributes_to", "develops"),
|
|
526
|
+
schema_org_ref=None,
|
|
527
|
+
tier="core",
|
|
528
|
+
pack_id=None,
|
|
529
|
+
scope_id=None,
|
|
530
|
+
usage_count=0,
|
|
531
|
+
is_change_prone=True,
|
|
532
|
+
exclude_from_graph_distance=False,
|
|
533
|
+
status="active",
|
|
534
|
+
),
|
|
535
|
+
PredicateDefinition(
|
|
536
|
+
predicate="uses",
|
|
537
|
+
parent_predicate="related_to",
|
|
538
|
+
description=(
|
|
539
|
+
"Adoption or use of a product, system, or tool by a person or "
|
|
540
|
+
"organization."
|
|
541
|
+
),
|
|
542
|
+
examples=("Ada uses Beacon CRM", "Acme uses Industrial sensor"),
|
|
543
|
+
synonyms=("utilizes", "operates_with"),
|
|
544
|
+
schema_org_ref=None,
|
|
545
|
+
tier="core",
|
|
546
|
+
pack_id=None,
|
|
547
|
+
scope_id=None,
|
|
548
|
+
usage_count=0,
|
|
549
|
+
is_change_prone=True,
|
|
550
|
+
exclude_from_graph_distance=False,
|
|
551
|
+
status="active",
|
|
552
|
+
),
|
|
553
|
+
PredicateDefinition(
|
|
554
|
+
predicate="reports_to",
|
|
555
|
+
parent_predicate="related_to",
|
|
556
|
+
description=(
|
|
557
|
+
"An organizational reporting line from one person to another person."
|
|
558
|
+
),
|
|
559
|
+
examples=("Ada reports_to Grace",),
|
|
560
|
+
synonyms=("managed_by", "answers_to"),
|
|
561
|
+
schema_org_ref=None,
|
|
562
|
+
tier="core",
|
|
563
|
+
pack_id=None,
|
|
564
|
+
scope_id=None,
|
|
565
|
+
usage_count=0,
|
|
566
|
+
is_change_prone=True,
|
|
567
|
+
exclude_from_graph_distance=False,
|
|
568
|
+
status="active",
|
|
569
|
+
),
|
|
570
|
+
),
|
|
571
|
+
predicate_signatures=_expand_signatures(domain_ranges=_PREDICATE_DOMAIN_RANGES),
|
|
572
|
+
)
|
|
573
|
+
|
|
574
|
+
|
|
575
|
+
def _assert_manifest_integrity(manifest: CoreManifest) -> None:
|
|
576
|
+
"""Fail import if the packaged manifest loses a binding core-v1 invariant."""
|
|
577
|
+
entity_keys = tuple(entity.type for entity in manifest.entity_types)
|
|
578
|
+
predicate_keys = tuple(predicate.predicate for predicate in manifest.predicates)
|
|
579
|
+
signature_keys = tuple(
|
|
580
|
+
(signature.predicate, signature.subject_type, signature.object_type)
|
|
581
|
+
for signature in manifest.predicate_signatures
|
|
582
|
+
)
|
|
583
|
+
|
|
584
|
+
assert manifest.manifest_version == "core-v1"
|
|
585
|
+
assert len(entity_keys) == len(set(entity_keys)) == 8
|
|
586
|
+
assert len(predicate_keys) == len(set(predicate_keys)) == 16
|
|
587
|
+
assert len(signature_keys) == len(set(signature_keys)) == 116
|
|
588
|
+
assert all(entity.parent_type is None for entity in manifest.entity_types)
|
|
589
|
+
assert predicate_keys[0] == "related_to"
|
|
590
|
+
assert set(
|
|
591
|
+
signature.predicate for signature in manifest.predicate_signatures
|
|
592
|
+
) <= set(predicate_keys)
|
|
593
|
+
assert {signature.subject_type for signature in manifest.predicate_signatures} | {
|
|
594
|
+
signature.object_type for signature in manifest.predicate_signatures
|
|
595
|
+
} <= set(entity_keys)
|
|
596
|
+
|
|
597
|
+
|
|
598
|
+
_assert_manifest_integrity(manifest=CORE_MANIFEST)
|