open-code-review-toolkit 0.9.0__tar.gz → 0.9.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/PKG-INFO +9 -10
  2. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/README.md +8 -9
  3. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/_version.py +2 -2
  4. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/preflight.py +1 -1
  5. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/review_runner.py +17 -0
  6. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/.gitignore +0 -0
  7. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/LICENSE +0 -0
  8. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/pyproject.toml +0 -0
  9. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/__init__.py +0 -0
  10. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/cli.py +0 -0
  11. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/common/__init__.py +0 -0
  12. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/common/filesystem.py +0 -0
  13. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/common/git.py +0 -0
  14. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/common/language.py +0 -0
  15. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/common/markdown.py +0 -0
  16. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/common/redaction.py +0 -0
  17. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/config_writer.py +0 -0
  18. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/configure.py +0 -0
  19. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/context/__init__.py +0 -0
  20. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/context/adapters.py +0 -0
  21. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/context/broker.py +0 -0
  22. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/context/ci_outcomes.py +0 -0
  23. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/context/contracts.py +0 -0
  24. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/context/dlp.py +0 -0
  25. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/context/mcp.py +0 -0
  26. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/context/policy.py +0 -0
  27. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/context/recognizers.py +0 -0
  28. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/context/store.py +0 -0
  29. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/evidence/__init__.py +0 -0
  30. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/evidence/__main__.py +0 -0
  31. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/evidence/actions.py +0 -0
  32. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/evidence/artifacts.py +0 -0
  33. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/evidence/categorize.py +0 -0
  34. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/evidence/collect.py +0 -0
  35. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/evidence/collectors/__init__.py +0 -0
  36. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/evidence/collectors/graphs.py +0 -0
  37. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/evidence/collectors/orchestration.py +0 -0
  38. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/evidence/collectors/projections.py +0 -0
  39. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/evidence/collectors/registry.py +0 -0
  40. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/evidence/collectors/sources.py +0 -0
  41. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/evidence/coverage.py +0 -0
  42. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/evidence/ecosystems/__init__.py +0 -0
  43. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/evidence/ecosystems/ansible/__init__.py +0 -0
  44. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/evidence/ecosystems/ansible/requirements.py +0 -0
  45. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/evidence/ecosystems/ansible/topology.py +0 -0
  46. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/evidence/ecosystems/contracts.py +0 -0
  47. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/evidence/ecosystems/go.py +0 -0
  48. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/evidence/ecosystems/javascript.py +0 -0
  49. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/evidence/ecosystems/php.py +0 -0
  50. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/evidence/ecosystems/python.py +0 -0
  51. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/evidence/frameworks/__init__.py +0 -0
  52. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/evidence/frameworks/contracts.py +0 -0
  53. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/evidence/frameworks/detection.py +0 -0
  54. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/evidence/frameworks/providers/__init__.py +0 -0
  55. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/evidence/frameworks/providers/frontend.py +0 -0
  56. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/evidence/frameworks/providers/go.py +0 -0
  57. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/evidence/frameworks/providers/php.py +0 -0
  58. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/evidence/frameworks/providers/python.py +0 -0
  59. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/evidence/frameworks/registry.py +0 -0
  60. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/evidence/frameworks/schema.py +0 -0
  61. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/evidence/frameworks/templates.py +0 -0
  62. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/evidence/infrastructure.py +0 -0
  63. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/evidence/invocation.py +0 -0
  64. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/evidence/mcp.py +0 -0
  65. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/evidence/model.py +0 -0
  66. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/evidence/policy/__init__.py +0 -0
  67. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/evidence/policy/contracts.py +0 -0
  68. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/evidence/policy/decisions.py +0 -0
  69. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/evidence/policy/guidance.py +0 -0
  70. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/evidence/policy/registry.py +0 -0
  71. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/evidence/policy/schema.py +0 -0
  72. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/evidence/policy/scopes.py +0 -0
  73. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/evidence/project.py +0 -0
  74. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/evidence/repository.py +0 -0
  75. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/evidence/review_context.py +0 -0
  76. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/evidence/store/__init__.py +0 -0
  77. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/evidence/store/atomic.py +0 -0
  78. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/evidence/store/contracts.py +0 -0
  79. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/evidence/store/core.py +0 -0
  80. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/evidence/store/readback.py +0 -0
  81. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/evidence/store/values.py +0 -0
  82. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/mcp_config.py +0 -0
  83. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/ocr_result.py +0 -0
  84. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/posting/__init__.py +0 -0
  85. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/posting/__main__.py +0 -0
  86. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/posting/approval.py +0 -0
  87. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/posting/comments.py +0 -0
  88. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/posting/formatting.py +0 -0
  89. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/posting/gitlab.py +0 -0
  90. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/posting/gitlab_approval.py +0 -0
  91. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/posting/markers.py +0 -0
  92. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/posting/payloads.py +0 -0
  93. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/posting/reconciliation.py +0 -0
  94. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/posting/result.py +0 -0
  95. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/posting/settings.py +0 -0
  96. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/posting/snapshot.py +0 -0
  97. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/posting/suggestions.py +0 -0
  98. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/posting/transaction.py +0 -0
  99. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/posting/workflow.py +0 -0
  100. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/pre_execution.py +0 -0
  101. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/provider_config.py +0 -0
  102. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/provider_failure.py +0 -0
  103. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/providers/__init__.py +0 -0
  104. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/providers/gitlab.py +0 -0
  105. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/providers/gitlab_ci.py +0 -0
  106. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/providers/gitlab_context.py +0 -0
  107. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/providers/gitlab_discussions.py +0 -0
  108. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/providers/gitlab_identity.py +0 -0
  109. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/providers/gitlab_remediation.py +0 -0
  110. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/py.typed +0 -0
  111. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/result_contract.py +0 -0
  112. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/result_usage.py +0 -0
  113. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/review_identity.py +0 -0
  114. {open_code_review_toolkit-0.9.0 → open_code_review_toolkit-0.9.1}/src/ocr_toolkit/review_receipt.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: open-code-review-toolkit
3
- Version: 0.9.0
3
+ Version: 0.9.1
4
4
  Summary: Unofficial GitLab CI integration layer for Open Code Review
5
5
  Project-URL: Homepage, https://github.com/xeonvs/open-code-review-toolkit
6
6
  Project-URL: Repository, https://github.com/xeonvs/open-code-review-toolkit
@@ -257,13 +257,12 @@ python -m venv .venv
257
257
  python -m pip install open-code-review-toolkit
258
258
  ```
259
259
 
260
- The toolkit does not bundle OCR. Download the platform asset for exact
261
- [Open Code Review 1.11.3](https://github.com/alibaba/open-code-review/releases/tag/v1.11.3),
262
- verify it before installation against the [compatibility manifest](compatibility/ocr-support.json),
263
- and place the verified binary on `PATH`. The current Linux amd64 digest is
264
- `9726204ac81baee153fd65b1ff357c380f73e9d8091c4a73c3c9fb541b5164cb`; Darwin arm64 is
265
- `515cd92ce300b62dea2bcaf53e910cdf57b681e1d58bbd0a9e8e49617bca52fa`. The manifest owns
266
- the other platform hashes.
260
+ The toolkit does not bundle OCR. Use `recommended_version` in the
261
+ [compatibility manifest](compatibility/ocr-support.json) for this toolkit revision
262
+ to select the exact [upstream release](https://github.com/alibaba/open-code-review/releases).
263
+ Download its platform asset, verify it against that release entry's asset SHA-256,
264
+ and place the verified binary on `PATH`. Do not substitute the latest upstream
265
+ release or use another toolkit revision's manifest.
267
266
 
268
267
  Verify the installation without contacting an LLM provider:
269
268
 
@@ -272,14 +271,14 @@ ocr --version
272
271
  ocr-ci --help
273
272
  ```
274
273
 
275
- `ocr --version` must report `open-code-review v1.11.3`; `ocr-ci --help` must exit
274
+ `ocr --version` must report the manifest's exact `recommended_version`; `ocr-ci --help` must exit
276
275
  successfully. `ocr-ci preflight` is an operational configuration check, not the installation
277
276
  smoke test.
278
277
 
279
278
  The exact recommended OCR release and its verified asset checksums live in the [versioned compatibility manifest](compatibility/ocr-support.json). CI should pin that release and checksum before execution.
280
279
  The [versioned compatibility policy](docs/compatibility.md) records tested assets and evidence and describes the conservative Dependabot-like qualification workflow for later upstream releases.
281
280
  Review output defaults to English. `OCR_REVIEW_LANGUAGE` accepts another explicit language name when a project needs localized review output; for example, `OCR_REVIEW_LANGUAGE=Russian`.
282
- The current OCR 1.11.3 integration defaults `OCR_REVIEW_EFFORT` to `medium` for two review rounds. `low` and `high` are explicit one- and three-round alternatives; see the [configuration reference](docs/configuration.md#review-effort) for cost, budget, and precedence boundaries.
281
+ The toolkit defaults `OCR_REVIEW_EFFORT` to `medium` for two review rounds. `low` and `high` are explicit one- and three-round alternatives; see the [configuration reference](docs/configuration.md#review-effort) for cost, budget, and precedence boundaries.
283
282
 
284
283
  Stable distributions are published to [PyPI](https://pypi.org/project/open-code-review-toolkit/) and mirrored as checksum-listed, provenance-attested assets in the corresponding [GitHub Release](https://github.com/xeonvs/open-code-review-toolkit/releases). Development snapshots are published only to TestPyPI.
285
284
 
@@ -30,13 +30,12 @@ python -m venv .venv
30
30
  python -m pip install open-code-review-toolkit
31
31
  ```
32
32
 
33
- The toolkit does not bundle OCR. Download the platform asset for exact
34
- [Open Code Review 1.11.3](https://github.com/alibaba/open-code-review/releases/tag/v1.11.3),
35
- verify it before installation against the [compatibility manifest](compatibility/ocr-support.json),
36
- and place the verified binary on `PATH`. The current Linux amd64 digest is
37
- `9726204ac81baee153fd65b1ff357c380f73e9d8091c4a73c3c9fb541b5164cb`; Darwin arm64 is
38
- `515cd92ce300b62dea2bcaf53e910cdf57b681e1d58bbd0a9e8e49617bca52fa`. The manifest owns
39
- the other platform hashes.
33
+ The toolkit does not bundle OCR. Use `recommended_version` in the
34
+ [compatibility manifest](compatibility/ocr-support.json) for this toolkit revision
35
+ to select the exact [upstream release](https://github.com/alibaba/open-code-review/releases).
36
+ Download its platform asset, verify it against that release entry's asset SHA-256,
37
+ and place the verified binary on `PATH`. Do not substitute the latest upstream
38
+ release or use another toolkit revision's manifest.
40
39
 
41
40
  Verify the installation without contacting an LLM provider:
42
41
 
@@ -45,14 +44,14 @@ ocr --version
45
44
  ocr-ci --help
46
45
  ```
47
46
 
48
- `ocr --version` must report `open-code-review v1.11.3`; `ocr-ci --help` must exit
47
+ `ocr --version` must report the manifest's exact `recommended_version`; `ocr-ci --help` must exit
49
48
  successfully. `ocr-ci preflight` is an operational configuration check, not the installation
50
49
  smoke test.
51
50
 
52
51
  The exact recommended OCR release and its verified asset checksums live in the [versioned compatibility manifest](compatibility/ocr-support.json). CI should pin that release and checksum before execution.
53
52
  The [versioned compatibility policy](docs/compatibility.md) records tested assets and evidence and describes the conservative Dependabot-like qualification workflow for later upstream releases.
54
53
  Review output defaults to English. `OCR_REVIEW_LANGUAGE` accepts another explicit language name when a project needs localized review output; for example, `OCR_REVIEW_LANGUAGE=Russian`.
55
- The current OCR 1.11.3 integration defaults `OCR_REVIEW_EFFORT` to `medium` for two review rounds. `low` and `high` are explicit one- and three-round alternatives; see the [configuration reference](docs/configuration.md#review-effort) for cost, budget, and precedence boundaries.
54
+ The toolkit defaults `OCR_REVIEW_EFFORT` to `medium` for two review rounds. `low` and `high` are explicit one- and three-round alternatives; see the [configuration reference](docs/configuration.md#review-effort) for cost, budget, and precedence boundaries.
56
55
 
57
56
  Stable distributions are published to [PyPI](https://pypi.org/project/open-code-review-toolkit/) and mirrored as checksum-listed, provenance-attested assets in the corresponding [GitHub Release](https://github.com/xeonvs/open-code-review-toolkit/releases). Development snapshots are published only to TestPyPI.
58
57
 
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '0.9.0'
22
- __version_tuple__ = version_tuple = (0, 9, 0)
21
+ __version__ = version = '0.9.1'
22
+ __version_tuple__ = version_tuple = (0, 9, 1)
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -28,7 +28,7 @@ DEFAULT_REQUEST_HEADERS = {
28
28
  "Accept": "application/json",
29
29
  "User-Agent": "open-code-review-ci-preflight/1.0",
30
30
  }
31
- EXPECTED_OCR_VERSION = "1.11.3"
31
+ EXPECTED_OCR_VERSION = "1.11.5"
32
32
 
33
33
 
34
34
  class PreflightError(Exception):
@@ -184,6 +184,8 @@ MAX_TOOL_FAILURE_DETAILS_LOGGED = 20
184
184
  MAX_TOOL_FAILURE_NAME_CHARS = 256
185
185
  MAX_TOOL_FAILURE_PATH_CHARS = 4_096
186
186
  MAX_TOOL_FAILURE_ERROR_CHARS = 32_768
187
+ MAX_TOOL_FAILURE_ARGUMENT_CHARS = 32_768
188
+ MAX_TOOL_FAILURE_ARGUMENT_BYTES = 131_072
187
189
  MAX_TOOL_FAILURE_LOG_FIELD_CHARS = 500
188
190
 
189
191
 
@@ -900,6 +902,17 @@ def _safe_publication_warnings(
900
902
  return retained, len(value) - len(retained)
901
903
 
902
904
 
905
+ def _bounded_tool_failure_arguments(value: object) -> bool:
906
+ """Validate opaque private arguments without retaining or interpreting their content."""
907
+
908
+ if not isinstance(value, str) or len(value) > MAX_TOOL_FAILURE_ARGUMENT_CHARS:
909
+ return False
910
+ try:
911
+ return len(value.encode("utf-8")) <= MAX_TOOL_FAILURE_ARGUMENT_BYTES
912
+ except UnicodeEncodeError:
913
+ return False
914
+
915
+
903
916
  def _tool_failure_telemetry(value: object) -> ToolFailureTelemetry:
904
917
  """Parse additive OCR diagnostics without granting them result authority."""
905
918
 
@@ -954,8 +967,12 @@ def _tool_failure_telemetry(value: object) -> ToolFailureTelemetry:
954
967
  if not isinstance(detail, dict) or set(detail) not in (
955
968
  {"tool_call_number", "tool_name", "error"},
956
969
  {"tool_call_number", "tool_name", "file_path", "error"},
970
+ {"tool_call_number", "tool_name", "arguments", "error"},
971
+ {"tool_call_number", "tool_name", "file_path", "arguments", "error"},
957
972
  ):
958
973
  return ToolFailureTelemetry(True, False, None, {}, ())
974
+ if "arguments" in detail and not _bounded_tool_failure_arguments(detail["arguments"]):
975
+ return ToolFailureTelemetry(True, False, None, {}, ())
959
976
  number = detail.get("tool_call_number")
960
977
  name = detail.get("tool_name")
961
978
  error = detail.get("error")