agentevolve-optimizer 0.5.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 (414) hide show
  1. agent_evolve/__init__.py +722 -0
  2. agent_evolve/agentic.py +2800 -0
  3. agent_evolve/api.py +767 -0
  4. agent_evolve/application/__init__.py +1580 -0
  5. agent_evolve/application/action_allocation.py +744 -0
  6. agent_evolve/application/action_allocation_frame.py +347 -0
  7. agent_evolve/application/action_allocation_frame_commit.py +185 -0
  8. agent_evolve/application/action_allocation_frame_commit_v3.py +184 -0
  9. agent_evolve/application/action_allocation_frame_v3.py +338 -0
  10. agent_evolve/application/action_archive_value.py +497 -0
  11. agent_evolve/application/action_evidence_consistency.py +455 -0
  12. agent_evolve/application/action_forecast_partitioning.py +1471 -0
  13. agent_evolve/application/action_metric_projection.py +211 -0
  14. agent_evolve/application/action_role_value.py +680 -0
  15. agent_evolve/application/action_score_authorities.py +363 -0
  16. agent_evolve/application/action_structural_signature.py +116 -0
  17. agent_evolve/application/action_target_realization.py +402 -0
  18. agent_evolve/application/agentic_evolution.py +7734 -0
  19. agent_evolve/application/agentic_portfolio_residual_expert.py +835 -0
  20. agent_evolve/application/anchor_residual_identification.py +463 -0
  21. agent_evolve/application/archive_conditioned_action_target.py +208 -0
  22. agent_evolve/application/artifact_journal.py +246 -0
  23. agent_evolve/application/artifact_replay.py +347 -0
  24. agent_evolve/application/budgeted_optimizer.py +1828 -0
  25. agent_evolve/application/calibrated_campaign.py +485 -0
  26. agent_evolve/application/calibrated_current_prefix_forecast_opportunity.py +322 -0
  27. agent_evolve/application/calibrated_positive_gain_opportunity.py +1581 -0
  28. agent_evolve/application/campaign_capacity_recourse.py +254 -0
  29. agent_evolve/application/campaign_contextual_outcomes.py +119 -0
  30. agent_evolve/application/campaign_diagnostic_blocks.py +930 -0
  31. agent_evolve/application/campaign_evidence_registry.py +262 -0
  32. agent_evolve/application/campaign_execution.py +2537 -0
  33. agent_evolve/application/campaign_generation_audit.py +942 -0
  34. agent_evolve/application/campaign_learning.py +1812 -0
  35. agent_evolve/application/campaign_learning_runtime.py +1977 -0
  36. agent_evolve/application/campaign_search_phase.py +227 -0
  37. agent_evolve/application/campaign_selector_context_extension.py +220 -0
  38. agent_evolve/application/campaign_variation_envelope.py +649 -0
  39. agent_evolve/application/campaign_variation_trace.py +451 -0
  40. agent_evolve/application/candidate_archive_consequence.py +128 -0
  41. agent_evolve/application/causal_opportunity_portfolio_gate.py +385 -0
  42. agent_evolve/application/composite_outcome_updater.py +145 -0
  43. agent_evolve/application/composition_portfolio_selection.py +363 -0
  44. agent_evolve/application/concurrent_stage.py +144 -0
  45. agent_evolve/application/contextual_action_allocation.py +181 -0
  46. agent_evolve/application/contextual_campaign_outcomes.py +267 -0
  47. agent_evolve/application/contextual_campaign_planning.py +1366 -0
  48. agent_evolve/application/contextual_delayed_credit.py +651 -0
  49. agent_evolve/application/contextual_search_controller.py +2374 -0
  50. agent_evolve/application/current_prefix_forecast_opportunity.py +714 -0
  51. agent_evolve/application/decision_metric_projection.py +112 -0
  52. agent_evolve/application/derived_action_semantics.py +129 -0
  53. agent_evolve/application/detailed_evaluation.py +449 -0
  54. agent_evolve/application/earned_lineage.py +1011 -0
  55. agent_evolve/application/effective_choice_audit.py +484 -0
  56. agent_evolve/application/empirical_consequence_calibration.py +908 -0
  57. agent_evolve/application/evaluation_accounting.py +325 -0
  58. agent_evolve/application/evaluation_cache.py +199 -0
  59. agent_evolve/application/evaluation_escrow.py +547 -0
  60. agent_evolve/application/evaluation_recourse.py +253 -0
  61. agent_evolve/application/event_recorder.py +151 -0
  62. agent_evolve/application/evolution_campaign.py +1840 -0
  63. agent_evolve/application/executable_hypothesis.py +323 -0
  64. agent_evolve/application/factorial_branch_pilot.py +772 -0
  65. agent_evolve/application/finite_acquisition_capacity_recourse.py +672 -0
  66. agent_evolve/application/finite_acquisition_residual_expert.py +373 -0
  67. agent_evolve/application/finite_acquisition_variation_envelope.py +802 -0
  68. agent_evolve/application/finite_action_hypothesis_semantics.py +446 -0
  69. agent_evolve/application/finite_action_selection.py +188 -0
  70. agent_evolve/application/finite_action_set.py +306 -0
  71. agent_evolve/application/finite_action_transition.py +537 -0
  72. agent_evolve/application/finite_variation_eligibility.py +296 -0
  73. agent_evolve/application/forecast_geometry_portfolio.py +799 -0
  74. agent_evolve/application/forecast_opportunity_shadow_calibration.py +316 -0
  75. agent_evolve/application/front_proximity_admission.py +311 -0
  76. agent_evolve/application/front_proximity_parent_basis.py +458 -0
  77. agent_evolve/application/frozen_hurdle_score.py +659 -0
  78. agent_evolve/application/g3_causal_screen.py +2257 -0
  79. agent_evolve/application/g3_causal_validation.py +1046 -0
  80. agent_evolve/application/g3_postseal_curation.py +818 -0
  81. agent_evolve/application/gated_agentic_generator.py +205 -0
  82. agent_evolve/application/generation_feedback.py +293 -0
  83. agent_evolve/application/generative_proposal_journal.py +185 -0
  84. agent_evolve/application/geometry_conditional_elasticity.py +453 -0
  85. agent_evolve/application/global_wave_action_allocation.py +1151 -0
  86. agent_evolve/application/head_mass_conditional_seat.py +268 -0
  87. agent_evolve/application/identifiable_reflection_evidence.py +1147 -0
  88. agent_evolve/application/identifiable_reflection_learning.py +395 -0
  89. agent_evolve/application/identifiable_reflection_request.py +364 -0
  90. agent_evolve/application/in_memory_residual_archive.py +341 -0
  91. agent_evolve/application/insight_memory.py +1804 -0
  92. agent_evolve/application/live_runtime_manifest.py +758 -0
  93. agent_evolve/application/llm_task_queue.py +769 -0
  94. agent_evolve/application/matched_finite_action_block.py +409 -0
  95. agent_evolve/application/materialized_action_broker.py +2328 -0
  96. agent_evolve/application/materialized_action_constraints.py +83 -0
  97. agent_evolve/application/materialized_variation.py +211 -0
  98. agent_evolve/application/multi_option_evolution.py +1536 -0
  99. agent_evolve/application/outcome_adaptive_action_racing.py +2827 -0
  100. agent_evolve/application/outcome_adaptive_residual_campaign_runtime.py +580 -0
  101. agent_evolve/application/outcome_adaptive_residual_portfolio_evolution.py +3671 -0
  102. agent_evolve/application/outcome_conditioned_portfolio_selection.py +1374 -0
  103. agent_evolve/application/outcome_relation.py +193 -0
  104. agent_evolve/application/paired_allocation_comparison.py +241 -0
  105. agent_evolve/application/paired_block_schedule.py +127 -0
  106. agent_evolve/application/parent_measurement.py +226 -0
  107. agent_evolve/application/pareto_archive.py +811 -0
  108. agent_evolve/application/portfolio_campaign_runtime.py +4739 -0
  109. agent_evolve/application/portfolio_evolution.py +2950 -0
  110. agent_evolve/application/portfolio_hypothesis_observations.py +814 -0
  111. agent_evolve/application/portfolio_memory_attribution.py +581 -0
  112. agent_evolve/application/portfolio_memory_dose.py +788 -0
  113. agent_evolve/application/portfolio_memory_matched_control.py +938 -0
  114. agent_evolve/application/portfolio_memory_transfer.py +297 -0
  115. agent_evolve/application/portfolio_optimization_memory.py +363 -0
  116. agent_evolve/application/portfolio_outcome_feedback.py +1613 -0
  117. agent_evolve/application/portfolio_projection.py +335 -0
  118. agent_evolve/application/portfolio_recombination.py +2032 -0
  119. agent_evolve/application/post_evolution_reflection.py +834 -0
  120. agent_evolve/application/postcommit_rank_authority.py +245 -0
  121. agent_evolve/application/precommitted_portfolio_racing.py +2762 -0
  122. agent_evolve/application/prequential_archive_opportunity_calibration.py +1154 -0
  123. agent_evolve/application/prequential_residual_exploration.py +343 -0
  124. agent_evolve/application/prequential_score_portfolio.py +954 -0
  125. agent_evolve/application/projections.py +292 -0
  126. agent_evolve/application/protected_action_committee.py +1027 -0
  127. agent_evolve/application/protected_branch_pilot.py +376 -0
  128. agent_evolve/application/protected_current_prefix_forecast_opportunity.py +552 -0
  129. agent_evolve/application/provider_replay.py +910 -0
  130. agent_evolve/application/rank_balanced_causal_pilot.py +1372 -0
  131. agent_evolve/application/recombination_residual_expert.py +403 -0
  132. agent_evolve/application/reflection_workflow.py +571 -0
  133. agent_evolve/application/region_conditional_credit.py +911 -0
  134. agent_evolve/application/residual_campaign_runtime.py +531 -0
  135. agent_evolve/application/residual_headroom_campaign_runtime.py +459 -0
  136. agent_evolve/application/residual_headroom_ledger.py +1544 -0
  137. agent_evolve/application/residual_learning_transaction.py +396 -0
  138. agent_evolve/application/residual_portfolio_evolution.py +1228 -0
  139. agent_evolve/application/residual_reachability.py +749 -0
  140. agent_evolve/application/residual_stage_credit.py +499 -0
  141. agent_evolve/application/same_prefix_paired_audit.py +1580 -0
  142. agent_evolve/application/semantic_coverage_score_portfolio.py +838 -0
  143. agent_evolve/application/sequential_lineage_allocation.py +1017 -0
  144. agent_evolve/application/sequential_market_replay.py +1395 -0
  145. agent_evolve/application/sequential_residual_campaign_runtime.py +305 -0
  146. agent_evolve/application/sequential_residual_portfolio_evolution.py +940 -0
  147. agent_evolve/application/single_score_action_allocation.py +299 -0
  148. agent_evolve/application/source_exposure_allocation.py +906 -0
  149. agent_evolve/application/staged_memory.py +210 -0
  150. agent_evolve/application/stratified_cold_start_allocation.py +732 -0
  151. agent_evolve/application/support_guarded_hurdle_score.py +549 -0
  152. agent_evolve/application/target_conditioned_action_forecast.py +595 -0
  153. agent_evolve/application/target_conditioned_campaign.py +566 -0
  154. agent_evolve/application/treatment_assignment.py +201 -0
  155. agent_evolve/application/trusted_objective_evidence.py +217 -0
  156. agent_evolve/application/two_stage_action_evolution.py +1131 -0
  157. agent_evolve/application/v8lite_allocation_policy.py +1083 -0
  158. agent_evolve/application/v9_candidate_policy.py +1303 -0
  159. agent_evolve/bootstrap.py +108 -0
  160. agent_evolve/campaign_presets.py +517 -0
  161. agent_evolve/campaign_profiles.py +452 -0
  162. agent_evolve/campaign_variation_topology.py +288 -0
  163. agent_evolve/campaign_workload.py +950 -0
  164. agent_evolve/cli.py +797 -0
  165. agent_evolve/contract.py +241 -0
  166. agent_evolve/core/__init__.py +91 -0
  167. agent_evolve/core/action_semantics.py +411 -0
  168. agent_evolve/core/authored.py +105 -0
  169. agent_evolve/core/formatting.py +286 -0
  170. agent_evolve/core/optimization_semantics.py +324 -0
  171. agent_evolve/core/problem.py +167 -0
  172. agent_evolve/core/results.py +323 -0
  173. agent_evolve/core/stats.py +70 -0
  174. agent_evolve/core/telemetry.py +100 -0
  175. agent_evolve/domain/__init__.py +89 -0
  176. agent_evolve/domain/artifact.py +162 -0
  177. agent_evolve/domain/durable_text.py +68 -0
  178. agent_evolve/domain/event.py +1454 -0
  179. agent_evolve/domain/finite_action_set.py +426 -0
  180. agent_evolve/domain/finite_variation.py +526 -0
  181. agent_evolve/domain/generative_emission.py +559 -0
  182. agent_evolve/domain/ids.py +163 -0
  183. agent_evolve/domain/inline_text.py +106 -0
  184. agent_evolve/domain/insight.py +27 -0
  185. agent_evolve/domain/lineage.py +737 -0
  186. agent_evolve/domain/llm_task_queue.py +960 -0
  187. agent_evolve/domain/outcome.py +96 -0
  188. agent_evolve/domain/patch.py +854 -0
  189. agent_evolve/domain/typed_json.py +542 -0
  190. agent_evolve/domain/variation_space.py +158 -0
  191. agent_evolve/driver.py +1014 -0
  192. agent_evolve/harness/__init__.py +29 -0
  193. agent_evolve/harness/base.py +242 -0
  194. agent_evolve/harness/directives.py +163 -0
  195. agent_evolve/harness/generative_seal.py +479 -0
  196. agent_evolve/harness/registry.py +41 -0
  197. agent_evolve/infrastructure/__init__.py +39 -0
  198. agent_evolve/infrastructure/artifacts/__init__.py +6 -0
  199. agent_evolve/infrastructure/artifacts/_verification.py +67 -0
  200. agent_evolve/infrastructure/artifacts/filesystem.py +343 -0
  201. agent_evolve/infrastructure/artifacts/in_memory.py +73 -0
  202. agent_evolve/infrastructure/asyncio_runtime.py +109 -0
  203. agent_evolve/infrastructure/authored_runtime.py +188 -0
  204. agent_evolve/infrastructure/authored_worker.py +171 -0
  205. agent_evolve/infrastructure/clock.py +53 -0
  206. agent_evolve/infrastructure/events/__init__.py +6 -0
  207. agent_evolve/infrastructure/events/_validation.py +89 -0
  208. agent_evolve/infrastructure/events/in_memory.py +56 -0
  209. agent_evolve/infrastructure/events/jsonl.py +193 -0
  210. agent_evolve/infrastructure/exception_provenance.py +215 -0
  211. agent_evolve/infrastructure/ids.py +118 -0
  212. agent_evolve/infrastructure/lineage_codec.py +1836 -0
  213. agent_evolve/infrastructure/outcome_adaptive_phase_journal.py +170 -0
  214. agent_evolve/infrastructure/residual_headroom_journal.py +221 -0
  215. agent_evolve/infrastructure/resource_lease.py +370 -0
  216. agent_evolve/infrastructure/sanitization/__init__.py +8 -0
  217. agent_evolve/infrastructure/sanitization/strict_json.py +484 -0
  218. agent_evolve/infrastructure/sequential_phase_journal.py +170 -0
  219. agent_evolve/infrastructure/stream_liveness.py +383 -0
  220. agent_evolve/infrastructure/subprocess_boundary.py +136 -0
  221. agent_evolve/integrations/__init__.py +1 -0
  222. agent_evolve/integrations/botorch/__init__.py +28 -0
  223. agent_evolve/integrations/botorch/finite_qlognehvi.py +190 -0
  224. agent_evolve/integrations/botorch/finite_qlognehvi_batch.py +155 -0
  225. agent_evolve/integrations/botorch/finite_qlognehvi_batch_identity.py +20 -0
  226. agent_evolve/integrations/botorch/finite_qlognehvi_batch_worker.py +55 -0
  227. agent_evolve/integrations/botorch/finite_qlognehvi_identity.py +22 -0
  228. agent_evolve/integrations/botorch/finite_qlognehvi_worker.py +55 -0
  229. agent_evolve/integrations/botorch/subprocess_qlognehvi.py +261 -0
  230. agent_evolve/integrations/botorch/subprocess_qlognehvi_batch.py +273 -0
  231. agent_evolve/integrations/completion.py +242 -0
  232. agent_evolve/integrations/pydantic_ai/__init__.py +441 -0
  233. agent_evolve/integrations/pydantic_ai/action_forecast.py +1068 -0
  234. agent_evolve/integrations/pydantic_ai/agentic_generator.py +2308 -0
  235. agent_evolve/integrations/pydantic_ai/async_generator.py +1604 -0
  236. agent_evolve/integrations/pydantic_ai/boundary_codec.py +1526 -0
  237. agent_evolve/integrations/pydantic_ai/calibrated_portfolio_campaign.py +756 -0
  238. agent_evolve/integrations/pydantic_ai/calibrated_portfolio_selection.py +7537 -0
  239. agent_evolve/integrations/pydantic_ai/campaign_acquisition.py +609 -0
  240. agent_evolve/integrations/pydantic_ai/execution_binding.py +138 -0
  241. agent_evolve/integrations/pydantic_ai/forecast_geometry_action_committee.py +217 -0
  242. agent_evolve/integrations/pydantic_ai/harness.py +159 -0
  243. agent_evolve/integrations/pydantic_ai/heterogeneous_model_execution.py +306 -0
  244. agent_evolve/integrations/pydantic_ai/hierarchical_residual_adaptive_semantic_view.py +179 -0
  245. agent_evolve/integrations/pydantic_ai/json_schema_dialect.py +108 -0
  246. agent_evolve/integrations/pydantic_ai/materialized_hierarchical_residual_expert.py +952 -0
  247. agent_evolve/integrations/pydantic_ai/materialized_portfolio_judge.py +520 -0
  248. agent_evolve/integrations/pydantic_ai/model_execution_profile.py +659 -0
  249. agent_evolve/integrations/pydantic_ai/outbound_request_manifest.py +1170 -0
  250. agent_evolve/integrations/pydantic_ai/portable_residual_consequence_features.py +575 -0
  251. agent_evolve/integrations/pydantic_ai/portfolio_selection.py +422 -0
  252. agent_evolve/integrations/pydantic_ai/progress_aware_openrouter.py +416 -0
  253. agent_evolve/integrations/pydantic_ai/provider_attempt_join.py +1523 -0
  254. agent_evolve/integrations/pydantic_ai/provider_free_calibrated_runner.py +607 -0
  255. agent_evolve/integrations/pydantic_ai/queued_runner.py +2634 -0
  256. agent_evolve/integrations/pydantic_ai/reconciled_residual_reachability.py +1417 -0
  257. agent_evolve/integrations/pydantic_ai/residual_forecast_geometry.py +445 -0
  258. agent_evolve/integrations/pydantic_ai/residual_reachability.py +674 -0
  259. agent_evolve/integrations/pydantic_ai/residual_semantic_cells.py +239 -0
  260. agent_evolve/integrations/pydantic_ai/sealed_output_replay.py +1068 -0
  261. agent_evolve/integrations/pydantic_ai/semantic_coverage_residual_portfolio.py +770 -0
  262. agent_evolve/integrations/pydantic_ai/semantic_decision_replay.py +383 -0
  263. agent_evolve/integrations/pydantic_ai/support_adaptive_residual_portfolio.py +135 -0
  264. agent_evolve/integrations/pydantic_ai/trusted_residual_prompt_context.py +143 -0
  265. agent_evolve/integrations/pydantic_ai/validated_openrouter_model.py +107 -0
  266. agent_evolve/integrations/pymoo_adapter.py +242 -0
  267. agent_evolve/policies/__init__.py +17 -0
  268. agent_evolve/policies/check.py +469 -0
  269. agent_evolve/policies/emit_scaffold.py +451 -0
  270. agent_evolve/policies/feedback/__init__.py +37 -0
  271. agent_evolve/policies/feedback/held_out_asn.py +1325 -0
  272. agent_evolve/policies/genetic.py +607 -0
  273. agent_evolve/policies/llm_backoff.py +183 -0
  274. agent_evolve/policies/llm_chooser.py +226 -0
  275. agent_evolve/policies/llm_generator.py +1760 -0
  276. agent_evolve/policies/llm_init.py +267 -0
  277. agent_evolve/policies/llm_operator.py +109 -0
  278. agent_evolve/policies/llm_prior.py +194 -0
  279. agent_evolve/policies/llm_surrogate.py +334 -0
  280. agent_evolve/policies/measurement_evidence.py +704 -0
  281. agent_evolve/policies/memory/__init__.py +223 -0
  282. agent_evolve/policies/memory/balanced_subset_blocks.py +707 -0
  283. agent_evolve/policies/memory/compatibility_matching.py +593 -0
  284. agent_evolve/policies/memory/global_falsification.py +1841 -0
  285. agent_evolve/policies/memory/prompt_shape.py +503 -0
  286. agent_evolve/policies/memory/randomized_subset.py +714 -0
  287. agent_evolve/policies/memory/staged_causal.py +1270 -0
  288. agent_evolve/policies/memory/treatment_compliance.py +759 -0
  289. agent_evolve/policies/objective_resolution/__init__.py +17 -0
  290. agent_evolve/policies/objective_resolution/fixed_grid.py +364 -0
  291. agent_evolve/policies/operator_portfolio.py +407 -0
  292. agent_evolve/policies/reguidance.py +1133 -0
  293. agent_evolve/policies/reward/__init__.py +83 -0
  294. agent_evolve/policies/reward/affine_candidate_consequence.py +156 -0
  295. agent_evolve/policies/reward/affine_candidate_consequence_3d.py +159 -0
  296. agent_evolve/policies/reward/affine_hypervolume.py +490 -0
  297. agent_evolve/policies/reward/affine_hypervolume_3d.py +567 -0
  298. agent_evolve/policies/reward/contextual_marginal_utility.py +318 -0
  299. agent_evolve/policies/reward/frozen_archive.py +360 -0
  300. agent_evolve/policies/reward/frozen_wave_archive.py +368 -0
  301. agent_evolve/policies/search_state.py +208 -0
  302. agent_evolve/policies/selection/__init__.py +345 -0
  303. agent_evolve/policies/selection/acquisition_certified_slate.py +684 -0
  304. agent_evolve/policies/selection/affine_frontier_context.py +330 -0
  305. agent_evolve/policies/selection/affine_frontier_target.py +473 -0
  306. agent_evolve/policies/selection/archive_elite.py +1346 -0
  307. agent_evolve/policies/selection/calibrated_portfolio_binding.py +640 -0
  308. agent_evolve/policies/selection/calibrated_slate.py +1394 -0
  309. agent_evolve/policies/selection/calibrated_slate_codec.py +579 -0
  310. agent_evolve/policies/selection/common_candidate_pool.py +685 -0
  311. agent_evolve/policies/selection/diagnostic_sampling.py +319 -0
  312. agent_evolve/policies/selection/disjoint_pairs.py +479 -0
  313. agent_evolve/policies/selection/elite_explorer.py +719 -0
  314. agent_evolve/policies/selection/finite_action.py +187 -0
  315. agent_evolve/policies/selection/finite_option_prompt_projection.py +377 -0
  316. agent_evolve/policies/selection/finite_palette_evidence.py +247 -0
  317. agent_evolve/policies/selection/forecast_calibration.py +922 -0
  318. agent_evolve/policies/selection/frontier_probe_slate.py +814 -0
  319. agent_evolve/policies/selection/frozen_archive_pairs.py +762 -0
  320. agent_evolve/policies/selection/full_support_slate.py +91 -0
  321. agent_evolve/policies/selection/meaningful_direction.py +240 -0
  322. agent_evolve/policies/selection/memory_dose_feasibility.py +259 -0
  323. agent_evolve/policies/selection/model_anchored_slate.py +826 -0
  324. agent_evolve/policies/selection/phenotype_recourse.py +979 -0
  325. agent_evolve/policies/selection/proposal_support.py +368 -0
  326. agent_evolve/policies/selection/random_portfolio.py +254 -0
  327. agent_evolve/policies/selection/regret_bounded_slate.py +1084 -0
  328. agent_evolve/policies/selection/residual_frontier.py +463 -0
  329. agent_evolve/policies/selection/residual_frontier_target.py +605 -0
  330. agent_evolve/policies/selection/structural_posterior_slate.py +1571 -0
  331. agent_evolve/policies/selection/target_conditioned_allocator.py +648 -0
  332. agent_evolve/policies/selection/target_conditioned_features.py +812 -0
  333. agent_evolve/policies/selection/target_conditioned_prequential.py +1527 -0
  334. agent_evolve/policies/selection/task_keyed_palette.py +906 -0
  335. agent_evolve/policies/semantics.py +147 -0
  336. agent_evolve/policies/structure.py +362 -0
  337. agent_evolve/policies/structured_output_budget.py +62 -0
  338. agent_evolve/policies/surrogate.py +696 -0
  339. agent_evolve/policies/variation/__init__.py +1 -0
  340. agent_evolve/policies/variation/compositional_finite_catalog.py +426 -0
  341. agent_evolve/policies/variation/crossover_inheritance.py +575 -0
  342. agent_evolve/policies/variation/disjoint_recombination.py +611 -0
  343. agent_evolve/policies/variation/exact_composition_capacity.py +214 -0
  344. agent_evolve/policies/variation/exact_parent_crossover.py +950 -0
  345. agent_evolve/policies/variation/multiscale_restart_catalog.py +372 -0
  346. agent_evolve/policies/variation/source_union_finite_catalog.py +403 -0
  347. agent_evolve/policies/variation/typed_patch.py +1981 -0
  348. agent_evolve/policies/weighted_prior.py +394 -0
  349. agent_evolve/ports/__init__.py +383 -0
  350. agent_evolve/ports/action_allocation.py +733 -0
  351. agent_evolve/ports/action_allocation_frame.py +1153 -0
  352. agent_evolve/ports/action_allocation_frame_commit.py +294 -0
  353. agent_evolve/ports/action_allocation_frame_commit_v3.py +432 -0
  354. agent_evolve/ports/action_allocation_frame_v3.py +995 -0
  355. agent_evolve/ports/action_forecast.py +1568 -0
  356. agent_evolve/ports/action_metric_projection.py +165 -0
  357. agent_evolve/ports/agentic_generator.py +1561 -0
  358. agent_evolve/ports/archive_context.py +136 -0
  359. agent_evolve/ports/artifact_sanitizer.py +44 -0
  360. agent_evolve/ports/artifact_store.py +225 -0
  361. agent_evolve/ports/clock.py +13 -0
  362. agent_evolve/ports/contextual_search_allocation.py +827 -0
  363. agent_evolve/ports/decision_metric_projection.py +258 -0
  364. agent_evolve/ports/event_store.py +55 -0
  365. agent_evolve/ports/executable_hypothesis.py +557 -0
  366. agent_evolve/ports/finite_acquisition.py +377 -0
  367. agent_evolve/ports/finite_acquisition_batch.py +296 -0
  368. agent_evolve/ports/finite_acquisition_batch_json.py +164 -0
  369. agent_evolve/ports/finite_acquisition_json.py +247 -0
  370. agent_evolve/ports/finite_acquisition_space.py +168 -0
  371. agent_evolve/ports/finite_action_selection.py +348 -0
  372. agent_evolve/ports/finite_action_set.py +256 -0
  373. agent_evolve/ports/frontier_target.py +396 -0
  374. agent_evolve/ports/generation_failure.py +43 -0
  375. agent_evolve/ports/hard_feasibility.py +233 -0
  376. agent_evolve/ports/id_factory.py +34 -0
  377. agent_evolve/ports/llm_task_queue.py +93 -0
  378. agent_evolve/ports/objective_resolution.py +419 -0
  379. agent_evolve/ports/paired_allocation_comparison.py +401 -0
  380. agent_evolve/ports/paired_block_schedule.py +475 -0
  381. agent_evolve/ports/parent_measurement.py +336 -0
  382. agent_evolve/ports/portfolio_memory_dose.py +643 -0
  383. agent_evolve/ports/portfolio_selection.py +3169 -0
  384. agent_evolve/ports/postcommit_rank_authority.py +467 -0
  385. agent_evolve/ports/presented_action_evidence.py +794 -0
  386. agent_evolve/ports/resource_lease.py +162 -0
  387. agent_evolve/ports/structured_generator.py +734 -0
  388. agent_evolve/ports/structured_output_budget.py +120 -0
  389. agent_evolve/ports/subprocess_boundary.py +138 -0
  390. agent_evolve/ports/treatment_assignment.py +466 -0
  391. agent_evolve/ports/variation_catalog.py +76 -0
  392. agent_evolve/ports/variation_source.py +226 -0
  393. agent_evolve/proposal_mode.py +157 -0
  394. agent_evolve/proposers/__init__.py +10 -0
  395. agent_evolve/proposers/random_proposer.py +188 -0
  396. agent_evolve/provider_accounting.py +163 -0
  397. agent_evolve/py.typed +0 -0
  398. agent_evolve/reference_method.py +1570 -0
  399. agent_evolve/session/__init__.py +11 -0
  400. agent_evolve/session/authorship.py +864 -0
  401. agent_evolve/session/evaluate.py +236 -0
  402. agent_evolve/session/fidelity.py +237 -0
  403. agent_evolve/session/genetic_loop.py +742 -0
  404. agent_evolve/session/loop.py +803 -0
  405. agent_evolve/session/screening.py +671 -0
  406. agent_evolve/settings.py +376 -0
  407. agent_evolve/workload_kit.py +368 -0
  408. agent_evolve/workload_prompt.py +398 -0
  409. agentevolve_optimizer-0.5.0.dist-info/METADATA +599 -0
  410. agentevolve_optimizer-0.5.0.dist-info/RECORD +414 -0
  411. agentevolve_optimizer-0.5.0.dist-info/WHEEL +5 -0
  412. agentevolve_optimizer-0.5.0.dist-info/entry_points.txt +2 -0
  413. agentevolve_optimizer-0.5.0.dist-info/licenses/LICENSE +21 -0
  414. agentevolve_optimizer-0.5.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,537 @@
1
+ """Authenticated, parent-local semantics for reflected finite actions.
2
+
3
+ The reflection provider may describe a rule in prose, but executable memory is
4
+ derived only from the engine-issued empirical snapshots attached to that rule.
5
+ This module projects the trusted direct-single-mutation schema into a small,
6
+ workload-neutral transition value: stable action identity plus exact local
7
+ parent and child values. Foreign or legacy evidence remains opaque so callers
8
+ can retain their explicitly declared compatibility behavior.
9
+ """
10
+
11
+ from __future__ import annotations
12
+
13
+ import hashlib
14
+ import re
15
+ from dataclasses import dataclass, field
16
+
17
+ from agent_evolve.application.identifiable_reflection_request import (
18
+ IDENTIFIABLE_REFLECTION_FACT_SCHEMA_DEFINITION_SHA256,
19
+ IDENTIFIABLE_REFLECTION_FACT_SCHEMA_ID,
20
+ IDENTIFIABLE_REFLECTION_FACT_SCHEMA_VERSION,
21
+ )
22
+ from agent_evolve.application.insight_memory import (
23
+ EmpiricalEvidenceSnapshot,
24
+ InsightEvidenceLineage,
25
+ )
26
+ from agent_evolve.domain.patch import require_sha256
27
+ from agent_evolve.domain.typed_json import (
28
+ FrozenJsonArray,
29
+ FrozenJsonObject,
30
+ FrozenJsonValue,
31
+ canonical_typed_json_bytes,
32
+ freeze_json,
33
+ is_frozen_json_value,
34
+ thaw_json,
35
+ typed_json_equal,
36
+ typed_json_sha256,
37
+ )
38
+ from agent_evolve.ports.agentic_generator import InsightDraft
39
+
40
+
41
+ _TOKEN = re.compile(r"^[a-z][a-z0-9_.:-]{0,255}$")
42
+ _OPTION_ID = re.compile(r"^[a-z][a-z0-9_.-]{0,255}$")
43
+ _PATH = re.compile(
44
+ r"^\$\.[^.\[\]\s]+(?:\.[^.\[\]\s]+|\[(?:0|[1-9][0-9]*)\])*$"
45
+ )
46
+ _TRANSITION_DOMAIN = b"agent-evolve:empirical-finite-action-transition:v1\x00"
47
+
48
+
49
+ def _exact_object(value: object, *, name: str) -> dict[str, object]:
50
+ if type(value) is not dict:
51
+ raise TypeError(f"{name} must be an exact JSON object")
52
+ return value
53
+
54
+
55
+ def _require_exact_keys(
56
+ value: dict[str, object],
57
+ expected: set[str],
58
+ *,
59
+ name: str,
60
+ ) -> None:
61
+ if set(value) != expected:
62
+ raise ValueError(f"{name} differs from the trusted empirical schema")
63
+
64
+
65
+ def _require_token(value: object, *, name: str, option_id: bool = False) -> str:
66
+ pattern = _OPTION_ID if option_id else _TOKEN
67
+ if type(value) is not str or pattern.fullmatch(value) is None:
68
+ raise ValueError(f"{name} must use the closed token grammar")
69
+ return value
70
+
71
+
72
+ def _require_path(value: object, *, name: str) -> str:
73
+ if type(value) is not str or _PATH.fullmatch(value) is None:
74
+ raise ValueError(f"{name} must be a canonical rooted JSON path")
75
+ return value
76
+
77
+
78
+ def _require_sha(value: object, *, name: str) -> str:
79
+ if type(value) is not str:
80
+ raise TypeError(f"{name} must be an exact string")
81
+ require_sha256(value, name)
82
+ return value
83
+
84
+
85
+ def _path_parts(path: str) -> tuple[str | int, ...]:
86
+ """Parse the closed reflection-path grammar without interpreting prose."""
87
+
88
+ _require_path(path, name="path")
89
+ parts: list[str | int] = []
90
+ index = 2
91
+ while index < len(path):
92
+ start = index
93
+ while index < len(path) and path[index] not in ".[":
94
+ index += 1
95
+ if start == index: # pragma: no cover - the regex closes this branch.
96
+ raise ValueError("path has an empty object key")
97
+ parts.append(path[start:index])
98
+ while index < len(path) and path[index] == "[":
99
+ end = path.index("]", index)
100
+ parts.append(int(path[index + 1 : end]))
101
+ index = end + 1
102
+ if index < len(path):
103
+ if path[index] != ".": # pragma: no cover - regex closes this.
104
+ raise ValueError("path is malformed")
105
+ index += 1
106
+ return tuple(parts)
107
+
108
+
109
+ def frozen_value_at_canonical_path(
110
+ root: FrozenJsonObject,
111
+ path: str,
112
+ ) -> FrozenJsonValue:
113
+ """Resolve a trusted canonical path with exact object/array semantics."""
114
+
115
+ if type(root) is not FrozenJsonObject or freeze_json(root) is not root:
116
+ raise TypeError("root must be an exact frozen JSON object")
117
+ current: FrozenJsonValue = root
118
+ for part in _path_parts(path):
119
+ if type(part) is str:
120
+ if type(current) is not FrozenJsonObject:
121
+ raise ValueError("object-key path reaches a non-object")
122
+ matches = tuple(value for key, value in current.items if key == part)
123
+ if len(matches) != 1:
124
+ raise ValueError("object-key path does not exist")
125
+ current = matches[0]
126
+ else:
127
+ if type(current) is not FrozenJsonArray:
128
+ raise ValueError("array-index path reaches a non-array")
129
+ if part >= len(current.items):
130
+ raise ValueError("array-index path is out of bounds")
131
+ current = current.items[part]
132
+ return current
133
+
134
+
135
+ @dataclass(frozen=True, slots=True)
136
+ class EmpiricalFiniteActionTransition:
137
+ """One authenticated local action occurrence usable as executable memory."""
138
+
139
+ contrast_id: str
140
+ source_observation_sha256: str
141
+ source_evidence_id: str
142
+ event_index: int
143
+ workload_instance_sha256: str
144
+ evaluator_contract_sha256: str
145
+ campaign_sha256: str
146
+ option_id: str
147
+ option_identity_sha256: str
148
+ option_family: str
149
+ finite_contract_identity_sha256: str
150
+ affected_path: str
151
+ parent_value: FrozenJsonValue
152
+ child_value: FrozenJsonValue
153
+ parent_configuration_sha256: str
154
+ child_configuration_sha256: str
155
+ action_semantics_compiler_id: str
156
+ action_semantics_compiler_version: int
157
+ action_semantics_definition_sha256: str
158
+ transition_sha256: str = field(init=False)
159
+
160
+ def __post_init__(self) -> None:
161
+ for name in (
162
+ "contrast_id",
163
+ "source_observation_sha256",
164
+ "source_evidence_id",
165
+ "workload_instance_sha256",
166
+ "evaluator_contract_sha256",
167
+ "campaign_sha256",
168
+ "option_identity_sha256",
169
+ "finite_contract_identity_sha256",
170
+ "parent_configuration_sha256",
171
+ "child_configuration_sha256",
172
+ "action_semantics_definition_sha256",
173
+ ):
174
+ require_sha256(getattr(self, name), name)
175
+ _require_token(self.option_id, name="option_id", option_id=True)
176
+ _require_token(self.option_family, name="option_family")
177
+ _require_path(self.affected_path, name="affected_path")
178
+ _require_token(
179
+ self.action_semantics_compiler_id,
180
+ name="action_semantics_compiler_id",
181
+ )
182
+ if (
183
+ type(self.action_semantics_compiler_version) is not int
184
+ or self.action_semantics_compiler_version <= 0
185
+ ):
186
+ raise ValueError("action semantics compiler version must be positive")
187
+ if type(self.event_index) is not int or self.event_index < 0:
188
+ raise ValueError("event_index must be a non-negative exact integer")
189
+ for name in ("parent_value", "child_value"):
190
+ value = getattr(self, name)
191
+ if not is_frozen_json_value(value) or freeze_json(value) is not value:
192
+ raise TypeError(f"{name} must be an exact frozen JSON value")
193
+ if typed_json_equal(self.parent_value, self.child_value):
194
+ raise ValueError("an empirical finite action must change its local value")
195
+ object.__setattr__(
196
+ self,
197
+ "transition_sha256",
198
+ hashlib.sha256(
199
+ _TRANSITION_DOMAIN
200
+ + canonical_typed_json_bytes(freeze_json(self._unsigned_record()))
201
+ ).hexdigest(),
202
+ )
203
+
204
+ def _unsigned_record(self) -> dict[str, object]:
205
+ return {
206
+ "schema_version": 1,
207
+ "contrast_id": self.contrast_id,
208
+ "source_scope": {
209
+ "source_observation_sha256": self.source_observation_sha256,
210
+ "source_evidence_id": self.source_evidence_id,
211
+ "event_index": self.event_index,
212
+ "workload_instance_sha256": self.workload_instance_sha256,
213
+ "evaluator_contract_sha256": self.evaluator_contract_sha256,
214
+ "campaign_sha256": self.campaign_sha256,
215
+ },
216
+ "finite_action": {
217
+ "option_id": self.option_id,
218
+ "option_identity_sha256": self.option_identity_sha256,
219
+ "option_family": self.option_family,
220
+ "finite_contract_identity_sha256": (
221
+ self.finite_contract_identity_sha256
222
+ ),
223
+ },
224
+ "local_intervention": {
225
+ "affected_path": self.affected_path,
226
+ "parent_value": thaw_json(self.parent_value),
227
+ "child_value": thaw_json(self.child_value),
228
+ },
229
+ "configuration_lineage": {
230
+ "parent_configuration_sha256": self.parent_configuration_sha256,
231
+ "child_configuration_sha256": self.child_configuration_sha256,
232
+ },
233
+ "action_semantics_compiler": {
234
+ "compiler_id": self.action_semantics_compiler_id,
235
+ "compiler_version": self.action_semantics_compiler_version,
236
+ "definition_sha256": self.action_semantics_definition_sha256,
237
+ },
238
+ }
239
+
240
+ def to_record(self) -> dict[str, object]:
241
+ self.__post_init__()
242
+ return {**self._unsigned_record(), "transition_sha256": self.transition_sha256}
243
+
244
+ @classmethod
245
+ def from_record(cls, value: object) -> "EmpiricalFiniteActionTransition":
246
+ record = _exact_object(value, name="transition")
247
+ _require_exact_keys(
248
+ record,
249
+ {
250
+ "schema_version",
251
+ "contrast_id",
252
+ "source_scope",
253
+ "finite_action",
254
+ "local_intervention",
255
+ "configuration_lineage",
256
+ "action_semantics_compiler",
257
+ "transition_sha256",
258
+ },
259
+ name="transition",
260
+ )
261
+ if record["schema_version"] != 1:
262
+ raise ValueError("unsupported empirical transition schema")
263
+ source = _exact_object(record["source_scope"], name="source_scope")
264
+ action = _exact_object(record["finite_action"], name="finite_action")
265
+ local = _exact_object(record["local_intervention"], name="local_intervention")
266
+ lineage = _exact_object(
267
+ record["configuration_lineage"], name="configuration_lineage"
268
+ )
269
+ compiler = _exact_object(
270
+ record["action_semantics_compiler"], name="action_semantics_compiler"
271
+ )
272
+ transition = cls(
273
+ contrast_id=_require_sha(record["contrast_id"], name="contrast_id"),
274
+ source_observation_sha256=_require_sha(
275
+ source.get("source_observation_sha256"),
276
+ name="source_observation_sha256",
277
+ ),
278
+ source_evidence_id=_require_sha(
279
+ source.get("source_evidence_id"), name="source_evidence_id"
280
+ ),
281
+ event_index=source.get("event_index"), # type: ignore[arg-type]
282
+ workload_instance_sha256=_require_sha(
283
+ source.get("workload_instance_sha256"),
284
+ name="workload_instance_sha256",
285
+ ),
286
+ evaluator_contract_sha256=_require_sha(
287
+ source.get("evaluator_contract_sha256"),
288
+ name="evaluator_contract_sha256",
289
+ ),
290
+ campaign_sha256=_require_sha(
291
+ source.get("campaign_sha256"), name="campaign_sha256"
292
+ ),
293
+ option_id=_require_token(
294
+ action.get("option_id"), name="option_id", option_id=True
295
+ ),
296
+ option_identity_sha256=_require_sha(
297
+ action.get("option_identity_sha256"),
298
+ name="option_identity_sha256",
299
+ ),
300
+ option_family=_require_token(
301
+ action.get("option_family"), name="option_family"
302
+ ),
303
+ finite_contract_identity_sha256=_require_sha(
304
+ action.get("finite_contract_identity_sha256"),
305
+ name="finite_contract_identity_sha256",
306
+ ),
307
+ affected_path=_require_path(
308
+ local.get("affected_path"), name="affected_path"
309
+ ),
310
+ parent_value=freeze_json(local.get("parent_value")),
311
+ child_value=freeze_json(local.get("child_value")),
312
+ parent_configuration_sha256=_require_sha(
313
+ lineage.get("parent_configuration_sha256"),
314
+ name="parent_configuration_sha256",
315
+ ),
316
+ child_configuration_sha256=_require_sha(
317
+ lineage.get("child_configuration_sha256"),
318
+ name="child_configuration_sha256",
319
+ ),
320
+ action_semantics_compiler_id=_require_token(
321
+ compiler.get("compiler_id"), name="action_semantics_compiler_id"
322
+ ),
323
+ action_semantics_compiler_version=compiler.get( # type: ignore[arg-type]
324
+ "compiler_version"
325
+ ),
326
+ action_semantics_definition_sha256=_require_sha(
327
+ compiler.get("definition_sha256"),
328
+ name="action_semantics_definition_sha256",
329
+ ),
330
+ )
331
+ if transition.to_record() != record:
332
+ raise ValueError("empirical transition record is not canonical")
333
+ return transition
334
+
335
+ def parent_matches(self, configuration: FrozenJsonObject) -> bool:
336
+ """Return whether the authenticated local precondition still holds.
337
+
338
+ This is deliberately weaker than source-context identity. It is
339
+ suitable for deciding whether an action can be described as the same
340
+ local intervention, but it must not by itself authorize transfer of an
341
+ observed optimization benefit to a different configuration.
342
+ """
343
+
344
+ return typed_json_equal(
345
+ frozen_value_at_canonical_path(configuration, self.affected_path),
346
+ self.parent_value,
347
+ )
348
+
349
+ def exact_parent_matches(self, configuration: FrozenJsonObject) -> bool:
350
+ """Return whether the complete current parent is the observed parent."""
351
+
352
+ if type(configuration) is not FrozenJsonObject:
353
+ raise TypeError("configuration must be an exact FrozenJsonObject")
354
+ return typed_json_sha256(configuration) == self.parent_configuration_sha256
355
+
356
+ def child_matches(self, configuration: FrozenJsonObject) -> bool:
357
+ return typed_json_equal(
358
+ frozen_value_at_canonical_path(configuration, self.affected_path),
359
+ self.child_value,
360
+ )
361
+
362
+
363
+ def _transition_from_snapshot(
364
+ snapshot: EmpiricalEvidenceSnapshot,
365
+ ) -> EmpiricalFiniteActionTransition | None:
366
+ snapshot.__post_init__()
367
+ trusted_identity = (
368
+ snapshot.fact_schema_id,
369
+ snapshot.fact_schema_version,
370
+ snapshot.fact_schema_definition_sha256,
371
+ )
372
+ expected_identity = (
373
+ IDENTIFIABLE_REFLECTION_FACT_SCHEMA_ID,
374
+ IDENTIFIABLE_REFLECTION_FACT_SCHEMA_VERSION,
375
+ IDENTIFIABLE_REFLECTION_FACT_SCHEMA_DEFINITION_SHA256,
376
+ )
377
+ if trusted_identity != expected_identity:
378
+ return None
379
+ facts = _exact_object(thaw_json(snapshot.facts), name="empirical facts")
380
+ _require_exact_keys(
381
+ facts,
382
+ {
383
+ "schema_version",
384
+ "design_kind",
385
+ "comparison_anchor",
386
+ "mechanism_identifying_design",
387
+ "permitted_insight_kinds",
388
+ "request_binding",
389
+ "source_scope",
390
+ "occurrence_lineage",
391
+ "finite_action",
392
+ "local_intervention",
393
+ "configuration_lineage",
394
+ "outcome_lineage",
395
+ "observed_metric_effects",
396
+ },
397
+ name="empirical facts",
398
+ )
399
+ if (
400
+ facts["schema_version"] != 1
401
+ or facts["design_kind"] != "direct_single_mutation"
402
+ or facts["comparison_anchor"] != "current_parent"
403
+ or facts["mechanism_identifying_design"] is not False
404
+ or facts["permitted_insight_kinds"] != ["empirical_predictive_rule"]
405
+ ):
406
+ raise ValueError("trusted empirical facts contradict their schema")
407
+ request_binding = _exact_object(
408
+ facts["request_binding"], name="request_binding"
409
+ )
410
+ compiler = _exact_object(
411
+ request_binding.get("action_semantics_compiler"),
412
+ name="action_semantics_compiler",
413
+ )
414
+ _require_exact_keys(
415
+ compiler,
416
+ {"compiler_id", "compiler_version", "definition_sha256"},
417
+ name="action_semantics_compiler",
418
+ )
419
+ compiler_definition = _require_sha(
420
+ compiler["definition_sha256"], name="action_semantics_definition_sha256"
421
+ )
422
+ if snapshot.action_semantics_definition_sha256 != compiler_definition:
423
+ raise ValueError("snapshot and fact action semantics identities differ")
424
+ source = _exact_object(facts["source_scope"], name="source_scope")
425
+ action = _exact_object(facts["finite_action"], name="finite_action")
426
+ local = _exact_object(facts["local_intervention"], name="local_intervention")
427
+ lineage = _exact_object(
428
+ facts["configuration_lineage"], name="configuration_lineage"
429
+ )
430
+ transition = EmpiricalFiniteActionTransition(
431
+ contrast_id=snapshot.contrast_id,
432
+ source_observation_sha256=_require_sha(
433
+ source.get("source_observation_sha256"),
434
+ name="source_observation_sha256",
435
+ ),
436
+ source_evidence_id=_require_sha(
437
+ source.get("source_evidence_id"), name="source_evidence_id"
438
+ ),
439
+ event_index=source.get("event_index"), # type: ignore[arg-type]
440
+ workload_instance_sha256=_require_sha(
441
+ source.get("workload_instance_sha256"),
442
+ name="workload_instance_sha256",
443
+ ),
444
+ evaluator_contract_sha256=_require_sha(
445
+ source.get("evaluator_contract_sha256"),
446
+ name="evaluator_contract_sha256",
447
+ ),
448
+ campaign_sha256=_require_sha(
449
+ source.get("campaign_sha256"), name="campaign_sha256"
450
+ ),
451
+ option_id=_require_token(
452
+ action.get("option_id"), name="option_id", option_id=True
453
+ ),
454
+ option_identity_sha256=_require_sha(
455
+ action.get("option_identity_sha256"), name="option_identity_sha256"
456
+ ),
457
+ option_family=_require_token(
458
+ action.get("option_family"), name="option_family"
459
+ ),
460
+ finite_contract_identity_sha256=_require_sha(
461
+ action.get("finite_contract_identity_sha256"),
462
+ name="finite_contract_identity_sha256",
463
+ ),
464
+ affected_path=_require_path(
465
+ local.get("affected_path"), name="affected_path"
466
+ ),
467
+ parent_value=freeze_json(local.get("parent_value")),
468
+ child_value=freeze_json(local.get("child_value")),
469
+ parent_configuration_sha256=_require_sha(
470
+ lineage.get("parent_configuration_sha256"),
471
+ name="parent_configuration_sha256",
472
+ ),
473
+ child_configuration_sha256=_require_sha(
474
+ lineage.get("child_configuration_sha256"),
475
+ name="child_configuration_sha256",
476
+ ),
477
+ action_semantics_compiler_id=_require_token(
478
+ compiler.get("compiler_id"), name="action_semantics_compiler_id"
479
+ ),
480
+ action_semantics_compiler_version=compiler.get( # type: ignore[arg-type]
481
+ "compiler_version"
482
+ ),
483
+ action_semantics_definition_sha256=compiler_definition,
484
+ )
485
+ return transition
486
+
487
+
488
+ def empirical_finite_action_transitions(
489
+ evidence_lineage: InsightEvidenceLineage,
490
+ ) -> tuple[EmpiricalFiniteActionTransition, ...]:
491
+ """Project only recognized direct evidence; foreign schemas stay legacy."""
492
+
493
+ if type(evidence_lineage) is not InsightEvidenceLineage:
494
+ raise TypeError("evidence_lineage must be exact")
495
+ evidence_lineage.__post_init__()
496
+ projected = tuple(
497
+ transition
498
+ for snapshot in evidence_lineage.empirical_evidence
499
+ if (transition := _transition_from_snapshot(snapshot)) is not None
500
+ )
501
+ canonical = tuple(sorted(projected, key=lambda value: value.transition_sha256))
502
+ if len({value.transition_sha256 for value in canonical}) != len(canonical):
503
+ raise ValueError("empirical lineage repeats a finite action transition")
504
+ return canonical
505
+
506
+
507
+ def empirical_finite_action_transitions_for_insight(
508
+ draft: InsightDraft,
509
+ evidence_lineage: InsightEvidenceLineage,
510
+ ) -> tuple[EmpiricalFiniteActionTransition, ...]:
511
+ """Join trusted transitions to the model's closed structured declaration."""
512
+
513
+ if type(draft) is not InsightDraft:
514
+ raise TypeError("draft must be exact")
515
+ draft.__post_init__()
516
+ transitions = empirical_finite_action_transitions(evidence_lineage)
517
+ for transition in transitions:
518
+ if transition.contrast_id not in draft.evidence_contrast_ids:
519
+ raise ValueError("empirical transition is not cited by the insight")
520
+ if transition.affected_path not in draft.affected_paths:
521
+ raise ValueError("empirical transition path differs from the insight")
522
+ if transition.option_family not in draft.recommended_option_families:
523
+ raise ValueError("empirical transition family differs from the insight")
524
+ if (
525
+ draft.recommended_option_ids
526
+ and transition.option_id not in draft.recommended_option_ids
527
+ ):
528
+ raise ValueError("empirical transition action differs from the insight")
529
+ return transitions
530
+
531
+
532
+ __all__ = [
533
+ "EmpiricalFiniteActionTransition",
534
+ "empirical_finite_action_transitions",
535
+ "empirical_finite_action_transitions_for_insight",
536
+ "frozen_value_at_canonical_path",
537
+ ]