open-code-review-toolkit 0.4.0__tar.gz → 0.4.2__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.
- {open_code_review_toolkit-0.4.0 → open_code_review_toolkit-0.4.2}/PKG-INFO +2 -2
- {open_code_review_toolkit-0.4.0 → open_code_review_toolkit-0.4.2}/README.md +1 -1
- {open_code_review_toolkit-0.4.0 → open_code_review_toolkit-0.4.2}/pyproject.toml +24 -4
- {open_code_review_toolkit-0.4.0 → open_code_review_toolkit-0.4.2}/src/ocr_toolkit/_version.py +2 -2
- {open_code_review_toolkit-0.4.0 → open_code_review_toolkit-0.4.2}/src/ocr_toolkit/posting/formatting.py +15 -2
- {open_code_review_toolkit-0.4.0 → open_code_review_toolkit-0.4.2}/src/ocr_toolkit/posting/workflow.py +18 -4
- {open_code_review_toolkit-0.4.0 → open_code_review_toolkit-0.4.2}/src/ocr_toolkit/preflight.py +1 -1
- {open_code_review_toolkit-0.4.0 → open_code_review_toolkit-0.4.2}/src/ocr_toolkit/review_runner.py +6 -1
- {open_code_review_toolkit-0.4.0 → open_code_review_toolkit-0.4.2}/.gitignore +0 -0
- {open_code_review_toolkit-0.4.0 → open_code_review_toolkit-0.4.2}/LICENSE +0 -0
- {open_code_review_toolkit-0.4.0 → open_code_review_toolkit-0.4.2}/src/ocr_toolkit/__init__.py +0 -0
- {open_code_review_toolkit-0.4.0 → open_code_review_toolkit-0.4.2}/src/ocr_toolkit/cli.py +0 -0
- {open_code_review_toolkit-0.4.0 → open_code_review_toolkit-0.4.2}/src/ocr_toolkit/common/__init__.py +0 -0
- {open_code_review_toolkit-0.4.0 → open_code_review_toolkit-0.4.2}/src/ocr_toolkit/common/git.py +0 -0
- {open_code_review_toolkit-0.4.0 → open_code_review_toolkit-0.4.2}/src/ocr_toolkit/common/language.py +0 -0
- {open_code_review_toolkit-0.4.0 → open_code_review_toolkit-0.4.2}/src/ocr_toolkit/common/markdown.py +0 -0
- {open_code_review_toolkit-0.4.0 → open_code_review_toolkit-0.4.2}/src/ocr_toolkit/common/redaction.py +0 -0
- {open_code_review_toolkit-0.4.0 → open_code_review_toolkit-0.4.2}/src/ocr_toolkit/config_writer.py +0 -0
- {open_code_review_toolkit-0.4.0 → open_code_review_toolkit-0.4.2}/src/ocr_toolkit/configure.py +0 -0
- {open_code_review_toolkit-0.4.0 → open_code_review_toolkit-0.4.2}/src/ocr_toolkit/evidence/__init__.py +0 -0
- {open_code_review_toolkit-0.4.0 → open_code_review_toolkit-0.4.2}/src/ocr_toolkit/evidence/__main__.py +0 -0
- {open_code_review_toolkit-0.4.0 → open_code_review_toolkit-0.4.2}/src/ocr_toolkit/evidence/ansible.py +0 -0
- {open_code_review_toolkit-0.4.0 → open_code_review_toolkit-0.4.2}/src/ocr_toolkit/evidence/ansible_requirements.py +0 -0
- {open_code_review_toolkit-0.4.0 → open_code_review_toolkit-0.4.2}/src/ocr_toolkit/evidence/artifacts.py +0 -0
- {open_code_review_toolkit-0.4.0 → open_code_review_toolkit-0.4.2}/src/ocr_toolkit/evidence/categorize.py +0 -0
- {open_code_review_toolkit-0.4.0 → open_code_review_toolkit-0.4.2}/src/ocr_toolkit/evidence/collect.py +0 -0
- {open_code_review_toolkit-0.4.0 → open_code_review_toolkit-0.4.2}/src/ocr_toolkit/evidence/collectors.py +0 -0
- {open_code_review_toolkit-0.4.0 → open_code_review_toolkit-0.4.2}/src/ocr_toolkit/evidence/composer_manifests.py +0 -0
- {open_code_review_toolkit-0.4.0 → open_code_review_toolkit-0.4.2}/src/ocr_toolkit/evidence/go_manifests.py +0 -0
- {open_code_review_toolkit-0.4.0 → open_code_review_toolkit-0.4.2}/src/ocr_toolkit/evidence/infrastructure.py +0 -0
- {open_code_review_toolkit-0.4.0 → open_code_review_toolkit-0.4.2}/src/ocr_toolkit/evidence/invocation.py +0 -0
- {open_code_review_toolkit-0.4.0 → open_code_review_toolkit-0.4.2}/src/ocr_toolkit/evidence/javascript_manifests.py +0 -0
- {open_code_review_toolkit-0.4.0 → open_code_review_toolkit-0.4.2}/src/ocr_toolkit/evidence/manifest_model.py +0 -0
- {open_code_review_toolkit-0.4.0 → open_code_review_toolkit-0.4.2}/src/ocr_toolkit/evidence/mcp.py +0 -0
- {open_code_review_toolkit-0.4.0 → open_code_review_toolkit-0.4.2}/src/ocr_toolkit/evidence/model.py +0 -0
- {open_code_review_toolkit-0.4.0 → open_code_review_toolkit-0.4.2}/src/ocr_toolkit/evidence/project.py +0 -0
- {open_code_review_toolkit-0.4.0 → open_code_review_toolkit-0.4.2}/src/ocr_toolkit/evidence/python_manifests.py +0 -0
- {open_code_review_toolkit-0.4.0 → open_code_review_toolkit-0.4.2}/src/ocr_toolkit/evidence/repository.py +0 -0
- {open_code_review_toolkit-0.4.0 → open_code_review_toolkit-0.4.2}/src/ocr_toolkit/evidence/store.py +0 -0
- {open_code_review_toolkit-0.4.0 → open_code_review_toolkit-0.4.2}/src/ocr_toolkit/mcp_config.py +0 -0
- {open_code_review_toolkit-0.4.0 → open_code_review_toolkit-0.4.2}/src/ocr_toolkit/ocr_result.py +0 -0
- {open_code_review_toolkit-0.4.0 → open_code_review_toolkit-0.4.2}/src/ocr_toolkit/posting/__init__.py +0 -0
- {open_code_review_toolkit-0.4.0 → open_code_review_toolkit-0.4.2}/src/ocr_toolkit/posting/__main__.py +0 -0
- {open_code_review_toolkit-0.4.0 → open_code_review_toolkit-0.4.2}/src/ocr_toolkit/posting/comments.py +0 -0
- {open_code_review_toolkit-0.4.0 → open_code_review_toolkit-0.4.2}/src/ocr_toolkit/posting/gitlab.py +0 -0
- {open_code_review_toolkit-0.4.0 → open_code_review_toolkit-0.4.2}/src/ocr_toolkit/posting/markers.py +0 -0
- {open_code_review_toolkit-0.4.0 → open_code_review_toolkit-0.4.2}/src/ocr_toolkit/posting/payloads.py +0 -0
- {open_code_review_toolkit-0.4.0 → open_code_review_toolkit-0.4.2}/src/ocr_toolkit/posting/result.py +0 -0
- {open_code_review_toolkit-0.4.0 → open_code_review_toolkit-0.4.2}/src/ocr_toolkit/posting/settings.py +0 -0
- {open_code_review_toolkit-0.4.0 → open_code_review_toolkit-0.4.2}/src/ocr_toolkit/posting/snapshot.py +0 -0
- {open_code_review_toolkit-0.4.0 → open_code_review_toolkit-0.4.2}/src/ocr_toolkit/providers/__init__.py +0 -0
- {open_code_review_toolkit-0.4.0 → open_code_review_toolkit-0.4.2}/src/ocr_toolkit/providers/gitlab.py +0 -0
- {open_code_review_toolkit-0.4.0 → open_code_review_toolkit-0.4.2}/src/ocr_toolkit/py.typed +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: open-code-review-toolkit
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.2
|
|
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
|
|
@@ -241,7 +241,7 @@ ocr --version
|
|
|
241
241
|
ocr-ci --help
|
|
242
242
|
```
|
|
243
243
|
|
|
244
|
-
The current compatibility target is OCR `1.8.
|
|
244
|
+
The current compatibility target is OCR `1.8.3`. CI should pin the release and verify its published checksum before execution.
|
|
245
245
|
The [versioned compatibility policy](docs/compatibility.md) records tested assets and evidence and describes the conservative Dependabot-like qualification workflow for later upstream releases.
|
|
246
246
|
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`.
|
|
247
247
|
|
|
@@ -15,7 +15,7 @@ ocr --version
|
|
|
15
15
|
ocr-ci --help
|
|
16
16
|
```
|
|
17
17
|
|
|
18
|
-
The current compatibility target is OCR `1.8.
|
|
18
|
+
The current compatibility target is OCR `1.8.3`. CI should pin the release and verify its published checksum before execution.
|
|
19
19
|
The [versioned compatibility policy](docs/compatibility.md) records tested assets and evidence and describes the conservative Dependabot-like qualification workflow for later upstream releases.
|
|
20
20
|
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`.
|
|
21
21
|
|
|
@@ -124,12 +124,27 @@ underlines = ["", "", ""]
|
|
|
124
124
|
|
|
125
125
|
[[tool.towncrier.type]]
|
|
126
126
|
directory = "feature"
|
|
127
|
-
name = "Features"
|
|
127
|
+
name = "🚀 Features"
|
|
128
128
|
showcontent = true
|
|
129
129
|
|
|
130
130
|
[[tool.towncrier.type]]
|
|
131
131
|
directory = "bugfix"
|
|
132
|
-
name = "Bug
|
|
132
|
+
name = "🐛 Bug Fixes"
|
|
133
|
+
showcontent = true
|
|
134
|
+
|
|
135
|
+
[[tool.towncrier.type]]
|
|
136
|
+
directory = "refactor"
|
|
137
|
+
name = "🔧 Refactoring"
|
|
138
|
+
showcontent = true
|
|
139
|
+
|
|
140
|
+
[[tool.towncrier.type]]
|
|
141
|
+
directory = "doc"
|
|
142
|
+
name = "📖 Documentation"
|
|
143
|
+
showcontent = true
|
|
144
|
+
|
|
145
|
+
[[tool.towncrier.type]]
|
|
146
|
+
directory = "rules"
|
|
147
|
+
name = "🧩 Rules"
|
|
133
148
|
showcontent = true
|
|
134
149
|
|
|
135
150
|
[[tool.towncrier.type]]
|
|
@@ -138,6 +153,11 @@ name = "Security"
|
|
|
138
153
|
showcontent = true
|
|
139
154
|
|
|
140
155
|
[[tool.towncrier.type]]
|
|
141
|
-
directory = "
|
|
142
|
-
name = "
|
|
156
|
+
directory = "deprecation"
|
|
157
|
+
name = "Deprecations"
|
|
158
|
+
showcontent = true
|
|
159
|
+
|
|
160
|
+
[[tool.towncrier.type]]
|
|
161
|
+
directory = "removal"
|
|
162
|
+
name = "Removals"
|
|
143
163
|
showcontent = true
|
{open_code_review_toolkit-0.4.0 → open_code_review_toolkit-0.4.2}/src/ocr_toolkit/_version.py
RENAMED
|
@@ -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.4.
|
|
22
|
-
__version_tuple__ = version_tuple = (0, 4,
|
|
21
|
+
__version__ = version = '0.4.2'
|
|
22
|
+
__version_tuple__ = version_tuple = (0, 4, 2)
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -684,7 +684,12 @@ def guide_comment_snippet(comment: dict[str, Any]) -> str:
|
|
|
684
684
|
return excerpt
|
|
685
685
|
|
|
686
686
|
|
|
687
|
-
def format_reviewer_guide(
|
|
687
|
+
def format_reviewer_guide(
|
|
688
|
+
comments: Sequence[dict[str, Any]],
|
|
689
|
+
omitted_count: int,
|
|
690
|
+
*,
|
|
691
|
+
outcome_status: str = "success",
|
|
692
|
+
) -> str:
|
|
688
693
|
"""Build a bounded reviewer guide from already published OCR findings."""
|
|
689
694
|
|
|
690
695
|
if not comments and omitted_count <= 0:
|
|
@@ -710,6 +715,10 @@ def format_reviewer_guide(comments: Sequence[dict[str, Any]], omitted_count: int
|
|
|
710
715
|
f"- Estimated effort to review: {effort}/5",
|
|
711
716
|
]
|
|
712
717
|
)
|
|
718
|
+
if outcome_status == "budget_exceeded":
|
|
719
|
+
lines.append(
|
|
720
|
+
"- ⚠️ Review scope: OCR reached its token budget; treat all findings as a partial review."
|
|
721
|
+
)
|
|
713
722
|
|
|
714
723
|
if not security_comments and omitted_count:
|
|
715
724
|
lines.append(
|
|
@@ -772,13 +781,17 @@ def summarize_result(
|
|
|
772
781
|
"skipped": "ℹ️", # noqa: RUF001 - intentional information emoji
|
|
773
782
|
"completed_with_warnings": "⚠️",
|
|
774
783
|
"completed_with_errors": "❌",
|
|
784
|
+
"budget_exceeded": "⚠️",
|
|
775
785
|
}
|
|
776
786
|
marker = f"{status_markers.get(outcome_status, '❌')} " if use_emoji else ""
|
|
777
787
|
safe_message = neutralize_quick_actions(
|
|
778
788
|
compact_control_text(redact_sensitive(outcome_message), max_chars=500)
|
|
779
789
|
)
|
|
780
790
|
if not safe_message:
|
|
781
|
-
|
|
791
|
+
if outcome_status == "budget_exceeded":
|
|
792
|
+
safe_message = "Review stopped after reaching its token budget; findings are partial."
|
|
793
|
+
else:
|
|
794
|
+
safe_message = f"Found {total} issue(s)." if total else "No issues found."
|
|
782
795
|
lines = [
|
|
783
796
|
"# Open Code Review summary",
|
|
784
797
|
f"{marker}{safe_message}",
|
|
@@ -44,7 +44,7 @@ from ocr_toolkit.posting.gitlab import (
|
|
|
44
44
|
resolve_discussion,
|
|
45
45
|
)
|
|
46
46
|
from ocr_toolkit.posting.markers import annotate_comment_fingerprints
|
|
47
|
-
from ocr_toolkit.posting.result import llm_billing_failure_warnings
|
|
47
|
+
from ocr_toolkit.posting.result import llm_billing_failure_warnings, ocr_warning_text
|
|
48
48
|
from ocr_toolkit.posting.snapshot import (
|
|
49
49
|
BotCommentRefs,
|
|
50
50
|
cleanup_drafts_created_by_this_run,
|
|
@@ -392,6 +392,7 @@ def post_results(config: GitLabConfig, result: dict[str, Any]) -> int:
|
|
|
392
392
|
"skipped",
|
|
393
393
|
"completed_with_warnings",
|
|
394
394
|
"completed_with_errors",
|
|
395
|
+
"budget_exceeded",
|
|
395
396
|
}
|
|
396
397
|
if status not in allowed_statuses:
|
|
397
398
|
return invalid_ocr_schema_exit(config, "field 'status' is unsupported")
|
|
@@ -401,6 +402,14 @@ def post_results(config: GitLabConfig, result: dict[str, Any]) -> int:
|
|
|
401
402
|
return invalid_ocr_schema_exit(config, "field 'comments' must be a list")
|
|
402
403
|
if not isinstance(warnings_value, list):
|
|
403
404
|
return invalid_ocr_schema_exit(config, "field 'warnings' must be a list")
|
|
405
|
+
summary_value = result.get("summary")
|
|
406
|
+
summary_budget_exceeded = (
|
|
407
|
+
isinstance(summary_value, dict) and summary_value.get("budget_exceeded") is True
|
|
408
|
+
)
|
|
409
|
+
if (status == "budget_exceeded") != summary_budget_exceeded:
|
|
410
|
+
return invalid_ocr_schema_exit(
|
|
411
|
+
config, "fields 'status' and 'summary.budget_exceeded' disagree"
|
|
412
|
+
)
|
|
404
413
|
|
|
405
414
|
comments: list[dict[str, Any]] = []
|
|
406
415
|
for index, comment in enumerate(comments_value):
|
|
@@ -455,7 +464,7 @@ def post_results(config: GitLabConfig, result: dict[str, Any]) -> int:
|
|
|
455
464
|
comments = comments[:publish_limit]
|
|
456
465
|
|
|
457
466
|
emoji = post_emoji()
|
|
458
|
-
reviewer_guide = format_reviewer_guide(comments, omitted_count)
|
|
467
|
+
reviewer_guide = format_reviewer_guide(comments, omitted_count, outcome_status=status)
|
|
459
468
|
|
|
460
469
|
if publishable_comment_count == 0:
|
|
461
470
|
raw_message = clean_text(result.get("message"))
|
|
@@ -472,6 +481,7 @@ def post_results(config: GitLabConfig, result: dict[str, Any]) -> int:
|
|
|
472
481
|
"skipped": "ℹ️", # noqa: RUF001 - intentional information emoji
|
|
473
482
|
"completed_with_warnings": "⚠️",
|
|
474
483
|
"completed_with_errors": "❌",
|
|
484
|
+
"budget_exceeded": "⚠️",
|
|
475
485
|
}[status]
|
|
476
486
|
fallback_message = (
|
|
477
487
|
"No review comments generated. No issues found."
|
|
@@ -479,7 +489,11 @@ def post_results(config: GitLabConfig, result: dict[str, Any]) -> int:
|
|
|
479
489
|
else (
|
|
480
490
|
"No supported files changed."
|
|
481
491
|
if status == "skipped"
|
|
482
|
-
else
|
|
492
|
+
else (
|
|
493
|
+
"Review stopped after reaching its token budget; this is a partial result."
|
|
494
|
+
if status == "budget_exceeded"
|
|
495
|
+
else "Review did not complete cleanly."
|
|
496
|
+
)
|
|
483
497
|
)
|
|
484
498
|
)
|
|
485
499
|
body = "# Open Code Review summary\n\n"
|
|
@@ -487,7 +501,7 @@ def post_results(config: GitLabConfig, result: dict[str, Any]) -> int:
|
|
|
487
501
|
body += message or fallback_message
|
|
488
502
|
if warnings:
|
|
489
503
|
warning_lines = [
|
|
490
|
-
neutralize_quick_actions(redact_sensitive(
|
|
504
|
+
neutralize_quick_actions(redact_sensitive(ocr_warning_text(warning)))
|
|
491
505
|
for warning in warnings
|
|
492
506
|
]
|
|
493
507
|
warning_lines = [warning for warning in warning_lines if warning]
|
{open_code_review_toolkit-0.4.0 → open_code_review_toolkit-0.4.2}/src/ocr_toolkit/review_runner.py
RENAMED
|
@@ -84,7 +84,12 @@ def _mcp_usage_receipt(
|
|
|
84
84
|
"""Return bounded MCP usage tied to one validated review-time registry."""
|
|
85
85
|
|
|
86
86
|
status = payload.get("status")
|
|
87
|
-
if status not in {
|
|
87
|
+
if status not in {
|
|
88
|
+
"success",
|
|
89
|
+
"completed_with_warnings",
|
|
90
|
+
"completed_with_errors",
|
|
91
|
+
"budget_exceeded",
|
|
92
|
+
}:
|
|
88
93
|
if status == "skipped":
|
|
89
94
|
tool_calls = payload.get("tool_calls")
|
|
90
95
|
by_tool = tool_calls.get("by_tool") if isinstance(tool_calls, dict) else None
|
|
File without changes
|
|
File without changes
|
{open_code_review_toolkit-0.4.0 → open_code_review_toolkit-0.4.2}/src/ocr_toolkit/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{open_code_review_toolkit-0.4.0 → open_code_review_toolkit-0.4.2}/src/ocr_toolkit/common/__init__.py
RENAMED
|
File without changes
|
{open_code_review_toolkit-0.4.0 → open_code_review_toolkit-0.4.2}/src/ocr_toolkit/common/git.py
RENAMED
|
File without changes
|
{open_code_review_toolkit-0.4.0 → open_code_review_toolkit-0.4.2}/src/ocr_toolkit/common/language.py
RENAMED
|
File without changes
|
{open_code_review_toolkit-0.4.0 → open_code_review_toolkit-0.4.2}/src/ocr_toolkit/common/markdown.py
RENAMED
|
File without changes
|
|
File without changes
|
{open_code_review_toolkit-0.4.0 → open_code_review_toolkit-0.4.2}/src/ocr_toolkit/config_writer.py
RENAMED
|
File without changes
|
{open_code_review_toolkit-0.4.0 → open_code_review_toolkit-0.4.2}/src/ocr_toolkit/configure.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{open_code_review_toolkit-0.4.0 → open_code_review_toolkit-0.4.2}/src/ocr_toolkit/evidence/mcp.py
RENAMED
|
File without changes
|
{open_code_review_toolkit-0.4.0 → open_code_review_toolkit-0.4.2}/src/ocr_toolkit/evidence/model.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{open_code_review_toolkit-0.4.0 → open_code_review_toolkit-0.4.2}/src/ocr_toolkit/evidence/store.py
RENAMED
|
File without changes
|
{open_code_review_toolkit-0.4.0 → open_code_review_toolkit-0.4.2}/src/ocr_toolkit/mcp_config.py
RENAMED
|
File without changes
|
{open_code_review_toolkit-0.4.0 → open_code_review_toolkit-0.4.2}/src/ocr_toolkit/ocr_result.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{open_code_review_toolkit-0.4.0 → open_code_review_toolkit-0.4.2}/src/ocr_toolkit/posting/gitlab.py
RENAMED
|
File without changes
|
{open_code_review_toolkit-0.4.0 → open_code_review_toolkit-0.4.2}/src/ocr_toolkit/posting/markers.py
RENAMED
|
File without changes
|
|
File without changes
|
{open_code_review_toolkit-0.4.0 → open_code_review_toolkit-0.4.2}/src/ocr_toolkit/posting/result.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|