promptcheckup 1.0.0__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.
- promptcheckup-1.0.0/.github/workflows/ci.yml +24 -0
- promptcheckup-1.0.0/.github/workflows/release.yml +45 -0
- promptcheckup-1.0.0/.gitignore +11 -0
- promptcheckup-1.0.0/CHANGELOG.md +33 -0
- promptcheckup-1.0.0/CITATION.cff +79 -0
- promptcheckup-1.0.0/DESIGN.md +549 -0
- promptcheckup-1.0.0/LICENSE +202 -0
- promptcheckup-1.0.0/PKG-INFO +291 -0
- promptcheckup-1.0.0/README.md +265 -0
- promptcheckup-1.0.0/benchmarks/charts.py +414 -0
- promptcheckup-1.0.0/benchmarks/results/checkup_simulation.csv +10401 -0
- promptcheckup-1.0.0/benchmarks/results/checkup_timeline.svg +150 -0
- promptcheckup-1.0.0/benchmarks/results/false_positive.csv +49 -0
- promptcheckup-1.0.0/benchmarks/results/false_positive.svg +194 -0
- promptcheckup-1.0.0/benchmarks/results/naive_vs_paired.csv +3 -0
- promptcheckup-1.0.0/benchmarks/results/naive_vs_paired.svg +42 -0
- promptcheckup-1.0.0/benchmarks/results/power.csv +16 -0
- promptcheckup-1.0.0/benchmarks/results/power.svg +87 -0
- promptcheckup-1.0.0/benchmarks/run_checkup_simulation.py +432 -0
- promptcheckup-1.0.0/benchmarks/run_gate_benchmark.py +148 -0
- promptcheckup-1.0.0/docs/connect-your-agent.md +447 -0
- promptcheckup-1.0.0/examples/connect/anthropic_sdk/README.md +12 -0
- promptcheckup-1.0.0/examples/connect/anthropic_sdk/anthropic_agent.py +12 -0
- promptcheckup-1.0.0/examples/connect/anthropic_sdk/cases/manual.jsonl +3 -0
- promptcheckup-1.0.0/examples/connect/anthropic_sdk/promptcheckup.toml +25 -0
- promptcheckup-1.0.0/examples/connect/anthropic_sdk/prompts/system.md +1 -0
- promptcheckup-1.0.0/examples/connect/coding-agent-instructions.md +6 -0
- promptcheckup-1.0.0/examples/connect/doctor-output.txt +9 -0
- promptcheckup-1.0.0/examples/connect/node_cmd/README.md +11 -0
- promptcheckup-1.0.0/examples/connect/node_cmd/agent.mjs +5 -0
- promptcheckup-1.0.0/examples/connect/node_cmd/cases/manual.jsonl +20 -0
- promptcheckup-1.0.0/examples/connect/node_cmd/input.json +1 -0
- promptcheckup-1.0.0/examples/connect/node_cmd/node_score.py +5 -0
- promptcheckup-1.0.0/examples/connect/node_cmd/output.json +1 -0
- promptcheckup-1.0.0/examples/connect/node_cmd/promptcheckup.toml +20 -0
- promptcheckup-1.0.0/examples/connect/node_cmd/prompts/system.md +1 -0
- promptcheckup-1.0.0/examples/connect/openai_sdk/README.md +11 -0
- promptcheckup-1.0.0/examples/connect/openai_sdk/cases/manual.jsonl +3 -0
- promptcheckup-1.0.0/examples/connect/openai_sdk/openai_agent.py +13 -0
- promptcheckup-1.0.0/examples/connect/openai_sdk/promptcheckup.toml +25 -0
- promptcheckup-1.0.0/examples/connect/openai_sdk/prompts/system.md +1 -0
- promptcheckup-1.0.0/examples/connect/plain/README.md +12 -0
- promptcheckup-1.0.0/examples/connect/plain/after.py +8 -0
- promptcheckup-1.0.0/examples/connect/plain/before.py +8 -0
- promptcheckup-1.0.0/examples/connect/plain/cases/manual.jsonl +20 -0
- promptcheckup-1.0.0/examples/connect/plain/first-gate.sh +5 -0
- promptcheckup-1.0.0/examples/connect/plain/old-system.md +1 -0
- promptcheckup-1.0.0/examples/connect/plain/plain_agent.py +14 -0
- promptcheckup-1.0.0/examples/connect/plain/promptcheckup.toml +20 -0
- promptcheckup-1.0.0/examples/connect/plain/prompts/system.md +1 -0
- promptcheckup-1.0.0/examples/connect/plain/recording.py +19 -0
- promptcheckup-1.0.0/examples/connect/testing/README.md +9 -0
- promptcheckup-1.0.0/examples/connect/testing/test_no_lookahead.py +14 -0
- promptcheckup-1.0.0/examples/connect/testing/test_prompt_change.py +15 -0
- promptcheckup-1.0.0/examples/planted/README.md +19 -0
- promptcheckup-1.0.0/examples/planted/planted.py +59 -0
- promptcheckup-1.0.0/examples/support-bot/README.md +61 -0
- promptcheckup-1.0.0/examples/support-bot/bot/__init__.py +0 -0
- promptcheckup-1.0.0/examples/support-bot/bot/agent.py +56 -0
- promptcheckup-1.0.0/examples/support-bot/cases/recorded.jsonl +30 -0
- promptcheckup-1.0.0/examples/support-bot/promptcheckup.toml +29 -0
- promptcheckup-1.0.0/examples/support-bot/prompts/old-system.md +1 -0
- promptcheckup-1.0.0/examples/support-bot/prompts/system.md +1 -0
- promptcheckup-1.0.0/examples/support-bot/results/report-claude-haiku-5-5.md +21 -0
- promptcheckup-1.0.0/examples/support-bot/results/report-claude-opus-5-5.md +21 -0
- promptcheckup-1.0.0/examples/support-bot/results/report-claude-sonnet-5-5.md +21 -0
- promptcheckup-1.0.0/examples/trading/README.md +159 -0
- promptcheckup-1.0.0/examples/trading/cases/cases.jsonl +60 -0
- promptcheckup-1.0.0/examples/trading/check_policies.py +86 -0
- promptcheckup-1.0.0/examples/trading/data/market.csv +2401 -0
- promptcheckup-1.0.0/examples/trading/market.py +101 -0
- promptcheckup-1.0.0/examples/trading/pnl.py +39 -0
- promptcheckup-1.0.0/examples/trading/promptcheckup.toml +20 -0
- promptcheckup-1.0.0/examples/trading/prompts/old-policy.md +3 -0
- promptcheckup-1.0.0/examples/trading/prompts/policy.md +5 -0
- promptcheckup-1.0.0/examples/trading/record.py +63 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3612022f3c95bbd1/01bd7c2ac042.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3612022f3c95bbd1/067b11c15fb8.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3612022f3c95bbd1/0f0ac4cd3644.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3612022f3c95bbd1/100416484f40.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3612022f3c95bbd1/13512bc73b80.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3612022f3c95bbd1/161acf3ae713.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3612022f3c95bbd1/166cb1d5d2d5.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3612022f3c95bbd1/17a5bd38e9f3.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3612022f3c95bbd1/1c2960a75dc3.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3612022f3c95bbd1/1df6ba6c1055.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3612022f3c95bbd1/22e44e71c342.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3612022f3c95bbd1/245fd3e6d75a.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3612022f3c95bbd1/2841cf9d151f.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3612022f3c95bbd1/2b35866a8ffa.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3612022f3c95bbd1/2b7ed9847839.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3612022f3c95bbd1/34683277cc35.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3612022f3c95bbd1/3dd0fa562137.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3612022f3c95bbd1/4008e49a9ed7.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3612022f3c95bbd1/449e478647ce.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3612022f3c95bbd1/4959b2c662f7.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3612022f3c95bbd1/4c1eeeda85f1.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3612022f3c95bbd1/4cdd4bb99f8e.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3612022f3c95bbd1/4d2541303368.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3612022f3c95bbd1/5038b1751c2e.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3612022f3c95bbd1/58ebfe6c9b81.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3612022f3c95bbd1/614bdd2af8fa.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3612022f3c95bbd1/6346f029f65a.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3612022f3c95bbd1/63c06acd5d03.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3612022f3c95bbd1/667a94c09acb.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3612022f3c95bbd1/7086b7c80810.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3612022f3c95bbd1/7af22a918efc.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3612022f3c95bbd1/7cb92c3422a4.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3612022f3c95bbd1/87e4bcbd9c8b.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3612022f3c95bbd1/88c46c040b42.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3612022f3c95bbd1/8920712d2c53.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3612022f3c95bbd1/892c8f4cac1e.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3612022f3c95bbd1/8fcd60da9f0c.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3612022f3c95bbd1/922ac044fcd2.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3612022f3c95bbd1/a0346a176e5a.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3612022f3c95bbd1/aa77760b43f9.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3612022f3c95bbd1/ae3fa636c0ba.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3612022f3c95bbd1/afd2ae123d66.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3612022f3c95bbd1/b0577dce0228.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3612022f3c95bbd1/b297c58a46ac.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3612022f3c95bbd1/b9675d4e266c.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3612022f3c95bbd1/c0fa4b2720d4.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3612022f3c95bbd1/c1e3a020557f.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3612022f3c95bbd1/c88fb70201ff.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3612022f3c95bbd1/d0bf1c87a46b.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3612022f3c95bbd1/d0f7ad1fc6ac.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3612022f3c95bbd1/d3f4b81f7e6d.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3612022f3c95bbd1/d5b6b0f5954d.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3612022f3c95bbd1/dc2fa3b3f502.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3612022f3c95bbd1/e8acda23a199.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3612022f3c95bbd1/ecdfcd980f56.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3612022f3c95bbd1/ecf1f2ea83ce.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3612022f3c95bbd1/eecc0dd052cb.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3612022f3c95bbd1/f70f5bdee783.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3612022f3c95bbd1/f85a7e1cec8a.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3612022f3c95bbd1/ff151ec1d50c.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3f4b4b039d36e74a/01bd7c2ac042.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3f4b4b039d36e74a/067b11c15fb8.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3f4b4b039d36e74a/0f0ac4cd3644.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3f4b4b039d36e74a/100416484f40.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3f4b4b039d36e74a/13512bc73b80.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3f4b4b039d36e74a/161acf3ae713.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3f4b4b039d36e74a/166cb1d5d2d5.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3f4b4b039d36e74a/17a5bd38e9f3.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3f4b4b039d36e74a/1c2960a75dc3.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3f4b4b039d36e74a/1df6ba6c1055.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3f4b4b039d36e74a/22e44e71c342.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3f4b4b039d36e74a/245fd3e6d75a.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3f4b4b039d36e74a/2841cf9d151f.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3f4b4b039d36e74a/2b35866a8ffa.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3f4b4b039d36e74a/2b7ed9847839.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3f4b4b039d36e74a/34683277cc35.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3f4b4b039d36e74a/3dd0fa562137.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3f4b4b039d36e74a/4008e49a9ed7.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3f4b4b039d36e74a/449e478647ce.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3f4b4b039d36e74a/4959b2c662f7.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3f4b4b039d36e74a/4c1eeeda85f1.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3f4b4b039d36e74a/4cdd4bb99f8e.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3f4b4b039d36e74a/4d2541303368.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3f4b4b039d36e74a/5038b1751c2e.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3f4b4b039d36e74a/58ebfe6c9b81.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3f4b4b039d36e74a/614bdd2af8fa.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3f4b4b039d36e74a/6346f029f65a.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3f4b4b039d36e74a/63c06acd5d03.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3f4b4b039d36e74a/667a94c09acb.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3f4b4b039d36e74a/7086b7c80810.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3f4b4b039d36e74a/7af22a918efc.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3f4b4b039d36e74a/7cb92c3422a4.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3f4b4b039d36e74a/87e4bcbd9c8b.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3f4b4b039d36e74a/88c46c040b42.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3f4b4b039d36e74a/8920712d2c53.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3f4b4b039d36e74a/892c8f4cac1e.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3f4b4b039d36e74a/8fcd60da9f0c.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3f4b4b039d36e74a/922ac044fcd2.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3f4b4b039d36e74a/a0346a176e5a.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3f4b4b039d36e74a/aa77760b43f9.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3f4b4b039d36e74a/ae3fa636c0ba.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3f4b4b039d36e74a/afd2ae123d66.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3f4b4b039d36e74a/b0577dce0228.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3f4b4b039d36e74a/b297c58a46ac.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3f4b4b039d36e74a/b9675d4e266c.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3f4b4b039d36e74a/c0fa4b2720d4.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3f4b4b039d36e74a/c1e3a020557f.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3f4b4b039d36e74a/c88fb70201ff.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3f4b4b039d36e74a/d0bf1c87a46b.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3f4b4b039d36e74a/d0f7ad1fc6ac.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3f4b4b039d36e74a/d3f4b81f7e6d.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3f4b4b039d36e74a/d5b6b0f5954d.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3f4b4b039d36e74a/dc2fa3b3f502.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3f4b4b039d36e74a/e8acda23a199.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3f4b4b039d36e74a/ecdfcd980f56.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3f4b4b039d36e74a/ecf1f2ea83ce.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3f4b4b039d36e74a/eecc0dd052cb.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3f4b4b039d36e74a/f70f5bdee783.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3f4b4b039d36e74a/f85a7e1cec8a.json +1 -0
- promptcheckup-1.0.0/examples/trading/recordings/claude-haiku-5-5/3f4b4b039d36e74a/ff151ec1d50c.json +1 -0
- promptcheckup-1.0.0/examples/trading/results/report-claude-haiku-5-5.md +19 -0
- promptcheckup-1.0.0/examples/trading/trader.py +133 -0
- promptcheckup-1.0.0/pyproject.toml +59 -0
- promptcheckup-1.0.0/src/promptcheckup/__init__.py +7 -0
- promptcheckup-1.0.0/src/promptcheckup/checkup/__init__.py +62 -0
- promptcheckup-1.0.0/src/promptcheckup/checkup/checkup.py +336 -0
- promptcheckup-1.0.0/src/promptcheckup/checkup/evaluate.py +264 -0
- promptcheckup-1.0.0/src/promptcheckup/checkup/evolve.py +178 -0
- promptcheckup-1.0.0/src/promptcheckup/checkup/failures.py +65 -0
- promptcheckup-1.0.0/src/promptcheckup/checkup/ledger.py +82 -0
- promptcheckup-1.0.0/src/promptcheckup/checkup/report.py +390 -0
- promptcheckup-1.0.0/src/promptcheckup/checkup/snapshot.py +81 -0
- promptcheckup-1.0.0/src/promptcheckup/cli/__init__.py +5 -0
- promptcheckup-1.0.0/src/promptcheckup/cli/checkup.py +107 -0
- promptcheckup-1.0.0/src/promptcheckup/cli/config.py +218 -0
- promptcheckup-1.0.0/src/promptcheckup/cli/doctor.py +316 -0
- promptcheckup-1.0.0/src/promptcheckup/cli/evolve.py +93 -0
- promptcheckup-1.0.0/src/promptcheckup/cli/gate.py +117 -0
- promptcheckup-1.0.0/src/promptcheckup/cli/init.py +42 -0
- promptcheckup-1.0.0/src/promptcheckup/cli/main.py +91 -0
- promptcheckup-1.0.0/src/promptcheckup/cli/project.py +103 -0
- promptcheckup-1.0.0/src/promptcheckup/cli/prompts.py +91 -0
- promptcheckup-1.0.0/src/promptcheckup/cli/templates/example.jsonl +3 -0
- promptcheckup-1.0.0/src/promptcheckup/cli/templates/promptcheckup-checkup.yml +75 -0
- promptcheckup-1.0.0/src/promptcheckup/cli/templates/promptcheckup-gate.yml +35 -0
- promptcheckup-1.0.0/src/promptcheckup/cli/templates/promptcheckup.toml +34 -0
- promptcheckup-1.0.0/src/promptcheckup/data/__init__.py +6 -0
- promptcheckup-1.0.0/src/promptcheckup/data/cases.py +113 -0
- promptcheckup-1.0.0/src/promptcheckup/data/record.py +56 -0
- promptcheckup-1.0.0/src/promptcheckup/errors.py +42 -0
- promptcheckup-1.0.0/src/promptcheckup/llm/__init__.py +39 -0
- promptcheckup-1.0.0/src/promptcheckup/llm/client.py +162 -0
- promptcheckup-1.0.0/src/promptcheckup/llm/grade.py +36 -0
- promptcheckup-1.0.0/src/promptcheckup/llm/judge.py +178 -0
- promptcheckup-1.0.0/src/promptcheckup/llm/patterns.py +50 -0
- promptcheckup-1.0.0/src/promptcheckup/llm/prompting.py +66 -0
- promptcheckup-1.0.0/src/promptcheckup/llm/propose.py +94 -0
- promptcheckup-1.0.0/src/promptcheckup/llm/starter.py +42 -0
- promptcheckup-1.0.0/src/promptcheckup/runner/__init__.py +28 -0
- promptcheckup-1.0.0/src/promptcheckup/runner/agents.py +101 -0
- promptcheckup-1.0.0/src/promptcheckup/runner/replay.py +174 -0
- promptcheckup-1.0.0/src/promptcheckup/stats/__init__.py +5 -0
- promptcheckup-1.0.0/src/promptcheckup/stats/gate.py +175 -0
- promptcheckup-1.0.0/src/promptcheckup/testing.py +102 -0
- promptcheckup-1.0.0/tests/benchmarks/test_checkup_simulation.py +203 -0
- promptcheckup-1.0.0/tests/checkup/test_checkup.py +593 -0
- promptcheckup-1.0.0/tests/checkup/test_checkup_report.py +77 -0
- promptcheckup-1.0.0/tests/checkup/test_evaluate.py +305 -0
- promptcheckup-1.0.0/tests/checkup/test_evolve.py +268 -0
- promptcheckup-1.0.0/tests/checkup/test_ledger.py +96 -0
- promptcheckup-1.0.0/tests/checkup/test_report.py +134 -0
- promptcheckup-1.0.0/tests/checkup/test_snapshot.py +81 -0
- promptcheckup-1.0.0/tests/cli/test_checkup.py +211 -0
- promptcheckup-1.0.0/tests/cli/test_confidence.py +70 -0
- promptcheckup-1.0.0/tests/cli/test_config.py +191 -0
- promptcheckup-1.0.0/tests/cli/test_doctor.py +429 -0
- promptcheckup-1.0.0/tests/cli/test_evolve.py +188 -0
- promptcheckup-1.0.0/tests/cli/test_main.py +388 -0
- promptcheckup-1.0.0/tests/data/test_cases.py +149 -0
- promptcheckup-1.0.0/tests/data/test_record.py +242 -0
- promptcheckup-1.0.0/tests/examples/test_planted.py +37 -0
- promptcheckup-1.0.0/tests/examples/test_support_bot.py +78 -0
- promptcheckup-1.0.0/tests/examples/test_trading.py +367 -0
- promptcheckup-1.0.0/tests/examples/test_trading_results.py +110 -0
- promptcheckup-1.0.0/tests/llm/test_client.py +336 -0
- promptcheckup-1.0.0/tests/llm/test_grade.py +143 -0
- promptcheckup-1.0.0/tests/llm/test_judge.py +446 -0
- promptcheckup-1.0.0/tests/llm/test_patterns.py +54 -0
- promptcheckup-1.0.0/tests/llm/test_propose.py +115 -0
- promptcheckup-1.0.0/tests/llm/test_starter.py +45 -0
- promptcheckup-1.0.0/tests/runner/test_agents.py +208 -0
- promptcheckup-1.0.0/tests/runner/test_replay.py +170 -0
- promptcheckup-1.0.0/tests/runner/test_run_prompts.py +41 -0
- promptcheckup-1.0.0/tests/stats/test_gate.py +206 -0
- promptcheckup-1.0.0/tests/test_connect_examples.py +133 -0
- promptcheckup-1.0.0/tests/test_errors.py +104 -0
- promptcheckup-1.0.0/tests/test_public_api.py +6 -0
- promptcheckup-1.0.0/tests/test_readme.py +70 -0
- promptcheckup-1.0.0/tests/test_release.py +34 -0
- promptcheckup-1.0.0/tests/test_testing.py +140 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
name: ci
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
pull_request:
|
|
6
|
+
|
|
7
|
+
permissions:
|
|
8
|
+
contents: read
|
|
9
|
+
|
|
10
|
+
jobs:
|
|
11
|
+
test:
|
|
12
|
+
runs-on: ubuntu-latest
|
|
13
|
+
strategy:
|
|
14
|
+
matrix:
|
|
15
|
+
python-version: ["3.11", "3.12"]
|
|
16
|
+
steps:
|
|
17
|
+
- uses: actions/checkout@v4
|
|
18
|
+
- uses: actions/setup-python@v5
|
|
19
|
+
with:
|
|
20
|
+
python-version: ${{ matrix.python-version }}
|
|
21
|
+
- run: pip install pytest==9.1.1 ruff==0.17.1
|
|
22
|
+
- run: ruff check .
|
|
23
|
+
- run: ruff format --check .
|
|
24
|
+
- run: pytest
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
name: release
|
|
2
|
+
|
|
3
|
+
# Publishes to PyPI when a GitHub release is published, using trusted publishing:
|
|
4
|
+
# no API token is stored anywhere. One-time setup on pypi.org: add this repository,
|
|
5
|
+
# workflow file `release.yml` and environment `pypi` as a trusted publisher.
|
|
6
|
+
on:
|
|
7
|
+
release:
|
|
8
|
+
types: [published]
|
|
9
|
+
|
|
10
|
+
permissions:
|
|
11
|
+
contents: read
|
|
12
|
+
|
|
13
|
+
jobs:
|
|
14
|
+
build:
|
|
15
|
+
runs-on: ubuntu-latest
|
|
16
|
+
steps:
|
|
17
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
18
|
+
- uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0
|
|
19
|
+
with:
|
|
20
|
+
python-version: "3.12"
|
|
21
|
+
- run: python -m pip install build==1.6.1 pytest==9.1.1
|
|
22
|
+
- name: Run the tests on the exact commit being released
|
|
23
|
+
run: python -m pytest -q
|
|
24
|
+
- name: Require the release tag to match the package version
|
|
25
|
+
run: |
|
|
26
|
+
version=$(python -c 'import re, pathlib; print(re.search(r"__version__ = \"(.+)\"", pathlib.Path("src/promptcheckup/__init__.py").read_text())[1])')
|
|
27
|
+
test "v$version" = "$GITHUB_REF_NAME" || { echo "tag $GITHUB_REF_NAME does not match version $version"; exit 1; }
|
|
28
|
+
- run: python -m build
|
|
29
|
+
- uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
|
|
30
|
+
with:
|
|
31
|
+
name: dist
|
|
32
|
+
path: dist/
|
|
33
|
+
|
|
34
|
+
publish:
|
|
35
|
+
needs: build
|
|
36
|
+
runs-on: ubuntu-latest
|
|
37
|
+
environment: pypi
|
|
38
|
+
permissions:
|
|
39
|
+
id-token: write # trusted publishing; no token secret exists
|
|
40
|
+
steps:
|
|
41
|
+
- uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2
|
|
42
|
+
with:
|
|
43
|
+
name: dist
|
|
44
|
+
path: dist/
|
|
45
|
+
- uses: pypa/gh-action-pypi-publish@7245906fb61fa33a13554f9d5fb856fe61758086 # v1.14.3
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes are listed here. The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and versions follow [Semantic Versioning](https://semver.org/).
|
|
4
|
+
|
|
5
|
+
## [1.0.0] - 2026-11-01
|
|
6
|
+
|
|
7
|
+
The first public release.
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
|
|
11
|
+
- **Statistical gate.** A paired 95% t confidence interval with an exact Student t quantile, at least 20 cases, and three verdicts: better, worse, or not sure yet. A skew guard refuses "better" when a few large losses hide among small gains.
|
|
12
|
+
- **Paired replay.** Every case runs through both prompts back to back, so shared noise cancels. Outputs are cached, calls are capped, and errors are reported, never dropped.
|
|
13
|
+
- **Agents in any language.** A Python `module:function`, or any command speaking JSON over stdin and stdout. `@record` captures real cases from production, with redaction.
|
|
14
|
+
- **LLM judge.** Pairwise, order-swapped comparisons with a self-check that compares the old prompt with itself; an unreliable judge downgrades the verdict. Untrusted data cannot close its prompt block. A judge may reason before its JSON verdict; no temperature is sent unless configured.
|
|
15
|
+
- **`promptcheckup gate`** compares the prompts in a pull request with its base branch, with a workflow template that comments on the pull request.
|
|
16
|
+
- **`promptcheckup checkup`,** the weekly check-up:
|
|
17
|
+
- drift against last week's snapshot, including after a prompt change;
|
|
18
|
+
- starter cases when none exist;
|
|
19
|
+
- failure patterns;
|
|
20
|
+
- one small proposed edit that must pass the gate;
|
|
21
|
+
- a workflow template that posts to one issue and opens a pull request. It never merges.
|
|
22
|
+
- **`promptcheckup evolve`:** repeated proposals, learned on fixed-rule learning cases and gated on held-out cases at a stricter confidence for every extra round. It never merges.
|
|
23
|
+
- **Trial ledger:** reports how many prompt variants were tried on the same cases and how many false "better" verdicts that many trials would produce by chance. `run.confidence` sets the base confidence.
|
|
24
|
+
- **`promptcheckup doctor`:** checks a project's wiring with two agent calls and at most one judge call, including whether the agent really uses the prompts it is given.
|
|
25
|
+
- **`promptcheckup.testing`:** `gate`, `assert_better`, `assert_not_worse` and `assert_no_lookahead`, for use in an existing test suite.
|
|
26
|
+
- **Examples:**
|
|
27
|
+
- a support-bot quickstart with real reports from three hosted judges;
|
|
28
|
+
- a trading agent on a seeded synthetic market, with recorded replies, a look-ahead test and outcome-blind cases;
|
|
29
|
+
- a planted example comparing naive and paired evaluation.
|
|
30
|
+
- **Benchmarks:** false-positive and power simulations of the gate, and a simulated year of weekly check-ups with planted incidents.
|
|
31
|
+
- **Documentation:** a guide for connecting an agent, and the full design in `DESIGN.md`.
|
|
32
|
+
|
|
33
|
+
[1.0.0]: https://github.com/gael55x/promptcheckup/releases/tag/v1.0.0
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
cff-version: 1.2.0
|
|
2
|
+
message: "If you use promptcheckup in your work, please cite it as below."
|
|
3
|
+
type: software
|
|
4
|
+
title: "promptcheckup: paired replay for deciding whether a prompt change made an AI agent better"
|
|
5
|
+
version: 1.0.0
|
|
6
|
+
license: Apache-2.0
|
|
7
|
+
repository-code: "https://github.com/gael55x/promptcheckup"
|
|
8
|
+
authors:
|
|
9
|
+
- family-names: Amolong
|
|
10
|
+
given-names: Gaille
|
|
11
|
+
keywords:
|
|
12
|
+
- large language models
|
|
13
|
+
- agents
|
|
14
|
+
- prompt engineering
|
|
15
|
+
- evaluation
|
|
16
|
+
- paired comparison
|
|
17
|
+
references:
|
|
18
|
+
- type: article
|
|
19
|
+
title: "MemTrial: Learning When to Trust Memory in LLM Portfolio Agents"
|
|
20
|
+
authors:
|
|
21
|
+
- family-names: Wu
|
|
22
|
+
given-names: Guanghao
|
|
23
|
+
- family-names: Cai
|
|
24
|
+
given-names: Zhuo
|
|
25
|
+
- family-names: Wang
|
|
26
|
+
given-names: Shoujin
|
|
27
|
+
year: 2026
|
|
28
|
+
url: "https://arxiv.org/abs/2610.11732"
|
|
29
|
+
notes: "The paired-replay gate: compare decisions on the same inputs so shared noise cancels."
|
|
30
|
+
- type: article
|
|
31
|
+
title: "EvolveTrade: Experience-Driven Policy Refinement for Self-Evolving LLM Trading Agents"
|
|
32
|
+
authors:
|
|
33
|
+
- family-names: Kim
|
|
34
|
+
given-names: Sehee
|
|
35
|
+
- family-names: Choi
|
|
36
|
+
given-names: Yumin
|
|
37
|
+
- family-names: Kang
|
|
38
|
+
given-names: Minki
|
|
39
|
+
- family-names: Hwang
|
|
40
|
+
given-names: Sung Ju
|
|
41
|
+
year: 2026
|
|
42
|
+
url: "https://arxiv.org/abs/2609.17632"
|
|
43
|
+
notes: "The proposer: an LLM rewrites the agent's prompt from decision traces and outcomes."
|
|
44
|
+
- type: article
|
|
45
|
+
title: "SHARP: A Self-Evolving Human-Auditable Rubric Policy for Financial Trading Agents"
|
|
46
|
+
authors:
|
|
47
|
+
- family-names: Chen
|
|
48
|
+
given-names: Xiwen
|
|
49
|
+
- family-names: Zhu
|
|
50
|
+
given-names: Wenhui
|
|
51
|
+
- family-names: Zheng
|
|
52
|
+
given-names: Songzhu
|
|
53
|
+
- family-names: Rasul
|
|
54
|
+
given-names: Kashif
|
|
55
|
+
- family-names: Deng
|
|
56
|
+
given-names: Yueyue
|
|
57
|
+
- family-names: Li
|
|
58
|
+
given-names: Huayu
|
|
59
|
+
year: 2026
|
|
60
|
+
url: "https://arxiv.org/abs/2605.06822"
|
|
61
|
+
notes: "Small, attributable rule edits with validation, and an audit trail."
|
|
62
|
+
- type: article
|
|
63
|
+
title: "ATLAS: Adaptive Trading with LLM AgentS Through Dynamic Prompt Optimization and Multi-Agent Coordination"
|
|
64
|
+
authors:
|
|
65
|
+
- family-names: Papadakis
|
|
66
|
+
given-names: Charidimos
|
|
67
|
+
- family-names: Dimitriou
|
|
68
|
+
given-names: Angeliki
|
|
69
|
+
- family-names: Filandrianos
|
|
70
|
+
given-names: Giorgos
|
|
71
|
+
- family-names: Lymperaiou
|
|
72
|
+
given-names: Maria
|
|
73
|
+
- family-names: Thomas
|
|
74
|
+
given-names: Konstantinos
|
|
75
|
+
- family-names: Stamou
|
|
76
|
+
given-names: Giorgos
|
|
77
|
+
year: 2025
|
|
78
|
+
url: "https://arxiv.org/abs/2510.15949"
|
|
79
|
+
notes: "Prior art: feedback-driven prompt optimization for a trading agent."
|