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.
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/CHANGELOG.md +28 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/PKG-INFO +22 -15
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/README.md +21 -14
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/README_KR.md +15 -8
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/_demo_output.txt +1 -1
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/ci/ship-gate.yml +2 -2
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/reference/golden_manifest.json +5 -5
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/reference/reference_artifact.json +1 -1
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/reference/reference_diff_regression.json +1 -1
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/reference/reference_fail_hard_gates.json +1 -1
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/reference/reference_fail_kc4_gate.json +1 -1
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/reference/reference_provider_degradation.json +1 -1
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/pyproject.toml +1 -1
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/__init__.py +1 -1
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/commands/calibrate.py +3 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/core/walkforward.py +12 -1
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/mcp/server.py +6 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/preflight/adaptation.py +3 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/preflight/contracts.py +8 -1
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/runtime.py +25 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/targets/prompt_target.py +136 -20
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/.gitignore +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/AGENT_TRIGGERS.md +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/AUTHORS.md +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/IP_DEFENSE_CHECKLIST.md +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/LICENSE +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/NOTICE +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/PRE_EXISTING_IP.md +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/README.md +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/README.md +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/_mainline_outputs/V0_baseline.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/_mainline_outputs/V1_role_terse.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/_mainline_outputs/V2_xml_format.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/_mainline_outputs/V3prime_rules_format.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/_mainline_outputs/V5_no_issue_guard.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/_subagent_outputs/V0_baseline.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/_subagent_outputs/V1_role_terse.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/_subagent_outputs/V2_xml_format.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/_subagent_outputs/V3prime_rules_format.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/_subagent_outputs/V5_no_issue_guard.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/_subagent_prompts/V0_baseline.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/_subagent_prompts/V1_role_terse.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/_subagent_prompts/V2_xml_format.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/_subagent_prompts/V3prime_rules_format.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/_subagent_prompts/V5_no_issue_guard.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/backtest.log +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/backtest.py +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/backtest_gemma4.log +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/backtest_results.json +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/backtest_results_gemma4.json +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/backtest_results_v2.json +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/backtest_results_v2_gemma4.json +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/backtest_results_v3.json +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/backtest_results_v3_gemma4.json +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/backtest_v2.log +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/backtest_v2_gemma4.log +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/backtest_v3.log +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/backtest_v3_gemma4.log +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/claude_full_validation_results.json +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/claude_validation_outputs.json +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/mainline_results.json +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/production_variant.json +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/quality_review.json +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/quality_review_claude_full.json +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/quality_review_mainline.json +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/quality_review_v2.json +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/quality_review_v3.json +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/rubric.json +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/score_and_write.py +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/test.jsonl +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/train.jsonl +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/validation_archive.json +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/variant_0_texts.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/variant_1_texts.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/variant_2_texts.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/variant_3_texts.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/variant_4_texts.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/variants.json +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/variants_v2.json +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_review/variants_v3.json +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_writing/README.md +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_writing/_subagent_outputs/V0_baseline.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_writing/_subagent_outputs/V1_role_terse.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_writing/_subagent_outputs/V2_format.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_writing/_subagent_outputs/V3prime_rules.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_writing/_subagent_outputs/V4_guard.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_writing/_subagent_prompts/V0_baseline.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_writing/_subagent_prompts/V1_role_terse.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_writing/_subagent_prompts/V2_format.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_writing/_subagent_prompts/V3prime_rules.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_writing/_subagent_prompts/V4_guard.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_writing/claude_results.json +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_writing/quality_review.json +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_writing/rubric.json +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_writing/train.jsonl +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/code_writing/variants.json +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/commit_message/README.md +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/commit_message/_subagent_outputs/V0_baseline.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/commit_message/_subagent_outputs/V1_role_terse.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/commit_message/_subagent_outputs/V2_format.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/commit_message/_subagent_outputs/V3prime_rules.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/commit_message/_subagent_outputs/V4_guard.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/commit_message/_subagent_prompts/V0_baseline.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/commit_message/_subagent_prompts/V1_role_terse.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/commit_message/_subagent_prompts/V2_format.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/commit_message/_subagent_prompts/V3prime_rules.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/commit_message/_subagent_prompts/V4_guard.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/commit_message/claude_results.json +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/commit_message/quality_review.json +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/commit_message/rubric.json +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/commit_message/train.jsonl +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/commit_message/variants.json +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/debugging/README.md +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/debugging/_subagent_outputs/V0_baseline.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/debugging/_subagent_outputs/V1_role_terse.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/debugging/_subagent_outputs/V2_format.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/debugging/_subagent_outputs/V3prime_rules.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/debugging/_subagent_outputs/V4_guard.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/debugging/_subagent_prompts/V0_baseline.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/debugging/_subagent_prompts/V1_role_terse.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/debugging/_subagent_prompts/V2_format.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/debugging/_subagent_prompts/V3prime_rules.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/debugging/_subagent_prompts/V4_guard.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/debugging/claude_results.json +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/debugging/quality_review.json +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/debugging/rubric.json +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/debugging/train.jsonl +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/debugging/variants.json +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/demo_calibration.py +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/demo_replay.py +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/explanation/README.md +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/explanation/_subagent_outputs/V0_baseline.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/explanation/_subagent_outputs/V1_role_terse.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/explanation/_subagent_outputs/V2_format.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/explanation/_subagent_outputs/V3prime_rules.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/explanation/_subagent_outputs/V4_guard.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/explanation/_subagent_prompts/V0_baseline.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/explanation/_subagent_prompts/V1_role_terse.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/explanation/_subagent_prompts/V2_format.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/explanation/_subagent_prompts/V3prime_rules.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/explanation/_subagent_prompts/V4_guard.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/explanation/claude_results.json +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/explanation/quality_review.json +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/explanation/rubric.json +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/explanation/train.jsonl +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/explanation/variants.json +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/refactoring/README.md +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/refactoring/_subagent_outputs/V0_baseline.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/refactoring/_subagent_outputs/V1_role_terse.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/refactoring/_subagent_outputs/V2_format.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/refactoring/_subagent_outputs/V3prime_rules.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/refactoring/_subagent_outputs/V4_guard.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/refactoring/_subagent_prompts/V0_baseline.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/refactoring/_subagent_prompts/V1_role_terse.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/refactoring/_subagent_prompts/V2_format.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/refactoring/_subagent_prompts/V3prime_rules.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/refactoring/_subagent_prompts/V4_guard.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/refactoring/claude_results.json +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/refactoring/quality_review.json +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/refactoring/rubric.json +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/refactoring/train.jsonl +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/refactoring/variants.json +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/reference/README.md +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/reference/reference_adaptation_plan.json +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/reference/reference_preflight_report.json +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/reference/reproduce_preflight_demo.py +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/reference/reproduce_reference_artifact.py +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/rubric_example.json +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/sample_dataset.jsonl +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/summarization/README.md +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/summarization/_subagent_outputs/V0_baseline.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/summarization/_subagent_outputs/V1_role_terse.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/summarization/_subagent_outputs/V2_format.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/summarization/_subagent_outputs/V3prime_rules.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/summarization/_subagent_outputs/V4_guard.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/summarization/_subagent_prompts/V0_baseline.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/summarization/_subagent_prompts/V1_role_terse.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/summarization/_subagent_prompts/V2_format.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/summarization/_subagent_prompts/V3prime_rules.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/summarization/_subagent_prompts/V4_guard.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/summarization/claude_results.json +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/summarization/quality_review.json +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/summarization/rubric.json +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/summarization/train.jsonl +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/summarization/variants.json +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/test_writing/README.md +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/test_writing/_subagent_outputs/V0_baseline.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/test_writing/_subagent_outputs/V1_role_terse.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/test_writing/_subagent_outputs/V2_format.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/test_writing/_subagent_outputs/V3prime_rules.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/test_writing/_subagent_outputs/V4_guard.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/test_writing/_subagent_prompts/V0_baseline.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/test_writing/_subagent_prompts/V1_role_terse.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/test_writing/_subagent_prompts/V2_format.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/test_writing/_subagent_prompts/V3prime_rules.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/test_writing/_subagent_prompts/V4_guard.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/test_writing/claude_results.json +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/test_writing/quality_review.json +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/test_writing/rubric.json +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/test_writing/train.jsonl +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/test_writing/variants.json +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/translation/README.md +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/translation/_subagent_outputs/V0_baseline.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/translation/_subagent_outputs/V1_role_terse.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/translation/_subagent_outputs/V2_format.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/translation/_subagent_outputs/V3prime_rules.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/translation/_subagent_outputs/V4_guard.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/translation/_subagent_prompts/V0_baseline.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/translation/_subagent_prompts/V1_role_terse.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/translation/_subagent_prompts/V2_format.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/translation/_subagent_prompts/V3prime_rules.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/translation/_subagent_prompts/V4_guard.txt +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/translation/claude_results.json +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/translation/quality_review.json +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/translation/rubric.json +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/translation/train.jsonl +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/translation/variants.json +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/examples/variants_example.json +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegacal/__init__.py +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegacal/__main__.py +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegacal/cli.py +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/__main__.py +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/api.py +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/cli.py +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/commands/__init__.py +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/commands/check_artifact.py +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/commands/diff.py +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/commands/gate.py +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/commands/report.py +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/core/__init__.py +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/core/artifact.py +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/core/artifact_integrity.py +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/core/fitness.py +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/core/gate.py +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/core/overfit.py +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/core/profiles.py +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/core/risk.py +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/core/sensitivity.py +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/dataset.py +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/domain/__init__.py +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/domain/dataset.py +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/domain/enums.py +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/domain/judge.py +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/domain/params.py +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/domain/profiles.py +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/domain/result.py +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/fitness.py +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/judge.py +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/judges/__init__.py +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/judges/base.py +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/judges/ensemble_judge.py +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/judges/llm_judge.py +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/judges/rule_judge.py +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/mcp/__init__.py +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/mcp/__main__.py +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/preflight/__init__.py +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/prompts.py +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/providers/__init__.py +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/providers/anthropic_provider.py +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/providers/base.py +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/providers/factory.py +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/providers/gemini_provider.py +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/providers/local_provider.py +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/providers/ollama_provider.py +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/providers/openai_provider.py +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/reporting/__init__.py +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/reporting/html.py +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/reporting/markdown.py +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/reporting/summary.py +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/schema.py +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/target.py +0 -0
- {omegaprompt-2.1.2 → omegaprompt-2.2.1}/src/omegaprompt/targets/__init__.py +0 -0
- {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
|
|
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
|
-
**
|
|
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
|
[](https://github.com/hibou04-ops/omegaprompt/actions/workflows/ci.yml)
|
|
252
252
|
[](LICENSE)
|
|
@@ -257,6 +257,12 @@ Description-Content-Type: text/markdown
|
|
|
257
257
|
[](#103-mcp-server-claude-code-cursor)
|
|
258
258
|
[](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
|
|
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
|
|
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`;
|
|
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
|
|
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
|
-
>
|
|
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
|
-
**
|
|
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
|
|
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
|
-
- **
|
|
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
|
|
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
|
|
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.
|
|
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
|
|
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
|
-
**
|
|
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
|
[](https://github.com/hibou04-ops/omegaprompt/actions/workflows/ci.yml)
|
|
6
6
|
[](LICENSE)
|
|
@@ -11,6 +11,12 @@
|
|
|
11
11
|
[](#103-mcp-server-claude-code-cursor)
|
|
12
12
|
[](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
|
|
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
|
|
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`;
|
|
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
|
|
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
|
-
>
|
|
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
|
-
**
|
|
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
|
|
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
|
-
- **
|
|
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
|
|
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
|
|
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.
|
|
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
|
|
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
|
-
|
|
3
|
+
**명시적 gate를 갖춘 provider 중립 프롬프트 보정.** train 데이터에서 설정을 선택하고 별도로 제공한 test 데이터에서 gap·hard gate·실행 정책을 검사합니다. paired 재측정은 반복 일관성이며, 독립 holdout은 선택에 사용하지 않은 사례가 필요합니다.
|
|
4
4
|
|
|
5
5
|
[](https://github.com/hibou04-ops/omegaprompt/actions/workflows/ci.yml)
|
|
6
6
|
[](LICENSE)
|
|
@@ -11,6 +11,12 @@
|
|
|
11
11
|
[](https://github.com/hibou04-ops/omegaprompt/blob/main/README.md#103-mcp-server-claude-code-cursor)
|
|
12
12
|
[](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
|
|
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
|
|
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 도구의
|
|
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
|
|
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
|
-
|
|
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:
|
|
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
|
|
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
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "omegaprompt"
|
|
7
|
-
version = "2.1
|
|
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"
|
|
@@ -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).
|