Skip to main content

lean_ctx/core/
contracts.rs

1use std::collections::BTreeMap;
2
3// Machine-verified contract versions.
4pub const MCP_MANIFEST_SCHEMA_VERSION: u32 = 1;
5pub const CONTEXT_PROOF_V1_SCHEMA_VERSION: u32 = 1;
6pub const CONTEXT_IR_V1_SCHEMA_VERSION: u32 = 1;
7pub const INTENT_ROUTE_V1_SCHEMA_VERSION: u32 = 1;
8pub const DEGRADATION_POLICY_V1_SCHEMA_VERSION: u32 = 1;
9pub const WORKFLOW_EVIDENCE_LEDGER_V1_SCHEMA_VERSION: u32 = 1;
10pub const AUTONOMY_DRIVERS_V1_SCHEMA_VERSION: u32 = 1;
11pub const TOKENIZER_TRANSLATION_DRIVER_V1_SCHEMA_VERSION: u32 = 1;
12pub const ATTENTION_LAYOUT_DRIVER_V1_SCHEMA_VERSION: u32 = 1;
13pub const VERIFICATION_OBSERVABILITY_V1_SCHEMA_VERSION: u32 = 1;
14pub const HANDOFF_LEDGER_V1_SCHEMA_VERSION: u32 = 1;
15pub const HANDOFF_TRANSFER_BUNDLE_V1_SCHEMA_VERSION: u32 = 1;
16pub const CCP_SESSION_BUNDLE_V1_SCHEMA_VERSION: u32 = 1;
17pub const KNOWLEDGE_POLICY_V1_SCHEMA_VERSION: u32 = 1;
18pub const GRAPH_REPRODUCIBILITY_V1_SCHEMA_VERSION: u32 = 1;
19pub const A2A_SNAPSHOT_V1_SCHEMA_VERSION: u32 = 1;
20pub const MEMORY_BOUNDARY_V1_SCHEMA_VERSION: u32 = 1;
21pub const GOTCHAS_REMINDERS_V1_SCHEMA_VERSION: u32 = 1;
22pub const PROVIDER_FRAMEWORK_V1_SCHEMA_VERSION: u32 = 1;
23pub const CONTEXT_PACKAGE_V1_SCHEMA_VERSION: u32 = 1;
24pub const CONTEXT_PACKAGE_V2_SCHEMA_VERSION: u32 = 2;
25
26pub const PACKAGE_EXTENSION: &str = "ctxpkg";
27pub const LEGACY_PACKAGE_EXTENSION: &str = "lctxpkg";
28pub const MAX_PACKAGE_FILE_BYTES: u64 = 10 * 1024 * 1024; // 10 MB
29
30pub fn is_package_file(path: &std::path::Path) -> bool {
31    path.extension()
32        .and_then(|e| e.to_str())
33        .is_some_and(|ext| ext == PACKAGE_EXTENSION || ext == LEGACY_PACKAGE_EXTENSION)
34}
35
36pub fn default_package_filename(name: &str, version: &str) -> String {
37    format!("{name}-{version}.{PACKAGE_EXTENSION}")
38}
39
40// Documentation-level contracts (do not have a schema field in payloads).
41pub const HTTP_MCP_CONTRACT_VERSION: u32 = 1;
42pub const TEAM_SERVER_CONTRACT_VERSION: u32 = 1;
43
44pub fn versions_kv() -> BTreeMap<&'static str, u32> {
45    BTreeMap::from([
46        (
47            "leanctx.contract.mcp_manifest.schema_version",
48            MCP_MANIFEST_SCHEMA_VERSION,
49        ),
50        (
51            "leanctx.contract.context_proof_v1.schema_version",
52            CONTEXT_PROOF_V1_SCHEMA_VERSION,
53        ),
54        (
55            "leanctx.contract.context_ir_v1.schema_version",
56            CONTEXT_IR_V1_SCHEMA_VERSION,
57        ),
58        (
59            "leanctx.contract.intent_route_v1.schema_version",
60            INTENT_ROUTE_V1_SCHEMA_VERSION,
61        ),
62        (
63            "leanctx.contract.degradation_policy_v1.schema_version",
64            DEGRADATION_POLICY_V1_SCHEMA_VERSION,
65        ),
66        (
67            "leanctx.contract.workflow_evidence_ledger_v1.schema_version",
68            WORKFLOW_EVIDENCE_LEDGER_V1_SCHEMA_VERSION,
69        ),
70        (
71            "leanctx.contract.autonomy_drivers_v1.schema_version",
72            AUTONOMY_DRIVERS_V1_SCHEMA_VERSION,
73        ),
74        (
75            "leanctx.contract.tokenizer_translation_driver_v1.schema_version",
76            TOKENIZER_TRANSLATION_DRIVER_V1_SCHEMA_VERSION,
77        ),
78        (
79            "leanctx.contract.attention_layout_driver_v1.schema_version",
80            ATTENTION_LAYOUT_DRIVER_V1_SCHEMA_VERSION,
81        ),
82        (
83            "leanctx.contract.verification_observability_v1.schema_version",
84            VERIFICATION_OBSERVABILITY_V1_SCHEMA_VERSION,
85        ),
86        (
87            "leanctx.contract.handoff_ledger_v1.schema_version",
88            HANDOFF_LEDGER_V1_SCHEMA_VERSION,
89        ),
90        (
91            "leanctx.contract.handoff_transfer_bundle_v1.schema_version",
92            HANDOFF_TRANSFER_BUNDLE_V1_SCHEMA_VERSION,
93        ),
94        (
95            "leanctx.contract.ccp_session_bundle_v1.schema_version",
96            CCP_SESSION_BUNDLE_V1_SCHEMA_VERSION,
97        ),
98        (
99            "leanctx.contract.knowledge_policy_v1.schema_version",
100            KNOWLEDGE_POLICY_V1_SCHEMA_VERSION,
101        ),
102        (
103            "leanctx.contract.graph_reproducibility_v1.schema_version",
104            GRAPH_REPRODUCIBILITY_V1_SCHEMA_VERSION,
105        ),
106        (
107            "leanctx.contract.a2a_snapshot_v1.schema_version",
108            A2A_SNAPSHOT_V1_SCHEMA_VERSION,
109        ),
110        (
111            "leanctx.contract.memory_boundary_v1.schema_version",
112            MEMORY_BOUNDARY_V1_SCHEMA_VERSION,
113        ),
114        (
115            "leanctx.contract.gotchas_reminders_v1.schema_version",
116            GOTCHAS_REMINDERS_V1_SCHEMA_VERSION,
117        ),
118        (
119            "leanctx.contract.provider_framework_v1.schema_version",
120            PROVIDER_FRAMEWORK_V1_SCHEMA_VERSION,
121        ),
122        (
123            "leanctx.contract.context_package_v1.schema_version",
124            CONTEXT_PACKAGE_V1_SCHEMA_VERSION,
125        ),
126        (
127            "leanctx.contract.context_package_v2.schema_version",
128            CONTEXT_PACKAGE_V2_SCHEMA_VERSION,
129        ),
130        (
131            "leanctx.contract.http_mcp.contract_version",
132            HTTP_MCP_CONTRACT_VERSION,
133        ),
134        (
135            "leanctx.contract.team_server.contract_version",
136            TEAM_SERVER_CONTRACT_VERSION,
137        ),
138    ])
139}