judgetap 0.0.2.dev30__tar.gz → 0.1.1.dev32__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/.github/workflows/release.yml +14 -4
  2. judgetap-0.1.1.dev32/.release-please-manifest.json +1 -0
  3. judgetap-0.1.1.dev32/CHANGELOG.md +53 -0
  4. {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/PKG-INFO +1 -1
  5. {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/pyproject.toml +1 -1
  6. {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/release-please-config.json +2 -1
  7. {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/src/judgetap/__init__.py +1 -1
  8. {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/uv.lock +1589 -1575
  9. judgetap-0.0.2.dev30/.release-please-manifest.json +0 -1
  10. {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/.github/workflows/ci.yml +0 -0
  11. {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/.github/workflows/demo.yml +0 -0
  12. {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/.gitignore +0 -0
  13. {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/.python-version +0 -0
  14. {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/CONTRIBUTING.md +0 -0
  15. {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/LICENSE +0 -0
  16. {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/README.md +0 -0
  17. {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/docs/SPEC.md +0 -0
  18. {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/docs/demo.tape +0 -0
  19. {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/src/judgetap/_compat.py +0 -0
  20. {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/src/judgetap/api.py +0 -0
  21. {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/src/judgetap/cascade.py +0 -0
  22. {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/src/judgetap/cli.py +0 -0
  23. {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/src/judgetap/dashboard/__init__.py +0 -0
  24. {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/src/judgetap/dashboard/data.py +0 -0
  25. {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/src/judgetap/dashboard/page.html +0 -0
  26. {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/src/judgetap/dashboard/server.py +0 -0
  27. {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/src/judgetap/decision_log.py +0 -0
  28. {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/src/judgetap/engine.py +0 -0
  29. {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/src/judgetap/engines/__init__.py +0 -0
  30. {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/src/judgetap/engines/agentjev.py +0 -0
  31. {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/src/judgetap/engines/jev.py +0 -0
  32. {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/src/judgetap/engines/laya.py +0 -0
  33. {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/src/judgetap/engines/llm.py +0 -0
  34. {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/src/judgetap/errors.py +0 -0
  35. {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/src/judgetap/evaluate.py +0 -0
  36. {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/src/judgetap/guard/__init__.py +0 -0
  37. {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/src/judgetap/guard/core.py +0 -0
  38. {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/src/judgetap/guard/hook.py +0 -0
  39. {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/src/judgetap/guard/install.py +0 -0
  40. {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/src/judgetap/guard/loop.py +0 -0
  41. {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/src/judgetap/guard/rules.py +0 -0
  42. {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/src/judgetap/guard/stop.py +0 -0
  43. {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/src/judgetap/py.typed +0 -0
  44. {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/src/judgetap/secrets.py +0 -0
  45. {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/src/judgetap/testing.py +0 -0
  46. {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/src/judgetap/types.py +0 -0
  47. {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/tests/test_api.py +0 -0
  48. {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/tests/test_call_accounting.py +0 -0
  49. {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/tests/test_calls.py +0 -0
  50. {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/tests/test_cascade.py +0 -0
  51. {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/tests/test_dashboard.py +0 -0
  52. {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/tests/test_decision_log.py +0 -0
  53. {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/tests/test_engine_jev.py +0 -0
  54. {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/tests/test_engine_llm.py +0 -0
  55. {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/tests/test_engine_local.py +0 -0
  56. {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/tests/test_evaluate.py +0 -0
  57. {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/tests/test_guard_agents.py +0 -0
  58. {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/tests/test_guard_core.py +0 -0
  59. {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/tests/test_guard_hook.py +0 -0
  60. {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/tests/test_guard_loop.py +0 -0
  61. {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/tests/test_guard_rules.py +0 -0
  62. {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/tests/test_guard_stop.py +0 -0
  63. {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/tests/test_guard_trust.py +0 -0
  64. {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/tests/test_questions.py +0 -0
  65. {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/tests/test_robustness_68.py +0 -0
  66. {judgetap-0.0.2.dev30 → judgetap-0.1.1.dev32}/tests/test_secrets.py +0 -0
@@ -10,6 +10,12 @@ on:
10
10
  branches: [main]
11
11
  release:
12
12
  types: [published]
13
+ # Publish an existing tag by hand (e.g. a release whose publish job failed).
14
+ workflow_dispatch:
15
+ inputs:
16
+ tag:
17
+ description: "Existing release tag to publish, e.g. v0.1.0"
18
+ required: true
13
19
 
14
20
  permissions:
15
21
  contents: write
@@ -66,7 +72,8 @@ jobs:
66
72
  if: >-
67
73
  always() &&
68
74
  ((github.event_name == 'push' && needs.release-please.outputs.released == 'true') ||
69
- (github.event_name == 'release' && !github.event.release.prerelease))
75
+ (github.event_name == 'release' && !github.event.release.prerelease) ||
76
+ github.event_name == 'workflow_dispatch')
70
77
  runs-on: ubuntu-latest
71
78
  environment: pypi
72
79
  permissions:
@@ -75,16 +82,19 @@ jobs:
75
82
  steps:
76
83
  - uses: actions/checkout@v4
77
84
  with:
78
- ref: ${{ needs.release-please.outputs.tag || github.event.release.tag_name }}
85
+ ref: ${{ needs.release-please.outputs.tag || github.event.release.tag_name || inputs.tag }}
79
86
  - uses: astral-sh/setup-uv@v6
80
87
  - name: Check the tag matches the package version
81
88
  # The tag arrives through the environment, never interpolated into the
82
89
  # script: a release tag is user-controlled text.
83
90
  env:
84
- TAG: ${{ needs.release-please.outputs.tag || github.event.release.tag_name }}
91
+ TAG: ${{ needs.release-please.outputs.tag || github.event.release.tag_name || inputs.tag }}
85
92
  run: |
86
93
  version=$(uv run --no-project python -c "import tomllib; print(tomllib.load(open('pyproject.toml','rb'))['project']['version'])")
87
- test "${TAG#v}" = "$version" || { echo "tag does not match version $version"; exit 1; }
94
+ # Tags are vX.Y.Z; older ones carry the component: judgetap-vX.Y.Z.
95
+ tag_version="${TAG#judgetap-}"
96
+ tag_version="${tag_version#v}"
97
+ test "$tag_version" = "$version" || { echo "tag does not match version $version"; exit 1; }
88
98
  - run: uv build
89
99
  - uses: pypa/gh-action-pypi-publish@release/v1
90
100
 
@@ -0,0 +1 @@
1
+ {".":"0.1.0"}
@@ -0,0 +1,53 @@
1
+ # Changelog
2
+
3
+ ## [0.1.0](https://github.com/mergesafe-ai/judgetap/compare/judgetap-v0.0.1...judgetap-v0.1.0) (2026-09-27)
4
+
5
+
6
+ ### ⚠ BREAKING CHANGES
7
+
8
+ * rename snapjudge to judgetap ([#52](https://github.com/mergesafe-ai/judgetap/issues/52))
9
+
10
+ ### Features
11
+
12
+ * **cascade:** escalate low-confidence answers across engines ([#16](https://github.com/mergesafe-ai/judgetap/issues/16)) ([d062390](https://github.com/mergesafe-ai/judgetap/commit/d06239011f42b5b5773a651771b1e77c1edc6aae))
13
+ * **core:** typed decision API with validated Decision results ([#9](https://github.com/mergesafe-ai/judgetap/issues/9)) ([20d8af9](https://github.com/mergesafe-ai/judgetap/commit/20d8af9542acce650425af60232fdd8414e4f6b2)), closes [#1](https://github.com/mergesafe-ai/judgetap/issues/1)
14
+ * **dashboard:** local page over the guard log ([#25](https://github.com/mergesafe-ai/judgetap/issues/25)) ([1afa1a1](https://github.com/mergesafe-ai/judgetap/commit/1afa1a10817ab5ce7653e48b8cc14bdfeaef65d9))
15
+ * engine keys from the OS keychain ([#48](https://github.com/mergesafe-ai/judgetap/issues/48)) ([3da0065](https://github.com/mergesafe-ai/judgetap/commit/3da006589f3f661d356c4d796a77c07225e176d8))
16
+ * engines report calls; dashboard engine metrics from calls ([#58](https://github.com/mergesafe-ai/judgetap/issues/58)) ([a54c77a](https://github.com/mergesafe-ai/judgetap/commit/a54c77a67dfc33e0e1856dda5624043367dc6c3f))
17
+ * **engines:** any TypeSafe-compatible server by base URL ([#45](https://github.com/mergesafe-ai/judgetap/issues/45)) ([6525e65](https://github.com/mergesafe-ai/judgetap/commit/6525e652468d4df62856c424106e1466d6b118b6))
18
+ * **engines:** Jev and LiteLLM adapters with spec-string loading ([#12](https://github.com/mergesafe-ai/judgetap/issues/12)) ([93400ef](https://github.com/mergesafe-ai/judgetap/commit/93400ef438c5093259b1c122b5133dbef35db6bb)), closes [#2](https://github.com/mergesafe-ai/judgetap/issues/2)
19
+ * **engines:** local Laya and AgentJev adapters ([#18](https://github.com/mergesafe-ai/judgetap/issues/18)) ([08363ba](https://github.com/mergesafe-ai/judgetap/commit/08363ba7c287abfc8e3b32018d779450f867b601))
20
+ * **eval:** calibration check across engines ([#20](https://github.com/mergesafe-ai/judgetap/issues/20)) ([c747835](https://github.com/mergesafe-ai/judgetap/commit/c74783502f2ddc1ee6d95bbff680986710e750e0))
21
+ * **guard:** Cursor and Codex support ([#24](https://github.com/mergesafe-ai/judgetap/issues/24)) ([654a807](https://github.com/mergesafe-ai/judgetap/commit/654a8078251eb163033bbc1e361d3ea4ed97ba55))
22
+ * **guard:** default engine: detect and record, else rules only; register snapjudge eval ([#23](https://github.com/mergesafe-ai/judgetap/issues/23)) ([5a36d92](https://github.com/mergesafe-ai/judgetap/commit/5a36d9252c5c0077878e6eb86c70cc4fe028adc7))
23
+ * **guard:** loop detection on PostToolUse ([#54](https://github.com/mergesafe-ai/judgetap/issues/54)) ([a2a16d4](https://github.com/mergesafe-ai/judgetap/commit/a2a16d40c8c7b76caf5ff6daeb9cf96ccd60d966))
24
+ * **guard:** opt-in task-done check on Stop ([#55](https://github.com/mergesafe-ai/judgetap/issues/55)) ([4923eed](https://github.com/mergesafe-ai/judgetap/commit/4923eed1d8de5c504982d1409666d8a91d361540)), closes [#26](https://github.com/mergesafe-ai/judgetap/issues/26)
25
+ * **guard:** pre-action guard for Claude Code ([#17](https://github.com/mergesafe-ai/judgetap/issues/17)) ([b5e7f3b](https://github.com/mergesafe-ai/judgetap/commit/b5e7f3bd87cac7af8a651626caa26c99ab4d6900))
26
+ * opt-in library decision log shown on the dashboard ([#46](https://github.com/mergesafe-ai/judgetap/issues/46)) ([7adcec3](https://github.com/mergesafe-ai/judgetap/commit/7adcec38ff737cd43e116c826b963c4da7ed9c80))
27
+ * rename snapjudge to judgetap ([#52](https://github.com/mergesafe-ai/judgetap/issues/52)) ([19f38cc](https://github.com/mergesafe-ai/judgetap/commit/19f38cc78a1e21f9bb1bb282e80290bd40676803))
28
+
29
+
30
+ ### Bug Fixes
31
+
32
+ * cascade and API keep calls and cost on partial failures ([#70](https://github.com/mergesafe-ai/judgetap/issues/70)) ([be33207](https://github.com/mergesafe-ai/judgetap/commit/be33207aa98a791698b3070e9824da4075cabdc9))
33
+ * **core:** harden question and answer validation (review of [#9](https://github.com/mergesafe-ai/judgetap/issues/9)) ([#11](https://github.com/mergesafe-ai/judgetap/issues/11)) ([56e0d0f](https://github.com/mergesafe-ai/judgetap/commit/56e0d0f979b693c4dff20c62f25b0b96c7a29f5b))
34
+ * **dashboard:** library layer filter, source-aware outcomes, redact library answers ([#53](https://github.com/mergesafe-ai/judgetap/issues/53)) ([e53fca9](https://github.com/mergesafe-ai/judgetap/commit/e53fca94861732350c90fe2967286bfff121beeb)), closes [#51](https://github.com/mergesafe-ai/judgetap/issues/51)
35
+ * **dashboard:** odd log values, strict JSON, bound port; keys/env fixes ([#72](https://github.com/mergesafe-ai/judgetap/issues/72)) ([d9235eb](https://github.com/mergesafe-ai/judgetap/commit/d9235eb348ae94207d311e8f772c6fce3444a455))
36
+ * **dashboard:** true call counts, cached polling, Content-Length 400, empty chart message ([#36](https://github.com/mergesafe-ai/judgetap/issues/36)) ([435524e](https://github.com/mergesafe-ai/judgetap/commit/435524ee225d72c17cbf87e39b1537a0d8b95cef)), closes [#35](https://github.com/mergesafe-ai/judgetap/issues/35)
37
+ * **guard:** a failed stop judge logs the calls it made and fails open ([#59](https://github.com/mergesafe-ai/judgetap/issues/59)) ([8813bfe](https://github.com/mergesafe-ai/judgetap/commit/8813bfe4a9873f75c1f5ef87493361a8df96371c))
38
+ * **guard:** combined git clean flags; global/system push config ([#22](https://github.com/mergesafe-ai/judgetap/issues/22)) ([93b8a1f](https://github.com/mergesafe-ai/judgetap/commit/93b8a1f72588006577f9e22dd03f92ce7ddecf23))
39
+ * **guard:** hooks match Claude Code's contract (PostToolUseFailure, last_assistant_message) ([#73](https://github.com/mergesafe-ai/judgetap/issues/73)) ([bc5867f](https://github.com/mergesafe-ai/judgetap/commit/bc5867fd8417f55e440d12f292aa70bcd8fa43f5))
40
+ * **guard:** redact basic-auth, bearer and more token formats ([#37](https://github.com/mergesafe-ai/judgetap/issues/37)) ([38a4d82](https://github.com/mergesafe-ai/judgetap/commit/38a4d82256aca391c63d0a77e6a0117d63cb8db4))
41
+ * **guard:** repo config can only tighten; odd input can't fail open; redact common secrets ([#71](https://github.com/mergesafe-ai/judgetap/issues/71)) ([e43db9b](https://github.com/mergesafe-ai/judgetap/commit/e43db9b4641a035b78b92d125b440381f751a995))
42
+ * review follow-ups from [#11](https://github.com/mergesafe-ai/judgetap/issues/11), [#12](https://github.com/mergesafe-ai/judgetap/issues/12), [#16](https://github.com/mergesafe-ai/judgetap/issues/16); snapjudge.toml cascade config ([#19](https://github.com/mergesafe-ai/judgetap/issues/19)) ([419641f](https://github.com/mergesafe-ai/judgetap/commit/419641fa582d3f4b03bd7d48ade70390afc99834))
43
+
44
+
45
+ ### Performance Improvements
46
+
47
+ * **guard:** stop hook reads the transcript window once ([#57](https://github.com/mergesafe-ai/judgetap/issues/57)) ([305306c](https://github.com/mergesafe-ai/judgetap/commit/305306cc758d0c0eaf0a1cad8bd5eae9a03750dd)), closes [#56](https://github.com/mergesafe-ai/judgetap/issues/56)
48
+
49
+
50
+ ### Documentation
51
+
52
+ * add CONTRIBUTING.md ([#44](https://github.com/mergesafe-ai/judgetap/issues/44)) ([d81f1dd](https://github.com/mergesafe-ai/judgetap/commit/d81f1ddceea275d80b3e04ce2468ceec7c5f8d5d)), closes [#40](https://github.com/mergesafe-ai/judgetap/issues/40)
53
+ * launch README, demo tape and render workflow ([#49](https://github.com/mergesafe-ai/judgetap/issues/49)) ([33f3c04](https://github.com/mergesafe-ai/judgetap/commit/33f3c04c9fc233b7b724e4f1be48c798c5fc9fde))
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: judgetap
3
- Version: 0.0.2.dev30
3
+ Version: 0.1.1.dev32
4
4
  Summary: Fast typed decisions (choice, score, yes/no) across Jev-style engines, plus a guard for coding agents. Early development.
5
5
  Project-URL: Homepage, https://github.com/mergesafe-ai/judgetap
6
6
  Author-email: Omer Bar-Ness <omer@zsquared.io>
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "judgetap"
3
- version = "0.0.2.dev30"
3
+ version = "0.1.1.dev32"
4
4
  description = "Fast typed decisions (choice, score, yes/no) across Jev-style engines, plus a guard for coding agents. Early development."
5
5
  readme = "README.md"
6
6
  license = "Apache-2.0"
@@ -8,7 +8,8 @@
8
8
  "changelog-path": "CHANGELOG.md",
9
9
  "extra-files": [
10
10
  "src/judgetap/__init__.py"
11
- ]
11
+ ],
12
+ "include-component-in-tag": false
12
13
  }
13
14
  },
14
15
  "$schema": "https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json"
@@ -23,7 +23,7 @@ from judgetap.errors import (
23
23
  )
24
24
  from judgetap.types import Decision, Question
25
25
 
26
- __version__ = "0.0.2.dev30" # x-release-please-version
26
+ __version__ = "0.1.1.dev32" # x-release-please-version
27
27
 
28
28
  __all__ = [
29
29
  "Cascade",