open-code-review-toolkit 0.6.2__tar.gz → 0.7.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.
Files changed (107) hide show
  1. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/PKG-INFO +5 -9
  2. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/README.md +4 -8
  3. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/_version.py +2 -2
  4. open_code_review_toolkit-0.7.0/src/ocr_toolkit/context/__init__.py +27 -0
  5. open_code_review_toolkit-0.7.0/src/ocr_toolkit/context/adapters.py +607 -0
  6. open_code_review_toolkit-0.7.0/src/ocr_toolkit/context/broker.py +404 -0
  7. open_code_review_toolkit-0.7.0/src/ocr_toolkit/context/contracts.py +114 -0
  8. open_code_review_toolkit-0.7.0/src/ocr_toolkit/context/dlp.py +230 -0
  9. open_code_review_toolkit-0.7.0/src/ocr_toolkit/context/mcp.py +219 -0
  10. open_code_review_toolkit-0.7.0/src/ocr_toolkit/context/policy.py +334 -0
  11. open_code_review_toolkit-0.7.0/src/ocr_toolkit/context/recognizers.py +100 -0
  12. open_code_review_toolkit-0.7.0/src/ocr_toolkit/context/store.py +535 -0
  13. open_code_review_toolkit-0.7.0/src/ocr_toolkit/evidence/__main__.py +27 -0
  14. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/artifacts.py +4 -0
  15. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/mcp.py +59 -13
  16. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/project.py +45 -8
  17. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/repository.py +18 -6
  18. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/review_context.py +29 -0
  19. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/mcp_config.py +165 -26
  20. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/ocr_result.py +56 -23
  21. open_code_review_toolkit-0.7.0/src/ocr_toolkit/posting/approval.py +408 -0
  22. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/posting/formatting.py +76 -2
  23. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/posting/gitlab.py +226 -40
  24. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/posting/gitlab_approval.py +41 -4
  25. open_code_review_toolkit-0.7.0/src/ocr_toolkit/posting/gitlab_identity.py +14 -0
  26. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/posting/markers.py +55 -5
  27. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/posting/payloads.py +15 -6
  28. open_code_review_toolkit-0.7.0/src/ocr_toolkit/posting/reconciliation.py +120 -0
  29. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/posting/snapshot.py +164 -79
  30. open_code_review_toolkit-0.7.0/src/ocr_toolkit/posting/transaction.py +75 -0
  31. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/posting/workflow.py +186 -48
  32. open_code_review_toolkit-0.7.0/src/ocr_toolkit/pre_execution.py +200 -0
  33. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/preflight.py +1 -1
  34. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/providers/gitlab.py +28 -12
  35. open_code_review_toolkit-0.7.0/src/ocr_toolkit/providers/gitlab_discussions.py +360 -0
  36. open_code_review_toolkit-0.7.0/src/ocr_toolkit/review_runner.py +1457 -0
  37. open_code_review_toolkit-0.6.2/src/ocr_toolkit/evidence/__main__.py +0 -14
  38. open_code_review_toolkit-0.6.2/src/ocr_toolkit/posting/approval.py +0 -174
  39. open_code_review_toolkit-0.6.2/src/ocr_toolkit/review_runner.py +0 -528
  40. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/.gitignore +0 -0
  41. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/LICENSE +0 -0
  42. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/pyproject.toml +0 -0
  43. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/__init__.py +0 -0
  44. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/cli.py +0 -0
  45. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/common/__init__.py +0 -0
  46. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/common/filesystem.py +0 -0
  47. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/common/git.py +0 -0
  48. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/common/language.py +0 -0
  49. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/common/markdown.py +0 -0
  50. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/common/redaction.py +0 -0
  51. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/config_writer.py +0 -0
  52. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/configure.py +0 -0
  53. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/__init__.py +0 -0
  54. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/categorize.py +0 -0
  55. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/collect.py +0 -0
  56. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/collectors/__init__.py +0 -0
  57. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/collectors/graphs.py +0 -0
  58. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/collectors/orchestration.py +0 -0
  59. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/collectors/projections.py +0 -0
  60. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/collectors/registry.py +0 -0
  61. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/collectors/sources.py +0 -0
  62. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/coverage.py +0 -0
  63. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/ecosystems/__init__.py +0 -0
  64. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/ecosystems/ansible/__init__.py +0 -0
  65. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/ecosystems/ansible/requirements.py +0 -0
  66. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/ecosystems/ansible/topology.py +0 -0
  67. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/ecosystems/contracts.py +0 -0
  68. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/ecosystems/go.py +0 -0
  69. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/ecosystems/javascript.py +0 -0
  70. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/ecosystems/php.py +0 -0
  71. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/ecosystems/python.py +0 -0
  72. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/frameworks/__init__.py +0 -0
  73. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/frameworks/contracts.py +0 -0
  74. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/frameworks/detection.py +0 -0
  75. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/frameworks/providers/__init__.py +0 -0
  76. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/frameworks/providers/frontend.py +0 -0
  77. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/frameworks/providers/go.py +0 -0
  78. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/frameworks/providers/php.py +0 -0
  79. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/frameworks/providers/python.py +0 -0
  80. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/frameworks/registry.py +0 -0
  81. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/frameworks/schema.py +0 -0
  82. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/frameworks/templates.py +0 -0
  83. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/infrastructure.py +0 -0
  84. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/invocation.py +0 -0
  85. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/model.py +0 -0
  86. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/policy/__init__.py +0 -0
  87. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/policy/contracts.py +0 -0
  88. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/policy/decisions.py +0 -0
  89. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/policy/guidance.py +0 -0
  90. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/policy/registry.py +0 -0
  91. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/policy/schema.py +0 -0
  92. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/policy/scopes.py +0 -0
  93. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/store/__init__.py +0 -0
  94. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/store/atomic.py +0 -0
  95. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/store/contracts.py +0 -0
  96. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/store/core.py +0 -0
  97. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/store/readback.py +0 -0
  98. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/store/values.py +0 -0
  99. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/posting/__init__.py +0 -0
  100. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/posting/__main__.py +0 -0
  101. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/posting/comments.py +0 -0
  102. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/posting/result.py +0 -0
  103. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/posting/settings.py +0 -0
  104. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/posting/suggestions.py +0 -0
  105. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/providers/__init__.py +0 -0
  106. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/py.typed +0 -0
  107. {open_code_review_toolkit-0.6.2 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/result_contract.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: open-code-review-toolkit
3
- Version: 0.6.2
3
+ Version: 0.7.0
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
@@ -258,20 +258,16 @@ On a successful rerun, the toolkit replaces untouched OCR-only notes instead of
258
258
 
259
259
  Suppression uses both the GitLab diff position and a stable finding fingerprint, so ordinary line shifts do not normally bring the same bug back. A materially changed finding can still receive a new discussion. See [GitLab review operations](docs/operations.md) for the complete lifecycle, posting modes, permissions, failure behavior, and Mermaid state diagram.
260
260
 
261
- After every current review note publishes, the GitLab adapter can add a
262
- conservative approval bound to the exact reviewed source SHA. This write is
263
- enabled by default; set `OCR_AUTO_APPROVE=false` before upgrading when the bot
264
- must remain comment-only. GitLab approval rules and protected-branch policy
265
- remain authoritative. The toolkit only adds an eligible approval; it never
266
- removes an existing approval when a later review is ineligible or disabled.
261
+ After every current review note publishes, the GitLab adapter can add a conservative approval bound to receipt v4's exact reviewed source SHA and merge-request author. This write is enabled by default; set `OCR_AUTO_APPROVE=false` when the bot must remain comment-only. Complete optional MR metadata and complete zero-record enrichment remain eligible, while degraded metadata, required context degradation, admitted mutable context, legacy receipts, any direct external MCP, author movement, or bot self-authorship prevents an approval write. GitLab approval rules and protected-branch policy remain authoritative. The toolkit only adds an eligible approval; it never removes an existing approval when a later review is ineligible or disabled.
267
262
 
268
263
  Accepted tradeoffs can be recorded in `.opencodereview/accepted-decisions.md`; the evidence collector supplies only applicable target-ref decisions and never lets a source change self-authorize its review. Root and nested target `AGENTS.md`/`CLAUDE.md` guidance is similarly exposed through the existing evidence MCP with deterministic scope and precedence, while any guidance touched by the merge request is excluded. See [Accepted project decisions](docs/configuration.md#accepted-project-decisions) and [Target project guidance](docs/configuration.md#target-project-guidance) for formats and trust boundaries.
269
264
 
270
265
  ## Project architecture
271
266
 
272
- The shipped Repository Evidence Engine reads immutable base/head Git objects, stores bounded typed facts and deltas, creates the compact bootstrap used by OCR, and exposes detailed facts, scoped completeness, and base/head changes through the mandatory built-in read-only MCP server. Reviewed external stdio or native HTTPS MCP servers compose alongside it without replacing the built-in evidence boundary.
267
+ The shipped Repository Evidence Engine reads immutable base/head Git objects, stores bounded typed facts and deltas, creates the compact bootstrap used by OCR, and exposes detailed facts, scoped completeness, and base/head changes through the mandatory built-in read-only MCP server. Version 0.7.0 establishes protected-policy enriched reviews: they can acquire stable GitLab discussions and authorize external issue/document records through a provider-neutral stdio or HTTPS proxy before OCR. The same built-in MCP exposes only opaque committed `context_list`/`context_get` handles; it has no provider network or arbitrary identifier path. Direct external MCP remains a separate privileged, comment-only operator boundary.
273
268
 
274
269
  - [Toolkit strategy](docs/engineering/toolkit_strategy.md) - durable product boundaries, architecture, invariants, and non-goals.
270
+ - [Bounded review context](docs/review-context.md) - protected policy, adapter protocol, GitLab discussions, opaque handles, DLP, receipt, and cleanup contracts.
275
271
  - [Roadmap](ROADMAP.md) - milestone status, dependencies, outcomes, and completion signals.
276
272
  - [Backlog](docs/codex/TASKS_BACKLOG.md) - inactive implementation-ready work; active execution remains in `PLANS.md`.
277
273
 
@@ -289,7 +285,7 @@ ocr-ci review --result /tmp/ocr-result.json --stderr /tmp/ocr-stderr.log -- ...
289
285
  ocr-ci post --result /tmp/ocr-result.json --stderr /tmp/ocr-stderr.log
290
286
  ```
291
287
 
292
- See the fully synthetic [`examples/gitlab/ocr-review.gitlab-ci.yml`](examples/gitlab/ocr-review.gitlab-ci.yml), the [GitLab setup guide](docs/gitlab.md), and [GitLab review operations](docs/operations.md).
288
+ See the [`examples/gitlab/ocr-review.gitlab-ci.yml`](examples/gitlab/ocr-review.gitlab-ci.yml) example, the [GitLab setup guide](docs/gitlab.md), and [GitLab review operations](docs/operations.md).
293
289
 
294
290
  ## Configuration and safety
295
291
 
@@ -31,20 +31,16 @@ On a successful rerun, the toolkit replaces untouched OCR-only notes instead of
31
31
 
32
32
  Suppression uses both the GitLab diff position and a stable finding fingerprint, so ordinary line shifts do not normally bring the same bug back. A materially changed finding can still receive a new discussion. See [GitLab review operations](docs/operations.md) for the complete lifecycle, posting modes, permissions, failure behavior, and Mermaid state diagram.
33
33
 
34
- After every current review note publishes, the GitLab adapter can add a
35
- conservative approval bound to the exact reviewed source SHA. This write is
36
- enabled by default; set `OCR_AUTO_APPROVE=false` before upgrading when the bot
37
- must remain comment-only. GitLab approval rules and protected-branch policy
38
- remain authoritative. The toolkit only adds an eligible approval; it never
39
- removes an existing approval when a later review is ineligible or disabled.
34
+ After every current review note publishes, the GitLab adapter can add a conservative approval bound to receipt v4's exact reviewed source SHA and merge-request author. This write is enabled by default; set `OCR_AUTO_APPROVE=false` when the bot must remain comment-only. Complete optional MR metadata and complete zero-record enrichment remain eligible, while degraded metadata, required context degradation, admitted mutable context, legacy receipts, any direct external MCP, author movement, or bot self-authorship prevents an approval write. GitLab approval rules and protected-branch policy remain authoritative. The toolkit only adds an eligible approval; it never removes an existing approval when a later review is ineligible or disabled.
40
35
 
41
36
  Accepted tradeoffs can be recorded in `.opencodereview/accepted-decisions.md`; the evidence collector supplies only applicable target-ref decisions and never lets a source change self-authorize its review. Root and nested target `AGENTS.md`/`CLAUDE.md` guidance is similarly exposed through the existing evidence MCP with deterministic scope and precedence, while any guidance touched by the merge request is excluded. See [Accepted project decisions](docs/configuration.md#accepted-project-decisions) and [Target project guidance](docs/configuration.md#target-project-guidance) for formats and trust boundaries.
42
37
 
43
38
  ## Project architecture
44
39
 
45
- The shipped Repository Evidence Engine reads immutable base/head Git objects, stores bounded typed facts and deltas, creates the compact bootstrap used by OCR, and exposes detailed facts, scoped completeness, and base/head changes through the mandatory built-in read-only MCP server. Reviewed external stdio or native HTTPS MCP servers compose alongside it without replacing the built-in evidence boundary.
40
+ The shipped Repository Evidence Engine reads immutable base/head Git objects, stores bounded typed facts and deltas, creates the compact bootstrap used by OCR, and exposes detailed facts, scoped completeness, and base/head changes through the mandatory built-in read-only MCP server. Version 0.7.0 establishes protected-policy enriched reviews: they can acquire stable GitLab discussions and authorize external issue/document records through a provider-neutral stdio or HTTPS proxy before OCR. The same built-in MCP exposes only opaque committed `context_list`/`context_get` handles; it has no provider network or arbitrary identifier path. Direct external MCP remains a separate privileged, comment-only operator boundary.
46
41
 
47
42
  - [Toolkit strategy](docs/engineering/toolkit_strategy.md) - durable product boundaries, architecture, invariants, and non-goals.
43
+ - [Bounded review context](docs/review-context.md) - protected policy, adapter protocol, GitLab discussions, opaque handles, DLP, receipt, and cleanup contracts.
48
44
  - [Roadmap](ROADMAP.md) - milestone status, dependencies, outcomes, and completion signals.
49
45
  - [Backlog](docs/codex/TASKS_BACKLOG.md) - inactive implementation-ready work; active execution remains in `PLANS.md`.
50
46
 
@@ -62,7 +58,7 @@ ocr-ci review --result /tmp/ocr-result.json --stderr /tmp/ocr-stderr.log -- ...
62
58
  ocr-ci post --result /tmp/ocr-result.json --stderr /tmp/ocr-stderr.log
63
59
  ```
64
60
 
65
- See the fully synthetic [`examples/gitlab/ocr-review.gitlab-ci.yml`](examples/gitlab/ocr-review.gitlab-ci.yml), the [GitLab setup guide](docs/gitlab.md), and [GitLab review operations](docs/operations.md).
61
+ See the [`examples/gitlab/ocr-review.gitlab-ci.yml`](examples/gitlab/ocr-review.gitlab-ci.yml) example, the [GitLab setup guide](docs/gitlab.md), and [GitLab review operations](docs/operations.md).
66
62
 
67
63
  ## Configuration and safety
68
64
 
@@ -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.6.2'
22
- __version_tuple__ = version_tuple = (0, 6, 2)
21
+ __version__ = version = '0.7.0'
22
+ __version_tuple__ = version_tuple = (0, 7, 0)
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -0,0 +1,27 @@
1
+ """Bounded provider-neutral review-context contracts."""
2
+
3
+ from ocr_toolkit.context.contracts import (
4
+ AggregateBudgets,
5
+ ContextContractError,
6
+ ContextPolicy,
7
+ ContextProjections,
8
+ DiscussionPolicy,
9
+ ReferencePolicy,
10
+ )
11
+ from ocr_toolkit.context.policy import POLICY_PATH, load_protected_policy, parse_policy
12
+ from ocr_toolkit.context.store import ContextStore, ContextStoreError, PendingContextRecord
13
+
14
+ __all__ = [
15
+ "POLICY_PATH",
16
+ "AggregateBudgets",
17
+ "ContextContractError",
18
+ "ContextPolicy",
19
+ "ContextProjections",
20
+ "ContextStore",
21
+ "ContextStoreError",
22
+ "DiscussionPolicy",
23
+ "PendingContextRecord",
24
+ "ReferencePolicy",
25
+ "load_protected_policy",
26
+ "parse_policy",
27
+ ]