omegaprompt 2.1.2__tar.gz → 2.2.1__tar.gz

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 (273) hide show
  1. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/CHANGELOG.md +28 -0
  2. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/PKG-INFO +22 -15
  3. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/README.md +21 -14
  4. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/README_KR.md +15 -8
  5. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/_demo_output.txt +1 -1
  6. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/ci/ship-gate.yml +2 -2
  7. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/reference/golden_manifest.json +5 -5
  8. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/reference/reference_artifact.json +1 -1
  9. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/reference/reference_diff_regression.json +1 -1
  10. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/reference/reference_fail_hard_gates.json +1 -1
  11. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/reference/reference_fail_kc4_gate.json +1 -1
  12. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/reference/reference_provider_degradation.json +1 -1
  13. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/pyproject.toml +1 -1
  14. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/__init__.py +1 -1
  15. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/commands/calibrate.py +3 -0
  16. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/core/walkforward.py +12 -1
  17. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/mcp/server.py +6 -0
  18. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/preflight/adaptation.py +3 -0
  19. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/preflight/contracts.py +8 -1
  20. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/runtime.py +25 -0
  21. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/targets/prompt_target.py +136 -20
  22. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/.gitignore +0 -0
  23. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/AGENT_TRIGGERS.md +0 -0
  24. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/AUTHORS.md +0 -0
  25. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/IP_DEFENSE_CHECKLIST.md +0 -0
  26. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/LICENSE +0 -0
  27. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/NOTICE +0 -0
  28. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/PRE_EXISTING_IP.md +0 -0
  29. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/README.md +0 -0
  30. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/README.md +0 -0
  31. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/_mainline_outputs/V0_baseline.txt +0 -0
  32. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/_mainline_outputs/V1_role_terse.txt +0 -0
  33. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/_mainline_outputs/V2_xml_format.txt +0 -0
  34. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/_mainline_outputs/V3prime_rules_format.txt +0 -0
  35. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/_mainline_outputs/V5_no_issue_guard.txt +0 -0
  36. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/_subagent_outputs/V0_baseline.txt +0 -0
  37. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/_subagent_outputs/V1_role_terse.txt +0 -0
  38. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/_subagent_outputs/V2_xml_format.txt +0 -0
  39. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/_subagent_outputs/V3prime_rules_format.txt +0 -0
  40. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/_subagent_outputs/V5_no_issue_guard.txt +0 -0
  41. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/_subagent_prompts/V0_baseline.txt +0 -0
  42. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/_subagent_prompts/V1_role_terse.txt +0 -0
  43. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/_subagent_prompts/V2_xml_format.txt +0 -0
  44. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/_subagent_prompts/V3prime_rules_format.txt +0 -0
  45. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/_subagent_prompts/V5_no_issue_guard.txt +0 -0
  46. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/backtest.log +0 -0
  47. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/backtest.py +0 -0
  48. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/backtest_gemma4.log +0 -0
  49. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/backtest_results.json +0 -0
  50. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/backtest_results_gemma4.json +0 -0
  51. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/backtest_results_v2.json +0 -0
  52. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/backtest_results_v2_gemma4.json +0 -0
  53. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/backtest_results_v3.json +0 -0
  54. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/backtest_results_v3_gemma4.json +0 -0
  55. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/backtest_v2.log +0 -0
  56. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/backtest_v2_gemma4.log +0 -0
  57. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/backtest_v3.log +0 -0
  58. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/backtest_v3_gemma4.log +0 -0
  59. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/claude_full_validation_results.json +0 -0
  60. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/claude_validation_outputs.json +0 -0
  61. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/mainline_results.json +0 -0
  62. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/production_variant.json +0 -0
  63. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/quality_review.json +0 -0
  64. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/quality_review_claude_full.json +0 -0
  65. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/quality_review_mainline.json +0 -0
  66. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/quality_review_v2.json +0 -0
  67. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/quality_review_v3.json +0 -0
  68. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/rubric.json +0 -0
  69. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/score_and_write.py +0 -0
  70. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/test.jsonl +0 -0
  71. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/train.jsonl +0 -0
  72. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/validation_archive.json +0 -0
  73. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/variant_0_texts.txt +0 -0
  74. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/variant_1_texts.txt +0 -0
  75. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/variant_2_texts.txt +0 -0
  76. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/variant_3_texts.txt +0 -0
  77. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/variant_4_texts.txt +0 -0
  78. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/variants.json +0 -0
  79. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/variants_v2.json +0 -0
  80. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/variants_v3.json +0 -0
  81. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_writing/README.md +0 -0
  82. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_writing/_subagent_outputs/V0_baseline.txt +0 -0
  83. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_writing/_subagent_outputs/V1_role_terse.txt +0 -0
  84. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_writing/_subagent_outputs/V2_format.txt +0 -0
  85. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_writing/_subagent_outputs/V3prime_rules.txt +0 -0
  86. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_writing/_subagent_outputs/V4_guard.txt +0 -0
  87. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_writing/_subagent_prompts/V0_baseline.txt +0 -0
  88. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_writing/_subagent_prompts/V1_role_terse.txt +0 -0
  89. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_writing/_subagent_prompts/V2_format.txt +0 -0
  90. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_writing/_subagent_prompts/V3prime_rules.txt +0 -0
  91. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_writing/_subagent_prompts/V4_guard.txt +0 -0
  92. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_writing/claude_results.json +0 -0
  93. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_writing/quality_review.json +0 -0
  94. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_writing/rubric.json +0 -0
  95. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_writing/train.jsonl +0 -0
  96. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_writing/variants.json +0 -0
  97. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/commit_message/README.md +0 -0
  98. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/commit_message/_subagent_outputs/V0_baseline.txt +0 -0
  99. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/commit_message/_subagent_outputs/V1_role_terse.txt +0 -0
  100. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/commit_message/_subagent_outputs/V2_format.txt +0 -0
  101. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/commit_message/_subagent_outputs/V3prime_rules.txt +0 -0
  102. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/commit_message/_subagent_outputs/V4_guard.txt +0 -0
  103. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/commit_message/_subagent_prompts/V0_baseline.txt +0 -0
  104. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/commit_message/_subagent_prompts/V1_role_terse.txt +0 -0
  105. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/commit_message/_subagent_prompts/V2_format.txt +0 -0
  106. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/commit_message/_subagent_prompts/V3prime_rules.txt +0 -0
  107. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/commit_message/_subagent_prompts/V4_guard.txt +0 -0
  108. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/commit_message/claude_results.json +0 -0
  109. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/commit_message/quality_review.json +0 -0
  110. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/commit_message/rubric.json +0 -0
  111. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/commit_message/train.jsonl +0 -0
  112. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/commit_message/variants.json +0 -0
  113. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/debugging/README.md +0 -0
  114. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/debugging/_subagent_outputs/V0_baseline.txt +0 -0
  115. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/debugging/_subagent_outputs/V1_role_terse.txt +0 -0
  116. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/debugging/_subagent_outputs/V2_format.txt +0 -0
  117. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/debugging/_subagent_outputs/V3prime_rules.txt +0 -0
  118. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/debugging/_subagent_outputs/V4_guard.txt +0 -0
  119. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/debugging/_subagent_prompts/V0_baseline.txt +0 -0
  120. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/debugging/_subagent_prompts/V1_role_terse.txt +0 -0
  121. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/debugging/_subagent_prompts/V2_format.txt +0 -0
  122. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/debugging/_subagent_prompts/V3prime_rules.txt +0 -0
  123. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/debugging/_subagent_prompts/V4_guard.txt +0 -0
  124. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/debugging/claude_results.json +0 -0
  125. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/debugging/quality_review.json +0 -0
  126. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/debugging/rubric.json +0 -0
  127. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/debugging/train.jsonl +0 -0
  128. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/debugging/variants.json +0 -0
  129. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/demo_calibration.py +0 -0
  130. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/demo_replay.py +0 -0
  131. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/explanation/README.md +0 -0
  132. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/explanation/_subagent_outputs/V0_baseline.txt +0 -0
  133. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/explanation/_subagent_outputs/V1_role_terse.txt +0 -0
  134. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/explanation/_subagent_outputs/V2_format.txt +0 -0
  135. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/explanation/_subagent_outputs/V3prime_rules.txt +0 -0
  136. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/explanation/_subagent_outputs/V4_guard.txt +0 -0
  137. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/explanation/_subagent_prompts/V0_baseline.txt +0 -0
  138. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/explanation/_subagent_prompts/V1_role_terse.txt +0 -0
  139. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/explanation/_subagent_prompts/V2_format.txt +0 -0
  140. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/explanation/_subagent_prompts/V3prime_rules.txt +0 -0
  141. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/explanation/_subagent_prompts/V4_guard.txt +0 -0
  142. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/explanation/claude_results.json +0 -0
  143. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/explanation/quality_review.json +0 -0
  144. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/explanation/rubric.json +0 -0
  145. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/explanation/train.jsonl +0 -0
  146. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/explanation/variants.json +0 -0
  147. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/refactoring/README.md +0 -0
  148. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/refactoring/_subagent_outputs/V0_baseline.txt +0 -0
  149. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/refactoring/_subagent_outputs/V1_role_terse.txt +0 -0
  150. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/refactoring/_subagent_outputs/V2_format.txt +0 -0
  151. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/refactoring/_subagent_outputs/V3prime_rules.txt +0 -0
  152. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/refactoring/_subagent_outputs/V4_guard.txt +0 -0
  153. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/refactoring/_subagent_prompts/V0_baseline.txt +0 -0
  154. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/refactoring/_subagent_prompts/V1_role_terse.txt +0 -0
  155. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/refactoring/_subagent_prompts/V2_format.txt +0 -0
  156. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/refactoring/_subagent_prompts/V3prime_rules.txt +0 -0
  157. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/refactoring/_subagent_prompts/V4_guard.txt +0 -0
  158. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/refactoring/claude_results.json +0 -0
  159. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/refactoring/quality_review.json +0 -0
  160. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/refactoring/rubric.json +0 -0
  161. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/refactoring/train.jsonl +0 -0
  162. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/refactoring/variants.json +0 -0
  163. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/reference/README.md +0 -0
  164. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/reference/reference_adaptation_plan.json +0 -0
  165. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/reference/reference_preflight_report.json +0 -0
  166. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/reference/reproduce_preflight_demo.py +0 -0
  167. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/reference/reproduce_reference_artifact.py +0 -0
  168. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/rubric_example.json +0 -0
  169. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/sample_dataset.jsonl +0 -0
  170. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/summarization/README.md +0 -0
  171. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/summarization/_subagent_outputs/V0_baseline.txt +0 -0
  172. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/summarization/_subagent_outputs/V1_role_terse.txt +0 -0
  173. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/summarization/_subagent_outputs/V2_format.txt +0 -0
  174. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/summarization/_subagent_outputs/V3prime_rules.txt +0 -0
  175. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/summarization/_subagent_outputs/V4_guard.txt +0 -0
  176. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/summarization/_subagent_prompts/V0_baseline.txt +0 -0
  177. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/summarization/_subagent_prompts/V1_role_terse.txt +0 -0
  178. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/summarization/_subagent_prompts/V2_format.txt +0 -0
  179. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/summarization/_subagent_prompts/V3prime_rules.txt +0 -0
  180. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/summarization/_subagent_prompts/V4_guard.txt +0 -0
  181. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/summarization/claude_results.json +0 -0
  182. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/summarization/quality_review.json +0 -0
  183. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/summarization/rubric.json +0 -0
  184. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/summarization/train.jsonl +0 -0
  185. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/summarization/variants.json +0 -0
  186. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/test_writing/README.md +0 -0
  187. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/test_writing/_subagent_outputs/V0_baseline.txt +0 -0
  188. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/test_writing/_subagent_outputs/V1_role_terse.txt +0 -0
  189. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/test_writing/_subagent_outputs/V2_format.txt +0 -0
  190. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/test_writing/_subagent_outputs/V3prime_rules.txt +0 -0
  191. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/test_writing/_subagent_outputs/V4_guard.txt +0 -0
  192. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/test_writing/_subagent_prompts/V0_baseline.txt +0 -0
  193. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/test_writing/_subagent_prompts/V1_role_terse.txt +0 -0
  194. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/test_writing/_subagent_prompts/V2_format.txt +0 -0
  195. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/test_writing/_subagent_prompts/V3prime_rules.txt +0 -0
  196. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/test_writing/_subagent_prompts/V4_guard.txt +0 -0
  197. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/test_writing/claude_results.json +0 -0
  198. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/test_writing/quality_review.json +0 -0
  199. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/test_writing/rubric.json +0 -0
  200. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/test_writing/train.jsonl +0 -0
  201. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/test_writing/variants.json +0 -0
  202. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/translation/README.md +0 -0
  203. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/translation/_subagent_outputs/V0_baseline.txt +0 -0
  204. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/translation/_subagent_outputs/V1_role_terse.txt +0 -0
  205. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/translation/_subagent_outputs/V2_format.txt +0 -0
  206. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/translation/_subagent_outputs/V3prime_rules.txt +0 -0
  207. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/translation/_subagent_outputs/V4_guard.txt +0 -0
  208. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/translation/_subagent_prompts/V0_baseline.txt +0 -0
  209. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/translation/_subagent_prompts/V1_role_terse.txt +0 -0
  210. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/translation/_subagent_prompts/V2_format.txt +0 -0
  211. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/translation/_subagent_prompts/V3prime_rules.txt +0 -0
  212. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/translation/_subagent_prompts/V4_guard.txt +0 -0
  213. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/translation/claude_results.json +0 -0
  214. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/translation/quality_review.json +0 -0
  215. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/translation/rubric.json +0 -0
  216. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/translation/train.jsonl +0 -0
  217. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/translation/variants.json +0 -0
  218. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/variants_example.json +0 -0
  219. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegacal/__init__.py +0 -0
  220. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegacal/__main__.py +0 -0
  221. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegacal/cli.py +0 -0
  222. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/__main__.py +0 -0
  223. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/api.py +0 -0
  224. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/cli.py +0 -0
  225. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/commands/__init__.py +0 -0
  226. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/commands/check_artifact.py +0 -0
  227. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/commands/diff.py +0 -0
  228. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/commands/gate.py +0 -0
  229. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/commands/report.py +0 -0
  230. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/core/__init__.py +0 -0
  231. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/core/artifact.py +0 -0
  232. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/core/artifact_integrity.py +0 -0
  233. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/core/fitness.py +0 -0
  234. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/core/gate.py +0 -0
  235. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/core/overfit.py +0 -0
  236. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/core/profiles.py +0 -0
  237. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/core/risk.py +0 -0
  238. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/core/sensitivity.py +0 -0
  239. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/dataset.py +0 -0
  240. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/domain/__init__.py +0 -0
  241. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/domain/dataset.py +0 -0
  242. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/domain/enums.py +0 -0
  243. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/domain/judge.py +0 -0
  244. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/domain/params.py +0 -0
  245. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/domain/profiles.py +0 -0
  246. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/domain/result.py +0 -0
  247. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/fitness.py +0 -0
  248. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/judge.py +0 -0
  249. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/judges/__init__.py +0 -0
  250. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/judges/base.py +0 -0
  251. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/judges/ensemble_judge.py +0 -0
  252. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/judges/llm_judge.py +0 -0
  253. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/judges/rule_judge.py +0 -0
  254. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/mcp/__init__.py +0 -0
  255. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/mcp/__main__.py +0 -0
  256. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/preflight/__init__.py +0 -0
  257. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/prompts.py +0 -0
  258. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/providers/__init__.py +0 -0
  259. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/providers/anthropic_provider.py +0 -0
  260. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/providers/base.py +0 -0
  261. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/providers/factory.py +0 -0
  262. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/providers/gemini_provider.py +0 -0
  263. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/providers/local_provider.py +0 -0
  264. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/providers/ollama_provider.py +0 -0
  265. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/providers/openai_provider.py +0 -0
  266. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/reporting/__init__.py +0 -0
  267. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/reporting/html.py +0 -0
  268. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/reporting/markdown.py +0 -0
  269. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/reporting/summary.py +0 -0
  270. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/schema.py +0 -0
  271. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/target.py +0 -0
  272. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/targets/__init__.py +0 -0
  273. {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/targets/base.py +0 -0
@@ -1,5 +1,33 @@
1
1
  # Changelog
2
2
 
3
+ ## [2.2.1] - 2026-10-28
4
+
5
+ - Fix neutral reasoning and output-budget parameters to use indices into the
6
+ configured axis lists. Prefer STANDARD/MEDIUM when allowed, otherwise the first
7
+ allowed value; expose the same neutral through parameter specifications.
8
+ - Correct the 2.2.0 default baseline from unintended DEEP to STANDARD. Valid
9
+ singleton subsets no longer fail bounds checks, and reordered lists preserve
10
+ the preferred semantic value. Historical artifacts are not rewritten; fresh
11
+ runs can have different baseline scores, requests and calibration outcomes.
12
+ - Verify actual offline ProviderRequests and the runtime, CLI and MCP subset
13
+ calibration paths, retaining manual-review HOLD escalation.
14
+ - Describe `PerformanceMeasurement.noise_floor` as absolute fitness standard
15
+ deviation, and describe the composite Action as checking declared artifact/gap/
16
+ hard-gate criteria without asserting generalization.
17
+
18
+ The direct comparison baseline for this patch is public **2.2.0**, not 2.1.2.
19
+ No gate threshold, artifact schema or existing reference fixture was relaxed.
20
+ See [reproduction and migration](docs/release/2.2.1.md).
21
+
22
+ ## [2.2.0] - 2026-10-28
23
+
24
+ - Invalidate evaluation caches when public context changes, provide explicit fresh evaluation and cache invalidation, and keep boundary-clamp verdicts distinct.
25
+ - Bound submitted item results to max_workers and stream input-order aggregation. Account attempted calls and returned usage even on failure; never cache incomplete evaluations.
26
+ - Reject nonfinite gate inputs and contradictory disjoint IDs; calibrate reports input errors with exit 2 before provider calls for split overlap.
27
+ - Add explicit PreflightReport measurement_status/probe_accounting. Failed or insufficient measurements require manual review; old reports retain unknown state.
28
+ - Preserve CLI aliases, artifact schema 2.0, and default auto mode. classify_traps gains optional paired/disjoint inputs for mini-antemortem-cli 0.11.0+.
29
+ - Retain advisory-only adaptation controls as advisory. See docs/release/2.2.0.md for measured scope and migration.
30
+
3
31
  ## [2.1.2] - 2026-10-08
4
32
 
5
33
  Bound FastMCP to SDK >=1,<2 to fix clean MCP installs. Pin the Action default to this package version. Add standalone artifact inspection and explicit preflight data handoff; remove unsupported framework comparisons.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: omegaprompt
3
- Version: 2.1.2
3
+ Version: 2.2.1
4
4
  Summary: Provider-neutral prompt calibration engine with sensitivity-ranked meta-axes, hard-gate x soft-score fitness, walk-forward ship gates, guarded/expedition profiles, and explicit capability/risk reporting across Anthropic, OpenAI, Gemini, and local OpenAI-compatible backends. Optional sub-tools (mini-omega-lock, mini-antemortem-cli) distribute separately and plug in via the omegaprompt.preflight interface.
5
5
  Project-URL: Homepage, https://github.com/hibou04-ops/omegaprompt
6
6
  Project-URL: Repository, https://github.com/hibou04-ops/omegaprompt
@@ -246,7 +246,7 @@ Description-Content-Type: text/markdown
246
246
 
247
247
  # omegaprompt
248
248
 
249
- **The overfit gate for your prompts.** Your prompt aced your eval set — that's exactly why you can't trust it yet. `omegaprompt` re-tests the winning prompt on examples it never tuned on, and **fails your CI build** if it doesn't hold up.
249
+ **Provider-neutral prompt calibration with explicit gates.** Search configurations on training data, score the winner on a separately supplied test slice, and inspect declared gap, hard-gate and profile checks. Paired replay measures repeat consistency; independent holdout needs cases excluded from selection.
250
250
 
251
251
  [![CI](https://github.com/hibou04-ops/omegaprompt/actions/workflows/ci.yml/badge.svg)](https://github.com/hibou04-ops/omegaprompt/actions/workflows/ci.yml)
252
252
  [![License: Apache 2.0](https://img.shields.io/pypi/l/omegaprompt?color=blue&label=license&cacheSeconds=3600)](LICENSE)
@@ -257,6 +257,12 @@ Description-Content-Type: text/markdown
257
257
  [![MCP](https://img.shields.io/badge/MCP-server-blueviolet.svg)](#103-mcp-server-claude-code-cursor)
258
258
  [![Parent framework](https://img.shields.io/badge/framework-omega--lock-blueviolet.svg)](https://github.com/hibou04-ops/omega-lock)
259
259
 
260
+ > **2.2.1 (2026-10-28): neutral parameters respect configured subsets.** Select STANDARD/MEDIUM by their positions in the allowed lists, falling back to the first allowed value. Public 2.2.0 unintentionally used DEEP for the default baseline and rejected valid singleton lists. Fresh baseline scores, costs and selections can change; historical artifacts are preserved. [Reproduction and migration](docs/release/2.2.1.md).
261
+
262
+ Raw optimizer integers are indices into the configured `MetaAxisSpace` lists, not the global `REASONING_ORDINALS`/`OUTPUT_BUDGET_ORDINALS` helper mappings.
263
+
264
+ > **2.2.0 (2026-10-28): evaluation integrity and bounded work.** Context changes invalidate memoized observations. `PromptTarget.evaluate(..., use_cache=False)` performs fresh calls; cache replay adds no independent observation. Parallel evaluation retains at most `max_workers` submitted results and preserves input order. Failed target/judge attempts and returned usage remain in target accounting; no partial success is cached. Explicit disjoint mode rejects overlapping IDs. [Evidence and migration](docs/release/2.2.0.md).
265
+
260
266
  Docs: **[Easy start](https://github.com/hibou04-ops/omegaprompt/blob/main/EASY_README.md)** · [Full reference](https://github.com/hibou04-ops/omegaprompt/blob/main/README.md) · [한국어](https://github.com/hibou04-ops/omegaprompt/blob/main/README_KR.md) · [쉬운 한국어](https://github.com/hibou04-ops/omegaprompt/blob/main/EASY_README_KR.md) · [Examples gallery](examples/) · [Claim ledger (trust evidence)](docs/claims/README_CLAIMS.generated.md)
261
267
 
262
268
  Keywords: **prompt overfitting · prompt regression testing · LLM eval CI · prompt evaluation · prompt A/B test in CI · held-out validation for prompts · CI ship gate for prompts**
@@ -266,7 +272,6 @@ pip install omegaprompt # core
266
272
  pip install "omegaprompt[mcp]" # + MCP server (Claude Code / Cursor)
267
273
  ```
268
274
 
269
- > **v2.1.2 (2026-10-08)** — MCP installs retain SDK 1.x compatibility; the Action installs this exact package version by default. Standalone examples and docking instructions clarify synthetic versus live evidence. CLI/MCP names, schema 2.0 and the eight MCP tools are unchanged.
270
275
 
271
276
  <!-- public-claim-ledger:start -->
272
277
  > Claim evidence source: [docs/claims/public_claim_ledger.json](docs/claims/public_claim_ledger.json), rendered by `python tools/generate_readme_claims.py`.
@@ -285,9 +290,9 @@ Calibrate prompt configurations through omega-lock and inspect CalibrationArtifa
285
290
  Requires Python 3.11+. Installation needs internet.
286
291
 
287
292
  ```bash
288
- python -m pip install omegaprompt==2.1.2
293
+ python -m pip install omegaprompt==2.2.1
289
294
  omegaprompt --help
290
- python -c "from urllib.request import urlretrieve; urlretrieve('https://raw.githubusercontent.com/hibou04-ops/omegaprompt/v2.1.2/examples/reference/reference_artifact.json', 'artifact.json')"
295
+ python -c "from urllib.request import urlretrieve; urlretrieve('https://raw.githubusercontent.com/hibou04-ops/omegaprompt/v2.2.1/examples/reference/reference_artifact.json', 'artifact.json')"
291
296
  omegaprompt check-artifact artifact.json
292
297
  omegaprompt report artifact.json --format json
293
298
  ```
@@ -298,7 +303,7 @@ omega-lock>=0.3.0,<0.4.0 is required and installed automatically. Both mini pack
298
303
 
299
304
  [Docking contracts and runnable data handoff](https://github.com/hibou04-ops/omega-lock/blob/main/DOCKING.md) · [Full guide](README.md).
300
305
 
301
- MCP: install the distribution with `[mcp]` and use its existing server executable. FastMCP support is bounded to MCP SDK `>=1.0.0,<2.0.0`; the tool names and schemas are unchanged.
306
+ MCP: install the distribution with `[mcp]` and use its existing server executable. FastMCP support is bounded to MCP SDK `>=1.0.0,<2.0.0`; tool names are retained; classify_traps gains optional validation inputs.
302
307
 
303
308
 
304
309
  ## Your prompt is overfit to your eval set — and you don't know it
@@ -309,7 +314,7 @@ A week later, production quality is *worse* than before. Why?
309
314
 
310
315
  Because 4.8 was the score on **the exact examples you tuned against**. You didn't measure a prompt — you memorized an answer key. That's overfitting, and your eval tool reported PASS because that's all it was asked to do. ML solved this in the 1990s with a train/test split. Most prompt workflows still ship without one.
311
316
 
312
- `omegaprompt` is the 60-second check that catches this **before** you ship:
317
+ `omegaprompt` is a configurable workflow that catches this **before** you ship:
313
318
 
314
319
  1. It tunes your prompt on a **train** slice (across system prompt, few-shot, reasoning effort, output budget, response-schema mode, tool policy).
315
320
  2. It **re-tests the winner on a held-out slice it never tuned on**.
@@ -317,7 +322,7 @@ Because 4.8 was the score on **the exact examples you tuned against**. You didn'
317
322
 
318
323
  Then one line in CI makes a "small prompt tweak" fail the build if it silently degrades quality.
319
324
 
320
- > **Your eval says PASS. omegaprompt says it won't generalize.** That sentence is the whole product.
325
+ > A gate failure identifies a failed declared check on supplied data; it does not establish future production behavior.
321
326
 
322
327
  ---
323
328
 
@@ -354,7 +359,7 @@ generalization_gap: 0.00% # train vs held-out — small gap = it transferre
354
359
  kc4_status: MISSING_PER_ITEM_SCORES
355
360
  ```
356
361
 
357
- **Honest read of this demo:** the bundled demo dataset has *disjoint* train/held-out items (no shared item ids), so the per-item transfer gate cannot fire — it reports `MISSING_PER_ITEM_SCORES` and the gate degenerates to the gap check alone (which here is 0.00%). The per-item transfer gate is what *actually* fires on a real **paired** dataset (train and held-out sharing item ids). So don't read this demo's clean numbers as "the transfer gate passed" — read it as "the gap check passed and the transfer gate had nothing to score." See *How it works*.
362
+ **Demo scope:** these deterministic fixtures exercise artifact and gap-gate behavior. Missing per-item scores are unmeasured correlation. A paired replay measures repeat consistency on the same cases; an independent holdout needs cases excluded from selection. Neither proves production generalization.
358
363
 
359
364
  Turn that same artifact into a one-command CI verdict:
360
365
 
@@ -405,7 +410,7 @@ A prompt change is a code change. Gate it like one. The dedicated **`omegaprompt
405
410
 
406
411
  ```yaml
407
412
  # .github/workflows/prompt-audit.yml
408
- - uses: hibou04-ops/omegaprompt@v2.1.2
413
+ - uses: hibou04-ops/omegaprompt@v2.2.1
409
414
  with:
410
415
  artifact: artifact.json # a CalibrationArtifact you produced in a prior step
411
416
  format: json # machine-readable gate summary
@@ -476,7 +481,7 @@ You give it a **dataset + a judging rubric + candidate prompts**. It searches st
476
481
 
477
482
  Then it re-tests the winning configuration on the **held-out** slice and applies two pre-declared gates:
478
483
 
479
- - **Held-out transfer gate** (`--min-kc4`): per-item held-out scores must still track the target. If train looks great but the held-out items stop correlating, the prompt overfit — the run is flagged `FAIL_KC4_GATE`. *(This needs train and held-out to share item ids — a "paired" replay. On an ordinary disjoint split it degrades to the gap check below, which still catches overfit — that's exactly what the offline demo above shows.)*
484
+ - **Paired consistency gate** (`--min-kc4`): Pearson correlation on the same cases must meet the declared threshold. Failure means that consistency check failed, not proof of overfitting. An independent disjoint holdout has no paired correlation and uses the gap and hard-gate checks.
480
485
  - **Max gap gate** (`--max-gap`): the train↔held-out fitness gap must stay under your declared ceiling.
481
486
 
482
487
  Both thresholds are set **before** scoring. There's no lowering the bar after you see results.
@@ -816,7 +821,7 @@ Every combination in the unlocked subspace is evaluated. Each evaluation issues
816
821
 
817
822
  ### 5.5 Held-out replay
818
823
 
819
- The training-best parameters are replayed on the held-out test slice. The replay uses the *same* `PromptTarget` adapter with a different dataset; there is no leakage possible because the test slice was never seen by the searcher.
824
+ The training-best parameters are evaluated using a separate PromptTarget instance for the supplied test dataset. Independence depends on actual content and prior selection history. A paired replay deliberately reuses the same cases and is not an independent holdout.
820
825
 
821
826
  ### 5.6 Held-out transfer gate (per-item correlation)
822
827
 
@@ -824,9 +829,9 @@ The Pearson correlation between train per-item scores and test per-item scores (
824
829
 
825
830
  **Transfer-gate semantics by validation_mode (v1.5+).** The transfer gate is a per-item correlation, so it is only meaningful when train and test slices share the *same* item ids — a "paired replay". On an ordinary disjoint train/test split the slices have no shared ids and the per-item correlation is structurally unmeasurable; the gate degenerates to the gap-only check. To make this explicit, `CalibrateTuning.validation_mode` accepts:
826
831
 
827
- - `"auto"` (default, backward-compat): compute the per-item correlation only when slices share ≥3 ids; otherwise skip silently.
832
+ - `"auto"` (default, backward-compat): compute the per-item correlation only when slices share ≥3 ids; otherwise record a noncomputed status.
828
833
  - `"paired"`: caller asserts shared ids by design. Raises `ValueError` if overlap < 3 — a paired run with no overlap is a setup bug, not a free pass.
829
- - `"disjoint"`: caller asserts no shared ids by design. The per-item correlation is never computed; the gate is gap-only.
834
+ - `"disjoint"`: caller asserts no shared ids by design. Overlapping IDs raise an input error. For disjoint IDs the gate is gap-only; unmeasured correlation is not a correlation pass.
830
835
 
831
836
  If you run a normal held-out split (disjoint ids), set `validation_mode="disjoint"` to make the artifact's lack of `kc4_correlation` self-documenting. Use `"paired"` when you score two prompts on the *same* items and want the per-item correlation as a stability signal.
832
837
 
@@ -1403,7 +1408,7 @@ The default test suite runs with `pytest -q` and uses mocked provider clients ra
1403
1408
  | `judges/` | `RuleJudge` (no_refusal / non_empty / json_object / regex / duplicate-check rejection / missing-check raise); `LLMJudge` (strict-schema dispatch, payload composition, non-`JudgeResult` response raise, strict-mode ship-grade judge refusal); `EnsembleJudge` (rule-first short-circuit, LLM escalation on rule-pass, merged gate_results, non-`RuleJudge` rejection). |
1404
1409
  | `targets/` | `PromptTarget` end-to-end with mocked provider + judge; meta-axis resolution and clamping for out-of-range inputs; usage accumulation across evaluations; `evaluation_history` retention; latency measurement; degraded-capability propagation. |
1405
1410
  | `commands/` | CLI help lists `calibrate` / `report` / `diff` / `check-artifact`; `--version` shows `omegaprompt`; `report` renders schema-v2.0 artifacts; `diff` detects regressions on fitness, cost ratios, latency ratios, boundary-crossing flips; `check-artifact` performs zero-network integrity checks. |
1406
- | `preflight/` | **Plugin interface only** — no probe or classifier code inside `omegaprompt`. `contracts`: severity ordering, status enum, `PreflightReport.worst_severity` / `any_real_or_new`, Pydantic `extra="forbid"` enforcement; bounds on `JudgeQualityMeasurement.consistency` (0..1), `EndpointMeasurement.schema_reliability` (0..1). `adaptation`: noise-adaptive `min_kc4` across four thresholds; consistency-driven `rescore_count`; schema-fallback trigger; wall-time-driven `unlock_k` reduction; small-sample gap widening; variant-skip axis marking; `apply_adaptation_plan` invariants (never weakens `min_kc4`, never widens `max_gap`, never raises `unlock_k`). Sub-tool probe + classifier implementations (with their own test suites) live in the `mini-omega-lock` and `mini-antemortem-cli` repositories. |
1411
+ | `preflight/` | **Plugin interface only** — no probe or classifier code inside `omegaprompt`. `contracts`: severity ordering, status enum, `PreflightReport.worst_severity` / `any_real_or_new`, Pydantic `extra="forbid"` enforcement; bounds on `JudgeQualityMeasurement.consistency` (0..1), `EndpointMeasurement.schema_reliability` (0..1). `adaptation`: noise-adaptive `min_kc4` across four thresholds; consistency-driven `rescore_count`; schema-fallback trigger; wall-time-driven `unlock_k` reduction; small-sample manual-review escalation; variant-skip axis marking; `apply_adaptation_plan` invariants (never weakens `min_kc4`, never widens `max_gap`, never raises `unlock_k`). Sub-tool probe + classifier implementations (with their own test suites) live in the `mini-omega-lock` and `mini-antemortem-cli` repositories. |
1407
1412
  | `test_calibrate_integration.py` | **Drives the real `omega_lock.run_p1`** with a deterministic in-memory `CalibrableTarget` (no mocks on the search engine). Asserts the artifact's `calibrated_params`, `neutral_baseline_params`, `walk_forward`, and `sensitivity_ranking` match `P1Result`'s actual shape — the regression that this test catches is drift between the adapter layer and the search engine that per-module unit tests cannot reach. |
1408
1413
 
1409
1414
  Run the default no-network suite with `uv run pytest -q -m "not live"` (or `python -m pytest -q -m "not live"`). The wall-clock time is dominated by Pydantic model compilation on first import.
@@ -1948,3 +1953,5 @@ Apache 2.0. See [LICENSE](LICENSE).
1948
1953
  ## Colophon
1949
1954
 
1950
1955
  Designed, implemented, and shipped solo. Adapter layer over `omega-lock`; zero calibration-engine reimplementation. Every non-trivial change is pre-authored through `antemortem-cli`'s recon discipline. Tests run offline; no live API calls in CI.
1956
+
1957
+ 2.2.0 runtime split contract: explicit paired mode requires matching ID sets and identical input/reference content on at least three cases; explicit disjoint mode rejects overlapping IDs or exact duplicate input content before provider calls. Historical auto mode is retained and does not establish independence.
@@ -1,6 +1,6 @@
1
1
  # omegaprompt
2
2
 
3
- **The overfit gate for your prompts.** Your prompt aced your eval set — that's exactly why you can't trust it yet. `omegaprompt` re-tests the winning prompt on examples it never tuned on, and **fails your CI build** if it doesn't hold up.
3
+ **Provider-neutral prompt calibration with explicit gates.** Search configurations on training data, score the winner on a separately supplied test slice, and inspect declared gap, hard-gate and profile checks. Paired replay measures repeat consistency; independent holdout needs cases excluded from selection.
4
4
 
5
5
  [![CI](https://github.com/hibou04-ops/omegaprompt/actions/workflows/ci.yml/badge.svg)](https://github.com/hibou04-ops/omegaprompt/actions/workflows/ci.yml)
6
6
  [![License: Apache 2.0](https://img.shields.io/pypi/l/omegaprompt?color=blue&label=license&cacheSeconds=3600)](LICENSE)
@@ -11,6 +11,12 @@
11
11
  [![MCP](https://img.shields.io/badge/MCP-server-blueviolet.svg)](#103-mcp-server-claude-code-cursor)
12
12
  [![Parent framework](https://img.shields.io/badge/framework-omega--lock-blueviolet.svg)](https://github.com/hibou04-ops/omega-lock)
13
13
 
14
+ > **2.2.1 (2026-10-28): neutral parameters respect configured subsets.** Select STANDARD/MEDIUM by their positions in the allowed lists, falling back to the first allowed value. Public 2.2.0 unintentionally used DEEP for the default baseline and rejected valid singleton lists. Fresh baseline scores, costs and selections can change; historical artifacts are preserved. [Reproduction and migration](docs/release/2.2.1.md).
15
+
16
+ Raw optimizer integers are indices into the configured `MetaAxisSpace` lists, not the global `REASONING_ORDINALS`/`OUTPUT_BUDGET_ORDINALS` helper mappings.
17
+
18
+ > **2.2.0 (2026-10-28): evaluation integrity and bounded work.** Context changes invalidate memoized observations. `PromptTarget.evaluate(..., use_cache=False)` performs fresh calls; cache replay adds no independent observation. Parallel evaluation retains at most `max_workers` submitted results and preserves input order. Failed target/judge attempts and returned usage remain in target accounting; no partial success is cached. Explicit disjoint mode rejects overlapping IDs. [Evidence and migration](docs/release/2.2.0.md).
19
+
14
20
  Docs: **[Easy start](https://github.com/hibou04-ops/omegaprompt/blob/main/EASY_README.md)** · [Full reference](https://github.com/hibou04-ops/omegaprompt/blob/main/README.md) · [한국어](https://github.com/hibou04-ops/omegaprompt/blob/main/README_KR.md) · [쉬운 한국어](https://github.com/hibou04-ops/omegaprompt/blob/main/EASY_README_KR.md) · [Examples gallery](examples/) · [Claim ledger (trust evidence)](docs/claims/README_CLAIMS.generated.md)
15
21
 
16
22
  Keywords: **prompt overfitting · prompt regression testing · LLM eval CI · prompt evaluation · prompt A/B test in CI · held-out validation for prompts · CI ship gate for prompts**
@@ -20,7 +26,6 @@ pip install omegaprompt # core
20
26
  pip install "omegaprompt[mcp]" # + MCP server (Claude Code / Cursor)
21
27
  ```
22
28
 
23
- > **v2.1.2 (2026-10-08)** — MCP installs retain SDK 1.x compatibility; the Action installs this exact package version by default. Standalone examples and docking instructions clarify synthetic versus live evidence. CLI/MCP names, schema 2.0 and the eight MCP tools are unchanged.
24
29
 
25
30
  <!-- public-claim-ledger:start -->
26
31
  > Claim evidence source: [docs/claims/public_claim_ledger.json](docs/claims/public_claim_ledger.json), rendered by `python tools/generate_readme_claims.py`.
@@ -39,9 +44,9 @@ Calibrate prompt configurations through omega-lock and inspect CalibrationArtifa
39
44
  Requires Python 3.11+. Installation needs internet.
40
45
 
41
46
  ```bash
42
- python -m pip install omegaprompt==2.1.2
47
+ python -m pip install omegaprompt==2.2.1
43
48
  omegaprompt --help
44
- python -c "from urllib.request import urlretrieve; urlretrieve('https://raw.githubusercontent.com/hibou04-ops/omegaprompt/v2.1.2/examples/reference/reference_artifact.json', 'artifact.json')"
49
+ python -c "from urllib.request import urlretrieve; urlretrieve('https://raw.githubusercontent.com/hibou04-ops/omegaprompt/v2.2.1/examples/reference/reference_artifact.json', 'artifact.json')"
45
50
  omegaprompt check-artifact artifact.json
46
51
  omegaprompt report artifact.json --format json
47
52
  ```
@@ -52,7 +57,7 @@ omega-lock>=0.3.0,<0.4.0 is required and installed automatically. Both mini pack
52
57
 
53
58
  [Docking contracts and runnable data handoff](https://github.com/hibou04-ops/omega-lock/blob/main/DOCKING.md) · [Full guide](README.md).
54
59
 
55
- MCP: install the distribution with `[mcp]` and use its existing server executable. FastMCP support is bounded to MCP SDK `>=1.0.0,<2.0.0`; the tool names and schemas are unchanged.
60
+ MCP: install the distribution with `[mcp]` and use its existing server executable. FastMCP support is bounded to MCP SDK `>=1.0.0,<2.0.0`; tool names are retained; classify_traps gains optional validation inputs.
56
61
 
57
62
 
58
63
  ## Your prompt is overfit to your eval set — and you don't know it
@@ -63,7 +68,7 @@ A week later, production quality is *worse* than before. Why?
63
68
 
64
69
  Because 4.8 was the score on **the exact examples you tuned against**. You didn't measure a prompt — you memorized an answer key. That's overfitting, and your eval tool reported PASS because that's all it was asked to do. ML solved this in the 1990s with a train/test split. Most prompt workflows still ship without one.
65
70
 
66
- `omegaprompt` is the 60-second check that catches this **before** you ship:
71
+ `omegaprompt` is a configurable workflow that catches this **before** you ship:
67
72
 
68
73
  1. It tunes your prompt on a **train** slice (across system prompt, few-shot, reasoning effort, output budget, response-schema mode, tool policy).
69
74
  2. It **re-tests the winner on a held-out slice it never tuned on**.
@@ -71,7 +76,7 @@ Because 4.8 was the score on **the exact examples you tuned against**. You didn'
71
76
 
72
77
  Then one line in CI makes a "small prompt tweak" fail the build if it silently degrades quality.
73
78
 
74
- > **Your eval says PASS. omegaprompt says it won't generalize.** That sentence is the whole product.
79
+ > A gate failure identifies a failed declared check on supplied data; it does not establish future production behavior.
75
80
 
76
81
  ---
77
82
 
@@ -108,7 +113,7 @@ generalization_gap: 0.00% # train vs held-out — small gap = it transferre
108
113
  kc4_status: MISSING_PER_ITEM_SCORES
109
114
  ```
110
115
 
111
- **Honest read of this demo:** the bundled demo dataset has *disjoint* train/held-out items (no shared item ids), so the per-item transfer gate cannot fire — it reports `MISSING_PER_ITEM_SCORES` and the gate degenerates to the gap check alone (which here is 0.00%). The per-item transfer gate is what *actually* fires on a real **paired** dataset (train and held-out sharing item ids). So don't read this demo's clean numbers as "the transfer gate passed" — read it as "the gap check passed and the transfer gate had nothing to score." See *How it works*.
116
+ **Demo scope:** these deterministic fixtures exercise artifact and gap-gate behavior. Missing per-item scores are unmeasured correlation. A paired replay measures repeat consistency on the same cases; an independent holdout needs cases excluded from selection. Neither proves production generalization.
112
117
 
113
118
  Turn that same artifact into a one-command CI verdict:
114
119
 
@@ -159,7 +164,7 @@ A prompt change is a code change. Gate it like one. The dedicated **`omegaprompt
159
164
 
160
165
  ```yaml
161
166
  # .github/workflows/prompt-audit.yml
162
- - uses: hibou04-ops/omegaprompt@v2.1.2
167
+ - uses: hibou04-ops/omegaprompt@v2.2.1
163
168
  with:
164
169
  artifact: artifact.json # a CalibrationArtifact you produced in a prior step
165
170
  format: json # machine-readable gate summary
@@ -230,7 +235,7 @@ You give it a **dataset + a judging rubric + candidate prompts**. It searches st
230
235
 
231
236
  Then it re-tests the winning configuration on the **held-out** slice and applies two pre-declared gates:
232
237
 
233
- - **Held-out transfer gate** (`--min-kc4`): per-item held-out scores must still track the target. If train looks great but the held-out items stop correlating, the prompt overfit — the run is flagged `FAIL_KC4_GATE`. *(This needs train and held-out to share item ids — a "paired" replay. On an ordinary disjoint split it degrades to the gap check below, which still catches overfit — that's exactly what the offline demo above shows.)*
238
+ - **Paired consistency gate** (`--min-kc4`): Pearson correlation on the same cases must meet the declared threshold. Failure means that consistency check failed, not proof of overfitting. An independent disjoint holdout has no paired correlation and uses the gap and hard-gate checks.
234
239
  - **Max gap gate** (`--max-gap`): the train↔held-out fitness gap must stay under your declared ceiling.
235
240
 
236
241
  Both thresholds are set **before** scoring. There's no lowering the bar after you see results.
@@ -570,7 +575,7 @@ Every combination in the unlocked subspace is evaluated. Each evaluation issues
570
575
 
571
576
  ### 5.5 Held-out replay
572
577
 
573
- The training-best parameters are replayed on the held-out test slice. The replay uses the *same* `PromptTarget` adapter with a different dataset; there is no leakage possible because the test slice was never seen by the searcher.
578
+ The training-best parameters are evaluated using a separate PromptTarget instance for the supplied test dataset. Independence depends on actual content and prior selection history. A paired replay deliberately reuses the same cases and is not an independent holdout.
574
579
 
575
580
  ### 5.6 Held-out transfer gate (per-item correlation)
576
581
 
@@ -578,9 +583,9 @@ The Pearson correlation between train per-item scores and test per-item scores (
578
583
 
579
584
  **Transfer-gate semantics by validation_mode (v1.5+).** The transfer gate is a per-item correlation, so it is only meaningful when train and test slices share the *same* item ids — a "paired replay". On an ordinary disjoint train/test split the slices have no shared ids and the per-item correlation is structurally unmeasurable; the gate degenerates to the gap-only check. To make this explicit, `CalibrateTuning.validation_mode` accepts:
580
585
 
581
- - `"auto"` (default, backward-compat): compute the per-item correlation only when slices share ≥3 ids; otherwise skip silently.
586
+ - `"auto"` (default, backward-compat): compute the per-item correlation only when slices share ≥3 ids; otherwise record a noncomputed status.
582
587
  - `"paired"`: caller asserts shared ids by design. Raises `ValueError` if overlap < 3 — a paired run with no overlap is a setup bug, not a free pass.
583
- - `"disjoint"`: caller asserts no shared ids by design. The per-item correlation is never computed; the gate is gap-only.
588
+ - `"disjoint"`: caller asserts no shared ids by design. Overlapping IDs raise an input error. For disjoint IDs the gate is gap-only; unmeasured correlation is not a correlation pass.
584
589
 
585
590
  If you run a normal held-out split (disjoint ids), set `validation_mode="disjoint"` to make the artifact's lack of `kc4_correlation` self-documenting. Use `"paired"` when you score two prompts on the *same* items and want the per-item correlation as a stability signal.
586
591
 
@@ -1157,7 +1162,7 @@ The default test suite runs with `pytest -q` and uses mocked provider clients ra
1157
1162
  | `judges/` | `RuleJudge` (no_refusal / non_empty / json_object / regex / duplicate-check rejection / missing-check raise); `LLMJudge` (strict-schema dispatch, payload composition, non-`JudgeResult` response raise, strict-mode ship-grade judge refusal); `EnsembleJudge` (rule-first short-circuit, LLM escalation on rule-pass, merged gate_results, non-`RuleJudge` rejection). |
1158
1163
  | `targets/` | `PromptTarget` end-to-end with mocked provider + judge; meta-axis resolution and clamping for out-of-range inputs; usage accumulation across evaluations; `evaluation_history` retention; latency measurement; degraded-capability propagation. |
1159
1164
  | `commands/` | CLI help lists `calibrate` / `report` / `diff` / `check-artifact`; `--version` shows `omegaprompt`; `report` renders schema-v2.0 artifacts; `diff` detects regressions on fitness, cost ratios, latency ratios, boundary-crossing flips; `check-artifact` performs zero-network integrity checks. |
1160
- | `preflight/` | **Plugin interface only** — no probe or classifier code inside `omegaprompt`. `contracts`: severity ordering, status enum, `PreflightReport.worst_severity` / `any_real_or_new`, Pydantic `extra="forbid"` enforcement; bounds on `JudgeQualityMeasurement.consistency` (0..1), `EndpointMeasurement.schema_reliability` (0..1). `adaptation`: noise-adaptive `min_kc4` across four thresholds; consistency-driven `rescore_count`; schema-fallback trigger; wall-time-driven `unlock_k` reduction; small-sample gap widening; variant-skip axis marking; `apply_adaptation_plan` invariants (never weakens `min_kc4`, never widens `max_gap`, never raises `unlock_k`). Sub-tool probe + classifier implementations (with their own test suites) live in the `mini-omega-lock` and `mini-antemortem-cli` repositories. |
1165
+ | `preflight/` | **Plugin interface only** — no probe or classifier code inside `omegaprompt`. `contracts`: severity ordering, status enum, `PreflightReport.worst_severity` / `any_real_or_new`, Pydantic `extra="forbid"` enforcement; bounds on `JudgeQualityMeasurement.consistency` (0..1), `EndpointMeasurement.schema_reliability` (0..1). `adaptation`: noise-adaptive `min_kc4` across four thresholds; consistency-driven `rescore_count`; schema-fallback trigger; wall-time-driven `unlock_k` reduction; small-sample manual-review escalation; variant-skip axis marking; `apply_adaptation_plan` invariants (never weakens `min_kc4`, never widens `max_gap`, never raises `unlock_k`). Sub-tool probe + classifier implementations (with their own test suites) live in the `mini-omega-lock` and `mini-antemortem-cli` repositories. |
1161
1166
  | `test_calibrate_integration.py` | **Drives the real `omega_lock.run_p1`** with a deterministic in-memory `CalibrableTarget` (no mocks on the search engine). Asserts the artifact's `calibrated_params`, `neutral_baseline_params`, `walk_forward`, and `sensitivity_ranking` match `P1Result`'s actual shape — the regression that this test catches is drift between the adapter layer and the search engine that per-module unit tests cannot reach. |
1162
1167
 
1163
1168
  Run the default no-network suite with `uv run pytest -q -m "not live"` (or `python -m pytest -q -m "not live"`). The wall-clock time is dominated by Pydantic model compilation on first import.
@@ -1702,3 +1707,5 @@ Apache 2.0. See [LICENSE](LICENSE).
1702
1707
  ## Colophon
1703
1708
 
1704
1709
  Designed, implemented, and shipped solo. Adapter layer over `omega-lock`; zero calibration-engine reimplementation. Every non-trivial change is pre-authored through `antemortem-cli`'s recon discipline. Tests run offline; no live API calls in CI.
1710
+
1711
+ 2.2.0 runtime split contract: explicit paired mode requires matching ID sets and identical input/reference content on at least three cases; explicit disjoint mode rejects overlapping IDs or exact duplicate input content before provider calls. Historical auto mode is retained and does not establish independence.
@@ -1,6 +1,6 @@
1
1
  # omegaprompt
2
2
 
3
- **당신의 prompt를 위한 overfit gate.** prompt가 당신의 eval set에서 만점을 받았다 — 바로 그것이 아직 그 prompt를 믿어선 안 되는 이유입니다. `omegaprompt`는 이긴 prompt를 그 prompt가 한 번도 튜닝하지 않은 예시들로 다시 테스트하고, 그 결과가 유지되지 않으면 **당신의 CI 빌드를 실패**시킵니다.
3
+ **명시적 gate를 갖춘 provider 중립 프롬프트 보정.** train 데이터에서 설정을 선택하고 별도로 제공한 test 데이터에서 gap·hard gate·실행 정책을 검사합니다. paired 재측정은 반복 일관성이며, 독립 holdout은 선택에 사용하지 않은 사례가 필요합니다.
4
4
 
5
5
  [![CI](https://github.com/hibou04-ops/omegaprompt/actions/workflows/ci.yml/badge.svg)](https://github.com/hibou04-ops/omegaprompt/actions/workflows/ci.yml)
6
6
  [![License: Apache 2.0](https://img.shields.io/pypi/l/omegaprompt?color=blue&label=license&cacheSeconds=3600)](LICENSE)
@@ -11,6 +11,12 @@
11
11
  [![MCP](https://img.shields.io/badge/MCP-server-blueviolet.svg)](https://github.com/hibou04-ops/omegaprompt/blob/main/README.md#103-mcp-server-claude-code-cursor)
12
12
  [![Parent framework](https://img.shields.io/badge/framework-omega--lock-blueviolet.svg)](https://github.com/hibou04-ops/omega-lock)
13
13
 
14
+ > **2.2.1 (2026-10-28): 부분 축의 중립값 교정.** reasoning/budget 중립값은 설정 목록에서 STANDARD/MEDIUM의 위치를 사용하며, 없으면 첫 허용값을 사용합니다. 공개 2.2.0에서 기본 STANDARD가 DEEP으로 해석되거나 유효한 단일값 목록이 실패하던 결함을 교정했습니다. 새 실행의 기준 점수·비용·선택 결과는 달라질 수 있으며 기존 artifact는 보존합니다. [재현과 호환성](docs/release/2.2.1.md).
15
+
16
+ optimizer의 원시 정수는 설정한 `MetaAxisSpace` 목록의 인덱스입니다. 전역 `REASONING_ORDINALS`/`OUTPUT_BUDGET_ORDINALS` helper 값과 혼동하지 마세요.
17
+
18
+ > **2.2.0 (2026-10-28): 평가 무결성과 대기 작업 상한.** 데이터·rubric·variants 등 평가 컨텍스트 변경 시 캐시를 무효화합니다. `PromptTarget.evaluate(..., use_cache=False)`는 실제 재측정이며 캐시 재생은 독립 관측으로 세지 않습니다. 병렬 대기 결과는 `max_workers`개 이하이고 입력 순서를 보존합니다. 실패한 target/judge 시도와 반환된 usage도 누적 계측하며 부분 성공은 캐시하지 않습니다. 명시적 disjoint 모드는 ID 중복을 입력 오류로 처리합니다. [검증 근거와 이행 안내](docs/release/2.2.0.md).
19
+
14
20
  문서: **[Easy start](https://github.com/hibou04-ops/omegaprompt/blob/main/EASY_README.md)** · [Full reference](https://github.com/hibou04-ops/omegaprompt/blob/main/README.md) · [한국어](https://github.com/hibou04-ops/omegaprompt/blob/main/README_KR.md) · [쉬운 한국어](https://github.com/hibou04-ops/omegaprompt/blob/main/EASY_README_KR.md) · [Examples gallery](examples/) · [Claim ledger (신뢰 근거)](docs/claims/README_CLAIMS.generated.md)
15
21
 
16
22
  키워드: **prompt overfitting · prompt regression testing · LLM eval CI · prompt evaluation · prompt A/B test in CI · held-out validation for prompts · CI ship gate for prompts**
@@ -20,7 +26,6 @@ pip install omegaprompt # core
20
26
  pip install "omegaprompt[mcp]" # + MCP server (Claude Code / Cursor)
21
27
  ```
22
28
 
23
- > **v2.1.2 (2026-10-08)** — MCP 설치는 SDK 1.x 호환 범위를 유지하고 Action은 해당 버전을 기본 설치합니다. 단독 예제와 도킹 안내에서 합성·실제 근거를 구분합니다. CLI/MCP 이름, schema 2.0, MCP 도구 8개는 유지합니다.
24
29
 
25
30
  <!-- public-claim-ledger:start -->
26
31
  > Claim evidence source: [docs/claims/public_claim_ledger.json](docs/claims/public_claim_ledger.json), rendered by `python tools/generate_readme_claims.py`.
@@ -39,16 +44,16 @@ omega-lock 엔진으로 프롬프트 설정을 보정하고 CalibrationArtifact
39
44
  Python 3.11 이상에서 실행합니다. 설치에는 인터넷이 필요합니다.
40
45
 
41
46
  ```bash
42
- python -m pip install omegaprompt==2.1.2
47
+ python -m pip install omegaprompt==2.2.1
43
48
  omegaprompt --help
44
- python -c "from urllib.request import urlretrieve; urlretrieve('https://raw.githubusercontent.com/hibou04-ops/omegaprompt/v2.1.2/examples/reference/reference_artifact.json', 'artifact.json')"
49
+ python -c "from urllib.request import urlretrieve; urlretrieve('https://raw.githubusercontent.com/hibou04-ops/omegaprompt/v2.2.1/examples/reference/reference_artifact.json', 'artifact.json')"
45
50
  omegaprompt check-artifact artifact.json
46
51
  omegaprompt report artifact.json --format json
47
52
  ```
48
53
 
49
54
  artifact 다운로드는 인터넷이 필요하며 이후 검사는 오프라인입니다. 저장된 합성 artifact의 누락된 per-item 점수는 transfer 통과를 뜻하지 않습니다. 실제 보정은 provider 설정과 비용 확인이 필요합니다. omega-lock>=0.3.0,<0.4.0은 필수이며 두 mini 도구는 선택입니다.
50
55
 
51
- [실제 연결 방식과 입력·출력](https://github.com/hibou04-ops/omega-lock/blob/main/DOCKING.md) · [전체 안내](README.md). 두 mini 도구의 현재 검증 조합은 omegaprompt 2.1.2이며, 별도 배포 패키지입니다.
56
+ [실제 연결 방식과 입력·출력](https://github.com/hibou04-ops/omega-lock/blob/main/DOCKING.md) · [전체 안내](README.md). 두 mini 도구의 직전 검증 조합은 omegaprompt 2.2.0이며, 별도 배포 패키지입니다.
52
57
 
53
58
  MCP는 해당 배포명의 `[mcp]` extras와 기존 서버 명령을 사용합니다. 기존 FastMCP 계약은 SDK `>=1.0.0,<2.0.0` 범위로 유지합니다.
54
59
 
@@ -157,7 +162,7 @@ prompt 변경은 코드 변경입니다. 코드처럼 gate하세요. 전용 **`o
157
162
 
158
163
  ```yaml
159
164
  # .github/workflows/prompt-audit.yml
160
- - uses: hibou04-ops/omegaprompt@v2.1.2
165
+ - uses: hibou04-ops/omegaprompt@v2.2.1
161
166
  with:
162
167
  artifact: artifact.json # a CalibrationArtifact you produced in a prior step
163
168
  format: json # machine-readable gate summary
@@ -568,7 +573,7 @@ unlock된 부분공간의 모든 조합이 평가됩니다. 각 평가는 datase
568
573
 
569
574
  ### 5.5 held-out replay
570
575
 
571
- training-best parameter가 held-out 테스트 슬라이스에서 replay됩니다. replay는 *같은* `PromptTarget` adapter를 다른 dataset과 함께 씁니다; 테스트 슬라이스는 searcher가 결코 보지 않았으므로 leakage가 가능하지 않습니다.
576
+ 선택한 parameter를 별도 PromptTarget 인스턴스와 제공된 test 데이터에서 평가합니다. 독립성은 실제 입력 내용과 과거 선택 이력에 달려 있습니다. paired 재측정은 동일 사례를 다시 사용하므로 독립 holdout이 아닙니다.
572
577
 
573
578
  ### 5.6 held-out transfer gate (per-item 상관)
574
579
 
@@ -576,7 +581,7 @@ train per-item 점수와 test per-item 점수 사이의(공유 dataset id 위에
576
581
 
577
582
  **validation_mode별 transfer-gate 의미(v1.5+).** transfer gate는 per-item 상관이므로, train과 test 슬라이스가 *같은* item id를 공유할 때 — "paired replay" — 에만 의미가 있습니다. 보통의 disjoint train/test split에서는 슬라이스에 공유 id가 없어 per-item 상관이 구조적으로 측정 불가능합니다; gate는 gap-only 검사로 축소됩니다. 이를 명시하기 위해 `CalibrateTuning.validation_mode`는 다음을 받습니다:
578
583
 
579
- - `"auto"`(기본값, backward-compat): 슬라이스가 ≥3개 id를 공유할 때만 per-item 상관을 계산하고; 그렇지 않으면 조용히 건너뜁니다.
584
+ - `"auto"`(기본값, backward-compat): 슬라이스가 ≥3개 id를 공유할 때만 per-item 상관을 계산하고; 그렇지 않으면 미측정 사유를 기록합니다.
580
585
  - `"paired"`: 호출자가 설계상 공유 id를 단언합니다. overlap이 3 미만이면 `ValueError`를 던집니다 — overlap 없는 paired 실행은 무료 통과가 아니라 setup 버그입니다.
581
586
  - `"disjoint"`: 호출자가 설계상 공유 id 없음을 단언합니다. per-item 상관은 결코 계산되지 않고; gate는 gap-only입니다.
582
587
 
@@ -1672,3 +1677,5 @@ Apache 2.0. [LICENSE](LICENSE)를 참고하세요.
1672
1677
  ## Colophon
1673
1678
 
1674
1679
  혼자 설계하고, 구현하고, ship했습니다. `omega-lock` 위의 adapter 계층; calibration-engine 재구현 0. 모든 non-trivial한 변경은 `antemortem-cli`의 recon 원칙을 통해 사전 작성됩니다. 테스트는 offline으로 돌고; CI에 라이브 API 호출이 없습니다.
1680
+
1681
+ 2.2.0 runtime split contract: explicit paired mode requires matching ID sets and identical input/reference content on at least three cases; explicit disjoint mode rejects overlapping IDs or exact duplicate input content before provider calls. Historical auto mode is retained and does not establish independence.
@@ -14,7 +14,7 @@ status: OK
14
14
  ship_recommendation: ship
15
15
  release_approved: True
16
16
  strict_blocking_findings: 0
17
- normalized_hash: 1b16c2cf423915fda7ea14779034e0dcab873f751ef0db265d82d02491ce5563
17
+ normalized_hash: 4aaceafed3b741f6d5151e963c9a7674cf1d046a67115ceffc9a4403bc834070
18
18
 
19
19
  ---- Deterministic metrics from the artifact ----
20
20
  neutral_fitness: 0.4250
@@ -24,12 +24,12 @@ jobs:
24
24
  # the committed reference artifact path.
25
25
  - name: Ship gate
26
26
  id: ship_gate
27
- uses: hibou04-ops/omegaprompt@v2.1.2
27
+ uses: hibou04-ops/omegaprompt@v2.2.1
28
28
  with:
29
29
  artifact: examples/reference/reference_artifact.json
30
30
  format: json
31
31
  require-generalization: "true"
32
- version: "2.1.2"
32
+ version: "2.2.1"
33
33
 
34
34
  - name: Report verdict
35
35
  if: always()
@@ -12,7 +12,7 @@
12
12
  "expected_ship_recommendation": "ship",
13
13
  "expected_validation_mode": "auto",
14
14
  "expected_integrity_classification": "release_approved",
15
- "normalized_artifact_hash": "1b16c2cf423915fda7ea14779034e0dcab873f751ef0db265d82d02491ce5563",
15
+ "normalized_artifact_hash": "4aaceafed3b741f6d5151e963c9a7674cf1d046a67115ceffc9a4403bc834070",
16
16
  "exact_metrics_may_be_displayed": true,
17
17
  "diff_baseline_case_id": null,
18
18
  "expected_diff_regression": null
@@ -25,7 +25,7 @@
25
25
  "expected_ship_recommendation": "hold",
26
26
  "expected_validation_mode": "paired",
27
27
  "expected_integrity_classification": "valid_non_release",
28
- "normalized_artifact_hash": "58c5bc817a31dae49a2b838092fcd6e5cb6ddbc54ba57971b46fd430c2cfae26",
28
+ "normalized_artifact_hash": "bfbfe826b087138480c27b79704388fad2ebd215d47b37312c95e5e88978b317",
29
29
  "exact_metrics_may_be_displayed": true,
30
30
  "diff_baseline_case_id": null,
31
31
  "expected_diff_regression": null
@@ -38,7 +38,7 @@
38
38
  "expected_ship_recommendation": "block",
39
39
  "expected_validation_mode": "auto",
40
40
  "expected_integrity_classification": "valid_non_release",
41
- "normalized_artifact_hash": "d163da066f2d72d36a30f076cf49d348ad22aa0a78ad7b1ba299fea8b103bf2b",
41
+ "normalized_artifact_hash": "a9392e2cc1d6756b3bd42b5a59416d743a96bc4f02ef9ea4bf3f01d1262af905",
42
42
  "exact_metrics_may_be_displayed": true,
43
43
  "diff_baseline_case_id": null,
44
44
  "expected_diff_regression": null
@@ -51,7 +51,7 @@
51
51
  "expected_ship_recommendation": "experiment",
52
52
  "expected_validation_mode": "auto",
53
53
  "expected_integrity_classification": "valid_non_release",
54
- "normalized_artifact_hash": "7ae47e07afa1f08f9adbeb707d8dcb56bb19d0f1575700ffd8fa551650ec0418",
54
+ "normalized_artifact_hash": "4004021f470476c24207d30788ba12f1916e07d483cc9b3f2795b9d5e507ae6b",
55
55
  "exact_metrics_may_be_displayed": true,
56
56
  "diff_baseline_case_id": null,
57
57
  "expected_diff_regression": null
@@ -64,7 +64,7 @@
64
64
  "expected_ship_recommendation": "ship",
65
65
  "expected_validation_mode": "auto",
66
66
  "expected_integrity_classification": "release_approved",
67
- "normalized_artifact_hash": "2f5541032e24771efa10824081050ec7465e53ca13940f7eda49b6deea0ac7fd",
67
+ "normalized_artifact_hash": "f02722870563895304d76fd0668b2265d0a4022c7dbbc897f6d17ce10be3fa0a",
68
68
  "exact_metrics_may_be_displayed": true,
69
69
  "diff_baseline_case_id": "clean_ok_ship",
70
70
  "expected_diff_regression": true
@@ -7,7 +7,7 @@
7
7
  "neutral_baseline_params": {
8
8
  "system_prompt_variant": 0,
9
9
  "few_shot_count": 0,
10
- "reasoning_profile": 2,
10
+ "reasoning_profile": 1,
11
11
  "output_budget_bucket": 1,
12
12
  "response_schema_mode": 0,
13
13
  "tool_policy_variant": 0
@@ -7,7 +7,7 @@
7
7
  "neutral_baseline_params": {
8
8
  "system_prompt_variant": 0,
9
9
  "few_shot_count": 0,
10
- "reasoning_profile": 2,
10
+ "reasoning_profile": 1,
11
11
  "output_budget_bucket": 1,
12
12
  "response_schema_mode": 0,
13
13
  "tool_policy_variant": 0
@@ -7,7 +7,7 @@
7
7
  "neutral_baseline_params": {
8
8
  "system_prompt_variant": 0,
9
9
  "few_shot_count": 0,
10
- "reasoning_profile": 2,
10
+ "reasoning_profile": 1,
11
11
  "output_budget_bucket": 1,
12
12
  "response_schema_mode": 0,
13
13
  "tool_policy_variant": 0
@@ -7,7 +7,7 @@
7
7
  "neutral_baseline_params": {
8
8
  "system_prompt_variant": 0,
9
9
  "few_shot_count": 0,
10
- "reasoning_profile": 2,
10
+ "reasoning_profile": 1,
11
11
  "output_budget_bucket": 1,
12
12
  "response_schema_mode": 0,
13
13
  "tool_policy_variant": 0
@@ -7,7 +7,7 @@
7
7
  "neutral_baseline_params": {
8
8
  "system_prompt_variant": 0,
9
9
  "few_shot_count": 0,
10
- "reasoning_profile": 2,
10
+ "reasoning_profile": 1,
11
11
  "output_budget_bucket": 1,
12
12
  "response_schema_mode": 0,
13
13
  "tool_policy_variant": 0
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "omegaprompt"
7
- version = "2.1.2"
7
+ version = "2.2.1"
8
8
  description = "Provider-neutral prompt calibration engine with sensitivity-ranked meta-axes, hard-gate x soft-score fitness, walk-forward ship gates, guarded/expedition profiles, and explicit capability/risk reporting across Anthropic, OpenAI, Gemini, and local OpenAI-compatible backends. Optional sub-tools (mini-omega-lock, mini-antemortem-cli) distribute separately and plug in via the omegaprompt.preflight interface."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -114,7 +114,7 @@ from omegaprompt.runtime import (
114
114
  report,
115
115
  )
116
116
 
117
- __version__ = "2.1.2"
117
+ __version__ = "2.2.1"
118
118
 
119
119
  __all__ = [
120
120
  # domain
@@ -314,6 +314,9 @@ def calibrate(
314
314
  tuning=tuning,
315
315
  adaptation_plan=plan,
316
316
  )
317
+ except ValueError as exc:
318
+ typer.secho(f"INPUT_ERROR: {exc}", fg=typer.colors.RED, err=True)
319
+ raise typer.Exit(code=2) from exc
317
320
  except RuntimeError as exc:
318
321
  message = str(exc)
319
322
  if "requires omega-lock" in message or "Install with" in message:
@@ -45,7 +45,7 @@ declared thresholds) so a future reader can tell ``None`` from
45
45
 
46
46
  from __future__ import annotations
47
47
 
48
- from math import isnan
48
+ from math import isfinite, isnan
49
49
  from typing import Literal
50
50
 
51
51
  from omegaprompt.domain.result import WalkForwardResult
@@ -136,6 +136,15 @@ def evaluate_walk_forward(
136
136
  Default ``"auto"`` preserves historical behaviour: KC-4 is
137
137
  computed only when slices share >=3 ids, otherwise skipped.
138
138
  """
139
+ if validation_mode not in {"auto", "paired", "disjoint"}:
140
+ raise ValueError(f"Unknown validation_mode: {validation_mode!r}")
141
+ if not all(isfinite(v) for v in (train_best_fitness, test_fitness, max_gap, min_kc4)):
142
+ raise ValueError("fitness and gate thresholds must be finite")
143
+ if max_gap < 0 or not -1 <= min_kc4 <= 1:
144
+ raise ValueError("max_gap must be nonnegative and min_kc4 within [-1, 1]")
145
+ for scores in (per_item_train, per_item_test):
146
+ if scores is not None and not all(isfinite(v) for v in scores.values()):
147
+ raise ValueError("per-item scores must be finite")
139
148
  if train_best_fitness == 0:
140
149
  gap = float("inf")
141
150
  gap_status: GapStatus = (
@@ -152,6 +161,8 @@ def evaluate_walk_forward(
152
161
  kc4: float | None = None
153
162
  kc4_status: KC4Status
154
163
  if validation_mode == "disjoint":
164
+ if shared_ids:
165
+ raise ValueError("validation_mode='disjoint' requires disjoint item ids; overlap found")
155
166
  # Caller asserts disjoint split; do not compute KC-4 even if
156
167
  # ids happen to overlap (e.g. id collision across splits is a
157
168
  # bug to surface elsewhere, not a free pass for the gate).