lemma-db 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.
Files changed (1194) hide show
  1. db_extension/AGENT.md +125 -0
  2. db_extension/DEMO.md +59 -0
  3. db_extension/__init__.py +3 -0
  4. db_extension/agent/__init__.py +41 -0
  5. db_extension/agent/claude_stream.py +157 -0
  6. db_extension/agent/config.py +84 -0
  7. db_extension/agent/docker_runner.py +130 -0
  8. db_extension/agent/egress_bridge.py +406 -0
  9. db_extension/agent/egress_proxy_sidecar.py +81 -0
  10. db_extension/agent/extract.py +134 -0
  11. db_extension/agent/harness.py +611 -0
  12. db_extension/agent/lease_measure.py +167 -0
  13. db_extension/agent/mcp_host.py +57 -0
  14. db_extension/agent/mcp_proxy.py +162 -0
  15. db_extension/agent/mcp_socket.py +168 -0
  16. db_extension/agent/mcp_tool_registry.py +174 -0
  17. db_extension/agent/mcp_tool_specs.py +166 -0
  18. db_extension/agent/measure_core.py +709 -0
  19. db_extension/agent/model_bridge.py +260 -0
  20. db_extension/agent/model_proxy_sidecar.py +107 -0
  21. db_extension/agent/profile.py +213 -0
  22. db_extension/agent/session_clock.py +200 -0
  23. db_extension/agent/sql_gate.py +103 -0
  24. db_extension/agent/tools_worker.py +290 -0
  25. db_extension/catalog.py +62 -0
  26. db_extension/dataset_config.py +500 -0
  27. db_extension/optimizer.py +1357 -0
  28. db_extension/plan.md +131 -0
  29. db_extension/prepare_data.py +53 -0
  30. db_extension/queries/q2.sql +5 -0
  31. db_extension/queries/q3.sql +5 -0
  32. db_extension/run_optimizer.py +281 -0
  33. db_extension/test_extension.py +124 -0
  34. db_extension/utils.py +227 -0
  35. db_extension/verus_bridge.py +650 -0
  36. db_extension/workload_config.py +376 -0
  37. declarative_spec/__init__.py +16 -0
  38. declarative_spec/admit.py +461 -0
  39. declarative_spec/agent_scan.py +290 -0
  40. declarative_spec/assemble.py +1452 -0
  41. declarative_spec/assemble_library.py +1940 -0
  42. declarative_spec/bench.py +228 -0
  43. declarative_spec/best_so_far.py +167 -0
  44. declarative_spec/chain_lemmas.py +209 -0
  45. declarative_spec/decline.py +245 -0
  46. declarative_spec/dense_budget.py +325 -0
  47. declarative_spec/distinct_lemmas.py +256 -0
  48. declarative_spec/drive.py +634 -0
  49. declarative_spec/emit.py +1100 -0
  50. declarative_spec/emit_agg.py +379 -0
  51. declarative_spec/emit_corr_count.py +108 -0
  52. declarative_spec/emit_date.py +46 -0
  53. declarative_spec/emit_filter.py +89 -0
  54. declarative_spec/emit_in.py +96 -0
  55. declarative_spec/emit_join.py +238 -0
  56. declarative_spec/emit_like.py +24 -0
  57. declarative_spec/emit_projection.py +604 -0
  58. declarative_spec/emit_surface.py +2853 -0
  59. declarative_spec/emit_tail.py +182 -0
  60. declarative_spec/exact_rational.py +251 -0
  61. declarative_spec/example_registry.py +245 -0
  62. declarative_spec/feedback.py +277 -0
  63. declarative_spec/flatten_group.py +149 -0
  64. declarative_spec/fold_group_join.py +198 -0
  65. declarative_spec/fragment.py +447 -0
  66. declarative_spec/future_float_error_bounds/README.md +67 -0
  67. declarative_spec/future_float_error_bounds/__init__.py +1 -0
  68. declarative_spec/future_float_error_bounds/error_bounds.py +206 -0
  69. declarative_spec/future_float_error_bounds/fixtures/float_sum_eps.rs +87 -0
  70. declarative_spec/future_float_error_bounds/fixtures/sum_idealized_eps0.rs +70 -0
  71. declarative_spec/future_float_error_bounds/float_eps.py +44 -0
  72. declarative_spec/group_close.py +175 -0
  73. declarative_spec/heavy_phase.py +53 -0
  74. declarative_spec/inline_cte.py +73 -0
  75. declarative_spec/join_chain.py +143 -0
  76. declarative_spec/lemma_index.py +96 -0
  77. declarative_spec/lemmas.py +239 -0
  78. declarative_spec/lift.py +177 -0
  79. declarative_spec/literals.py +41 -0
  80. declarative_spec/nulls.py +400 -0
  81. declarative_spec/numeric_rewrite.py +791 -0
  82. declarative_spec/parallel.py +77 -0
  83. declarative_spec/parse.py +207 -0
  84. declarative_spec/parse_exprs.py +186 -0
  85. declarative_spec/parse_query.py +1562 -0
  86. declarative_spec/pipeline.py +708 -0
  87. declarative_spec/principles.py +217 -0
  88. declarative_spec/prompt.py +1580 -0
  89. declarative_spec/prover.py +76 -0
  90. declarative_spec/pushdown.py +419 -0
  91. declarative_spec/regions.py +69 -0
  92. declarative_spec/resolve.py +188 -0
  93. declarative_spec/schema_types.py +466 -0
  94. declarative_spec/sessions.py +171 -0
  95. declarative_spec/shapes.py +166 -0
  96. declarative_spec/sql_switches.py +30 -0
  97. declarative_spec/sql_text.py +118 -0
  98. declarative_spec/stateful.py +398 -0
  99. declarative_spec/stream.py +1213 -0
  100. declarative_spec/stream_distinct.py +363 -0
  101. declarative_spec/stream_join.py +1333 -0
  102. declarative_spec/stream_prompt.py +704 -0
  103. declarative_spec/string_encoding.py +30 -0
  104. declarative_spec/surface.py +126 -0
  105. declarative_spec/templates.py +723 -0
  106. declarative_spec/trusted_sets.py +123 -0
  107. declarative_spec/verus_docs.py +342 -0
  108. declarative_spec/verus_limits.py +158 -0
  109. declarative_spec/vstd_index.py +98 -0
  110. lemma_cli/__init__.py +1 -0
  111. lemma_cli/assumptions.py +109 -0
  112. lemma_cli/cache.py +101 -0
  113. lemma_cli/common.py +152 -0
  114. lemma_cli/duck.py +132 -0
  115. lemma_cli/executor.py +121 -0
  116. lemma_cli/generate.py +61 -0
  117. lemma_cli/main.py +150 -0
  118. lemma_cli/optimize.py +311 -0
  119. lemma_cli/sandbox.py +217 -0
  120. lemma_cli/setup_cmd.py +272 -0
  121. lemma_config.py +658 -0
  122. lemma_data/BUILD_INFO.json +6 -0
  123. lemma_data/__init__.py +0 -0
  124. lemma_data/docker/agent/Dockerfile +47 -0
  125. lemma_data/docker/agent/Dockerfile.harness +37 -0
  126. lemma_data/docker/agent/entrypoint.sh +187 -0
  127. lemma_data/docker/agent/install-agents.sh +28 -0
  128. lemma_data/docker/prover/Dockerfile +39 -0
  129. lemma_data/lemma.toml +119 -0
  130. lemma_data/scripts/fetch_libduckdb.sh +11 -0
  131. lemma_data/scripts/ram/README.md +7 -0
  132. lemma_data/scripts/ram/heavy.sh +31 -0
  133. lemma_data/scripts/ram/verus_guarded.sh +64 -0
  134. lemma_data/tests/fixtures/declarative_proofs/cold_count_int.rs +128 -0
  135. lemma_data/tests/fixtures/declarative_proofs/cold_sum_filter.rs +234 -0
  136. lemma_data/tests/fixtures/declarative_proofs/cold_sum_two_cols.rs +216 -0
  137. lemma_data/tests/fixtures/declarative_proofs/count_case_global.rs +24 -0
  138. lemma_data/tests/fixtures/declarative_proofs/decline/exact_avg_checked.rs +99 -0
  139. lemma_data/tests/fixtures/declarative_proofs/decline/exact_q14_ratio_checked.rs +112 -0
  140. lemma_data/tests/fixtures/declarative_proofs/decline/exact_q14_ratio_unchecked_must_fail.rs +98 -0
  141. lemma_data/tests/fixtures/declarative_proofs/decline/group_count_sum_checked.rs +218 -0
  142. lemma_data/tests/fixtures/declarative_proofs/decline/join_group_sum_checked.rs +307 -0
  143. lemma_data/tests/fixtures/declarative_proofs/decline/scan_usum_checked.rs +124 -0
  144. lemma_data/tests/fixtures/declarative_proofs/decline/stateful_exact_avg_checked.rs +111 -0
  145. lemma_data/tests/fixtures/declarative_proofs/decline/stateful_scan_usum_checked.rs +146 -0
  146. lemma_data/tests/fixtures/declarative_proofs/decline/stateful_usum_checked.rs +62 -0
  147. lemma_data/tests/fixtures/declarative_proofs/decline/template_usum_checked.rs +47 -0
  148. lemma_data/tests/fixtures/declarative_proofs/decline/usum_checked.rs +44 -0
  149. lemma_data/tests/fixtures/declarative_proofs/decline/usum_unchecked_must_fail.rs +37 -0
  150. lemma_data/tests/fixtures/declarative_proofs/dict_filter_count_sum.rs +82 -0
  151. lemma_data/tests/fixtures/declarative_proofs/dict_group_count_dense.rs +170 -0
  152. lemma_data/tests/fixtures/declarative_proofs/dict_group_count_sum_dense.rs +190 -0
  153. lemma_data/tests/fixtures/declarative_proofs/dict_group_count_sum_parallel.rs +588 -0
  154. lemma_data/tests/fixtures/declarative_proofs/dict_join_probe_sum.rs +411 -0
  155. lemma_data/tests/fixtures/declarative_proofs/dict_shipmode_min_count.rs +79 -0
  156. lemma_data/tests/fixtures/declarative_proofs/dict_string_filter_minmax.rs +88 -0
  157. lemma_data/tests/fixtures/declarative_proofs/dict_tpch_q14_exact_ratio.rs +323 -0
  158. lemma_data/tests/fixtures/declarative_proofs/exact_avg_decimal.rs +53 -0
  159. lemma_data/tests/fixtures/declarative_proofs/exact_ratio_sums.rs +63 -0
  160. lemma_data/tests/fixtures/declarative_proofs/float_avg_decimal.rs +71 -0
  161. lemma_data/tests/fixtures/declarative_proofs/float_avg_float.rs +97 -0
  162. lemma_data/tests/fixtures/declarative_proofs/float_avg_group_count_distinct.rs +586 -0
  163. lemma_data/tests/fixtures/declarative_proofs/float_avg_int.rs +75 -0
  164. lemma_data/tests/fixtures/declarative_proofs/float_filter_count.rs +35 -0
  165. lemma_data/tests/fixtures/declarative_proofs/float_group_avg_decimal.rs +195 -0
  166. lemma_data/tests/fixtures/declarative_proofs/float_group_avg_having.rs +238 -0
  167. lemma_data/tests/fixtures/declarative_proofs/float_group_sum_having.rs +214 -0
  168. lemma_data/tests/fixtures/declarative_proofs/float_group_sum_order_limit.rs +448 -0
  169. lemma_data/tests/fixtures/declarative_proofs/float_min_max.rs +67 -0
  170. lemma_data/tests/fixtures/declarative_proofs/float_order_limit.rs +346 -0
  171. lemma_data/tests/fixtures/declarative_proofs/float_product_sum.rs +92 -0
  172. lemma_data/tests/fixtures/declarative_proofs/float_sum.rs +67 -0
  173. lemma_data/tests/fixtures/declarative_proofs/group_count_where.rs +196 -0
  174. lemma_data/tests/fixtures/declarative_proofs/group_sum_where.rs +203 -0
  175. lemma_data/tests/fixtures/declarative_proofs/hard/count_distinct.rs +50 -0
  176. lemma_data/tests/fixtures/declarative_proofs/hard/dict_anti_join_group_topk.rs +1287 -0
  177. lemma_data/tests/fixtures/declarative_proofs/hard/dict_group_two_keys_count_distinct_avg.rs +856 -0
  178. lemma_data/tests/fixtures/declarative_proofs/hard/dict_having_scalar_subquery.rs +2208 -0
  179. lemma_data/tests/fixtures/declarative_proofs/hard/dict_join3_group_topk.rs +3223 -0
  180. lemma_data/tests/fixtures/declarative_proofs/hard/dict_join_group_count_distinct_topn.rs +1457 -0
  181. lemma_data/tests/fixtures/declarative_proofs/hard/dict_parallel_hash_group_topn.rs +1141 -0
  182. lemma_data/tests/fixtures/declarative_proofs/hard/dict_parallel_q1.rs +1609 -0
  183. lemma_data/tests/fixtures/declarative_proofs/hard/dict_parallel_q12.rs +1844 -0
  184. lemma_data/tests/fixtures/declarative_proofs/hard/dict_parallel_q1_exact_avg.rs +1641 -0
  185. lemma_data/tests/fixtures/declarative_proofs/hard/dict_parallel_star_join_group_sum_sorted.rs +1134 -0
  186. lemma_data/tests/fixtures/declarative_proofs/hard/dict_parallel_star_join_two_keys_revenue_order.rs +988 -0
  187. lemma_data/tests/fixtures/declarative_proofs/hard/dict_parallel_star_join_two_keys_string_order.rs +1273 -0
  188. lemma_data/tests/fixtures/declarative_proofs/hard/dict_projection_join_correlated_max_topk.rs +1576 -0
  189. lemma_data/tests/fixtures/declarative_proofs/hard/dict_star_join_group_sum_sorted.rs +792 -0
  190. lemma_data/tests/fixtures/declarative_proofs/hard/group_decimal_sums_string_keys_sorted.rs +1134 -0
  191. lemma_data/tests/fixtures/declarative_proofs/hard/map_count.rs +63 -0
  192. lemma_data/tests/fixtures/declarative_proofs/hard/projection_join_correlated_max_topk.rs +756 -0
  193. lemma_data/tests/fixtures/declarative_proofs/hard/string_tuple_count_distinct_sorted.rs +550 -0
  194. lemma_data/tests/fixtures/declarative_proofs/hard/two_key.rs +200 -0
  195. lemma_data/tests/fixtures/declarative_proofs/hard/usum_nonlinear.rs +50 -0
  196. lemma_data/tests/fixtures/declarative_proofs/int_group_count.rs +63 -0
  197. lemma_data/tests/fixtures/declarative_proofs/join_group_sum.rs +325 -0
  198. lemma_data/tests/fixtures/declarative_proofs/join_min_stringhashmap_probe.rs +123 -0
  199. lemma_data/tests/fixtures/declarative_proofs/parallel_dict_filter_count_max_blockskip.rs +512 -0
  200. lemma_data/tests/fixtures/declarative_proofs/parallel_dict_filter_count_max_slices.rs +503 -0
  201. lemma_data/tests/fixtures/declarative_proofs/parallel_dict_nullable_count_min.rs +428 -0
  202. lemma_data/tests/fixtures/declarative_proofs/parallel_ungrouped_count.rs +293 -0
  203. lemma_data/tests/fixtures/declarative_proofs/parallel_ungrouped_max.rs +323 -0
  204. lemma_data/tests/fixtures/declarative_proofs/parallel_ungrouped_min.rs +323 -0
  205. lemma_data/tests/fixtures/declarative_proofs/parallel_ungrouped_product_sum.rs +327 -0
  206. lemma_data/tests/fixtures/declarative_proofs/parallel_ungrouped_product_sum_slices.rs +436 -0
  207. lemma_data/tests/fixtures/declarative_proofs/parallel_ungrouped_sum.rs +308 -0
  208. lemma_data/tests/fixtures/declarative_proofs/principles/group_by_dict_key.rs +190 -0
  209. lemma_data/tests/fixtures/declarative_proofs/principles/join_unique_lookup.rs +146 -0
  210. lemma_data/tests/fixtures/declarative_proofs/principles/null_skipping_aggregate.rs +57 -0
  211. lemma_data/tests/fixtures/declarative_proofs/principles/parallel_scan_sum.rs +308 -0
  212. lemma_data/tests/fixtures/declarative_proofs/principles/scan_filter_sum_count.rs +50 -0
  213. lemma_data/tests/fixtures/declarative_proofs/principles/star_join_group_by.rs +309 -0
  214. lemma_data/tests/fixtures/declarative_proofs/principles/top_n_with_ties.rs +153 -0
  215. lemma_data/tests/fixtures/declarative_proofs/projection_correlated_max.rs +87 -0
  216. lemma_data/tests/fixtures/declarative_proofs/projection_distinct.rs +77 -0
  217. lemma_data/tests/fixtures/declarative_proofs/projection_int_key.helpers.rs +12 -0
  218. lemma_data/tests/fixtures/declarative_proofs/projection_join.rs +76 -0
  219. lemma_data/tests/fixtures/declarative_proofs/projection_null_cell.helpers.rs +12 -0
  220. lemma_data/tests/fixtures/declarative_proofs/projection_null_cell.rs +49 -0
  221. lemma_data/tests/fixtures/declarative_proofs/projection_top_k.helpers.rs +48 -0
  222. lemma_data/tests/fixtures/declarative_proofs/projection_top_k.rs +91 -0
  223. lemma_data/tests/fixtures/declarative_proofs/projection_where.helpers.rs +12 -0
  224. lemma_data/tests/fixtures/declarative_proofs/projection_where.rs +47 -0
  225. lemma_data/tests/fixtures/declarative_proofs/scan_filtered_sum.rs +118 -0
  226. lemma_data/tests/fixtures/declarative_proofs/self_join_count.rs +47 -0
  227. lemma_data/tests/fixtures/declarative_proofs/stateful_date_prefix.rs +252 -0
  228. lemma_data/tests/fixtures/declarative_proofs/stateful_degenerate_sum.rs +57 -0
  229. lemma_data/tests/fixtures/declarative_proofs/stateful_group_table.rs +210 -0
  230. lemma_data/tests/fixtures/declarative_proofs/stream/group_count_distinct.rs +414 -0
  231. lemma_data/tests/fixtures/declarative_proofs/stream/group_nullable_key_count_sum.rs +329 -0
  232. lemma_data/tests/fixtures/declarative_proofs/stream/group_string_count_sum.rs +244 -0
  233. lemma_data/tests/fixtures/declarative_proofs/stream/join_group_build_key.rs +580 -0
  234. lemma_data/tests/fixtures/declarative_proofs/stream/ungrouped_sum_filter.rs +100 -0
  235. lemma_data/tests/fixtures/declarative_proofs/stream/ungrouped_sum_filter_template.rs +106 -0
  236. lemma_data/tests/fixtures/declarative_proofs/string_group_count.rs +58 -0
  237. lemma_data/tests/fixtures/declarative_proofs/template_date_count.rs +28 -0
  238. lemma_data/tests/fixtures/declarative_proofs/template_sum_where.rs +38 -0
  239. lemma_data/tests/fixtures/declarative_proofs/tpch_q14_promo_ratio.rs +296 -0
  240. lemma_data/tests/fixtures/declarative_proofs/tpch_q19_disjunction.rs +173 -0
  241. lemma_data/tests/fixtures/declarative_proofs/tpch_q3_join_group_topk.rs +739 -0
  242. lemma_data/tests/fixtures/declarative_proofs/tpch_shipmode_min_count_plain.rs +46 -0
  243. lemma_data/tests/fixtures/declarative_proofs/u64_group_count_slots_t_k.rs +126 -0
  244. lemma_data/tests/fixtures/declarative_proofs/u64_group_count_t_k.rs +63 -0
  245. lemma_data/tests/fixtures/declarative_proofs/ungrouped_decimal_product_sum.rs +65 -0
  246. lemma_data/tests/fixtures/declarative_proofs/ungrouped_minmax_string_filter.rs +54 -0
  247. lemma_data/tests/fixtures/declarative_proofs/ungrouped_sum_where.rs +35 -0
  248. lemma_data/tests/fixtures/declarative_proofs/zero_copy_count_int.rs +64 -0
  249. lemma_data/tests/fixtures/declarative_proofs/zero_copy_count_int.spec.rs +145 -0
  250. lemma_data/tests/fixtures/declarative_proofs/zero_copy_count_int_flat.rs +30 -0
  251. lemma_data/tests/fixtures/declarative_proofs/zero_copy_sum_filter.rs +94 -0
  252. lemma_data/tests/fixtures/declarative_proofs/zero_copy_sum_filter.spec.rs +142 -0
  253. lemma_data/tests/fixtures/declarative_proofs/zero_copy_sum_filter_flat.rs +45 -0
  254. lemma_data/tests/fixtures/declarative_proofs/zero_copy_sum_filter_parallel.rs +407 -0
  255. lemma_data/tests/fixtures/declarative_proofs/zero_copy_sum_filter_parallel.spec.rs +143 -0
  256. lemma_data/tests/fixtures/declarative_proofs/zero_copy_sum_filter_parallel_flat.rs +290 -0
  257. lemma_data/tests/fixtures/declarative_proofs/zero_copy_sum_two_cols.rs +105 -0
  258. lemma_data/tests/fixtures/declarative_proofs/zero_copy_sum_two_cols.spec.rs +145 -0
  259. lemma_data/tests/fixtures/declarative_proofs/zero_copy_sum_two_cols_flat.rs +48 -0
  260. lemma_db-0.1.0.dist-info/METADATA +282 -0
  261. lemma_db-0.1.0.dist-info/RECORD +1194 -0
  262. lemma_db-0.1.0.dist-info/WHEEL +5 -0
  263. lemma_db-0.1.0.dist-info/entry_points.txt +2 -0
  264. lemma_db-0.1.0.dist-info/licenses/LICENSE +21 -0
  265. lemma_db-0.1.0.dist-info/top_level.txt +8 -0
  266. research_loop/AGENT_SANDBOX.md +274 -0
  267. research_loop/README.md +93 -0
  268. research_loop/__init__.py +1 -0
  269. research_loop/_transpiler.py +27 -0
  270. research_loop/admit_agent_runquery.py +833 -0
  271. research_loop/admit_runquery.py +59 -0
  272. research_loop/adversary/PROMPT.md +28 -0
  273. research_loop/adversary/__init__.py +3 -0
  274. research_loop/adversary/candidate.py +63 -0
  275. research_loop/adversary/judge.py +611 -0
  276. research_loop/adversary/judge_declarative.py +281 -0
  277. research_loop/adversary/run.py +167 -0
  278. research_loop/adversary/significance.py +120 -0
  279. research_loop/adversary/tamper.py +113 -0
  280. research_loop/agent_context.py +354 -0
  281. research_loop/agent_harness.py +230 -0
  282. research_loop/agent_image_check.py +79 -0
  283. research_loop/agent_primitives/Cargo.lock +180 -0
  284. research_loop/agent_primitives/Cargo.toml +34 -0
  285. research_loop/agent_primitives/__init__.py +44 -0
  286. research_loop/agent_primitives/build.rs +53 -0
  287. research_loop/agent_primitives/emit_externs.py +81 -0
  288. research_loop/agent_primitives/src/dict.rs +56 -0
  289. research_loop/agent_primitives/src/duckdb_export.rs +269 -0
  290. research_loop/agent_primitives/src/duckdb_pin.rs +619 -0
  291. research_loop/agent_primitives/src/duckdb_stream.rs +483 -0
  292. research_loop/agent_primitives/src/hash_join.rs +522 -0
  293. research_loop/agent_primitives/src/lib.rs +56 -0
  294. research_loop/agent_primitives/src/parallel.rs +75 -0
  295. research_loop/agent_primitives/src/small_card_agg.rs +186 -0
  296. research_loop/agent_primitives/src/spill_hash.rs +86 -0
  297. research_loop/agent_primitives/src/stats.rs +275 -0
  298. research_loop/agent_primitives/src/vector_scan.rs +99 -0
  299. research_loop/agent_primitives/src/zone_map.rs +103 -0
  300. research_loop/agent_primitives/test_emit_externs.py +148 -0
  301. research_loop/agent_primitives/tests/equiv.rs +292 -0
  302. research_loop/agent_primitives/verus_externs_core.rs.inc +171 -0
  303. research_loop/agent_primitives/verus_externs_parallel.rs.inc +800 -0
  304. research_loop/agent_sandbox.py +1712 -0
  305. research_loop/agent_vstd_imports.py +27 -0
  306. research_loop/agents/AGENTS.md +259 -0
  307. research_loop/agents/COMPILATION_GUIDE.md +103 -0
  308. research_loop/agents/HOLDOUT_PROPOSALS.md +80 -0
  309. research_loop/agents/JOIN_EXEC_MENU.md +56 -0
  310. research_loop/agents/JOIN_PROOF_PATHS.md +4 -0
  311. research_loop/agents/PRIMITIVES.md +169 -0
  312. research_loop/assemble_runquery.py +718 -0
  313. research_loop/assemble_verified_program.py +1515 -0
  314. research_loop/assumption_packages/__init__.py +55 -0
  315. research_loop/assumption_packages/check.py +263 -0
  316. research_loop/assumption_packages/json_io.py +83 -0
  317. research_loop/assumption_packages/profile.py +279 -0
  318. research_loop/assumption_packages/registry/ssb_sf1.json +339 -0
  319. research_loop/assumption_packages/registry/ssb_sf1.md +165 -0
  320. research_loop/assumption_packages/registry/tpch_sf1.json +349 -0
  321. research_loop/assumption_packages/registry/tpch_sf1.md +171 -0
  322. research_loop/assumption_packages/registry/tpch_sf10.json +346 -0
  323. research_loop/assumption_packages/registry/tpch_sf10.md +187 -0
  324. research_loop/assumption_packages/sec_margin.py +324 -0
  325. research_loop/bench_standins/README.md +21 -0
  326. research_loop/bench_standins/__init__.py +1 -0
  327. research_loop/bench_standins/basic_sql_extended_fixtures.py +537 -0
  328. research_loop/bench_standins/basic_sql_fixtures.py +253 -0
  329. research_loop/bench_standins/basic_sql_join_fixtures.py +250 -0
  330. research_loop/bench_standins/basic_sql_proj_order_fixtures.py +153 -0
  331. research_loop/bench_standins/basic_sql_set_cte_fixtures.py +239 -0
  332. research_loop/bench_standins/sec_holdout_runqueries.py +161 -0
  333. research_loop/bench_standins/sec_q1_runquery.py +101 -0
  334. research_loop/bench_standins/sec_q1_runquery.rs +87 -0
  335. research_loop/bench_standins/tpch_runqueries.py +348 -0
  336. research_loop/bench_standins/verified_runqueries.py +1069 -0
  337. research_loop/benchmark_runqueries.py +174 -0
  338. research_loop/benchmark_verified.py +332 -0
  339. research_loop/cold_lib.rs +126 -0
  340. research_loop/cold_stream.py +496 -0
  341. research_loop/config.env +73 -0
  342. research_loop/dafny_legacy/README.md +13 -0
  343. research_loop/dafny_legacy/admit_runquery.py +262 -0
  344. research_loop/dafny_legacy/agent_workspace/runquery_agent.dfy +11 -0
  345. research_loop/dafny_legacy/assemble_runquery.py +134 -0
  346. research_loop/dafny_legacy/harness.py +410 -0
  347. research_loop/dafny_legacy/native.dfy +54 -0
  348. research_loop/dafny_legacy/native_bridge/Cargo.toml +7 -0
  349. research_loop/dafny_legacy/native_bridge/src/lib.rs +4 -0
  350. research_loop/dafny_legacy/native_bridge/src/native_agg.rs +214 -0
  351. research_loop/dafny_legacy/native_bridge/src/native_ops.rs +19 -0
  352. research_loop/dafny_legacy/pipeline_columnar.py +99 -0
  353. research_loop/dafny_legacy/postprocessor.py +563 -0
  354. research_loop/dafny_legacy/template_runquery.dfy +25 -0
  355. research_loop/dafny_legacy/templates/runquery_agent.dfy +23 -0
  356. research_loop/dafny_legacy/working_query-rust/Cargo.lock +119 -0
  357. research_loop/dafny_legacy/working_query-rust/Cargo.toml +11 -0
  358. research_loop/dafny_legacy/working_query-rust/runtime/Cargo.lock +112 -0
  359. research_loop/dafny_legacy/working_query-rust/runtime/Cargo.toml +18 -0
  360. research_loop/dafny_legacy/working_query-rust/runtime/Makefile +28 -0
  361. research_loop/dafny_legacy/working_query-rust/runtime/src/big_int.rs +420 -0
  362. research_loop/dafny_legacy/working_query-rust/runtime/src/lib.rs +3853 -0
  363. research_loop/dafny_legacy/working_query-rust/runtime/src/small_int.rs +335 -0
  364. research_loop/dafny_legacy/working_query-rust/runtime/src/system/mod.rs +3983 -0
  365. research_loop/dafny_legacy/working_query-rust/runtime/src/tests/mod.rs +1324 -0
  366. research_loop/dafny_legacy/working_query-rust/src/cols_native.rs +632 -0
  367. research_loop/dafny_legacy/working_query-rust/src/native_agg.rs +92 -0
  368. research_loop/dafny_legacy/working_query-rust/src/native_ops.rs +19 -0
  369. research_loop/dafny_legacy/working_query-rust/src/working_query-rs.dtr +3 -0
  370. research_loop/dafny_legacy/working_query-rust/src/working_query.rs +570 -0
  371. research_loop/data_profile.py +512 -0
  372. research_loop/decl_columns.py +85 -0
  373. research_loop/decl_query_measure.py +899 -0
  374. research_loop/duckdb_load_ffi.rs.inc +462 -0
  375. research_loop/duckdb_load_mode.py +79 -0
  376. research_loop/exec_cols.py +90 -0
  377. research_loop/experiment_stream.py +309 -0
  378. research_loop/format_result_from_type.py +88 -0
  379. research_loop/harness.py +2255 -0
  380. research_loop/harness_legacy.py +240 -0
  381. research_loop/harvest_traces.py +117 -0
  382. research_loop/having_filter_bridge.py +908 -0
  383. research_loop/having_map_peel.rs.inc +11 -0
  384. research_loop/holdout/README.md +81 -0
  385. research_loop/holdout/bench_holdout/Cargo.lock +195 -0
  386. research_loop/holdout/bench_holdout/Cargo.toml +20 -0
  387. research_loop/holdout/bench_holdout/src/loader.rs +72 -0
  388. research_loop/holdout/bench_holdout/src/main.rs +372 -0
  389. research_loop/holdout/bench_holdout/src/prepared.rs +1292 -0
  390. research_loop/holdout/bench_holdout/src/queries.rs +657 -0
  391. research_loop/holdout/gen_data.py +183 -0
  392. research_loop/holdout/queries.py +386 -0
  393. research_loop/holdout/results.json +369 -0
  394. research_loop/holdout/run_holdout_bench.py +256 -0
  395. research_loop/in_duckdb.py +477 -0
  396. research_loop/job_label.py +16 -0
  397. research_loop/lemma_flags.py +97 -0
  398. research_loop/local_sandbox_eval.py +119 -0
  399. research_loop/menu_profile.py +330 -0
  400. research_loop/menus/TRUSTED_ADDITION_PROTOCOL.md +48 -0
  401. research_loop/menus/adversary_declarative0_HOLES_LOG.md +95 -0
  402. research_loop/menus/adversary_declarative0_LOG.md +341 -0
  403. research_loop/menus/adversary_declarative0_narrow_cells_VERDICT.md +33 -0
  404. research_loop/menus/adversary_declarative0_narrow_default_VERDICT.md +165 -0
  405. research_loop/menus/adversary_declarative0_speed_claims_VERDICT.md +95 -0
  406. research_loop/menus/adversary_dict_cap_VERDICT.md +9 -0
  407. research_loop/menus/adversary_sandbox_data_hide_VERDICT.md +69 -0
  408. research_loop/menus/adversary_target_cpu_VERDICT.md +16 -0
  409. research_loop/menus/adversary_vstd_axiom_groups_VERDICT.md +23 -0
  410. research_loop/menus/arena_record_and_broadcast_note_ADVERSARY_VERDICT.md +43 -0
  411. research_loop/menus/cold_path_feasibility.md +115 -0
  412. research_loop/menus/cold_stream_ADVERSARY_VERDICT.md +51 -0
  413. research_loop/menus/cold_stream_ADVERSARY_VERDICT_2.md +65 -0
  414. research_loop/menus/container_login_refresh_ADVERSARY_VERDICT.md +31 -0
  415. research_loop/menus/container_vs_manual_gap.md +92 -0
  416. research_loop/menus/custom_verus_audit.md +208 -0
  417. research_loop/menus/dense_lint_false_positive_ADVERSARY_VERDICT.md +41 -0
  418. research_loop/menus/duck_measure_settings_ADVERSARY_VERDICT.md +82 -0
  419. research_loop/menus/emitter_coverage_LOG.md +65 -0
  420. research_loop/menus/exec_helpers_ADVERSARY_VERDICT.md +129 -0
  421. research_loop/menus/exists_ungrouped_aggregate_ADVERSARY_VERDICT.md +112 -0
  422. research_loop/menus/exporter_batches_ADVERSARY_VERDICT.md +81 -0
  423. research_loop/menus/exporter_bulk_ADVERSARY_VERDICT.md +109 -0
  424. research_loop/menus/f64_idealization_ADVERSARY_VERDICT.md +279 -0
  425. research_loop/menus/future_work_parameterized_literals.md +35 -0
  426. research_loop/menus/gap_feedback_ADVERSARY_VERDICT.md +213 -0
  427. research_loop/menus/gap_q5_dense_slot_ADVERSARY_VERDICT.md +41 -0
  428. research_loop/menus/gap_routing_ADVERSARY_VERDICT.md +109 -0
  429. research_loop/menus/iter_tpch_ssb_LOG.md +67 -0
  430. research_loop/menus/join_chain_ADVERSARY_VERDICT.md +48 -0
  431. research_loop/menus/join_chain_ADVERSARY_VERDICT_2.md +41 -0
  432. research_loop/menus/limit_tie_row_check_ADVERSARY_VERDICT.md +35 -0
  433. research_loop/menus/null_cells_ADVERSARY_VERDICT.md +97 -0
  434. research_loop/menus/nulls_ADVERSARY_VERDICT.md +106 -0
  435. research_loop/menus/official_measure_ADVERSARY_VERDICT.md +66 -0
  436. research_loop/menus/parallel_dict_ADVERSARY_VERDICT.md +58 -0
  437. research_loop/menus/pin_path_archive.md +90 -0
  438. research_loop/menus/principles_examples_ADVERSARY_VERDICT.md +144 -0
  439. research_loop/menus/pub6_egress_manifest_ADVERSARY_VERDICT.md +21 -0
  440. research_loop/menus/pub6_examples_a_ADVERSARY_VERDICT.md +110 -0
  441. research_loop/menus/pub6_examples_b_ADVERSARY_VERDICT.md +55 -0
  442. research_loop/menus/pub6_haiku_diagnosis.md +81 -0
  443. research_loop/menus/pub6_keyword_columns_ADVERSARY_VERDICT.md +21 -0
  444. research_loop/menus/pub6_prompt_imperative_tools_ADVERSARY_VERDICT.md +22 -0
  445. research_loop/menus/pub6_sonnet_diagnosis.md +58 -0
  446. research_loop/menus/ratio_division_ADVERSARY_VERDICT.md +123 -0
  447. research_loop/menus/ratio_division_PROPOSAL.md +90 -0
  448. research_loop/menus/sec_decimal_variant.md +134 -0
  449. research_loop/menus/sql_agg_times_constant_ADVERSARY_VERDICT.md +18 -0
  450. research_loop/menus/sql_cte_reuse_ADVERSARY_VERDICT.md +15 -0
  451. research_loop/menus/sql_derived_agg_expr_ADVERSARY_VERDICT.md +14 -0
  452. research_loop/menus/sql_left_join_count_ADVERSARY_VERDICT.md +10 -0
  453. research_loop/menus/string_dictionary_ADVERSARY_VERDICT.md +60 -0
  454. research_loop/menus/string_dictionary_PROPOSAL.md +104 -0
  455. research_loop/menus/zero_copy_gate.md +88 -0
  456. research_loop/menus/zero_copy_lease_ADVERSARY_VERDICT.md +156 -0
  457. research_loop/menus/zero_copy_lease_ADVERSARY_VERDICT_2.md +153 -0
  458. research_loop/menus/zero_copy_lease_PROPOSAL.md +184 -0
  459. research_loop/method_spec_ret_type.py +169 -0
  460. research_loop/multi_agg_step_bridge.py +3692 -0
  461. research_loop/native/Cargo.toml +13 -0
  462. research_loop/native/src/agg.rs +16 -0
  463. research_loop/native/src/lib.rs +25 -0
  464. research_loop/official_measure.py +407 -0
  465. research_loop/pipeline_demo.py +454 -0
  466. research_loop/pipeline_log.py +89 -0
  467. research_loop/run_artifacts.py +447 -0
  468. research_loop/sandbox_hide.py +49 -0
  469. research_loop/scan_export.py +107 -0
  470. research_loop/scripts/__init__.py +1 -0
  471. research_loop/scripts/arena_draw.py +169 -0
  472. research_loop/scripts/arena_record.py +368 -0
  473. research_loop/scripts/batch_verify_prove_loop.py +123 -0
  474. research_loop/scripts/bench_agent_primitives.py +73 -0
  475. research_loop/scripts/bootstrap_prove_loop_round.py +143 -0
  476. research_loop/scripts/build_rust_with_duckdb.py +29 -0
  477. research_loop/scripts/check_agent_mcp_ready.sh +212 -0
  478. research_loop/scripts/checkpoint_prove_loop.sh +24 -0
  479. research_loop/scripts/classify_product_failures.py +324 -0
  480. research_loop/scripts/claude_mock_e2e.py +177 -0
  481. research_loop/scripts/cold_profile.rs +319 -0
  482. research_loop/scripts/cold_stream_oneshot.py +125 -0
  483. research_loop/scripts/container_batch.py +175 -0
  484. research_loop/scripts/container_table.py +62 -0
  485. research_loop/scripts/dashboard.py +214 -0
  486. research_loop/scripts/decl_coverage.py +241 -0
  487. research_loop/scripts/decl_coverage_dec.py +72 -0
  488. research_loop/scripts/decl_dict_bench.py +115 -0
  489. research_loop/scripts/decl_duck_timing.py +88 -0
  490. research_loop/scripts/decl_fuzz.py +340 -0
  491. research_loop/scripts/decl_speceval_fuzz.py +194 -0
  492. research_loop/scripts/decl_triage.py +48 -0
  493. research_loop/scripts/decl_try.py +38 -0
  494. research_loop/scripts/decl_typecheck_sample.py +77 -0
  495. research_loop/scripts/declarative_draws.py +161 -0
  496. research_loop/scripts/declarative_ladder.py +162 -0
  497. research_loop/scripts/declarative_ladder_claude.py +40 -0
  498. research_loop/scripts/declarative_manual.py +207 -0
  499. research_loop/scripts/declarative_oneshot.py +241 -0
  500. research_loop/scripts/declarative_remeasure.py +71 -0
  501. research_loop/scripts/declarative_round.py +439 -0
  502. research_loop/scripts/declarative_tiers.py +259 -0
  503. research_loop/scripts/declarative_transplant.py +42 -0
  504. research_loop/scripts/duckdb_sf1_standin_ref.py +69 -0
  505. research_loop/scripts/env_verus.sh +2 -0
  506. research_loop/scripts/experiment_event_receiver.py +174 -0
  507. research_loop/scripts/fetch_verus_docs.sh +26 -0
  508. research_loop/scripts/fixture_rlimit_sweep.sh +28 -0
  509. research_loop/scripts/fragment_coverage.py +146 -0
  510. research_loop/scripts/fragment_diff.py +148 -0
  511. research_loop/scripts/fragment_gen.py +709 -0
  512. research_loop/scripts/fragment_pool.py +155 -0
  513. research_loop/scripts/fragment_round.py +52 -0
  514. research_loop/scripts/fragment_smith.py +98 -0
  515. research_loop/scripts/gcp_experiment_preflight.sh +201 -0
  516. research_loop/scripts/gen_tpch.py +35 -0
  517. research_loop/scripts/gendb_published_one_run.py +513 -0
  518. research_loop/scripts/guidance_draws.py +111 -0
  519. research_loop/scripts/in_duckdb_bench.py +94 -0
  520. research_loop/scripts/in_duckdb_install_run.py +96 -0
  521. research_loop/scripts/inject_fold_bound_proofs.py +1318 -0
  522. research_loop/scripts/inspect_run.py +34 -0
  523. research_loop/scripts/install_verus.md +41 -0
  524. research_loop/scripts/lemma_fail_wake.py +324 -0
  525. research_loop/scripts/lemma_guest_halt.sh +22 -0
  526. research_loop/scripts/lemma_laptop_lease_watch.sh +29 -0
  527. research_loop/scripts/load_ssb_sf1.py +88 -0
  528. research_loop/scripts/local_e2e_gendb_docker.sh +5 -0
  529. research_loop/scripts/local_e2e_gendb_suite.py +129 -0
  530. research_loop/scripts/local_e2e_gendb_tiny.py +216 -0
  531. research_loop/scripts/local_e2e_tiny_docker.py +791 -0
  532. research_loop/scripts/local_e2e_tiny_docker.sh +14 -0
  533. research_loop/scripts/local_e2e_tiny_queries.sql +29 -0
  534. research_loop/scripts/local_sandbox_agent_ladder.sh +38 -0
  535. research_loop/scripts/local_sandbox_agent_vs_standin.py +159 -0
  536. research_loop/scripts/local_sandbox_agent_vs_standin.sh +114 -0
  537. research_loop/scripts/local_sandbox_ssb_ladder.sh +82 -0
  538. research_loop/scripts/make_tpch.py +87 -0
  539. research_loop/scripts/manual_attempt.py +51 -0
  540. research_loop/scripts/mock_anthropic_api.py +318 -0
  541. research_loop/scripts/overnight_lemma.py +897 -0
  542. research_loop/scripts/overnight_lemma.sh +389 -0
  543. research_loop/scripts/prove_measure_competitive.py +226 -0
  544. research_loop/scripts/r24_rocket_fast_chain.sh +78 -0
  545. research_loop/scripts/r25_rocket_fast_chain.sh +78 -0
  546. research_loop/scripts/r26_rocket_fast_mid_chain.sh +108 -0
  547. research_loop/scripts/record_db_meta.py +57 -0
  548. research_loop/scripts/require_expect_sha.sh +25 -0
  549. research_loop/scripts/resample_eval.py +177 -0
  550. research_loop/scripts/results_table.py +107 -0
  551. research_loop/scripts/rewrite_agent_views.py +271 -0
  552. research_loop/scripts/rewrite_seq_views_prove_loop.py +51 -0
  553. research_loop/scripts/run_container_agent.py +357 -0
  554. research_loop/scripts/run_standin_tpch_sf1.sh +27 -0
  555. research_loop/scripts/save_par_fixtures.py +38 -0
  556. research_loop/scripts/sec_feasibility_timed.py +498 -0
  557. research_loop/scripts/spot_r15_agent_prove.py +187 -0
  558. research_loop/scripts/spot_r15_experiment.sh +158 -0
  559. research_loop/scripts/spot_resource_monitor.sh +48 -0
  560. research_loop/scripts/sqlsmith_trusted_coverage.py +540 -0
  561. research_loop/scripts/ssb13.py +61 -0
  562. research_loop/scripts/ssb13_write_queries.py +105 -0
  563. research_loop/scripts/tail_experiment_sse.sh +5 -0
  564. research_loop/scripts/tpch22.py +124 -0
  565. research_loop/scripts/tpch_shapes.py +77 -0
  566. research_loop/scripts/trusted_capability_score.py +394 -0
  567. research_loop/scripts/vm_bringup_experiment.sh +37 -0
  568. research_loop/scripts/zero_copy_oneshot.py +314 -0
  569. research_loop/scripts/zero_copy_prove.py +271 -0
  570. research_loop/scripts/zero_copy_round.py +88 -0
  571. research_loop/sec_table_assumptions.py +190 -0
  572. research_loop/spec_styles.py +36 -0
  573. research_loop/speed_bench/__init__.py +0 -0
  574. research_loop/speed_bench/ab.py +27 -0
  575. research_loop/speed_bench/kernels/Cargo.lock +7 -0
  576. research_loop/speed_bench/kernels/Cargo.toml +13 -0
  577. research_loop/speed_bench/kernels/src/main.rs +254 -0
  578. research_loop/speed_bench/measure.py +196 -0
  579. research_loop/speed_bench/oracle.py +113 -0
  580. research_loop/speed_bench/par_spike/README.md +40 -0
  581. research_loop/speed_bench/par_spike/bw.rs +44 -0
  582. research_loop/speed_bench/par_spike/par_measure.py +149 -0
  583. research_loop/speed_bench/par_spike/q01_par.rs +477 -0
  584. research_loop/speed_bench/par_spike/q03_par.rs +1179 -0
  585. research_loop/speed_bench/par_spike/q04_par.rs +832 -0
  586. research_loop/speed_bench/par_spike/results/bandwidth.txt +6 -0
  587. research_loop/speed_bench/par_spike/results/r100M.json +260 -0
  588. research_loop/speed_bench/par_spike/results/r20M.json +260 -0
  589. research_loop/speed_bench/par_spike/results/r2M.json +260 -0
  590. research_loop/speed_bench/par_spike/results/spawn_cost.txt +8 -0
  591. research_loop/speed_bench/par_spike/results/table.txt +9 -0
  592. research_loop/speed_bench/par_spike/spawn_cost.sh +10 -0
  593. research_loop/speed_bench/par_spike/table.py +23 -0
  594. research_loop/speed_bench/proved/q01_filter_sum.rs +170 -0
  595. research_loop/speed_bench/proved/q02_filter_count.rs +124 -0
  596. research_loop/speed_bench/proved/q03_group_sum.rs +396 -0
  597. research_loop/speed_bench/proved/q04_group_count.rs +345 -0
  598. research_loop/speed_bench/proved/q05_two_pred_sum.rs +189 -0
  599. research_loop/speed_bench/proved/q06_distinct.rs +320 -0
  600. research_loop/speed_bench/proved/q07_join_sum.rs +546 -0
  601. research_loop/speed_bench/proved/q08_range_count.rs +125 -0
  602. research_loop/speed_bench/proved/q09_group_two.rs +1286 -0
  603. research_loop/speed_bench/proved/q10_group_topk.rs +742 -0
  604. research_loop/speed_bench/queries.py +49 -0
  605. research_loop/speed_bench/report.py +28 -0
  606. research_loop/speed_bench/results/base_2M.err +0 -0
  607. research_loop/speed_bench/results/base_2M.json +342 -0
  608. research_loop/speed_bench/results/base_2M_r2.err +0 -0
  609. research_loop/speed_bench/results/base_2M_r2.json +382 -0
  610. research_loop/speed_bench/results/base_2M_r3.json +442 -0
  611. research_loop/speed_bench/results/base_2M_r3.out +10 -0
  612. research_loop/speed_bench/results/final_100M.err +0 -0
  613. research_loop/speed_bench/results/final_100M.json +422 -0
  614. research_loop/speed_bench/results/final_20M.err +0 -0
  615. research_loop/speed_bench/results/final_20M.json +422 -0
  616. research_loop/speed_bench/results/final_2M.err +0 -0
  617. research_loop/speed_bench/results/final_2M.json +442 -0
  618. research_loop/speed_bench/results/opt1.err +0 -0
  619. research_loop/speed_bench/results/opt1_2M.json +90 -0
  620. research_loop/speed_bench/run.py +201 -0
  621. research_loop/ssb_queries.py +172 -0
  622. research_loop/ssb_workload.py +317 -0
  623. research_loop/structural_catalog.py +46 -0
  624. research_loop/table_assumptions.py +349 -0
  625. research_loop/templates/runquery_agent.rs +19 -0
  626. research_loop/tpch_workload.py +104 -0
  627. research_loop/trust_configs/README.md +32 -0
  628. research_loop/trust_configs/__init__.py +50 -0
  629. research_loop/trust_configs/_types.py +12 -0
  630. research_loop/trust_configs/adversary_declarative0.py +32 -0
  631. research_loop/trust_configs/adversary_imperativespec0.py +40 -0
  632. research_loop/trust_configs/fast.py +19 -0
  633. research_loop/trust_configs/product.py +19 -0
  634. research_loop/trusted_adversarial/Cargo.lock +192 -0
  635. research_loop/trusted_adversarial/Cargo.toml +13 -0
  636. research_loop/trusted_adversarial/README.md +11 -0
  637. research_loop/trusted_adversarial/src/lib.rs +4 -0
  638. research_loop/trusted_adversarial/tests/abs_u64_exec.rs +151 -0
  639. research_loop/trusted_adversarial/tests/add_i64.rs +220 -0
  640. research_loop/trusted_adversarial/tests/add_u64.rs +167 -0
  641. research_loop/trusted_adversarial/tests/build_hashset_u32.rs +126 -0
  642. research_loop/trusted_adversarial/tests/build_zone_map_u32.rs +220 -0
  643. research_loop/trusted_adversarial/tests/case_when_u64_exec.rs +129 -0
  644. research_loop/trusted_adversarial/tests/decode_dict_str.rs +159 -0
  645. research_loop/trusted_adversarial/tests/may_satisfy_range_u32.rs +157 -0
  646. research_loop/trusted_adversarial/tests/mul_u64_u32.rs +169 -0
  647. research_loop/trusted_adversarial/tests/par_filter_sum_u64.rs +158 -0
  648. research_loop/trusted_adversarial/tests/par_sum_u64.rs +110 -0
  649. research_loop/trusted_adversarial/tests/probe_sum_u64.rs +165 -0
  650. research_loop/trusted_adversarial/tests/str_ilike_match_exec.rs +200 -0
  651. research_loop/trusted_adversarial/tests/str_like_contains_exec.rs +150 -0
  652. research_loop/trusted_adversarial/tests/str_like_prefix_exec.rs +141 -0
  653. research_loop/trusted_adversarial/tests/str_like_suffix_exec.rs +142 -0
  654. research_loop/trusted_adversarial/tests/str_like_underscore_match_exec.rs +199 -0
  655. research_loop/trusted_adversarial/tests/str_lower_exec.rs +136 -0
  656. research_loop/trusted_adversarial/tests/str_upper_exec.rs +159 -0
  657. research_loop/trusted_adversarial/tests/sub_u64_to_i64.rs +132 -0
  658. research_loop/trusted_families.py +237 -0
  659. research_loop/trusted_ret_bridge.py +1178 -0
  660. research_loop/trusted_semantic_oracle.py +636 -0
  661. research_loop/trusted_usage.py +124 -0
  662. research_loop/vendor/__init__.py +0 -0
  663. research_loop/vendor/verus_docs/COMMIT +1 -0
  664. research_loop/vendor/verus_docs/examples/README.md +23 -0
  665. research_loop/vendor/verus_docs/examples/adts.rs +85 -0
  666. research_loop/vendor/verus_docs/examples/adts_eq.rs +28 -0
  667. research_loop/vendor/verus_docs/examples/assert_by_compute.rs +453 -0
  668. research_loop/vendor/verus_docs/examples/assertions.rs +31 -0
  669. research_loop/vendor/verus_docs/examples/assorted_demo.rs +68 -0
  670. research_loop/vendor/verus_docs/examples/atomic_increment.rs +170 -0
  671. research_loop/vendor/verus_docs/examples/atomics.rs +139 -0
  672. research_loop/vendor/verus_docs/examples/basic_failure.rs +24 -0
  673. research_loop/vendor/verus_docs/examples/basic_lock1.rs +100 -0
  674. research_loop/vendor/verus_docs/examples/basic_lock2.rs +76 -0
  675. research_loop/vendor/verus_docs/examples/bitmap.rs +175 -0
  676. research_loop/vendor/verus_docs/examples/bitvector_basic.rs +126 -0
  677. research_loop/vendor/verus_docs/examples/bitvector_equivalence.rs +173 -0
  678. research_loop/vendor/verus_docs/examples/bitvector_garbage_collection.rs +177 -0
  679. research_loop/vendor/verus_docs/examples/broadcast_proof.rs +190 -0
  680. research_loop/vendor/verus_docs/examples/calc.rs +50 -0
  681. research_loop/vendor/verus_docs/examples/cargo-verus/library/Cargo.toml +15 -0
  682. research_loop/vendor/verus_docs/examples/cargo-verus/library/src/lib.rs +12 -0
  683. research_loop/vendor/verus_docs/examples/cargo-verus/run.sh +21 -0
  684. research_loop/vendor/verus_docs/examples/cargo-verus/test/Cargo.toml +13 -0
  685. research_loop/vendor/verus_docs/examples/cargo-verus/test/src/main.rs +16 -0
  686. research_loop/vendor/verus_docs/examples/cells.rs +24 -0
  687. research_loop/vendor/verus_docs/examples/cuckoo_hash_table/cuckoo.rs +1456 -0
  688. research_loop/vendor/verus_docs/examples/cuckoo_hash_table/main.rs +70 -0
  689. research_loop/vendor/verus_docs/examples/cuckoo_hash_table/rwlock.rs +683 -0
  690. research_loop/vendor/verus_docs/examples/datatypes.rs +102 -0
  691. research_loop/vendor/verus_docs/examples/debug.rs +80 -0
  692. research_loop/vendor/verus_docs/examples/debug_expand.rs +323 -0
  693. research_loop/vendor/verus_docs/examples/doubly_linked.rs +591 -0
  694. research_loop/vendor/verus_docs/examples/doubly_linked_xor.rs +493 -0
  695. research_loop/vendor/verus_docs/examples/entry_api.rs +52 -0
  696. research_loop/vendor/verus_docs/examples/even_cell.rs +54 -0
  697. research_loop/vendor/verus_docs/examples/exec_termination_example.rs +114 -0
  698. research_loop/vendor/verus_docs/examples/extensionality.rs +120 -0
  699. research_loop/vendor/verus_docs/examples/external.rs +18 -0
  700. research_loop/vendor/verus_docs/examples/float.rs +91 -0
  701. research_loop/vendor/verus_docs/examples/fun_ext.rs +35 -0
  702. research_loop/vendor/verus_docs/examples/generics.rs +75 -0
  703. research_loop/vendor/verus_docs/examples/guide/assert_by_compute.rs +89 -0
  704. research_loop/vendor/verus_docs/examples/guide/bst_map.rs +426 -0
  705. research_loop/vendor/verus_docs/examples/guide/bst_map_generic.rs +763 -0
  706. research_loop/vendor/verus_docs/examples/guide/bst_map_type_invariant.rs +420 -0
  707. research_loop/vendor/verus_docs/examples/guide/calc.rs +38 -0
  708. research_loop/vendor/verus_docs/examples/guide/const.rs +91 -0
  709. research_loop/vendor/verus_docs/examples/guide/datatypes.rs +130 -0
  710. research_loop/vendor/verus_docs/examples/guide/equality.rs +39 -0
  711. research_loop/vendor/verus_docs/examples/guide/exec_attr.rs +123 -0
  712. research_loop/vendor/verus_docs/examples/guide/exec_spec_unverified.rs +31 -0
  713. research_loop/vendor/verus_docs/examples/guide/exec_spec_verified.rs +36 -0
  714. research_loop/vendor/verus_docs/examples/guide/ext_equal.rs +86 -0
  715. research_loop/vendor/verus_docs/examples/guide/external_trait_specs.rs +88 -0
  716. research_loop/vendor/verus_docs/examples/guide/getting_started.rs +21 -0
  717. research_loop/vendor/verus_docs/examples/guide/higher_order_fns.rs +194 -0
  718. research_loop/vendor/verus_docs/examples/guide/integers.rs +112 -0
  719. research_loop/vendor/verus_docs/examples/guide/interior_mutability.rs +65 -0
  720. research_loop/vendor/verus_docs/examples/guide/invariants.rs +257 -0
  721. research_loop/vendor/verus_docs/examples/guide/iterators.rs +220 -0
  722. research_loop/vendor/verus_docs/examples/guide/lib_examples.rs +293 -0
  723. research_loop/vendor/verus_docs/examples/guide/logatom.rs +212 -0
  724. research_loop/vendor/verus_docs/examples/guide/modes.rs +372 -0
  725. research_loop/vendor/verus_docs/examples/guide/nonlinear_bitvec.rs +86 -0
  726. research_loop/vendor/verus_docs/examples/guide/opaque.rs +34 -0
  727. research_loop/vendor/verus_docs/examples/guide/overflow.rs +49 -0
  728. research_loop/vendor/verus_docs/examples/guide/pervasive_example.rs +18 -0
  729. research_loop/vendor/verus_docs/examples/guide/quants.rs +497 -0
  730. research_loop/vendor/verus_docs/examples/guide/recursion.rs +531 -0
  731. research_loop/vendor/verus_docs/examples/guide/references.rs +111 -0
  732. research_loop/vendor/verus_docs/examples/guide/requires_ensures.rs +30 -0
  733. research_loop/vendor/verus_docs/examples/guide/requires_ensures_edit.rs +84 -0
  734. research_loop/vendor/verus_docs/examples/guide/strings.rs +60 -0
  735. research_loop/vendor/verus_docs/examples/guide/traits.rs +186 -0
  736. research_loop/vendor/verus_docs/examples/helping.rs +449 -0
  737. research_loop/vendor/verus_docs/examples/imo_1988_6.rs +127 -0
  738. research_loop/vendor/verus_docs/examples/impl_basic.rs +68 -0
  739. research_loop/vendor/verus_docs/examples/integer_ring/circular_by_d.rs +165 -0
  740. research_loop/vendor/verus_docs/examples/integer_ring/integer_ring.rs +311 -0
  741. research_loop/vendor/verus_docs/examples/integer_ring/integer_ring_bound_check.rs +130 -0
  742. research_loop/vendor/verus_docs/examples/integers.rs +65 -0
  743. research_loop/vendor/verus_docs/examples/invariants.rs +40 -0
  744. research_loop/vendor/verus_docs/examples/logatom_lib.rs +496 -0
  745. research_loop/vendor/verus_docs/examples/mergesort.rs +188 -0
  746. research_loop/vendor/verus_docs/examples/modules.rs +36 -0
  747. research_loop/vendor/verus_docs/examples/multiset.rs +46 -0
  748. research_loop/vendor/verus_docs/examples/nevd_script.rs +213 -0
  749. research_loop/vendor/verus_docs/examples/overflow.rs +69 -0
  750. research_loop/vendor/verus_docs/examples/playground.rs +42 -0
  751. research_loop/vendor/verus_docs/examples/power_of_2.rs +212 -0
  752. research_loop/vendor/verus_docs/examples/prelude.rs +17 -0
  753. research_loop/vendor/verus_docs/examples/proposal-rw2022.rs +75 -0
  754. research_loop/vendor/verus_docs/examples/quantifiers.rs +100 -0
  755. research_loop/vendor/verus_docs/examples/recommends.rs +63 -0
  756. research_loop/vendor/verus_docs/examples/recursion.rs +116 -0
  757. research_loop/vendor/verus_docs/examples/recursive_types.rs +133 -0
  758. research_loop/vendor/verus_docs/examples/resource/agreement.rs +101 -0
  759. research_loop/vendor/verus_docs/examples/resource/count_to_two.rs +328 -0
  760. research_loop/vendor/verus_docs/examples/resource/log.rs +301 -0
  761. research_loop/vendor/verus_docs/examples/resource/monotonic_counter.rs +362 -0
  762. research_loop/vendor/verus_docs/examples/resource/oneshot.rs +481 -0
  763. research_loop/vendor/verus_docs/examples/rfmig_script.rs +255 -0
  764. research_loop/vendor/verus_docs/examples/rw2022_script.rs +189 -0
  765. research_loop/vendor/verus_docs/examples/rwlock_vstd.rs +65 -0
  766. research_loop/vendor/verus_docs/examples/scache/rwlock.rs +1180 -0
  767. research_loop/vendor/verus_docs/examples/set_from_vec.rs +58 -0
  768. research_loop/vendor/verus_docs/examples/state_machines/adder.rs +47 -0
  769. research_loop/vendor/verus_docs/examples/state_machines/adder_generic.rs +43 -0
  770. research_loop/vendor/verus_docs/examples/state_machines/adder_with_max.rs +68 -0
  771. research_loop/vendor/verus_docs/examples/state_machines/arc.rs +331 -0
  772. research_loop/vendor/verus_docs/examples/state_machines/conditional.rs +114 -0
  773. research_loop/vendor/verus_docs/examples/state_machines/counting.rs +267 -0
  774. research_loop/vendor/verus_docs/examples/state_machines/disk_example.rs +294 -0
  775. research_loop/vendor/verus_docs/examples/state_machines/dist_rwlock.rs +407 -0
  776. research_loop/vendor/verus_docs/examples/state_machines/flat_combine.rs +461 -0
  777. research_loop/vendor/verus_docs/examples/state_machines/interner.rs +293 -0
  778. research_loop/vendor/verus_docs/examples/state_machines/leader_election_complete.rs +182 -0
  779. research_loop/vendor/verus_docs/examples/state_machines/maps.rs +136 -0
  780. research_loop/vendor/verus_docs/examples/state_machines/petersons_algorithm.rs +176 -0
  781. research_loop/vendor/verus_docs/examples/state_machines/reference-examples/strategy_option.rs +92 -0
  782. research_loop/vendor/verus_docs/examples/state_machines/refinement.rs +121 -0
  783. research_loop/vendor/verus_docs/examples/state_machines/refinement_labels.rs +135 -0
  784. research_loop/vendor/verus_docs/examples/state_machines/rwlock.rs +197 -0
  785. research_loop/vendor/verus_docs/examples/state_machines/top_sort_dfs.rs +547 -0
  786. research_loop/vendor/verus_docs/examples/state_machines/tutorial/counting_to_2.rs +209 -0
  787. research_loop/vendor/verus_docs/examples/state_machines/tutorial/counting_to_n.rs +224 -0
  788. research_loop/vendor/verus_docs/examples/state_machines/tutorial/counting_to_n_atomic.rs +62 -0
  789. research_loop/vendor/verus_docs/examples/state_machines/tutorial/fifo.rs +766 -0
  790. research_loop/vendor/verus_docs/examples/state_machines/tutorial/pcell_example.rs +54 -0
  791. research_loop/vendor/verus_docs/examples/state_machines/tutorial/rc.rs +335 -0
  792. research_loop/vendor/verus_docs/examples/state_machines/tutorial/ref_cell.rs +435 -0
  793. research_loop/vendor/verus_docs/examples/state_machines/tutorial/unverified_counting_to_2.rs +58 -0
  794. research_loop/vendor/verus_docs/examples/state_machines/tutorial/unverified_counting_to_n +0 -0
  795. research_loop/vendor/verus_docs/examples/state_machines/tutorial/unverified_counting_to_n.rs +53 -0
  796. research_loop/vendor/verus_docs/examples/state_machines/tutorial/unverified_fifo.rs +132 -0
  797. research_loop/vendor/verus_docs/examples/state_machines/tutorial/unverified_rc.rs +96 -0
  798. research_loop/vendor/verus_docs/examples/statements.rs +60 -0
  799. research_loop/vendor/verus_docs/examples/statics.rs +173 -0
  800. research_loop/vendor/verus_docs/examples/std_test/chars_iterator.rs +31 -0
  801. research_loop/vendor/verus_docs/examples/std_test/num.rs +245 -0
  802. research_loop/vendor/verus_docs/examples/std_test/option_test.rs +63 -0
  803. research_loop/vendor/verus_docs/examples/std_test/rc_test.rs +44 -0
  804. research_loop/vendor/verus_docs/examples/std_test/result.rs +65 -0
  805. research_loop/vendor/verus_docs/examples/std_test/template.rs +12 -0
  806. research_loop/vendor/verus_docs/examples/std_test/vec_test.rs +28 -0
  807. research_loop/vendor/verus_docs/examples/std_test/vecdeque_test.rs +63 -0
  808. research_loop/vendor/verus_docs/examples/structural.rs +30 -0
  809. research_loop/vendor/verus_docs/examples/summer_school/chapter-1-22.rs +240 -0
  810. research_loop/vendor/verus_docs/examples/summer_school/chapter-2-1.rs +49 -0
  811. research_loop/vendor/verus_docs/examples/summer_school/chapter-2-2.rs +49 -0
  812. research_loop/vendor/verus_docs/examples/summer_school/chapter-2-3.rs +110 -0
  813. research_loop/vendor/verus_docs/examples/summer_school/chapter-6-1.rs +307 -0
  814. research_loop/vendor/verus_docs/examples/syntax.rs +692 -0
  815. research_loop/vendor/verus_docs/examples/syntax_attr.rs +339 -0
  816. research_loop/vendor/verus_docs/examples/test.rs +20 -0
  817. research_loop/vendor/verus_docs/examples/test_expand_errors.rs +238 -0
  818. research_loop/vendor/verus_docs/examples/thread.rs +34 -0
  819. research_loop/vendor/verus_docs/examples/trait_for_fn.rs +23 -0
  820. research_loop/vendor/verus_docs/examples/traits.rs +79 -0
  821. research_loop/vendor/verus_docs/examples/trigger_loops.rs +113 -0
  822. research_loop/vendor/verus_docs/examples/vectors.rs +158 -0
  823. research_loop/vendor/verus_docs/examples/verified_vec.rs +171 -0
  824. research_loop/vendor/verus_docs/guide/SUMMARY.md +212 -0
  825. research_loop/vendor/verus_docs/guide/assert-mut-ref.md +15 -0
  826. research_loop/vendor/verus_docs/guide/assert_assume.md +466 -0
  827. research_loop/vendor/verus_docs/guide/assert_by.md +46 -0
  828. research_loop/vendor/verus_docs/guide/assert_by_compute.md +120 -0
  829. research_loop/vendor/verus_docs/guide/binary_search.md +233 -0
  830. research_loop/vendor/verus_docs/guide/bitvec.md +166 -0
  831. research_loop/vendor/verus_docs/guide/break.md +31 -0
  832. research_loop/vendor/verus_docs/guide/breaking_proofs_into_pieces.md +147 -0
  833. research_loop/vendor/verus_docs/guide/broadcast_proof.md +86 -0
  834. research_loop/vendor/verus_docs/guide/calc.md +75 -0
  835. research_loop/vendor/verus_docs/guide/call-from-unverified-code.md +46 -0
  836. research_loop/vendor/verus_docs/guide/calling-unverified-from-verified.md +110 -0
  837. research_loop/vendor/verus_docs/guide/calling-verified-from-unverified.md +49 -0
  838. research_loop/vendor/verus_docs/guide/cargo_verus.md +233 -0
  839. research_loop/vendor/verus_docs/guide/checklist.md +23 -0
  840. research_loop/vendor/verus_docs/guide/complex_ownership.md +7 -0
  841. research_loop/vendor/verus_docs/guide/concurrency.md +10 -0
  842. research_loop/vendor/verus_docs/guide/const.md +83 -0
  843. research_loop/vendor/verus_docs/guide/container_bst.md +7 -0
  844. research_loop/vendor/verus_docs/guide/container_bst_all_source.md +23 -0
  845. research_loop/vendor/verus_docs/guide/container_bst_clone.md +114 -0
  846. research_loop/vendor/verus_docs/guide/container_bst_first_draft.md +180 -0
  847. research_loop/vendor/verus_docs/guide/container_bst_generic.md +83 -0
  848. research_loop/vendor/verus_docs/guide/container_bst_mut_refs.md +105 -0
  849. research_loop/vendor/verus_docs/guide/container_bst_type_invariant.md +189 -0
  850. research_loop/vendor/verus_docs/guide/contributed.md +5 -0
  851. research_loop/vendor/verus_docs/guide/datatypes.md +4 -0
  852. research_loop/vendor/verus_docs/guide/datatypes_enum.md +68 -0
  853. research_loop/vendor/verus_docs/guide/datatypes_struct.md +12 -0
  854. research_loop/vendor/verus_docs/guide/develop_proofs.md +4 -0
  855. research_loop/vendor/verus_docs/guide/equality.md +40 -0
  856. research_loop/vendor/verus_docs/guide/erasure.md +88 -0
  857. research_loop/vendor/verus_docs/guide/exec_attr.md +144 -0
  858. research_loop/vendor/verus_docs/guide/exec_closures.md +53 -0
  859. research_loop/vendor/verus_docs/guide/exec_funs_as_values.md +161 -0
  860. research_loop/vendor/verus_docs/guide/exec_lib.md +46 -0
  861. research_loop/vendor/verus_docs/guide/exec_spec.md +256 -0
  862. research_loop/vendor/verus_docs/guide/exec_termination.md +5 -0
  863. research_loop/vendor/verus_docs/guide/exec_to_spec.md +60 -0
  864. research_loop/vendor/verus_docs/guide/exists.md +82 -0
  865. research_loop/vendor/verus_docs/guide/extensional_equality.md +72 -0
  866. research_loop/vendor/verus_docs/guide/external_trait_specifications.md +128 -0
  867. research_loop/vendor/verus_docs/guide/features.md +435 -0
  868. research_loop/vendor/verus_docs/guide/for.md +20 -0
  869. research_loop/vendor/verus_docs/guide/forall.md +198 -0
  870. research_loop/vendor/verus_docs/guide/getting_started.md +10 -0
  871. research_loop/vendor/verus_docs/guide/getting_started_cmd_line.md +91 -0
  872. research_loop/vendor/verus_docs/guide/getting_started_vscode.md +91 -0
  873. research_loop/vendor/verus_docs/guide/ghost_vs_exec.md +93 -0
  874. research_loop/vendor/verus_docs/guide/graphics/mut-ref-cons-example-1.png +0 -0
  875. research_loop/vendor/verus_docs/guide/graphics/mut-ref-cons-example-2.png +0 -0
  876. research_loop/vendor/verus_docs/guide/graphics/verus-analyzer-error-example.png +0 -0
  877. research_loop/vendor/verus_docs/guide/graphics/verus-rust.svg +254 -0
  878. research_loop/vendor/verus_docs/guide/graphics/verusdoc-example.png +0 -0
  879. research_loop/vendor/verus_docs/guide/guarantees.md +3 -0
  880. research_loop/vendor/verus_docs/guide/higher-order-fns.md +3 -0
  881. research_loop/vendor/verus_docs/guide/ide_support.md +23 -0
  882. research_loop/vendor/verus_docs/guide/induction.md +185 -0
  883. research_loop/vendor/verus_docs/guide/install-singular.md +19 -0
  884. research_loop/vendor/verus_docs/guide/integers.md +195 -0
  885. research_loop/vendor/verus_docs/guide/interacting-with-unverified-code.md +7 -0
  886. research_loop/vendor/verus_docs/guide/interior_mutability.md +92 -0
  887. research_loop/vendor/verus_docs/guide/invariants.md +231 -0
  888. research_loop/vendor/verus_docs/guide/iterator-specs.md +109 -0
  889. research_loop/vendor/verus_docs/guide/iterators.md +68 -0
  890. research_loop/vendor/verus_docs/guide/lex_mutual.md +51 -0
  891. research_loop/vendor/verus_docs/guide/llmforverusproof.md +245 -0
  892. research_loop/vendor/verus_docs/guide/llms.md +3 -0
  893. research_loop/vendor/verus_docs/guide/logatom-call.md +85 -0
  894. research_loop/vendor/verus_docs/guide/logatom-open.md +64 -0
  895. research_loop/vendor/verus_docs/guide/logatom-spec.md +132 -0
  896. research_loop/vendor/verus_docs/guide/logatom.md +97 -0
  897. research_loop/vendor/verus_docs/guide/memory-safety.md +77 -0
  898. research_loop/vendor/verus_docs/guide/modes.md +37 -0
  899. research_loop/vendor/verus_docs/guide/multitriggers.md +249 -0
  900. research_loop/vendor/verus_docs/guide/mutable-references.md +548 -0
  901. research_loop/vendor/verus_docs/guide/mutation-references-borrowing.md +52 -0
  902. research_loop/vendor/verus_docs/guide/nonlinear.md +314 -0
  903. research_loop/vendor/verus_docs/guide/opaque.md +17 -0
  904. research_loop/vendor/verus_docs/guide/operators.md +64 -0
  905. research_loop/vendor/verus_docs/guide/overflow.md +57 -0
  906. research_loop/vendor/verus_docs/guide/overview.md +91 -0
  907. research_loop/vendor/verus_docs/guide/performance.md +10 -0
  908. research_loop/vendor/verus_docs/guide/pervasive.md +52 -0
  909. research_loop/vendor/verus_docs/guide/pointers.md +1 -0
  910. research_loop/vendor/verus_docs/guide/prefix-and-or.md +35 -0
  911. research_loop/vendor/verus_docs/guide/profiling.md +103 -0
  912. research_loop/vendor/verus_docs/guide/projects.md +6 -0
  913. research_loop/vendor/verus_docs/guide/proof_functions.md +102 -0
  914. research_loop/vendor/verus_docs/guide/quantproofs.md +124 -0
  915. research_loop/vendor/verus_docs/guide/quants.md +50 -0
  916. research_loop/vendor/verus_docs/guide/recursion.md +133 -0
  917. research_loop/vendor/verus_docs/guide/recursion_loops.md +19 -0
  918. research_loop/vendor/verus_docs/guide/ref-extensional-equality.md +27 -0
  919. research_loop/vendor/verus_docs/guide/reference-as.md +71 -0
  920. research_loop/vendor/verus_docs/guide/reference-assert-by-prover.md +52 -0
  921. research_loop/vendor/verus_docs/guide/reference-assert-by.md +25 -0
  922. research_loop/vendor/verus_docs/guide/reference-assert-forall-by.md +31 -0
  923. research_loop/vendor/verus_docs/guide/reference-assert.md +12 -0
  924. research_loop/vendor/verus_docs/guide/reference-assume-specification.md +103 -0
  925. research_loop/vendor/verus_docs/guide/reference-assume.md +25 -0
  926. research_loop/vendor/verus_docs/guide/reference-at-sign.md +22 -0
  927. research_loop/vendor/verus_docs/guide/reference-attributes.md +297 -0
  928. research_loop/vendor/verus_docs/guide/reference-chained-op.md +24 -0
  929. research_loop/vendor/verus_docs/guide/reference-decreases-to.md +65 -0
  930. research_loop/vendor/verus_docs/guide/reference-decreases.md +132 -0
  931. research_loop/vendor/verus_docs/guide/reference-exec-signature.md +44 -0
  932. research_loop/vendor/verus_docs/guide/reference-flag-record.md +6 -0
  933. research_loop/vendor/verus_docs/guide/reference-global.md +68 -0
  934. research_loop/vendor/verus_docs/guide/reference-has.md +42 -0
  935. research_loop/vendor/verus_docs/guide/reference-implication.md +33 -0
  936. research_loop/vendor/verus_docs/guide/reference-is.md +28 -0
  937. research_loop/vendor/verus_docs/guide/reference-matches.md +36 -0
  938. research_loop/vendor/verus_docs/guide/reference-opens-invariants.md +40 -0
  939. research_loop/vendor/verus_docs/guide/reference-pointers-cells.md +7 -0
  940. research_loop/vendor/verus_docs/guide/reference-proof-signature.md +65 -0
  941. research_loop/vendor/verus_docs/guide/reference-prover-mode-bit-vector.md +65 -0
  942. research_loop/vendor/verus_docs/guide/reference-prover-mode-compute.md +55 -0
  943. research_loop/vendor/verus_docs/guide/reference-prover-mode-integer-ring.md +33 -0
  944. research_loop/vendor/verus_docs/guide/reference-prover-mode-nonlinear.md +39 -0
  945. research_loop/vendor/verus_docs/guide/reference-recommends.md +3 -0
  946. research_loop/vendor/verus_docs/guide/reference-returns.md +28 -0
  947. research_loop/vendor/verus_docs/guide/reference-reveal-hide.md +32 -0
  948. research_loop/vendor/verus_docs/guide/reference-reveal-strlit.md +24 -0
  949. research_loop/vendor/verus_docs/guide/reference-signature-fnonce.md +26 -0
  950. research_loop/vendor/verus_docs/guide/reference-signature-inheritance.md +22 -0
  951. research_loop/vendor/verus_docs/guide/reference-spec-index.md +23 -0
  952. research_loop/vendor/verus_docs/guide/reference-spec-signature.md +57 -0
  953. research_loop/vendor/verus_docs/guide/reference-specification-language.md +7 -0
  954. research_loop/vendor/verus_docs/guide/reference-type-invariants.md +100 -0
  955. research_loop/vendor/verus_docs/guide/reference-types.md +263 -0
  956. research_loop/vendor/verus_docs/guide/reference-unions.md +45 -0
  957. research_loop/vendor/verus_docs/guide/reference-unwind-sig.md +47 -0
  958. research_loop/vendor/verus_docs/guide/reference-var-modes.md +246 -0
  959. research_loop/vendor/verus_docs/guide/requires_ensures.md +205 -0
  960. research_loop/vendor/verus_docs/guide/smt_failures.md +64 -0
  961. research_loop/vendor/verus_docs/guide/smt_perf_overview.md +14 -0
  962. research_loop/vendor/verus_docs/guide/spec-arithmetic.md +100 -0
  963. research_loop/vendor/verus_docs/guide/spec-bit-ops.md +52 -0
  964. research_loop/vendor/verus_docs/guide/spec-choose.md +56 -0
  965. research_loop/vendor/verus_docs/guide/spec-equality.md +28 -0
  966. research_loop/vendor/verus_docs/guide/spec-expressions.md +43 -0
  967. research_loop/vendor/verus_docs/guide/spec-operator-precedence.md +31 -0
  968. research_loop/vendor/verus_docs/guide/spec-quantifiers.md +63 -0
  969. research_loop/vendor/verus_docs/guide/spec-rust-subset.md +105 -0
  970. research_loop/vendor/verus_docs/guide/spec_closures.md +32 -0
  971. research_loop/vendor/verus_docs/guide/spec_functions.md +76 -0
  972. research_loop/vendor/verus_docs/guide/spec_lib.md +232 -0
  973. research_loop/vendor/verus_docs/guide/spec_vs_proof.md +122 -0
  974. research_loop/vendor/verus_docs/guide/specs.md +11 -0
  975. research_loop/vendor/verus_docs/guide/static.md +20 -0
  976. research_loop/vendor/verus_docs/guide/strings.md +72 -0
  977. research_loop/vendor/verus_docs/guide/syntax.md +7 -0
  978. research_loop/vendor/verus_docs/guide/tcb.md +41 -0
  979. research_loop/vendor/verus_docs/guide/traits.md +174 -0
  980. research_loop/vendor/verus_docs/guide/triangle.md +45 -0
  981. research_loop/vendor/verus_docs/guide/trigger-annotations.md +102 -0
  982. research_loop/vendor/verus_docs/guide/verus_macro_intro.md +45 -0
  983. research_loop/vendor/verus_docs/guide/verusdoc.md +76 -0
  984. research_loop/vendor/verus_docs/guide/vstd.md +8 -0
  985. research_loop/vendor/verus_docs/guide/while.md +74 -0
  986. research_loop/vendor/verus_docs/tests/adts.rs +1990 -0
  987. research_loop/vendor/verus_docs/tests/adts_generics.rs +254 -0
  988. research_loop/vendor/verus_docs/tests/adts_opaque.rs +194 -0
  989. research_loop/vendor/verus_docs/tests/arrays.rs +508 -0
  990. research_loop/vendor/verus_docs/tests/assert_bitvector_by.rs +76 -0
  991. research_loop/vendor/verus_docs/tests/assert_by_compute.rs +848 -0
  992. research_loop/vendor/verus_docs/tests/assert_forall_by.rs +308 -0
  993. research_loop/vendor/verus_docs/tests/assoc_type_impls.rs +1043 -0
  994. research_loop/vendor/verus_docs/tests/async_functions.rs +180 -0
  995. research_loop/vendor/verus_docs/tests/atomic_lib.rs +1047 -0
  996. research_loop/vendor/verus_docs/tests/atomics.rs +383 -0
  997. research_loop/vendor/verus_docs/tests/basic.rs +831 -0
  998. research_loop/vendor/verus_docs/tests/bitvector.rs +1573 -0
  999. research_loop/vendor/verus_docs/tests/boundary_suggestions.rs +425 -0
  1000. research_loop/vendor/verus_docs/tests/broadcast_forall.rs +660 -0
  1001. research_loop/vendor/verus_docs/tests/btree.rs +482 -0
  1002. research_loop/vendor/verus_docs/tests/calc.rs +115 -0
  1003. research_loop/vendor/verus_docs/tests/cargo-tests/unverified/consume_basic_verified_lib/Cargo.toml +11 -0
  1004. research_loop/vendor/verus_docs/tests/cargo-tests/unverified/consume_basic_verified_lib/src/main.rs +7 -0
  1005. research_loop/vendor/verus_docs/tests/cargo-tests/unverified/consume_machines/Cargo.toml +11 -0
  1006. research_loop/vendor/verus_docs/tests/cargo-tests/unverified/consume_machines/src/lib.rs +4 -0
  1007. research_loop/vendor/verus_docs/tests/cargo-tests/unverified/consume_vstd/Cargo.toml +11 -0
  1008. research_loop/vendor/verus_docs/tests/cargo-tests/unverified/consume_vstd/src/lib.rs +4 -0
  1009. research_loop/vendor/verus_docs/tests/cargo-tests/unverified/spec_use/Cargo.toml +11 -0
  1010. research_loop/vendor/verus_docs/tests/cargo-tests/unverified/spec_use/src/lib.rs +7 -0
  1011. research_loop/vendor/verus_docs/tests/cargo-tests/unverified/structural/Cargo.toml +11 -0
  1012. research_loop/vendor/verus_docs/tests/cargo-tests/unverified/structural/src/main.rs +13 -0
  1013. research_loop/vendor/verus_docs/tests/cargo-tests/verified/basic_verified_lib/Cargo.toml +12 -0
  1014. research_loop/vendor/verus_docs/tests/cargo-tests/verified/basic_verified_lib/src/lib.rs +38 -0
  1015. research_loop/vendor/verus_docs/tests/cargo-tests/verified/basic_verified_lib_consumer_verified/Cargo.toml +13 -0
  1016. research_loop/vendor/verus_docs/tests/cargo-tests/verified/basic_verified_lib_consumer_verified/src/main.rs +11 -0
  1017. research_loop/vendor/verus_docs/tests/cargo-tests/verified/big_rlimit/Cargo.toml +13 -0
  1018. research_loop/vendor/verus_docs/tests/cargo-tests/verified/big_rlimit/src/lib.rs +31 -0
  1019. research_loop/vendor/verus_docs/tests/cargo-tests/verified/lib_with_bin/Cargo.toml +12 -0
  1020. research_loop/vendor/verus_docs/tests/cargo-tests/verified/lib_with_bin/src/lib.rs +11 -0
  1021. research_loop/vendor/verus_docs/tests/cargo-tests/verified/lib_with_bin/src/main.rs +7 -0
  1022. research_loop/vendor/verus_docs/tests/cargo-tests/verified/spec_def/Cargo.toml +12 -0
  1023. research_loop/vendor/verus_docs/tests/cargo-tests/verified/spec_def/src/lib.rs +31 -0
  1024. research_loop/vendor/verus_docs/tests/cargo-tests/verified/spec_def2/Cargo.toml +12 -0
  1025. research_loop/vendor/verus_docs/tests/cargo-tests/verified/spec_def2/src/lib.rs +19 -0
  1026. research_loop/vendor/verus_docs/tests/cargo-tests/verified/spec_use/Cargo.toml +15 -0
  1027. research_loop/vendor/verus_docs/tests/cargo-tests/verified/spec_use/src/lib.rs +35 -0
  1028. research_loop/vendor/verus_docs/tests/cargo-tests/verified/state_machine_macro_usage/Cargo.toml +13 -0
  1029. research_loop/vendor/verus_docs/tests/cargo-tests/verified/state_machine_macro_usage/src/lib.rs +266 -0
  1030. research_loop/vendor/verus_docs/tests/cargo-tests/verified/transitive1/Cargo.toml +12 -0
  1031. research_loop/vendor/verus_docs/tests/cargo-tests/verified/transitive1/src/lib.rs +10 -0
  1032. research_loop/vendor/verus_docs/tests/cargo-tests/verified/transitive2/Cargo.toml +13 -0
  1033. research_loop/vendor/verus_docs/tests/cargo-tests/verified/transitive2/src/lib.rs +15 -0
  1034. research_loop/vendor/verus_docs/tests/cargo-tests/verified/transitive3/Cargo.toml +13 -0
  1035. research_loop/vendor/verus_docs/tests/cargo-tests/verified/transitive3/src/lib.rs +16 -0
  1036. research_loop/vendor/verus_docs/tests/cargo-tests/verified/vstd_macro_usage/Cargo.toml +12 -0
  1037. research_loop/vendor/verus_docs/tests/cargo-tests/verified/vstd_macro_usage/src/lib.rs +49 -0
  1038. research_loop/vendor/verus_docs/tests/cargo.rs +164 -0
  1039. research_loop/vendor/verus_docs/tests/cell_lib.rs +405 -0
  1040. research_loop/vendor/verus_docs/tests/choose.rs +266 -0
  1041. research_loop/vendor/verus_docs/tests/closures.rs +168 -0
  1042. research_loop/vendor/verus_docs/tests/common/mod.rs +981 -0
  1043. research_loop/vendor/verus_docs/tests/compile.rs +32 -0
  1044. research_loop/vendor/verus_docs/tests/consts.rs +666 -0
  1045. research_loop/vendor/verus_docs/tests/contrib.rs +84 -0
  1046. research_loop/vendor/verus_docs/tests/control_flow.rs +1249 -0
  1047. research_loop/vendor/verus_docs/tests/core_special_setup.rs +87 -0
  1048. research_loop/vendor/verus_docs/tests/cow.rs +49 -0
  1049. research_loop/vendor/verus_docs/tests/dafny_axioms.rs +48 -0
  1050. research_loop/vendor/verus_docs/tests/default_trait.rs +265 -0
  1051. research_loop/vendor/verus_docs/tests/eq_cmp.rs +123 -0
  1052. research_loop/vendor/verus_docs/tests/erase.rs +30 -0
  1053. research_loop/vendor/verus_docs/tests/examples.rs +162 -0
  1054. research_loop/vendor/verus_docs/tests/exec_closures.rs +1883 -0
  1055. research_loop/vendor/verus_docs/tests/exec_spec_unverified.rs +322 -0
  1056. research_loop/vendor/verus_docs/tests/exec_spec_verified.rs +2043 -0
  1057. research_loop/vendor/verus_docs/tests/exec_termination.rs +411 -0
  1058. research_loop/vendor/verus_docs/tests/expand_errors.rs +458 -0
  1059. research_loop/vendor/verus_docs/tests/expr_stmts.rs +90 -0
  1060. research_loop/vendor/verus_docs/tests/ext_equal.rs +592 -0
  1061. research_loop/vendor/verus_docs/tests/external_fn_specification.rs +1644 -0
  1062. research_loop/vendor/verus_docs/tests/external_traits.rs +899 -0
  1063. research_loop/vendor/verus_docs/tests/external_type_specification.rs +490 -0
  1064. research_loop/vendor/verus_docs/tests/float.rs +227 -0
  1065. research_loop/vendor/verus_docs/tests/fndef_types.rs +2064 -0
  1066. research_loop/vendor/verus_docs/tests/functions.rs +133 -0
  1067. research_loop/vendor/verus_docs/tests/generics.rs +177 -0
  1068. research_loop/vendor/verus_docs/tests/harness.rs +83 -0
  1069. research_loop/vendor/verus_docs/tests/hash.rs +972 -0
  1070. research_loop/vendor/verus_docs/tests/impl.rs +336 -0
  1071. research_loop/vendor/verus_docs/tests/inline.rs +246 -0
  1072. research_loop/vendor/verus_docs/tests/integer_ring.rs +313 -0
  1073. research_loop/vendor/verus_docs/tests/integers.rs +616 -0
  1074. research_loop/vendor/verus_docs/tests/iterators.rs +491 -0
  1075. research_loop/vendor/verus_docs/tests/layout.rs +500 -0
  1076. research_loop/vendor/verus_docs/tests/let_else.rs +176 -0
  1077. research_loop/vendor/verus_docs/tests/lifetime.rs +2062 -0
  1078. research_loop/vendor/verus_docs/tests/literals.rs +68 -0
  1079. research_loop/vendor/verus_docs/tests/logatom.rs +693 -0
  1080. research_loop/vendor/verus_docs/tests/loops.rs +1881 -0
  1081. research_loop/vendor/verus_docs/tests/loops_havoc.rs +571 -0
  1082. research_loop/vendor/verus_docs/tests/loops_no_spinoff.rs +1440 -0
  1083. research_loop/vendor/verus_docs/tests/maps.rs +186 -0
  1084. research_loop/vendor/verus_docs/tests/marker_traits.rs +375 -0
  1085. research_loop/vendor/verus_docs/tests/match.rs +1393 -0
  1086. research_loop/vendor/verus_docs/tests/modes.rs +1782 -0
  1087. research_loop/vendor/verus_docs/tests/modules.rs +408 -0
  1088. research_loop/vendor/verus_docs/tests/multiset.rs +128 -0
  1089. research_loop/vendor/verus_docs/tests/mut_refs.rs +5279 -0
  1090. research_loop/vendor/verus_docs/tests/mut_refs_closures.rs +850 -0
  1091. research_loop/vendor/verus_docs/tests/mut_refs_libs.rs +478 -0
  1092. research_loop/vendor/verus_docs/tests/mut_refs_loops.rs +2210 -0
  1093. research_loop/vendor/verus_docs/tests/mut_refs_modes.rs +1986 -0
  1094. research_loop/vendor/verus_docs/tests/mut_refs_old.rs +624 -0
  1095. research_loop/vendor/verus_docs/tests/mut_refs_patterns.rs +4253 -0
  1096. research_loop/vendor/verus_docs/tests/mut_refs_slices_arrays.rs +1969 -0
  1097. research_loop/vendor/verus_docs/tests/mut_refs_temporaries.rs +3938 -0
  1098. research_loop/vendor/verus_docs/tests/mut_refs_time_travel.rs +1801 -0
  1099. research_loop/vendor/verus_docs/tests/mut_refs_unions.rs +989 -0
  1100. research_loop/vendor/verus_docs/tests/mutable_params.rs +589 -0
  1101. research_loop/vendor/verus_docs/tests/nested_items.rs +243 -0
  1102. research_loop/vendor/verus_docs/tests/never_type.rs +104 -0
  1103. research_loop/vendor/verus_docs/tests/no_cheating.rs +107 -0
  1104. research_loop/vendor/verus_docs/tests/nonlinear.rs +289 -0
  1105. research_loop/vendor/verus_docs/tests/opaque_reveal.rs +487 -0
  1106. research_loop/vendor/verus_docs/tests/opaque_types.rs +586 -0
  1107. research_loop/vendor/verus_docs/tests/open_invariant.rs +1033 -0
  1108. research_loop/vendor/verus_docs/tests/operators.rs +354 -0
  1109. research_loop/vendor/verus_docs/tests/option.rs +126 -0
  1110. research_loop/vendor/verus_docs/tests/output_json.rs +272 -0
  1111. research_loop/vendor/verus_docs/tests/overflow.rs +341 -0
  1112. research_loop/vendor/verus_docs/tests/partial_eq.rs +21 -0
  1113. research_loop/vendor/verus_docs/tests/proof_closures.rs +1867 -0
  1114. research_loop/vendor/verus_docs/tests/proof_in_spec.rs +489 -0
  1115. research_loop/vendor/verus_docs/tests/proph.rs +68 -0
  1116. research_loop/vendor/verus_docs/tests/prophecy.rs +859 -0
  1117. research_loop/vendor/verus_docs/tests/quantifiers.rs +324 -0
  1118. research_loop/vendor/verus_docs/tests/raw_ptrs.rs +393 -0
  1119. research_loop/vendor/verus_docs/tests/real.rs +74 -0
  1120. research_loop/vendor/verus_docs/tests/recommends.rs +99 -0
  1121. research_loop/vendor/verus_docs/tests/recursion.rs +2357 -0
  1122. research_loop/vendor/verus_docs/tests/recursive_types.rs +412 -0
  1123. research_loop/vendor/verus_docs/tests/refs.rs +658 -0
  1124. research_loop/vendor/verus_docs/tests/regression.rs +1534 -0
  1125. research_loop/vendor/verus_docs/tests/results.rs +84 -0
  1126. research_loop/vendor/verus_docs/tests/return.rs +235 -0
  1127. research_loop/vendor/verus_docs/tests/returns_postcondition.rs +484 -0
  1128. research_loop/vendor/verus_docs/tests/safe_api.rs +443 -0
  1129. research_loop/vendor/verus_docs/tests/scope.rs +168 -0
  1130. research_loop/vendor/verus_docs/tests/seqs.rs +130 -0
  1131. research_loop/vendor/verus_docs/tests/sets.rs +187 -0
  1132. research_loop/vendor/verus_docs/tests/shr_ref_struct_wrap.rs +381 -0
  1133. research_loop/vendor/verus_docs/tests/size_of.rs +240 -0
  1134. research_loop/vendor/verus_docs/tests/slices.rs +571 -0
  1135. research_loop/vendor/verus_docs/tests/spec_derive.rs +552 -0
  1136. research_loop/vendor/verus_docs/tests/state_machines.rs +9223 -0
  1137. research_loop/vendor/verus_docs/tests/std.rs +1648 -0
  1138. research_loop/vendor/verus_docs/tests/strings.rs +848 -0
  1139. research_loop/vendor/verus_docs/tests/struct_with_invariants.rs +50 -0
  1140. research_loop/vendor/verus_docs/tests/structural.rs +111 -0
  1141. research_loop/vendor/verus_docs/tests/summer_school.rs +1034 -0
  1142. research_loop/vendor/verus_docs/tests/syntax_attr.rs +1680 -0
  1143. research_loop/vendor/verus_docs/tests/traits.rs +4817 -0
  1144. research_loop/vendor/verus_docs/tests/traits_dyn.rs +433 -0
  1145. research_loop/vendor/verus_docs/tests/traits_extend_ensures.rs +858 -0
  1146. research_loop/vendor/verus_docs/tests/traits_modules.rs +1046 -0
  1147. research_loop/vendor/verus_docs/tests/traits_modules_pub_crate.rs +1048 -0
  1148. research_loop/vendor/verus_docs/tests/triggers.rs +650 -0
  1149. research_loop/vendor/verus_docs/tests/ui.rs +33 -0
  1150. research_loop/vendor/verus_docs/tests/unions.rs +379 -0
  1151. research_loop/vendor/verus_docs/tests/unsafe.rs +26 -0
  1152. research_loop/vendor/verus_docs/tests/unwind.rs +607 -0
  1153. research_loop/vendor/verus_docs/tests/user_defined_type_invariants.rs +2716 -0
  1154. research_loop/vendor/verus_docs/tests/vec.rs +68 -0
  1155. research_loop/vendor/verus_docs/tests/verifier_assume_allow.rs +81 -0
  1156. research_loop/vendor/verus_docs/tests/when_used_as_spec.rs +287 -0
  1157. research_loop/vendor/verus_docs/tests/z3_restart.rs +172 -0
  1158. research_loop/verus_lib/eq_join.rs +17658 -0
  1159. research_loop/verus_lib/eq_str_view_check.rs +237 -0
  1160. research_loop/verus_lib/stream_lib.rs +408 -0
  1161. research_loop/working_query/Cargo.lock +14 -0
  1162. research_loop/working_query/Cargo.toml +17 -0
  1163. research_loop/working_query/src/cols.rs +60 -0
  1164. research_loop/working_query/src/main.rs +34 -0
  1165. research_loop/working_query/src/query.rs +23 -0
  1166. research_loop/working_query/src/spec.rs +201 -0
  1167. research_loop/zero_copy.py +361 -0
  1168. research_loop/zero_copy_ffi.rs +196 -0
  1169. research_loop/zero_copy_lib.rs +155 -0
  1170. sql_transpiler/__init__.py +18 -0
  1171. sql_transpiler/agg_push.py +47 -0
  1172. sql_transpiler/agg_push_str.py +45 -0
  1173. sql_transpiler/column_projection.py +51 -0
  1174. sql_transpiler/transpiler.py +1071 -0
  1175. sql_transpiler/value_bounds.py +115 -0
  1176. verus_transpiler/__init__.py +18 -0
  1177. verus_transpiler/agg_push.py +132 -0
  1178. verus_transpiler/agg_push_str.py +119 -0
  1179. verus_transpiler/col_exprs.py +265 -0
  1180. verus_transpiler/column_projection.py +312 -0
  1181. verus_transpiler/dialect_flags.py +33 -0
  1182. verus_transpiler/eq_join_prelude.py +136 -0
  1183. verus_transpiler/joins.py +11042 -0
  1184. verus_transpiler/order_limit.py +219 -0
  1185. verus_transpiler/parse_sql.py +2998 -0
  1186. verus_transpiler/query_tables.py +77 -0
  1187. verus_transpiler/recursive_cte.py +18 -0
  1188. verus_transpiler/ret_type_key.py +61 -0
  1189. verus_transpiler/rust_ident.py +68 -0
  1190. verus_transpiler/subqueries.py +1912 -0
  1191. verus_transpiler/templates.py +250 -0
  1192. verus_transpiler/transpiler.py +2426 -0
  1193. verus_transpiler/value_bounds.py +2447 -0
  1194. verus_transpiler/windows.py +150 -0
db_extension/AGENT.md ADDED
@@ -0,0 +1,125 @@
1
+ # Lemma OpenRouter agent
2
+
3
+ Schema-driven **Verus** optimizer (not SSB-only). The host transpiles SQL with a caller-supplied
4
+ or catalog-resolved schema via `verus_transpiler`; agents edit `runquery_agent.rs` against
5
+ `/context/ro/spec.rs`. Legacy Dafny paths live under `research_loop/dafny_legacy/` and are not
6
+ used by the default optimizer.
7
+
8
+ ## Schema
9
+
10
+ Pass an explicit schema dict to `run_optimization_loop(..., schema={...})`, set
11
+ `LEMMA_SCHEMA_JSON=/path/to/schema.json`, or use `DatabaseCatalog` against the DuckDB
12
+ file that holds the workload tables (`LEMMA_DUCKDB_PATH`). Unknown tables fail loudly —
13
+ there is no hardcoded SSB/TPCH schema invent path.
14
+
15
+ ## Architecture
16
+
17
+ ```
18
+ Host
19
+ ├─ OpenRouter ReAct (LLM on host) [default]
20
+ ├─ EgressBridge allowlist UDS [CLI-in-Docker: Cursor/Anthropic/…]
21
+ ├─ McpSocketServer UDS → measure_core
22
+ └─ tool/CLI container (--network none)
23
+ ├─ tools_worker / agent CLI
24
+ ├─ mcp_proxy (stdio MCP → MCP sock)
25
+ └─ egress sidecar HTTPS_PROXY → only vendor API hosts
26
+ ```
27
+
28
+ **CLI:** mount `~/.cursor` (or `AGENT_CREDENTIALS_DIR`), pass `AGENT_ENV` keys, egress
29
+ allowlist by profile (`cursor`, `anthropic`, …). Non-API web is blocked by the proxy.
30
+ With egress on, Cursor also gets `CURSOR_FORCED_SHELL_EGRESS=1` so **WebSearch/WebFetch**
31
+ are disabled automatically (they run in Cursor cloud via `api2`, not as local curls).
32
+ See `research_loop/AGENT_SANDBOX.md`.
33
+
34
+ **Real MCP:** `mcp_tool_specs.py` → host FastMCP, sandbox `mcp_proxy`, OpenRouter defs.
35
+
36
+ ### Tools
37
+
38
+ | Tool | Action |
39
+ |------|--------|
40
+ | `validate_runquery` | Body lint |
41
+ | `run_runquery` | Host harness; `run_id` + metrics |
42
+ | `submit_runquery` / `submit` | Mark only |
43
+ | `get_submit_result` / `list_runs` / `mcp_health` | Read back |
44
+
45
+ ### Register MCP (CLI on host)
46
+
47
+ ```json
48
+ {
49
+ "mcpServers": {
50
+ "lemma-host": {
51
+ "command": "uv",
52
+ "args": ["run", "python", "-m", "db_extension.agent.mcp_host", "--transport", "stdio"],
53
+ "env": {
54
+ "LEMMA_AGENT_WORKSPACE": "/ABS/PATH/research_loop/agent_workspace",
55
+ "LEMMA_QUERY_ID": "1"
56
+ }
57
+ }
58
+ }
59
+ }
60
+ ```
61
+
62
+ Inside Docker CLI mode, entrypoint writes `.cursor/mcp.json` → `python -m lemma_agent.mcp_proxy`.
63
+
64
+ ## CLI-in-Docker (Cursor / other CLIs)
65
+
66
+ `--network none` + **allowlisted egress** (not open internet):
67
+
68
+ - Mount `AGENT_CREDENTIALS_DIR` (default `~/.cursor`) → `/root/.cursor`
69
+ - Pass `AGENT_ENV` keys (e.g. `CURSOR_API_KEY`)
70
+ - Host `EgressBridge` allowlist by `AGENT_EGRESS_PROFILE` (`cursor`, `anthropic`, …)
71
+ - Sandbox `HTTPS_PROXY=http://127.0.0.1:8118` → only those API hosts
72
+ - MCP measure via Unix socket / `mcp_proxy`
73
+
74
+ See `research_loop/AGENT_SANDBOX.md`. Rebuild: `docker build -t lemma-agent:latest -f docker/agent/Dockerfile .`
75
+
76
+ ## Run
77
+
78
+ ```bash
79
+ docker build -t lemma-agent:latest -f docker/agent/Dockerfile .
80
+ MOCK_AGENT=0 OPENROUTER_API_KEY=sk-or-... uv run python -m db_extension.run_optimizer "SELECT ..."
81
+ ```
82
+
83
+ Custom schema example:
84
+
85
+ ```bash
86
+ export LEMMA_SCHEMA_JSON=/path/to/schema.json # {"V":"int"} or multi-table JSON
87
+ uv run python -c "
88
+ from db_extension.optimizer import run_optimization_loop
89
+ print(run_optimization_loop('SELECT SUM(v) FROM t', schema={'V':'int'}, use_mock=True))
90
+ "
91
+ ```
92
+
93
+ ## Tests
94
+
95
+ ```bash
96
+ uv run python -m pytest db_extension/tests/test_measure_core.py db_extension/tests/test_mcp_socket.py db_extension/tests/test_mcp_host.py db_extension/tests/test_mcp_registry_sync.py db_extension/tests/test_model_bridge.py db_extension/tests/test_tools_worker_paths.py -q
97
+ ```
98
+
99
+ ## Run artifacts (GCP harvest)
100
+
101
+ Each optimizer job **with ``LEMMA_RESEARCH_LOG=1``** writes one harvest directory under
102
+ `research_loop/runs/<id>/`:
103
+
104
+ ```
105
+ manifest.json
106
+ result.json
107
+ history.json
108
+ workspace/ # agent files, mcp_results/, egress_*.jsonl, trace.jsonl
109
+ logs/pipeline.log
110
+ logs/pipeline.jsonl
111
+ logs/docker_agent.*
112
+ logs/harness_iter*.json
113
+ logs/openrouter_meta_iter*.json
114
+ ```
115
+
116
+ `research_loop/runs/LATEST` points at the most recent run (absolute path). Set automatically via
117
+ `LEMMA_RUN_DIR` and `LEMMA_AGENT_WORKSPACE` when research logging is on.
118
+
119
+ ```bash
120
+ LEMMA_RESEARCH_LOG=1 # required for harvest dirs (default 0)
121
+ ```
122
+
123
+ Archive the whole directory for GCP: `tar czf run.tgz -C research_loop/runs <id>/` or `gsutil cp -r research_loop/runs/<id>/ gs://bucket/path/`.
124
+
125
+ For Spot/preemptible VMs, also set `LEMMA_EXPERIMENT_EVENT_URL` to a durable receiver (`research_loop/scripts/experiment_event_receiver.py`; see `holdout/EXPERIMENTS_GENDB.md`) so `query_end` summaries stream off-box as each query finishes.
db_extension/DEMO.md ADDED
@@ -0,0 +1,59 @@
1
+ # Lemma interactive demo
2
+
3
+ ## Live demo (real agent)
4
+
5
+ ```bash
6
+ chmod +x scripts/demo.sh
7
+ ./scripts/demo.sh
8
+ ```
9
+
10
+ Right pane (split terminal):
11
+
12
+ ```bash
13
+ ./scripts/demo_view/follow-agent-log.sh
14
+ ```
15
+
16
+ This script:
17
+
18
+ 1. Clears **all** cached optimized queries
19
+ 2. Sets `LEMMA_DEMO=1`, `MOCK_AGENT=0`, `LEMMA_DATASET_SIZE=100000`
20
+ 3. Drops you into the **official DuckDB CLI** (downloaded to `build/duckdb` on first run)
21
+
22
+ Requires the Cursor \`agent\` CLI on PATH (same auth as running \`agent\` in your shell).
23
+
24
+ ## Mock demo (offline / no API key)
25
+
26
+ ```bash
27
+ ./scripts/mockdemo.sh
28
+ ```
29
+
30
+ Same UX, but seeds a hardcoded RunQuery body (`MOCK_AGENT=1`, `LEMMA_DATASET_SIZE=2000000`, no LLM).
31
+
32
+ Override query: `DEMO_QUERY_ID=5 ./scripts/demo.sh`
33
+
34
+ ## In the DuckDB shell
35
+
36
+ ```sql
37
+ -- (1) Vanilla (DuckDB prints its own timing after the result)
38
+ SELECT SUM(...) FROM lineorder_flat WHERE ...;
39
+
40
+ -- (2) Lemma (demo steps on stdout, then result)
41
+ SELECT lemma('SELECT SUM(...) FROM lineorder_flat WHERE ...');
42
+
43
+ -- (3) Run (2) again → cached 💾 path
44
+ ```
45
+
46
+ ## Env toggles
47
+
48
+ | Variable | `demo.sh` | `mockdemo.sh` |
49
+ |----------|-----------|---------------|
50
+ | `LEMMA_DEMO` | on | on |
51
+ | `MOCK_AGENT` | **0** (real agent) | **1** (fixture) |
52
+ | `LEMMA_DATASET_SIZE` | 100,000 | 2,000,000 |
53
+ | `LEMMA_LOG_LEVEL` | WARN | WARN |
54
+
55
+ Production `config.env` keeps demo **off**.
56
+
57
+ ## Re-run fresh pipeline
58
+
59
+ Run the script again — it clears cache every time.
@@ -0,0 +1,3 @@
1
+ from .catalog import DatabaseCatalog
2
+
3
+ __all__ = ["DatabaseCatalog"]
@@ -0,0 +1,41 @@
1
+ """Sandboxed OpenRouter agent for Lemma RunQuery optimization."""
2
+ from __future__ import annotations
3
+
4
+ # ``config`` imports the host's ``lemma_config``, which the container image does not have (this package is mounted into it): the three
5
+ # config names load on first use, so ``import lemma_agent.mcp_proxy`` works in the container.
6
+ _CONFIG_NAMES = ("AgentFlags", "load_agent_flags", "truthy")
7
+
8
+ __all__ = [
9
+ "AgentFlags",
10
+ "extract_marked_body",
11
+ "load_agent_flags",
12
+ "run_openrouter_agent_iteration",
13
+ "truthy",
14
+ "wrap_body_with_markers",
15
+ ]
16
+
17
+
18
+ def __getattr__(name: str):
19
+ if name in _CONFIG_NAMES:
20
+ from . import config
21
+
22
+ return getattr(config, name)
23
+ raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
24
+
25
+
26
+ def extract_marked_body(*args, **kwargs):
27
+ from .extract import extract_marked_body as _fn
28
+
29
+ return _fn(*args, **kwargs)
30
+
31
+
32
+ def wrap_body_with_markers(*args, **kwargs):
33
+ from .extract import wrap_body_with_markers as _fn
34
+
35
+ return _fn(*args, **kwargs)
36
+
37
+
38
+ def run_openrouter_agent_iteration(*args, **kwargs):
39
+ from .harness import run_openrouter_agent_iteration as _run
40
+
41
+ return _run(*args, **kwargs)
@@ -0,0 +1,157 @@
1
+ """Convert Claude Code ``--output-format stream-json`` into the Cursor-style transcript.
2
+
3
+ Runs inside the agent container as the tail of the agent command:
4
+ ``claude -p ... | python -m lemma_agent.claude_stream --raw <file>``.
5
+ stdout becomes ``agent_stream.jsonl`` (the entrypoint tees it), so the trace-reading
6
+ rules (thinking deltas, tool_call started/completed) work for both agents.
7
+ The untouched Claude lines go to ``--raw``.
8
+ """
9
+
10
+ from __future__ import annotations
11
+
12
+ import argparse
13
+ import json
14
+ import sys
15
+ import time
16
+ from typing import IO, Iterable, Iterator
17
+
18
+ _TOOL_KEYS = {
19
+ "Read": "readToolCall",
20
+ "Edit": "editToolCall",
21
+ "MultiEdit": "editToolCall",
22
+ "Write": "writeToolCall",
23
+ "Glob": "globToolCall",
24
+ "Grep": "grepToolCall",
25
+ "Bash": "shellToolCall",
26
+ }
27
+
28
+
29
+ def _tool_call(name: str, tool_input: dict) -> tuple[str, dict]:
30
+ """Return (cursor tool_call key, args) for one Claude ``tool_use`` block."""
31
+ if name.startswith("mcp__"):
32
+ _, server, tool = name.split("__", 2)
33
+ return "mcpToolCall", {"server": server, "name": tool, "args": tool_input}
34
+ key = _TOOL_KEYS.get(name, f"{name[0].lower()}{name[1:]}ToolCall")
35
+ args = dict(tool_input)
36
+ if "file_path" in args:
37
+ args["path"] = args.pop("file_path")
38
+ if key == "globToolCall" and "pattern" in args:
39
+ args["globPattern"] = args.pop("pattern")
40
+ return key, args
41
+
42
+
43
+ def _result_text(content) -> str:
44
+ if isinstance(content, str):
45
+ return content
46
+ return "".join(b.get("text", "") for b in content if b.get("type") == "text")
47
+
48
+
49
+ def convert_events(events: Iterable[dict]) -> Iterator[dict]:
50
+ """Yield Cursor-style events for Claude Code stream-json events."""
51
+ session_id = ""
52
+ pending: dict[str, tuple[str, dict]] = {}
53
+ for ev in events:
54
+ now_ms = int(time.time() * 1000)
55
+ kind = ev.get("type")
56
+ session_id = ev.get("session_id", session_id)
57
+ if kind == "system":
58
+ if ev.get("subtype") == "init":
59
+ yield {
60
+ "type": "system",
61
+ "subtype": "init",
62
+ "apiKeySource": ev.get("apiKeySource"),
63
+ "cwd": ev.get("cwd"),
64
+ "session_id": session_id,
65
+ "model": ev.get("model"),
66
+ "permissionMode": ev.get("permissionMode"),
67
+ "mcp_servers": ev.get("mcp_servers"),
68
+ }
69
+ elif kind == "assistant":
70
+ for block in ev["message"]["content"]:
71
+ btype = block["type"]
72
+ if btype == "thinking":
73
+ yield {
74
+ "type": "thinking",
75
+ "subtype": "delta",
76
+ "text": block["thinking"],
77
+ "session_id": session_id,
78
+ "timestamp_ms": now_ms,
79
+ }
80
+ yield {
81
+ "type": "thinking",
82
+ "subtype": "completed",
83
+ "session_id": session_id,
84
+ "timestamp_ms": now_ms,
85
+ }
86
+ elif btype == "text":
87
+ yield {
88
+ "type": "assistant",
89
+ "message": {"role": "assistant", "content": [{"type": "text", "text": block["text"]}]},
90
+ "session_id": session_id,
91
+ "timestamp_ms": now_ms,
92
+ }
93
+ elif btype == "tool_use":
94
+ key, args = _tool_call(block["name"], block["input"])
95
+ pending[block["id"]] = (key, args)
96
+ yield {
97
+ "type": "tool_call",
98
+ "subtype": "started",
99
+ "call_id": block["id"],
100
+ "tool_call": {key: {"args": args}},
101
+ "session_id": session_id,
102
+ "timestamp_ms": now_ms,
103
+ }
104
+ elif kind == "user":
105
+ content = ev["message"]["content"]
106
+ if isinstance(content, str):
107
+ continue
108
+ for block in content:
109
+ if block.get("type") != "tool_result":
110
+ continue
111
+ key, args = pending.pop(block["tool_use_id"])
112
+ text = _result_text(block["content"])
113
+ outcome = {"error": {"message": text}} if block.get("is_error") else {"success": {"content": text}}
114
+ yield {
115
+ "type": "tool_call",
116
+ "subtype": "completed",
117
+ "call_id": block["tool_use_id"],
118
+ "tool_call": {key: {"args": args, "result": outcome}},
119
+ "session_id": session_id,
120
+ "timestamp_ms": now_ms,
121
+ }
122
+ elif kind == "result":
123
+ yield {
124
+ "type": "result",
125
+ "subtype": ev["subtype"],
126
+ "is_error": ev.get("is_error"),
127
+ "result": ev.get("result", ""),
128
+ "duration_ms": ev.get("duration_ms"),
129
+ "num_turns": ev.get("num_turns"),
130
+ "total_cost_usd": ev.get("total_cost_usd"),
131
+ "session_id": session_id,
132
+ }
133
+
134
+
135
+ def convert_stream(src: IO[str], dst: IO[str], raw: IO[str]) -> None:
136
+ def parsed() -> Iterator[dict]:
137
+ for line in src:
138
+ raw.write(line)
139
+ raw.flush()
140
+ if line.strip():
141
+ yield json.loads(line)
142
+
143
+ for out in convert_events(parsed()):
144
+ dst.write(json.dumps(out) + "\n")
145
+ dst.flush()
146
+
147
+
148
+ def main() -> None:
149
+ parser = argparse.ArgumentParser()
150
+ parser.add_argument("--raw", required=True)
151
+ args = parser.parse_args()
152
+ with open(args.raw, "a", encoding="utf-8") as raw:
153
+ convert_stream(sys.stdin, sys.stdout, raw)
154
+
155
+
156
+ if __name__ == "__main__":
157
+ main()
@@ -0,0 +1,84 @@
1
+ """Agent configuration: run settings from lemma.toml (lemma_config), the imperative/OpenRouter ones from research_loop/config.env and process env."""
2
+ from __future__ import annotations
3
+
4
+ import os
5
+ from dataclasses import dataclass
6
+ from pathlib import Path
7
+
8
+ import lemma_config
9
+
10
+ ROOT = Path(__file__).resolve().parents[2]
11
+ DEFAULT_CONFIG_ENV = ROOT / "research_loop" / "config.env"
12
+
13
+
14
+ def truthy(s: str | None) -> bool:
15
+ if s is None:
16
+ return False
17
+ return s.strip().lower() not in ("", "0", "false", "no", "off")
18
+
19
+
20
+ def _load_config_file(path: Path) -> dict[str, str]:
21
+ out: dict[str, str] = {}
22
+ if not path.is_file():
23
+ return out
24
+ with open(path) as f:
25
+ for line in f:
26
+ line = line.strip()
27
+ if not line or line.startswith("#") or "=" not in line:
28
+ continue
29
+ k, v = line.split("=", 1)
30
+ out[k.strip()] = v.strip()
31
+ return out
32
+
33
+
34
+ @dataclass(frozen=True)
35
+ class AgentFlags:
36
+ backend: str = "openrouter"
37
+ openrouter_api_key: str = ""
38
+ openrouter_model: str = "anthropic/claude-sonnet-4"
39
+ openrouter_base_url: str = "https://openrouter.ai/api/v1"
40
+ agent_timeout_sec: int = 600
41
+ agent_network: bool = False
42
+ agent_data_mode: str = "stats"
43
+ agent_workload_hint: bool = True
44
+ agent_submit_ends_session: bool = False
45
+ agent_image: str = "lemma-agent:latest"
46
+ agent_max_turns: int = 40
47
+
48
+ @classmethod
49
+ def from_mapping(cls, cfg: dict[str, str]) -> AgentFlags:
50
+ return cls(
51
+ backend=cfg.get("LEMMA_AGENT_BACKEND", "openrouter"),
52
+ openrouter_api_key=cfg.get("OPENROUTER_API_KEY", ""),
53
+ openrouter_model=cfg.get("OPENROUTER_MODEL", "anthropic/claude-sonnet-4"),
54
+ openrouter_base_url=cfg.get("OPENROUTER_BASE_URL", "https://openrouter.ai/api/v1"),
55
+ agent_timeout_sec=int(cfg.get("AGENT_TIMEOUT_SEC", "600")),
56
+ agent_network=truthy(cfg.get("AGENT_NETWORK", "0")),
57
+ agent_data_mode=cfg.get("AGENT_DATA_MODE", "stats"),
58
+ agent_workload_hint=truthy(cfg.get("AGENT_WORKLOAD_HINT", "1")),
59
+ agent_submit_ends_session=truthy(cfg.get("AGENT_SUBMIT_ENDS_SESSION", "0")),
60
+ agent_image=cfg.get("AGENT_IMAGE", "lemma-agent:latest"),
61
+ agent_max_turns=int(cfg.get("AGENT_MAX_TURNS", "40")),
62
+ )
63
+
64
+
65
+ def load_agent_flags(config_env: Path | None = None) -> AgentFlags:
66
+ """Load flags from config.env; process environment overrides file values."""
67
+ cfg = _load_config_file(config_env or DEFAULT_CONFIG_ENV)
68
+ keys = (
69
+ "LEMMA_AGENT_BACKEND",
70
+ "OPENROUTER_API_KEY",
71
+ "OPENROUTER_MODEL",
72
+ "OPENROUTER_BASE_URL",
73
+ "AGENT_NETWORK",
74
+ "AGENT_WORKLOAD_HINT",
75
+ "AGENT_IMAGE",
76
+ "AGENT_MAX_TURNS",
77
+ )
78
+ for key in keys:
79
+ if key in os.environ:
80
+ cfg[key] = os.environ[key]
81
+ cfg["AGENT_TIMEOUT_SEC"] = str(lemma_config.get("agent_timeout_sec"))
82
+ cfg["AGENT_DATA_MODE"] = lemma_config.get("agent_data_mode")
83
+ cfg["AGENT_SUBMIT_ENDS_SESSION"] = "1" if lemma_config.get("agent_submit_ends_session") else "0"
84
+ return AgentFlags.from_mapping(cfg)
@@ -0,0 +1,130 @@
1
+ """Docker tool-container runner for the OpenRouter agent."""
2
+ from __future__ import annotations
3
+
4
+ import json
5
+ import subprocess
6
+ import threading
7
+ import uuid
8
+ from dataclasses import dataclass, field
9
+ from pathlib import Path
10
+
11
+ from db_extension.agent.config import AgentFlags
12
+ from research_loop.agent_image_check import agent_code_mount_args
13
+ from research_loop.job_label import job_label_args
14
+ from research_loop.sandbox_hide import shadow_mount_args
15
+
16
+ ROOT = Path(__file__).resolve().parents[2]
17
+ DOCKERFILE = ROOT / "docker" / "agent" / "Dockerfile"
18
+
19
+
20
+ @dataclass
21
+ class ContainerSession:
22
+ proc: subprocess.Popen[str]
23
+ _lock: threading.Lock = field(default_factory=threading.Lock)
24
+ _counter: int = 0
25
+
26
+ def call_tool(self, name: str, args: dict | None = None) -> dict:
27
+ with self._lock:
28
+ self._counter += 1
29
+ req_id = self._counter
30
+ req = {"id": req_id, "tool": name, "args": args or {}}
31
+ assert self.proc.stdin is not None
32
+ assert self.proc.stdout is not None
33
+ self.proc.stdin.write(json.dumps(req) + "\n")
34
+ self.proc.stdin.flush()
35
+ line = self.proc.stdout.readline()
36
+ if not line:
37
+ raise RuntimeError("tool container closed stdout")
38
+ return json.loads(line)
39
+
40
+ def close(self) -> None:
41
+ if self.proc.poll() is None:
42
+ self.proc.terminate()
43
+ try:
44
+ self.proc.wait(timeout=5)
45
+ except subprocess.TimeoutExpired:
46
+ self.proc.kill()
47
+ self.proc.wait()
48
+
49
+
50
+ def docker_image_built(image: str) -> bool:
51
+ return subprocess.run(
52
+ ["docker", "image", "inspect", image],
53
+ capture_output=True,
54
+ ).returncode == 0
55
+
56
+
57
+ def ensure_image(image: str) -> None:
58
+ if docker_image_built(image):
59
+ return
60
+ if not DOCKERFILE.is_file():
61
+ raise FileNotFoundError(f"Dockerfile not found: {DOCKERFILE}")
62
+ subprocess.run(
63
+ ["docker", "build", "-t", image, "-f", str(DOCKERFILE), str(ROOT)],
64
+ check=True,
65
+ )
66
+
67
+
68
+ def start_tool_container(
69
+ workspace: Path,
70
+ context_ro: Path,
71
+ data_dir: Path | None,
72
+ flags: AgentFlags,
73
+ *,
74
+ data_file_name: str | None = None,
75
+ mcp_sock: Path | None = None,
76
+ query_id: int | None = None,
77
+ ) -> ContainerSession:
78
+ if mcp_sock is None:
79
+ raise RuntimeError(
80
+ "Host MCP Unix socket path is required for tool container measure/submit tools. "
81
+ "Start McpSocketServer and pass mcp_sock= to start_tool_container."
82
+ )
83
+ ensure_image(flags.agent_image)
84
+ workspace = workspace.resolve()
85
+ context_ro = context_ro.resolve()
86
+ name = f"lemma-agent-{uuid.uuid4().hex[:12]}"
87
+ cmd = [
88
+ "docker",
89
+ "run",
90
+ "--rm",
91
+ "-i",
92
+ "--name",
93
+ name,
94
+ *job_label_args(),
95
+ "--cap-drop",
96
+ "ALL",
97
+ "-v",
98
+ f"{workspace}:/workspace:rw",
99
+ *shadow_mount_args(workspace),
100
+ "-v",
101
+ f"{context_ro}:/context/ro:ro",
102
+ *agent_code_mount_args(), # the commit's agent code over the image's baked copy
103
+ "-e",
104
+ f"AGENT_DATA_MODE={flags.agent_data_mode}",
105
+ "-e",
106
+ "PYTHONPATH=/app",
107
+ "-w",
108
+ "/workspace",
109
+ ]
110
+ if not flags.agent_network:
111
+ cmd.extend(["--network", "none"])
112
+ if data_dir is not None and data_dir.is_dir():
113
+ cmd.extend(["-v", f"{data_dir.resolve()}:/data:ro"])
114
+ if data_file_name:
115
+ cmd.extend(["-e", f"AGENT_DATA_FILE={data_file_name}"])
116
+ sock = mcp_sock.resolve()
117
+ cmd.extend(["-v", f"{sock}:/lemma-mcp.sock"])
118
+ cmd.extend(["-e", "LEMMA_MCP_SOCK=/lemma-mcp.sock"])
119
+ if query_id is not None:
120
+ cmd.extend(["-e", f"LEMMA_QUERY_ID={query_id}"])
121
+ cmd.append(flags.agent_image)
122
+ proc = subprocess.Popen(
123
+ cmd,
124
+ stdin=subprocess.PIPE,
125
+ stdout=subprocess.PIPE,
126
+ stderr=subprocess.PIPE,
127
+ text=True,
128
+ bufsize=1,
129
+ )
130
+ return ContainerSession(proc=proc)