htmlgraph 0.20.1__py3-none-any.whl → 0.27.5__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.
Files changed (304) hide show
  1. htmlgraph/.htmlgraph/.session-warning-state.json +6 -0
  2. htmlgraph/.htmlgraph/agents.json +72 -0
  3. htmlgraph/.htmlgraph/htmlgraph.db +0 -0
  4. htmlgraph/__init__.py +51 -1
  5. htmlgraph/__init__.pyi +123 -0
  6. htmlgraph/agent_detection.py +26 -10
  7. htmlgraph/agent_registry.py +2 -1
  8. htmlgraph/analytics/__init__.py +8 -1
  9. htmlgraph/analytics/cli.py +86 -20
  10. htmlgraph/analytics/cost_analyzer.py +391 -0
  11. htmlgraph/analytics/cost_monitor.py +664 -0
  12. htmlgraph/analytics/cost_reporter.py +675 -0
  13. htmlgraph/analytics/cross_session.py +617 -0
  14. htmlgraph/analytics/dependency.py +10 -6
  15. htmlgraph/analytics/pattern_learning.py +771 -0
  16. htmlgraph/analytics/session_graph.py +707 -0
  17. htmlgraph/analytics/strategic/__init__.py +80 -0
  18. htmlgraph/analytics/strategic/cost_optimizer.py +611 -0
  19. htmlgraph/analytics/strategic/pattern_detector.py +876 -0
  20. htmlgraph/analytics/strategic/preference_manager.py +709 -0
  21. htmlgraph/analytics/strategic/suggestion_engine.py +747 -0
  22. htmlgraph/analytics/work_type.py +67 -27
  23. htmlgraph/analytics_index.py +53 -20
  24. htmlgraph/api/__init__.py +3 -0
  25. htmlgraph/api/cost_alerts_websocket.py +416 -0
  26. htmlgraph/api/main.py +2498 -0
  27. htmlgraph/api/static/htmx.min.js +1 -0
  28. htmlgraph/api/static/style-redesign.css +1344 -0
  29. htmlgraph/api/static/style.css +1079 -0
  30. htmlgraph/api/templates/dashboard-redesign.html +1366 -0
  31. htmlgraph/api/templates/dashboard.html +794 -0
  32. htmlgraph/api/templates/partials/activity-feed-hierarchical.html +326 -0
  33. htmlgraph/api/templates/partials/activity-feed.html +1100 -0
  34. htmlgraph/api/templates/partials/agents-redesign.html +317 -0
  35. htmlgraph/api/templates/partials/agents.html +317 -0
  36. htmlgraph/api/templates/partials/event-traces.html +373 -0
  37. htmlgraph/api/templates/partials/features-kanban-redesign.html +509 -0
  38. htmlgraph/api/templates/partials/features.html +578 -0
  39. htmlgraph/api/templates/partials/metrics-redesign.html +346 -0
  40. htmlgraph/api/templates/partials/metrics.html +346 -0
  41. htmlgraph/api/templates/partials/orchestration-redesign.html +443 -0
  42. htmlgraph/api/templates/partials/orchestration.html +198 -0
  43. htmlgraph/api/templates/partials/spawners.html +375 -0
  44. htmlgraph/api/templates/partials/work-items.html +613 -0
  45. htmlgraph/api/websocket.py +538 -0
  46. htmlgraph/archive/__init__.py +24 -0
  47. htmlgraph/archive/bloom.py +234 -0
  48. htmlgraph/archive/fts.py +297 -0
  49. htmlgraph/archive/manager.py +583 -0
  50. htmlgraph/archive/search.py +244 -0
  51. htmlgraph/atomic_ops.py +560 -0
  52. htmlgraph/attribute_index.py +2 -1
  53. htmlgraph/bounded_paths.py +539 -0
  54. htmlgraph/builders/base.py +57 -2
  55. htmlgraph/builders/bug.py +19 -3
  56. htmlgraph/builders/chore.py +19 -3
  57. htmlgraph/builders/epic.py +19 -3
  58. htmlgraph/builders/feature.py +27 -3
  59. htmlgraph/builders/insight.py +2 -1
  60. htmlgraph/builders/metric.py +2 -1
  61. htmlgraph/builders/pattern.py +2 -1
  62. htmlgraph/builders/phase.py +19 -3
  63. htmlgraph/builders/spike.py +29 -3
  64. htmlgraph/builders/track.py +42 -1
  65. htmlgraph/cigs/__init__.py +81 -0
  66. htmlgraph/cigs/autonomy.py +385 -0
  67. htmlgraph/cigs/cost.py +475 -0
  68. htmlgraph/cigs/messages_basic.py +472 -0
  69. htmlgraph/cigs/messaging.py +365 -0
  70. htmlgraph/cigs/models.py +771 -0
  71. htmlgraph/cigs/pattern_storage.py +427 -0
  72. htmlgraph/cigs/patterns.py +503 -0
  73. htmlgraph/cigs/posttool_analyzer.py +234 -0
  74. htmlgraph/cigs/reporter.py +818 -0
  75. htmlgraph/cigs/tracker.py +317 -0
  76. htmlgraph/cli/.htmlgraph/.session-warning-state.json +6 -0
  77. htmlgraph/cli/.htmlgraph/agents.json +72 -0
  78. htmlgraph/cli/.htmlgraph/htmlgraph.db +0 -0
  79. htmlgraph/cli/__init__.py +42 -0
  80. htmlgraph/cli/__main__.py +6 -0
  81. htmlgraph/cli/analytics.py +1424 -0
  82. htmlgraph/cli/base.py +685 -0
  83. htmlgraph/cli/constants.py +206 -0
  84. htmlgraph/cli/core.py +954 -0
  85. htmlgraph/cli/main.py +147 -0
  86. htmlgraph/cli/models.py +475 -0
  87. htmlgraph/cli/templates/__init__.py +1 -0
  88. htmlgraph/cli/templates/cost_dashboard.py +399 -0
  89. htmlgraph/cli/work/__init__.py +239 -0
  90. htmlgraph/cli/work/browse.py +115 -0
  91. htmlgraph/cli/work/features.py +568 -0
  92. htmlgraph/cli/work/orchestration.py +676 -0
  93. htmlgraph/cli/work/report.py +728 -0
  94. htmlgraph/cli/work/sessions.py +466 -0
  95. htmlgraph/cli/work/snapshot.py +559 -0
  96. htmlgraph/cli/work/tracks.py +486 -0
  97. htmlgraph/cli_commands/__init__.py +1 -0
  98. htmlgraph/cli_commands/feature.py +195 -0
  99. htmlgraph/cli_framework.py +115 -0
  100. htmlgraph/collections/__init__.py +2 -0
  101. htmlgraph/collections/base.py +197 -14
  102. htmlgraph/collections/bug.py +2 -1
  103. htmlgraph/collections/chore.py +2 -1
  104. htmlgraph/collections/epic.py +2 -1
  105. htmlgraph/collections/feature.py +2 -1
  106. htmlgraph/collections/insight.py +2 -1
  107. htmlgraph/collections/metric.py +2 -1
  108. htmlgraph/collections/pattern.py +2 -1
  109. htmlgraph/collections/phase.py +2 -1
  110. htmlgraph/collections/session.py +194 -0
  111. htmlgraph/collections/spike.py +13 -2
  112. htmlgraph/collections/task_delegation.py +241 -0
  113. htmlgraph/collections/todo.py +14 -1
  114. htmlgraph/collections/traces.py +487 -0
  115. htmlgraph/config/cost_models.json +56 -0
  116. htmlgraph/config.py +190 -0
  117. htmlgraph/context_analytics.py +2 -1
  118. htmlgraph/converter.py +116 -7
  119. htmlgraph/cost_analysis/__init__.py +5 -0
  120. htmlgraph/cost_analysis/analyzer.py +438 -0
  121. htmlgraph/dashboard.html +2246 -248
  122. htmlgraph/dashboard.html.backup +6592 -0
  123. htmlgraph/dashboard.html.bak +7181 -0
  124. htmlgraph/dashboard.html.bak2 +7231 -0
  125. htmlgraph/dashboard.html.bak3 +7232 -0
  126. htmlgraph/db/__init__.py +38 -0
  127. htmlgraph/db/queries.py +790 -0
  128. htmlgraph/db/schema.py +1788 -0
  129. htmlgraph/decorators.py +317 -0
  130. htmlgraph/dependency_models.py +2 -1
  131. htmlgraph/deploy.py +26 -27
  132. htmlgraph/docs/API_REFERENCE.md +841 -0
  133. htmlgraph/docs/HTTP_API.md +750 -0
  134. htmlgraph/docs/INTEGRATION_GUIDE.md +752 -0
  135. htmlgraph/docs/ORCHESTRATION_PATTERNS.md +717 -0
  136. htmlgraph/docs/README.md +532 -0
  137. htmlgraph/docs/__init__.py +77 -0
  138. htmlgraph/docs/docs_version.py +55 -0
  139. htmlgraph/docs/metadata.py +93 -0
  140. htmlgraph/docs/migrations.py +232 -0
  141. htmlgraph/docs/template_engine.py +143 -0
  142. htmlgraph/docs/templates/_sections/cli_reference.md.j2 +52 -0
  143. htmlgraph/docs/templates/_sections/core_concepts.md.j2 +29 -0
  144. htmlgraph/docs/templates/_sections/sdk_basics.md.j2 +69 -0
  145. htmlgraph/docs/templates/base_agents.md.j2 +78 -0
  146. htmlgraph/docs/templates/example_user_override.md.j2 +47 -0
  147. htmlgraph/docs/version_check.py +163 -0
  148. htmlgraph/edge_index.py +2 -1
  149. htmlgraph/error_handler.py +544 -0
  150. htmlgraph/event_log.py +86 -37
  151. htmlgraph/event_migration.py +2 -1
  152. htmlgraph/file_watcher.py +12 -8
  153. htmlgraph/find_api.py +2 -1
  154. htmlgraph/git_events.py +67 -9
  155. htmlgraph/hooks/.htmlgraph/.session-warning-state.json +6 -0
  156. htmlgraph/hooks/.htmlgraph/agents.json +72 -0
  157. htmlgraph/hooks/.htmlgraph/index.sqlite +0 -0
  158. htmlgraph/hooks/__init__.py +8 -0
  159. htmlgraph/hooks/bootstrap.py +169 -0
  160. htmlgraph/hooks/cigs_pretool_enforcer.py +354 -0
  161. htmlgraph/hooks/concurrent_sessions.py +208 -0
  162. htmlgraph/hooks/context.py +350 -0
  163. htmlgraph/hooks/drift_handler.py +525 -0
  164. htmlgraph/hooks/event_tracker.py +790 -99
  165. htmlgraph/hooks/git_commands.py +175 -0
  166. htmlgraph/hooks/installer.py +5 -1
  167. htmlgraph/hooks/orchestrator.py +327 -76
  168. htmlgraph/hooks/orchestrator_reflector.py +31 -4
  169. htmlgraph/hooks/post_tool_use_failure.py +32 -7
  170. htmlgraph/hooks/post_tool_use_handler.py +257 -0
  171. htmlgraph/hooks/posttooluse.py +92 -19
  172. htmlgraph/hooks/pretooluse.py +527 -7
  173. htmlgraph/hooks/prompt_analyzer.py +637 -0
  174. htmlgraph/hooks/session_handler.py +668 -0
  175. htmlgraph/hooks/session_summary.py +395 -0
  176. htmlgraph/hooks/state_manager.py +504 -0
  177. htmlgraph/hooks/subagent_detection.py +202 -0
  178. htmlgraph/hooks/subagent_stop.py +369 -0
  179. htmlgraph/hooks/task_enforcer.py +99 -4
  180. htmlgraph/hooks/validator.py +212 -91
  181. htmlgraph/ids.py +2 -1
  182. htmlgraph/learning.py +125 -100
  183. htmlgraph/mcp_server.py +2 -1
  184. htmlgraph/models.py +217 -18
  185. htmlgraph/operations/README.md +62 -0
  186. htmlgraph/operations/__init__.py +79 -0
  187. htmlgraph/operations/analytics.py +339 -0
  188. htmlgraph/operations/bootstrap.py +289 -0
  189. htmlgraph/operations/events.py +244 -0
  190. htmlgraph/operations/fastapi_server.py +231 -0
  191. htmlgraph/operations/hooks.py +350 -0
  192. htmlgraph/operations/initialization.py +597 -0
  193. htmlgraph/operations/initialization.py.backup +228 -0
  194. htmlgraph/operations/server.py +303 -0
  195. htmlgraph/orchestration/__init__.py +58 -0
  196. htmlgraph/orchestration/claude_launcher.py +179 -0
  197. htmlgraph/orchestration/command_builder.py +72 -0
  198. htmlgraph/orchestration/headless_spawner.py +281 -0
  199. htmlgraph/orchestration/live_events.py +377 -0
  200. htmlgraph/orchestration/model_selection.py +327 -0
  201. htmlgraph/orchestration/plugin_manager.py +140 -0
  202. htmlgraph/orchestration/prompts.py +137 -0
  203. htmlgraph/orchestration/spawner_event_tracker.py +383 -0
  204. htmlgraph/orchestration/spawners/__init__.py +16 -0
  205. htmlgraph/orchestration/spawners/base.py +194 -0
  206. htmlgraph/orchestration/spawners/claude.py +173 -0
  207. htmlgraph/orchestration/spawners/codex.py +435 -0
  208. htmlgraph/orchestration/spawners/copilot.py +294 -0
  209. htmlgraph/orchestration/spawners/gemini.py +471 -0
  210. htmlgraph/orchestration/subprocess_runner.py +36 -0
  211. htmlgraph/{orchestration.py → orchestration/task_coordination.py} +16 -8
  212. htmlgraph/orchestration.md +563 -0
  213. htmlgraph/orchestrator-system-prompt-optimized.txt +863 -0
  214. htmlgraph/orchestrator.py +2 -1
  215. htmlgraph/orchestrator_config.py +357 -0
  216. htmlgraph/orchestrator_mode.py +115 -4
  217. htmlgraph/parallel.py +2 -1
  218. htmlgraph/parser.py +86 -6
  219. htmlgraph/path_query.py +608 -0
  220. htmlgraph/pattern_matcher.py +636 -0
  221. htmlgraph/pydantic_models.py +476 -0
  222. htmlgraph/quality_gates.py +350 -0
  223. htmlgraph/query_builder.py +2 -1
  224. htmlgraph/query_composer.py +509 -0
  225. htmlgraph/reflection.py +443 -0
  226. htmlgraph/refs.py +344 -0
  227. htmlgraph/repo_hash.py +512 -0
  228. htmlgraph/repositories/__init__.py +292 -0
  229. htmlgraph/repositories/analytics_repository.py +455 -0
  230. htmlgraph/repositories/analytics_repository_standard.py +628 -0
  231. htmlgraph/repositories/feature_repository.py +581 -0
  232. htmlgraph/repositories/feature_repository_htmlfile.py +668 -0
  233. htmlgraph/repositories/feature_repository_memory.py +607 -0
  234. htmlgraph/repositories/feature_repository_sqlite.py +858 -0
  235. htmlgraph/repositories/filter_service.py +620 -0
  236. htmlgraph/repositories/filter_service_standard.py +445 -0
  237. htmlgraph/repositories/shared_cache.py +621 -0
  238. htmlgraph/repositories/shared_cache_memory.py +395 -0
  239. htmlgraph/repositories/track_repository.py +552 -0
  240. htmlgraph/repositories/track_repository_htmlfile.py +619 -0
  241. htmlgraph/repositories/track_repository_memory.py +508 -0
  242. htmlgraph/repositories/track_repository_sqlite.py +711 -0
  243. htmlgraph/sdk/__init__.py +398 -0
  244. htmlgraph/sdk/__init__.pyi +14 -0
  245. htmlgraph/sdk/analytics/__init__.py +19 -0
  246. htmlgraph/sdk/analytics/engine.py +155 -0
  247. htmlgraph/sdk/analytics/helpers.py +178 -0
  248. htmlgraph/sdk/analytics/registry.py +109 -0
  249. htmlgraph/sdk/base.py +484 -0
  250. htmlgraph/sdk/constants.py +216 -0
  251. htmlgraph/sdk/core.pyi +308 -0
  252. htmlgraph/sdk/discovery.py +120 -0
  253. htmlgraph/sdk/help/__init__.py +12 -0
  254. htmlgraph/sdk/help/mixin.py +699 -0
  255. htmlgraph/sdk/mixins/__init__.py +15 -0
  256. htmlgraph/sdk/mixins/attribution.py +113 -0
  257. htmlgraph/sdk/mixins/mixin.py +410 -0
  258. htmlgraph/sdk/operations/__init__.py +12 -0
  259. htmlgraph/sdk/operations/mixin.py +427 -0
  260. htmlgraph/sdk/orchestration/__init__.py +17 -0
  261. htmlgraph/sdk/orchestration/coordinator.py +203 -0
  262. htmlgraph/sdk/orchestration/spawner.py +204 -0
  263. htmlgraph/sdk/planning/__init__.py +19 -0
  264. htmlgraph/sdk/planning/bottlenecks.py +93 -0
  265. htmlgraph/sdk/planning/mixin.py +211 -0
  266. htmlgraph/sdk/planning/parallel.py +186 -0
  267. htmlgraph/sdk/planning/queue.py +210 -0
  268. htmlgraph/sdk/planning/recommendations.py +87 -0
  269. htmlgraph/sdk/planning/smart_planning.py +319 -0
  270. htmlgraph/sdk/session/__init__.py +19 -0
  271. htmlgraph/sdk/session/continuity.py +57 -0
  272. htmlgraph/sdk/session/handoff.py +110 -0
  273. htmlgraph/sdk/session/info.py +309 -0
  274. htmlgraph/sdk/session/manager.py +103 -0
  275. htmlgraph/sdk/strategic/__init__.py +26 -0
  276. htmlgraph/sdk/strategic/mixin.py +563 -0
  277. htmlgraph/server.py +295 -107
  278. htmlgraph/session_hooks.py +300 -0
  279. htmlgraph/session_manager.py +285 -3
  280. htmlgraph/session_registry.py +587 -0
  281. htmlgraph/session_state.py +436 -0
  282. htmlgraph/session_warning.py +2 -1
  283. htmlgraph/sessions/__init__.py +23 -0
  284. htmlgraph/sessions/handoff.py +756 -0
  285. htmlgraph/system_prompts.py +450 -0
  286. htmlgraph/templates/orchestration-view.html +350 -0
  287. htmlgraph/track_builder.py +33 -1
  288. htmlgraph/track_manager.py +38 -0
  289. htmlgraph/transcript.py +18 -5
  290. htmlgraph/validation.py +115 -0
  291. htmlgraph/watch.py +2 -1
  292. htmlgraph/work_type_utils.py +2 -1
  293. {htmlgraph-0.20.1.data → htmlgraph-0.27.5.data}/data/htmlgraph/dashboard.html +2246 -248
  294. {htmlgraph-0.20.1.dist-info → htmlgraph-0.27.5.dist-info}/METADATA +95 -64
  295. htmlgraph-0.27.5.dist-info/RECORD +337 -0
  296. {htmlgraph-0.20.1.dist-info → htmlgraph-0.27.5.dist-info}/entry_points.txt +1 -1
  297. htmlgraph/cli.py +0 -4839
  298. htmlgraph/sdk.py +0 -2359
  299. htmlgraph-0.20.1.dist-info/RECORD +0 -118
  300. {htmlgraph-0.20.1.data → htmlgraph-0.27.5.data}/data/htmlgraph/styles.css +0 -0
  301. {htmlgraph-0.20.1.data → htmlgraph-0.27.5.data}/data/htmlgraph/templates/AGENTS.md.template +0 -0
  302. {htmlgraph-0.20.1.data → htmlgraph-0.27.5.data}/data/htmlgraph/templates/CLAUDE.md.template +0 -0
  303. {htmlgraph-0.20.1.data → htmlgraph-0.27.5.data}/data/htmlgraph/templates/GEMINI.md.template +0 -0
  304. {htmlgraph-0.20.1.dist-info → htmlgraph-0.27.5.dist-info}/WHEEL +0 -0
@@ -0,0 +1,292 @@
1
+ """
2
+ Repository Pattern Implementation for HtmlGraph.
3
+
4
+ Provides abstract interfaces and implementations for data access.
5
+ Unifies access patterns across SDK, CLI, Collections, and Analytics.
6
+
7
+ ## Core Concepts
8
+
9
+ **Repository**: Abstract interface for data access
10
+ - Hides storage implementation details
11
+ - Provides consistent query/filter API
12
+ - Manages caching and lifecycle
13
+
14
+ **Compliance Tests**: Every implementation must pass these
15
+ - Identity invariants (object caching)
16
+ - ACID properties
17
+ - Error handling contracts
18
+ - Performance characteristics
19
+
20
+ ## Components
21
+
22
+ ### FeatureRepository
23
+ Abstract interface for Feature data access.
24
+
25
+ ```python
26
+ from htmlgraph.repositories import FeatureRepository
27
+
28
+ # Usage (implemented by SDK/Collections)
29
+ repo = sdk.features # Implements FeatureRepository
30
+
31
+ # Get single feature
32
+ feature = repo.get("feat-001")
33
+
34
+ # List with filters
35
+ todo_features = repo.list({"status": "todo"})
36
+
37
+ # Build complex queries
38
+ repo.where(status="todo").where(priority="high").execute()
39
+
40
+ # Batch operations
41
+ repo.batch_update(["f1", "f2"], {"status": "done"})
42
+
43
+ # Advanced queries
44
+ deps = repo.find_dependencies("feat-auth")
45
+ blocking = repo.find_blocking("feat-db-migration")
46
+
47
+ # Cache management
48
+ repo.invalidate_cache("feat-001")
49
+ repo.reload()
50
+ ```
51
+
52
+ ## Implementation Guide
53
+
54
+ To implement FeatureRepository:
55
+
56
+ 1. **Inherit from FeatureRepository**:
57
+ ```python
58
+ class MyFeatureRepository(FeatureRepository):
59
+ def __init__(self, ...):
60
+ self._cache = {} # Object identity cache
61
+ # ...
62
+
63
+ def get(self, feature_id):
64
+ if feature_id in self._cache:
65
+ return self._cache[feature_id] # Return cached instance
66
+ # Load from storage
67
+ feature = self._load(feature_id)
68
+ if feature:
69
+ self._cache[feature_id] = feature
70
+ return feature
71
+ ```
72
+
73
+ 2. **Implement all abstract methods** with proper signatures
74
+
75
+ 3. **Pass compliance tests**:
76
+ ```python
77
+ class TestMyFeatureRepository(FeatureRepositoryComplianceTests):
78
+ @pytest.fixture
79
+ def repo(self):
80
+ return MyFeatureRepository()
81
+ ```
82
+
83
+ 4. **Contract enforcement**:
84
+ - Identity invariant: `get(id)` returns same instance
85
+ - Atomicity: writes are all-or-nothing
86
+ - Cache sync: cached objects stay in sync with storage
87
+ - Error handling: all exceptions properly raised
88
+
89
+ ## Design Patterns
90
+
91
+ ### Lazy Loading
92
+ Features loaded on-demand, not all at once:
93
+ ```python
94
+ feature = repo.get("feat-001") # Loads only this feature
95
+ ```
96
+
97
+ ### Caching
98
+ Object instances cached for identity:
99
+ ```python
100
+ f1 = repo.get("feat-001")
101
+ f2 = repo.get("feat-001")
102
+ assert f1 is f2 # Same instance, not copy
103
+ ```
104
+
105
+ ### Query Building
106
+ Fluent interface for complex queries:
107
+ ```python
108
+ results = repo.where(status="todo") \
109
+ .where(priority="high") \
110
+ .execute()
111
+ ```
112
+
113
+ ### Batch Operations
114
+ Vectorized bulk operations for efficiency:
115
+ ```python
116
+ # More efficient than N individual saves
117
+ repo.batch_update(["f1", "f2", "f3"], {"status": "done"})
118
+ ```
119
+
120
+ ### Cache Invalidation
121
+ When external processes modify storage:
122
+ ```python
123
+ repo.invalidate_cache() # Force reload on next access
124
+ repo.reload() # Immediate reload
125
+ ```
126
+
127
+ ## Contract Invariants
128
+
129
+ Every FeatureRepository implementation MUST maintain:
130
+
131
+ 1. **Identity Invariant**
132
+ - `get(id)` returns same object instance for same feature
133
+ - Multiple calls return identical object (is, not ==)
134
+ - Supports weak references for memory efficiency
135
+
136
+ 2. **Atomicity**
137
+ - Write operations are atomic (all or nothing)
138
+ - No partial updates on failure
139
+ - Rollback on exception
140
+
141
+ 3. **Consistency**
142
+ - Cache stays in sync with storage
143
+ - Invalidate when external changes detected
144
+ - Reload reconciles state
145
+
146
+ 4. **Isolation**
147
+ - Concurrent reads allowed
148
+ - Concurrent writes serialized
149
+ - No data corruption on race conditions
150
+
151
+ 5. **Error Handling**
152
+ - All errors preserve full context
153
+ - Proper exception types raised
154
+ - No silent failures
155
+
156
+ ## Performance Characteristics
157
+
158
+ | Operation | Time | Notes |
159
+ |-----------|------|-------|
160
+ | get(id) | O(1) cached, O(log n) uncached | Identity caching |
161
+ | list() | O(n) | Full scan, early termination possible |
162
+ | where() | O(n) | Chain builds filters |
163
+ | batch_get(k) | O(k) | Vectorized, k = batch size |
164
+ | batch_update(k) | O(k) | Vectorized |
165
+ | batch_delete(k) | O(k) | Vectorized |
166
+ | find_dependencies() | O(n) | Graph traversal |
167
+ | count() | O(n) or O(1) | Depends on implementation |
168
+ | exists() | O(1) | Optimized check |
169
+
170
+ ## Testing
171
+
172
+ Run compliance tests:
173
+ ```bash
174
+ pytest tests/unit/repositories/test_feature_repository_compliance.py -v
175
+ ```
176
+
177
+ Test concrete implementation:
178
+ ```bash
179
+ pytest tests/unit/repositories/test_my_feature_repository.py -v
180
+ ```
181
+
182
+ ## See Also
183
+
184
+ - `feature_repository.py` - Interface definition
185
+ - `test_feature_repository_compliance.py` - Compliance test suite
186
+ - `src/python/htmlgraph/collections/base.py` - Current implementation
187
+ - `src/python/htmlgraph/sdk/collections/features.py` - SDK usage
188
+ """
189
+
190
+ # Analytics Repository
191
+ from .analytics_repository import (
192
+ AnalysisError,
193
+ AnalyticsRepository,
194
+ AnalyticsRepositoryError,
195
+ DependencyAnalysis,
196
+ InvalidItemError,
197
+ WorkRecommendation,
198
+ )
199
+ from .analytics_repository_standard import StandardAnalyticsRepository
200
+ from .feature_repository import (
201
+ FeatureConcurrencyError,
202
+ FeatureNotFoundError,
203
+ FeatureRepository,
204
+ FeatureRepositoryError,
205
+ FeatureValidationError,
206
+ RepositoryQuery,
207
+ )
208
+ from .feature_repository_htmlfile import HTMLFileFeatureRepository
209
+
210
+ # Concrete implementations - Features
211
+ from .feature_repository_memory import MemoryFeatureRepository
212
+ from .feature_repository_sqlite import SQLiteFeatureRepository
213
+
214
+ # Filter Service
215
+ from .filter_service import (
216
+ Filter,
217
+ FilterLogic,
218
+ FilterOperator,
219
+ FilterService,
220
+ FilterServiceError,
221
+ InvalidFilterError,
222
+ )
223
+ from .filter_service_standard import StandardFilterService
224
+
225
+ # Shared Cache
226
+ from .shared_cache import (
227
+ CacheCapacityError,
228
+ CacheKeyError,
229
+ SharedCache,
230
+ SharedCacheError,
231
+ get_shared_cache,
232
+ )
233
+ from .shared_cache_memory import MemorySharedCache
234
+ from .track_repository import (
235
+ TrackConcurrencyError,
236
+ TrackNotFoundError,
237
+ TrackRepository,
238
+ TrackRepositoryError,
239
+ TrackValidationError,
240
+ )
241
+ from .track_repository_htmlfile import HTMLFileTrackRepository
242
+
243
+ # Concrete implementations - Tracks
244
+ from .track_repository_memory import MemoryTrackRepository
245
+ from .track_repository_sqlite import SQLiteTrackRepository
246
+
247
+ __all__ = [
248
+ # Feature Repository
249
+ "FeatureRepository",
250
+ "FeatureRepositoryError",
251
+ "FeatureNotFoundError",
252
+ "FeatureValidationError",
253
+ "FeatureConcurrencyError",
254
+ "RepositoryQuery",
255
+ # Feature implementations
256
+ "MemoryFeatureRepository",
257
+ "HTMLFileFeatureRepository",
258
+ "SQLiteFeatureRepository",
259
+ # Track Repository
260
+ "TrackRepository",
261
+ "TrackRepositoryError",
262
+ "TrackNotFoundError",
263
+ "TrackValidationError",
264
+ "TrackConcurrencyError",
265
+ # Track implementations
266
+ "MemoryTrackRepository",
267
+ "HTMLFileTrackRepository",
268
+ "SQLiteTrackRepository",
269
+ # Analytics Repository
270
+ "AnalyticsRepository",
271
+ "DependencyAnalysis",
272
+ "WorkRecommendation",
273
+ "AnalyticsRepositoryError",
274
+ "AnalysisError",
275
+ "InvalidItemError",
276
+ "StandardAnalyticsRepository",
277
+ # Filter Service
278
+ "FilterService",
279
+ "Filter",
280
+ "FilterOperator",
281
+ "FilterLogic",
282
+ "FilterServiceError",
283
+ "InvalidFilterError",
284
+ "StandardFilterService",
285
+ # Shared Cache
286
+ "SharedCache",
287
+ "SharedCacheError",
288
+ "CacheKeyError",
289
+ "CacheCapacityError",
290
+ "get_shared_cache",
291
+ "MemorySharedCache",
292
+ ]