open-code-review-toolkit 0.6.3__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 (106) hide show
  1. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/PKG-INFO +5 -4
  2. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/README.md +4 -3
  3. {open_code_review_toolkit-0.6.3 → 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.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/artifacts.py +4 -0
  15. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/mcp.py +59 -13
  16. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/project.py +45 -8
  17. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/repository.py +18 -6
  18. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/review_context.py +0 -2
  19. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/mcp_config.py +39 -5
  20. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/ocr_result.py +53 -22
  21. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/posting/approval.py +152 -10
  22. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/posting/formatting.py +72 -2
  23. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/posting/markers.py +27 -0
  24. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/posting/snapshot.py +106 -0
  25. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/posting/workflow.py +105 -1
  26. open_code_review_toolkit-0.7.0/src/ocr_toolkit/pre_execution.py +200 -0
  27. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/preflight.py +1 -1
  28. open_code_review_toolkit-0.7.0/src/ocr_toolkit/providers/gitlab_discussions.py +360 -0
  29. open_code_review_toolkit-0.7.0/src/ocr_toolkit/review_runner.py +1457 -0
  30. open_code_review_toolkit-0.6.3/src/ocr_toolkit/evidence/__main__.py +0 -14
  31. open_code_review_toolkit-0.6.3/src/ocr_toolkit/review_runner.py +0 -587
  32. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/.gitignore +0 -0
  33. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/LICENSE +0 -0
  34. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/pyproject.toml +0 -0
  35. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/__init__.py +0 -0
  36. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/cli.py +0 -0
  37. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/common/__init__.py +0 -0
  38. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/common/filesystem.py +0 -0
  39. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/common/git.py +0 -0
  40. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/common/language.py +0 -0
  41. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/common/markdown.py +0 -0
  42. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/common/redaction.py +0 -0
  43. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/config_writer.py +0 -0
  44. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/configure.py +0 -0
  45. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/__init__.py +0 -0
  46. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/categorize.py +0 -0
  47. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/collect.py +0 -0
  48. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/collectors/__init__.py +0 -0
  49. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/collectors/graphs.py +0 -0
  50. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/collectors/orchestration.py +0 -0
  51. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/collectors/projections.py +0 -0
  52. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/collectors/registry.py +0 -0
  53. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/collectors/sources.py +0 -0
  54. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/coverage.py +0 -0
  55. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/ecosystems/__init__.py +0 -0
  56. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/ecosystems/ansible/__init__.py +0 -0
  57. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/ecosystems/ansible/requirements.py +0 -0
  58. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/ecosystems/ansible/topology.py +0 -0
  59. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/ecosystems/contracts.py +0 -0
  60. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/ecosystems/go.py +0 -0
  61. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/ecosystems/javascript.py +0 -0
  62. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/ecosystems/php.py +0 -0
  63. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/ecosystems/python.py +0 -0
  64. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/frameworks/__init__.py +0 -0
  65. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/frameworks/contracts.py +0 -0
  66. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/frameworks/detection.py +0 -0
  67. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/frameworks/providers/__init__.py +0 -0
  68. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/frameworks/providers/frontend.py +0 -0
  69. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/frameworks/providers/go.py +0 -0
  70. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/frameworks/providers/php.py +0 -0
  71. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/frameworks/providers/python.py +0 -0
  72. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/frameworks/registry.py +0 -0
  73. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/frameworks/schema.py +0 -0
  74. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/frameworks/templates.py +0 -0
  75. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/infrastructure.py +0 -0
  76. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/invocation.py +0 -0
  77. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/model.py +0 -0
  78. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/policy/__init__.py +0 -0
  79. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/policy/contracts.py +0 -0
  80. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/policy/decisions.py +0 -0
  81. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/policy/guidance.py +0 -0
  82. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/policy/registry.py +0 -0
  83. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/policy/schema.py +0 -0
  84. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/policy/scopes.py +0 -0
  85. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/store/__init__.py +0 -0
  86. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/store/atomic.py +0 -0
  87. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/store/contracts.py +0 -0
  88. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/store/core.py +0 -0
  89. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/store/readback.py +0 -0
  90. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/evidence/store/values.py +0 -0
  91. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/posting/__init__.py +0 -0
  92. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/posting/__main__.py +0 -0
  93. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/posting/comments.py +0 -0
  94. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/posting/gitlab.py +0 -0
  95. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/posting/gitlab_approval.py +0 -0
  96. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/posting/gitlab_identity.py +0 -0
  97. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/posting/payloads.py +0 -0
  98. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/posting/reconciliation.py +0 -0
  99. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/posting/result.py +0 -0
  100. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/posting/settings.py +0 -0
  101. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/posting/suggestions.py +0 -0
  102. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/posting/transaction.py +0 -0
  103. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/providers/__init__.py +0 -0
  104. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/providers/gitlab.py +0 -0
  105. {open_code_review_toolkit-0.6.3 → open_code_review_toolkit-0.7.0}/src/ocr_toolkit/py.typed +0 -0
  106. {open_code_review_toolkit-0.6.3 → 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.3
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,15 +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 conservative approval bound to receipt v3'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 remains eligible, while degraded metadata, legacy receipts, any 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.
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.
262
262
 
263
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.
264
264
 
265
265
  ## Project architecture
266
266
 
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. GitLab MR reviews allow operator-configured external MCP only over remote HTTPS; developer-local execution may retain explicit stdio peers. Direct external MCP remains privileged operator configuration and comment-only; planned M5 external records use the separate toolkit-owned broker 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.
268
268
 
269
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.
270
271
  - [Roadmap](ROADMAP.md) - milestone status, dependencies, outcomes, and completion signals.
271
272
  - [Backlog](docs/codex/TASKS_BACKLOG.md) - inactive implementation-ready work; active execution remains in `PLANS.md`.
272
273
 
@@ -284,7 +285,7 @@ ocr-ci review --result /tmp/ocr-result.json --stderr /tmp/ocr-stderr.log -- ...
284
285
  ocr-ci post --result /tmp/ocr-result.json --stderr /tmp/ocr-stderr.log
285
286
  ```
286
287
 
287
- 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).
288
289
 
289
290
  ## Configuration and safety
290
291
 
@@ -31,15 +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 conservative approval bound to receipt v3'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 remains eligible, while degraded metadata, legacy receipts, any 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.
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.
35
35
 
36
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.
37
37
 
38
38
  ## Project architecture
39
39
 
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. GitLab MR reviews allow operator-configured external MCP only over remote HTTPS; developer-local execution may retain explicit stdio peers. Direct external MCP remains privileged operator configuration and comment-only; planned M5 external records use the separate toolkit-owned broker 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.
41
41
 
42
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.
43
44
  - [Roadmap](ROADMAP.md) - milestone status, dependencies, outcomes, and completion signals.
44
45
  - [Backlog](docs/codex/TASKS_BACKLOG.md) - inactive implementation-ready work; active execution remains in `PLANS.md`.
45
46
 
@@ -57,7 +58,7 @@ ocr-ci review --result /tmp/ocr-result.json --stderr /tmp/ocr-stderr.log -- ...
57
58
  ocr-ci post --result /tmp/ocr-result.json --stderr /tmp/ocr-stderr.log
58
59
  ```
59
60
 
60
- 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).
61
62
 
62
63
  ## Configuration and safety
63
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.3'
22
- __version_tuple__ = version_tuple = (0, 6, 3)
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
+ ]