open-code-review-toolkit 0.2.0__tar.gz → 0.2.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.
- {open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/CHANGELOG.md +11 -0
- {open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/PKG-INFO +10 -2
- {open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/README.md +9 -1
- open_code_review_toolkit-0.2.1/docs/codex/TASKS_BACKLOG.md +336 -0
- open_code_review_toolkit-0.2.1/docs/engineering/toolkit_strategy.md +145 -0
- {open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/docs/gitlab.md +1 -1
- {open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/docs/security.md +1 -1
- {open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/examples/gitlab/ocr-review.gitlab-ci.yml +2 -2
- {open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/_version.py +2 -2
- {open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/preflight.py +1 -1
- {open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/tests/test_context_helpers.py +4 -4
- open_code_review_toolkit-0.2.1/tests/test_project_strategy.py +109 -0
- {open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/tests/test_runtime_helpers.py +2 -2
- open_code_review_toolkit-0.2.0/docs/codex/TASKS_BACKLOG.md +0 -87
- {open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/.gitignore +0 -0
- {open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/CONTRIBUTING.md +0 -0
- {open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/LICENSE +0 -0
- {open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/SECURITY.md +0 -0
- {open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/changelog.d/README.md +0 -0
- {open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/docs/codex/AGENT_EXECUTION_PITFALLS.md +0 -0
- {open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/docs/configuration.md +0 -0
- {open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/docs/development.md +0 -0
- {open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/docs/engineering/project_principles.md +0 -0
- {open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/docs/operations.md +0 -0
- {open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/docs/release.md +0 -0
- {open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/examples/gitlab/rules.json +0 -0
- {open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/pyproject.toml +0 -0
- {open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/__init__.py +0 -0
- {open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/cli.py +0 -0
- {open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/common/__init__.py +0 -0
- {open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/common/language.py +0 -0
- {open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/common/markdown.py +0 -0
- {open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/common/redaction.py +0 -0
- {open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/config_writer.py +0 -0
- {open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/configure.py +0 -0
- {open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/context/__init__.py +0 -0
- {open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/context/__main__.py +0 -0
- {open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/context/ansible.py +0 -0
- {open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/context/categorize.py +0 -0
- {open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/context/instructions.py +0 -0
- {open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/context/manifests.py +0 -0
- {open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/context/planner.py +0 -0
- {open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/context/render.py +0 -0
- {open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/context/repo.py +0 -0
- {open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/context/settings.py +0 -0
- {open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/mcp_config.py +0 -0
- {open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/posting/__init__.py +0 -0
- {open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/posting/__main__.py +0 -0
- {open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/posting/comments.py +0 -0
- {open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/posting/formatting.py +0 -0
- {open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/posting/gitlab.py +0 -0
- {open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/posting/markers.py +0 -0
- {open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/posting/payloads.py +0 -0
- {open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/posting/result.py +0 -0
- {open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/posting/settings.py +0 -0
- {open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/posting/snapshot.py +0 -0
- {open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/posting/workflow.py +0 -0
- {open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/py.typed +0 -0
- {open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/tests/__init__.py +0 -0
- {open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/tests/support.py +0 -0
- {open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/tests/test_cli.py +0 -0
- {open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/tests/test_common_helpers.py +0 -0
- {open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/tests/test_install_local_artifact.py +0 -0
- {open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/tests/test_operations_docs.py +0 -0
- {open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/tests/test_posting_helpers.py +0 -0
- {open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/tests/test_quality_script.py +0 -0
- {open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/tests/test_release_authorization.py +0 -0
- {open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/tests/test_release_notes.py +0 -0
- {open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/tests/test_release_process_docs.py +0 -0
- {open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/tests/test_testpypi_preview.py +0 -0
|
@@ -1,3 +1,14 @@
|
|
|
1
|
+
## 0.2.1 - 2026-07-27
|
|
2
|
+
|
|
3
|
+
### Features
|
|
4
|
+
|
|
5
|
+
- Target Open Code Review 1.7.17 in preflight validation and the checksum-pinned GitLab CI example. ([#12](https://github.com/xeonvs/open-code-review-toolkit/issues/12))
|
|
6
|
+
|
|
7
|
+
### Documentation
|
|
8
|
+
|
|
9
|
+
- Document the durable toolkit strategy, milestone roadmap, and reconciled implementation backlog. ([#13](https://github.com/xeonvs/open-code-review-toolkit/issues/13))
|
|
10
|
+
|
|
11
|
+
|
|
1
12
|
## 0.2.0 - 2026-07-21
|
|
2
13
|
|
|
3
14
|
### Features
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: open-code-review-toolkit
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.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
|
|
@@ -243,7 +243,7 @@ ocr --version
|
|
|
243
243
|
ocr-ci --help
|
|
244
244
|
```
|
|
245
245
|
|
|
246
|
-
The current compatibility target is OCR `1.7.
|
|
246
|
+
The current compatibility target is OCR `1.7.17`. CI should pin the release and verify its published checksum before execution.
|
|
247
247
|
Review output defaults to English. Set `OCR_REVIEW_LANGUAGE=Russian` to use Russian consistently in both OCR configuration and generated review context.
|
|
248
248
|
|
|
249
249
|
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.
|
|
@@ -256,6 +256,14 @@ Suppression uses both the GitLab diff position and a stable finding fingerprint,
|
|
|
256
256
|
|
|
257
257
|
Project-wide accepted tradeoffs can be recorded separately in `.opencodereview/accepted-decisions.md`; the context generator supplies them to OCR only when the current merge request is not changing that file. See [Accepted project decisions](docs/configuration.md#accepted-project-decisions) for the entry format, inline marker convention, security boundary, and limitations.
|
|
258
258
|
|
|
259
|
+
## Project development
|
|
260
|
+
|
|
261
|
+
The project is evolving from bounded background generation toward a shared Repository Evidence Engine: one deterministic evidence model will support both a compact OCR bootstrap and a built-in read-only MCP server. Development is ordered by outcomes and dependencies rather than speculative dates.
|
|
262
|
+
|
|
263
|
+
- [Toolkit strategy](docs/engineering/toolkit_strategy.md) - durable product boundaries, architecture, invariants, and non-goals.
|
|
264
|
+
- [Roadmap](ROADMAP.md) - milestone status, dependencies, outcomes, and completion signals.
|
|
265
|
+
- [Backlog](docs/codex/TASKS_BACKLOG.md) - inactive implementation-ready work; active execution remains in `PLANS.md`.
|
|
266
|
+
|
|
259
267
|
## GitLab CI quick start
|
|
260
268
|
|
|
261
269
|
1. Configure protected/masked `GITLAB_API_TOKEN` and LLM variables in GitLab.
|
|
@@ -15,7 +15,7 @@ ocr --version
|
|
|
15
15
|
ocr-ci --help
|
|
16
16
|
```
|
|
17
17
|
|
|
18
|
-
The current compatibility target is OCR `1.7.
|
|
18
|
+
The current compatibility target is OCR `1.7.17`. CI should pin the release and verify its published checksum before execution.
|
|
19
19
|
Review output defaults to English. Set `OCR_REVIEW_LANGUAGE=Russian` to use Russian consistently in both OCR configuration and generated review context.
|
|
20
20
|
|
|
21
21
|
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.
|
|
@@ -28,6 +28,14 @@ Suppression uses both the GitLab diff position and a stable finding fingerprint,
|
|
|
28
28
|
|
|
29
29
|
Project-wide accepted tradeoffs can be recorded separately in `.opencodereview/accepted-decisions.md`; the context generator supplies them to OCR only when the current merge request is not changing that file. See [Accepted project decisions](docs/configuration.md#accepted-project-decisions) for the entry format, inline marker convention, security boundary, and limitations.
|
|
30
30
|
|
|
31
|
+
## Project development
|
|
32
|
+
|
|
33
|
+
The project is evolving from bounded background generation toward a shared Repository Evidence Engine: one deterministic evidence model will support both a compact OCR bootstrap and a built-in read-only MCP server. Development is ordered by outcomes and dependencies rather than speculative dates.
|
|
34
|
+
|
|
35
|
+
- [Toolkit strategy](docs/engineering/toolkit_strategy.md) - durable product boundaries, architecture, invariants, and non-goals.
|
|
36
|
+
- [Roadmap](ROADMAP.md) - milestone status, dependencies, outcomes, and completion signals.
|
|
37
|
+
- [Backlog](docs/codex/TASKS_BACKLOG.md) - inactive implementation-ready work; active execution remains in `PLANS.md`.
|
|
38
|
+
|
|
31
39
|
## GitLab CI quick start
|
|
32
40
|
|
|
33
41
|
1. Configure protected/masked `GITLAB_API_TOKEN` and LLM variables in GitLab.
|
|
@@ -0,0 +1,336 @@
|
|
|
1
|
+
# Tasks Backlog
|
|
2
|
+
|
|
3
|
+
This file contains implementation-ready future work derived from the [toolkit strategy](../engineering/toolkit_strategy.md) and ordered by the [roadmap](../../ROADMAP.md). Active execution belongs in `PLANS.md`; roadmap outcomes are intentionally not repeated here.
|
|
4
|
+
|
|
5
|
+
Statuses are `ready`, `planned`, `parked`, `conditional`, or `owner action`. Release classification is an expectation to be confirmed when work is activated.
|
|
6
|
+
|
|
7
|
+
## Existing backlog reconciliation
|
|
8
|
+
|
|
9
|
+
| Previous item | Disposition | Result |
|
|
10
|
+
| --- | --- | --- |
|
|
11
|
+
| Native fuzzing campaign | Retained and revised | BL-019 connects fuzzing to the future evidence/MCP parser attack surface and keeps bounded CI and corpus ownership as activation requirements. |
|
|
12
|
+
| OpenSSF Best Practices registration | Retained as owner action | BL-022 remains conditional on truthful owner attestations and is not a product-roadmap priority. |
|
|
13
|
+
| Additional provider adapters | Retained, clarified, and reprioritized | BL-021 is explicitly about code-hosting and review-host adapters beyond GitLab, not repository ecosystem/framework evidence. |
|
|
14
|
+
| File-based user configuration | Retained and redesigned | BL-020 waits for profile, MCP, and evidence schemas while preserving environment precedence and excluding secrets. |
|
|
15
|
+
|
|
16
|
+
## M0 Foundation
|
|
17
|
+
|
|
18
|
+
### BL-001: Add Bandit as a repository security gate
|
|
19
|
+
|
|
20
|
+
- **Status:** ready
|
|
21
|
+
- **Priority:** high
|
|
22
|
+
- **Roadmap theme:** M0 Foundation
|
|
23
|
+
- **Dependencies:** Existing isolated quality environment and security workflow.
|
|
24
|
+
- **Activation trigger:** Strategy and backlog documentation is merged.
|
|
25
|
+
- **Goal:** Detect high-signal Python security defects in the toolkit without turning analyzers into a downstream product capability.
|
|
26
|
+
- **Scoped deliverables:** Add a development-only pinned Bandit dependency; scan `src/ocr_toolkit`; integrate concise execution with `scripts/quality.sh` and the repository security workflow; document narrow, justified suppressions.
|
|
27
|
+
- **Acceptance criteria:** Local and CI scans use identical configuration, produce no unexplained findings, keep full logs out of agent context, and add no runtime dependency.
|
|
28
|
+
- **Exclusions:** Scanning downstream repositories, auto-fixing findings, broad ignore lists, or treating Bandit as evidence supplied to OCR.
|
|
29
|
+
- **Validation:** Positive and negative synthetic fixtures where configuration needs proof, complete quality gate, and security workflow dry run or equivalent command.
|
|
30
|
+
- **Release classification expectation:** `no-release`, unless remediation changes user-visible behavior.
|
|
31
|
+
|
|
32
|
+
### BL-002: Centralize OCR compatibility in a machine-readable manifest
|
|
33
|
+
|
|
34
|
+
- **Status:** ready
|
|
35
|
+
- **Priority:** high
|
|
36
|
+
- **Roadmap theme:** M0 Foundation
|
|
37
|
+
- **Dependencies:** Current recommended/tested OCR baseline and preflight checks.
|
|
38
|
+
- **Activation trigger:** The next OCR compatibility change or before evidence MCP depends on an OCR capability.
|
|
39
|
+
- **Goal:** Replace scattered exact-version assumptions with one reviewed compatibility and capability source.
|
|
40
|
+
- **Scoped deliverables:** Define a dependency-free manifest for recommended/tested releases and required capabilities; centralize version/capability inspection; generate or validate documentation and CI pins from it; fail closed when required contracts disappear.
|
|
41
|
+
- **Acceptance criteria:** Preflight, public examples, tests, and documentation agree with the manifest; additive version output remains tolerated; unknown or missing required capabilities fail with actionable errors.
|
|
42
|
+
- **Exclusions:** Automatic production upgrades, downloading OCR, or supporting arbitrary historical releases.
|
|
43
|
+
- **Validation:** Contract fixtures for supported, additive, malformed, and incompatible OCR outputs plus release-pin consistency tests.
|
|
44
|
+
- **Release classification expectation:** `release-required`.
|
|
45
|
+
|
|
46
|
+
### BL-003: Detect and test new upstream OCR releases
|
|
47
|
+
|
|
48
|
+
- **Status:** planned
|
|
49
|
+
- **Priority:** high
|
|
50
|
+
- **Roadmap theme:** M0 Foundation
|
|
51
|
+
- **Dependencies:** BL-002.
|
|
52
|
+
- **Activation trigger:** Compatibility manifest and capability inspection are stable.
|
|
53
|
+
- **Goal:** Detect upstream changes quickly while keeping production upgrades review-gated.
|
|
54
|
+
- **Scoped deliverables:** Add scheduled latest-release detection, checksum retrieval, changelog impact classification, and contract tests across the supported release set; create an actionable report or issue when review is required.
|
|
55
|
+
- **Acceptance criteria:** Automation is bounded, uses official release metadata, distinguishes compatible/additive/breaking/unknown impact, and never edits production pins or publishes a release automatically.
|
|
56
|
+
- **Exclusions:** Automatic merge, automatic recommended-version changes, or relying on mutable download URLs without digest verification.
|
|
57
|
+
- **Validation:** Recorded synthetic release metadata, scheduled-workflow tests, and a no-change path that creates no noise.
|
|
58
|
+
- **Release classification expectation:** `no-release`; subsequent compatibility bumps are classified separately.
|
|
59
|
+
|
|
60
|
+
## M1 Evidence architecture
|
|
61
|
+
|
|
62
|
+
### BL-004: Define the common repository evidence model
|
|
63
|
+
|
|
64
|
+
- **Status:** ready
|
|
65
|
+
- **Priority:** high
|
|
66
|
+
- **Roadmap theme:** M1 Evidence architecture
|
|
67
|
+
- **Dependencies:** BL-002 for capability-sensitive evidence.
|
|
68
|
+
- **Activation trigger:** M0 planning sources are merged.
|
|
69
|
+
- **Goal:** Give all collectors and projections one deterministic representation of repository facts.
|
|
70
|
+
- **Scoped deliverables:** Define dependency-free evidence types for kind/value, source path, git ref, component scope, provenance, confidence, and optional staleness; specify stable ordering, deduplication, and global/per-kind bounds.
|
|
71
|
+
- **Acceptance criteria:** Existing context facts can be represented without losing trust or origin; malformed and over-limit facts degrade explicitly; serialization is deterministic.
|
|
72
|
+
- **Exclusions:** MCP transport, bootstrap prose, new ecosystem parsers, or network discovery.
|
|
73
|
+
- **Validation:** Unit/property tests for normalization, ordering, bounds, provenance, and round trips using synthetic facts.
|
|
74
|
+
- **Release classification expectation:** `release-deferred` until a user-visible projection ships.
|
|
75
|
+
|
|
76
|
+
### BL-005: Build source/target snapshots and evidence deltas
|
|
77
|
+
|
|
78
|
+
- **Status:** planned
|
|
79
|
+
- **Priority:** high
|
|
80
|
+
- **Roadmap theme:** M1 Evidence architecture
|
|
81
|
+
- **Dependencies:** BL-004 and existing bounded git-ref handling.
|
|
82
|
+
- **Activation trigger:** The common evidence model is merged.
|
|
83
|
+
- **Goal:** Describe base and head repository state without conflating declarations, resolved versions, and changes.
|
|
84
|
+
- **Scoped deliverables:** Collect target/base and source/head snapshots, map changed files to components, and compute typed dependency/runtime/container deltas while preserving absent and unknown states.
|
|
85
|
+
- **Acceptance criteria:** Target content is read from trusted refs, source-only changes cannot self-authorize policy, and added/removed/changed/unknown facts are reproducible.
|
|
86
|
+
- **Exclusions:** Whole-history analysis, network package resolution, installed-environment probing outside configured evidence, or framework plugins.
|
|
87
|
+
- **Validation:** Synthetic two-ref repositories covering additions, removals, renames, malformed manifests, missing refs, and bounded failure.
|
|
88
|
+
- **Release classification expectation:** `release-deferred`.
|
|
89
|
+
|
|
90
|
+
### BL-006: Separate collection, storage, planning, and rendering
|
|
91
|
+
|
|
92
|
+
- **Status:** planned
|
|
93
|
+
- **Priority:** high
|
|
94
|
+
- **Roadmap theme:** M1 Evidence architecture
|
|
95
|
+
- **Dependencies:** BL-004 and BL-005.
|
|
96
|
+
- **Activation trigger:** Current context output is characterized by regression fixtures.
|
|
97
|
+
- **Goal:** Decompose `context/render.py` without changing trust or fail-closed behavior.
|
|
98
|
+
- **Scoped deliverables:** Move collectors behind evidence interfaces, add bounded storage, isolate bootstrap selection, and retain a renderer compatible with the current background contract during migration.
|
|
99
|
+
- **Acceptance criteria:** Existing public context behavior remains covered, collectors are projection-independent, and no bootstrap/MCP-specific duplicate collector path exists.
|
|
100
|
+
- **Exclusions:** New parser breadth, changing the hard output limit, or enabling built-in MCP.
|
|
101
|
+
- **Validation:** Golden synthetic context fixtures, regression tests for truncation/redaction/guidance, and complete quality gate.
|
|
102
|
+
- **Release classification expectation:** `release-deferred` unless output behavior changes.
|
|
103
|
+
|
|
104
|
+
### BL-007: Deliver the compact OCR bootstrap
|
|
105
|
+
|
|
106
|
+
- **Status:** planned
|
|
107
|
+
- **Priority:** high
|
|
108
|
+
- **Roadmap theme:** M1 Evidence architecture
|
|
109
|
+
- **Dependencies:** BL-004 through BL-006.
|
|
110
|
+
- **Activation trigger:** Evidence selection is independent from rendering.
|
|
111
|
+
- **Goal:** Replace large background inventories with a trusted overview that guides OCR to detailed evidence on demand.
|
|
112
|
+
- **Scoped deliverables:** Implement prioritized bootstrap planning for constraints, trust, refs, ecosystems/frameworks, material deltas, reference identifiers, MCP capabilities, relevant decisions, and guidance hints; target 1,500-2,500 characters while preserving the 7,950-character hard limit.
|
|
113
|
+
- **Acceptance criteria:** Detailed manifests and external contents are absent; omissions and degradation are explicit; relevant high-priority facts survive tight budgets deterministically.
|
|
114
|
+
- **Exclusions:** Raising the hard limit, copying full guidance, or embedding all dependency lists.
|
|
115
|
+
- **Validation:** Budget boundary tests, deterministic golden fixtures, adversarial Markdown/redaction cases, and comparison with existing context scenarios.
|
|
116
|
+
- **Release classification expectation:** `release-required`.
|
|
117
|
+
|
|
118
|
+
### BL-008: Add the built-in read-only evidence MCP
|
|
119
|
+
|
|
120
|
+
- **Status:** planned
|
|
121
|
+
- **Priority:** high
|
|
122
|
+
- **Roadmap theme:** M1 Evidence architecture
|
|
123
|
+
- **Dependencies:** BL-004 through BL-007 and current MCP validation.
|
|
124
|
+
- **Activation trigger:** Common evidence storage and compact bootstrap are stable.
|
|
125
|
+
- **Goal:** Let OCR retrieve bounded derived facts without duplicating its native repository tools.
|
|
126
|
+
- **Scoped deliverables:** Register a reserved `ocr_toolkit_evidence` server by default; expose `ocr_toolkit_*` tools for environment, components, dependencies/deltas, frameworks, versions, and decisions; compose with external servers; reserve names and validate collisions.
|
|
127
|
+
- **Acceptance criteria:** Server is read-only, root-constrained, deterministic, network-independent, command-free, bounded, and uses the same evidence store as the bootstrap.
|
|
128
|
+
- **Exclusions:** Generic file reads, shell execution, GitLab access, external URL fetches, or documentation storage.
|
|
129
|
+
- **Validation:** Protocol and composition tests, traversal/collision/adversarial-input tests, and synthetic OCR configuration integration.
|
|
130
|
+
- **Release classification expectation:** `release-required`.
|
|
131
|
+
|
|
132
|
+
## M2 Ecosystem and framework coverage
|
|
133
|
+
|
|
134
|
+
### BL-009: Resolve lockfile, runtime, and container evidence
|
|
135
|
+
|
|
136
|
+
- **Status:** planned
|
|
137
|
+
- **Priority:** high
|
|
138
|
+
- **Roadmap theme:** M2 Ecosystem and framework coverage
|
|
139
|
+
- **Dependencies:** BL-004 through BL-006.
|
|
140
|
+
- **Activation trigger:** Snapshot and delta semantics are stable.
|
|
141
|
+
- **Goal:** Distinguish declared constraints, locked, installed, runtime-detected, container-pinned, inferred, and unknown versions.
|
|
142
|
+
- **Scoped deliverables:** Strengthen actual-use formats for Python, JavaScript/TypeScript, Go, PHP, Ansible, containers, and GitLab CI; implement source/target resolution and deltas with provenance.
|
|
143
|
+
- **Acceptance criteria:** Each supported format has deterministic semantics and fixtures; conflicting sources remain distinct; malformed/oversized files degrade without network access.
|
|
144
|
+
- **Exclusions:** Unused ecosystems, package-registry queries, arbitrary build execution, or treating declarations as resolved versions.
|
|
145
|
+
- **Validation:** Per-format source/target fixtures, conflict and limit cases, and common evidence-model contract tests.
|
|
146
|
+
- **Release classification expectation:** `release-required`.
|
|
147
|
+
|
|
148
|
+
### BL-010: Establish framework evidence plugins
|
|
149
|
+
|
|
150
|
+
- **Status:** planned
|
|
151
|
+
- **Priority:** medium
|
|
152
|
+
- **Roadmap theme:** M2 Ecosystem and framework coverage
|
|
153
|
+
- **Dependencies:** BL-004, BL-005, and BL-009.
|
|
154
|
+
- **Activation trigger:** At least two demonstrated repository use cases can share a plugin contract.
|
|
155
|
+
- **Goal:** Expose framework identity, verified version, component scope, important configuration paths, and material deltas without building code graphs.
|
|
156
|
+
- **Scoped deliverables:** Define a bounded plugin protocol and implement first providers chosen from demonstrated fixtures, prioritizing pytest, Ansible collections, and Molecule before broader candidates.
|
|
157
|
+
- **Acceptance criteria:** Plugins cannot run arbitrary commands or network requests, use common evidence records, and avoid whole-repository traversal when changed components are known.
|
|
158
|
+
- **Exclusions:** Route/call/symbol graphs, framework-specific reviewers, or speculative detection without version evidence.
|
|
159
|
+
- **Validation:** Positive/negative/multi-component fixtures, version-conflict and staleness cases, and plugin isolation tests.
|
|
160
|
+
- **Release classification expectation:** `release-required`.
|
|
161
|
+
|
|
162
|
+
### BL-011: Add evidence packs from demonstrated use cases
|
|
163
|
+
|
|
164
|
+
- **Status:** conditional
|
|
165
|
+
- **Priority:** medium
|
|
166
|
+
- **Roadmap theme:** M2 Ecosystem and framework coverage
|
|
167
|
+
- **Dependencies:** BL-009 and BL-010.
|
|
168
|
+
- **Activation trigger:** A real repository need identifies a missing ecosystem or framework and supplies safe synthetic fixtures and deterministic semantics.
|
|
169
|
+
- **Goal:** Extend coverage without accumulating shallow detectors.
|
|
170
|
+
- **Scoped deliverables:** Implement one coherent ecosystem or framework pack per activation, with provenance, bounds, source/target deltas, documentation, and public synthetic examples.
|
|
171
|
+
- **Acceptance criteria:** The use case and completion signal are documented before implementation; false-positive behavior and unsupported versions are explicit.
|
|
172
|
+
- **Exclusions:** Checkbox coverage, network resolution, runtime code execution, or bundles spanning unrelated ecosystems.
|
|
173
|
+
- **Validation:** Pack-specific fixtures plus common evidence and bootstrap/MCP projection contracts.
|
|
174
|
+
- **Release classification expectation:** `release-required`.
|
|
175
|
+
|
|
176
|
+
## M3 External MCP hardening
|
|
177
|
+
|
|
178
|
+
### BL-012: Document and validate external read-only MCP composition
|
|
179
|
+
|
|
180
|
+
- **Status:** planned
|
|
181
|
+
- **Priority:** medium
|
|
182
|
+
- **Roadmap theme:** M3 External MCP hardening
|
|
183
|
+
- **Dependencies:** BL-008 and existing explicit external tool allowlists.
|
|
184
|
+
- **Activation trigger:** Built-in evidence MCP configuration is stable.
|
|
185
|
+
- **Goal:** Compose external knowledge tools with built-in evidence without prefetching content or weakening tool permissions.
|
|
186
|
+
- **Scoped deliverables:** Add synthetic generic stdio, HTTP-to-stdio proxy, YouTrack read-only, Confluence read-only, and versioned-documentation MCP examples; document reserved names, allowlists, secret injection, and composition behavior.
|
|
187
|
+
- **Acceptance criteria:** Examples expose narrow reads only, use synthetic hosts, keep credentials out of generated files/logs, and cannot replace the built-in server.
|
|
188
|
+
- **Exclusions:** External writes, generic URL fetch, documentation mirroring, or issue/page prefetch into bootstrap.
|
|
189
|
+
- **Validation:** Configuration contract tests, redaction checks, collision cases, and executable synthetic example validation.
|
|
190
|
+
- **Release classification expectation:** `release-required` if configuration changes; otherwise `no-release`.
|
|
191
|
+
|
|
192
|
+
### BL-013: Threat-model and constrain external references
|
|
193
|
+
|
|
194
|
+
- **Status:** planned
|
|
195
|
+
- **Priority:** high
|
|
196
|
+
- **Roadmap theme:** M3 External MCP hardening
|
|
197
|
+
- **Dependencies:** BL-004, BL-008, and canonical MR metadata handling.
|
|
198
|
+
- **Activation trigger:** External references are proposed for bootstrap or MCP use.
|
|
199
|
+
- **Goal:** Detect useful references without allowing untrusted metadata or retrieved content to control policy or tools.
|
|
200
|
+
- **Scoped deliverables:** Define configured project-key patterns, host/space allowlists, canonical parsing, reference and traversal bounds, audit metadata, narrow tool contracts, and prompt-injection instructions.
|
|
201
|
+
- **Acceptance criteria:** External content cannot change policy, suppress findings, authorize actions, modify permissions, or trigger writes; rejected and truncated references are auditable without leaking secrets.
|
|
202
|
+
- **Exclusions:** Content prefetch, recursive browsing, generic web access, or external-system mutation.
|
|
203
|
+
- **Validation:** Threat model, adversarial MR/issue/page fixtures, Unicode/URL canonicalization, bound tests, and attack-path review.
|
|
204
|
+
- **Release classification expectation:** `release-required`.
|
|
205
|
+
|
|
206
|
+
## M4 Policy and project guidance
|
|
207
|
+
|
|
208
|
+
### BL-014: Evolve accepted decisions into tolerant structured Markdown
|
|
209
|
+
|
|
210
|
+
- **Status:** planned
|
|
211
|
+
- **Priority:** medium
|
|
212
|
+
- **Roadmap theme:** M4 Policy and project guidance
|
|
213
|
+
- **Dependencies:** BL-004, BL-005, and current target-branch self-whitelisting guard.
|
|
214
|
+
- **Activation trigger:** Evidence model can preserve decision scope and provenance.
|
|
215
|
+
- **Goal:** Add optional Scope, Category, Review after, and Owner metadata without breaking existing decision documents.
|
|
216
|
+
- **Scoped deliverables:** Parse heading/rationale entries and optional bullet metadata; tolerate unknown fields; filter by target branch and component scope; place summaries in bootstrap and full rationale in evidence MCP.
|
|
217
|
+
- **Acceptance criteria:** Existing files remain valid, malformed optional metadata cannot invalidate unrelated decisions, and source-branch edits never affect the current review.
|
|
218
|
+
- **Exclusions:** YAML, unconditional finding suppression, policy authorization, or mandatory metadata.
|
|
219
|
+
- **Validation:** Backward-compatibility, unknown/malformed field, scope, date, target/source, and size-bound fixtures.
|
|
220
|
+
- **Release classification expectation:** `release-required`.
|
|
221
|
+
|
|
222
|
+
### BL-015: Simplify project guidance after an upstream OCR contract exists
|
|
223
|
+
|
|
224
|
+
- **Status:** conditional
|
|
225
|
+
- **Priority:** medium
|
|
226
|
+
- **Roadmap theme:** M4 Policy and project guidance
|
|
227
|
+
- **Dependencies:** BL-004, BL-005, BL-007, and documented/tested upstream OCR automatic guidance behavior.
|
|
228
|
+
- **Activation trigger:** A supported OCR release proves the required guidance contract in compatibility tests.
|
|
229
|
+
- **Goal:** Replace large excerpts with target-branch paths and short non-authoritative hints while preserving fail-closed handling.
|
|
230
|
+
- **Scoped deliverables:** Discover applicable `AGENTS.md`/`CLAUDE.md`, exclude files changed by the merge request, supply paths/hints, and permit OCR native tools to read target versions on demand.
|
|
231
|
+
- **Acceptance criteria:** Source changes cannot self-instruct, missing upstream capability retains current bounded behavior, and guidance never overrides system policy.
|
|
232
|
+
- **Exclusions:** Removing safeguards before the trigger, copying full guidance into bootstrap, or toolkit-specific instruction execution.
|
|
233
|
+
- **Validation:** Multi-scope target/source fixtures, changed-guidance attacks, capability fallback tests, and bootstrap budget tests.
|
|
234
|
+
- **Release classification expectation:** `release-required`.
|
|
235
|
+
|
|
236
|
+
## M5 Review profiles and quality measurement
|
|
237
|
+
|
|
238
|
+
### BL-016: Add explicit run-level review profiles
|
|
239
|
+
|
|
240
|
+
- **Status:** planned
|
|
241
|
+
- **Priority:** medium
|
|
242
|
+
- **Roadmap theme:** M5 Review profiles and quality measurement
|
|
243
|
+
- **Dependencies:** Stable compatibility manifest and evidence/bootstrap contracts.
|
|
244
|
+
- **Activation trigger:** Profile model and limit differences can be documented without changing per-tool routing.
|
|
245
|
+
- **Goal:** Offer `economy`, `standard`, and `strong` choices for one OCR review run.
|
|
246
|
+
- **Scoped deliverables:** Define explicit profile configuration selecting a run-level model and existing OCR limits; validate supported values, environment precedence, and rendered effective configuration.
|
|
247
|
+
- **Acceptance criteria:** One model remains active per run, defaults preserve current behavior, secrets remain environment-only, and unsupported profiles fail before OCR execution.
|
|
248
|
+
- **Exclusions:** Per-file/per-tool model routing, hidden heuristics, multi-agent orchestration, or full-repository scan profiles.
|
|
249
|
+
- **Validation:** Profile matrix, precedence, preflight, configuration-rendering, and compatibility tests.
|
|
250
|
+
- **Release classification expectation:** `release-required`.
|
|
251
|
+
|
|
252
|
+
### BL-017: Measure review cost and quality signals
|
|
253
|
+
|
|
254
|
+
- **Status:** planned
|
|
255
|
+
- **Priority:** medium
|
|
256
|
+
- **Roadmap theme:** M5 Review profiles and quality measurement
|
|
257
|
+
- **Dependencies:** BL-016 and stable discussion/fingerprint lifecycle.
|
|
258
|
+
- **Activation trigger:** Explicit profiles can label comparable runs.
|
|
259
|
+
- **Goal:** Produce privacy-safe evidence for profile tuning and any future routing decision.
|
|
260
|
+
- **Scoped deliverables:** Define bounded metrics for latency, token use when available, evidence/MCP use, findings, repeats, suppression, resolution, and human ownership; document retention and export boundaries.
|
|
261
|
+
- **Acceptance criteria:** Metrics contain no source, prompts, secrets, or external contents; missing provider telemetry is explicit; repeated runs are comparable without changing review behavior.
|
|
262
|
+
- **Exclusions:** User surveillance, ranking developers, automatic routing, or mandatory external telemetry.
|
|
263
|
+
- **Validation:** Synthetic lifecycle aggregation, redaction/privacy tests, missing-data behavior, and deterministic export fixtures.
|
|
264
|
+
- **Release classification expectation:** `release-required` if exposed publicly; otherwise `no-release`.
|
|
265
|
+
|
|
266
|
+
### BL-018: Evaluate conservative automatic profile routing
|
|
267
|
+
|
|
268
|
+
- **Status:** conditional
|
|
269
|
+
- **Priority:** low
|
|
270
|
+
- **Roadmap theme:** M5 Review profiles and quality measurement
|
|
271
|
+
- **Dependencies:** BL-016, BL-017, and an owner-approved quality/cost decision policy.
|
|
272
|
+
- **Activation trigger:** Representative metrics demonstrate a stable deterministic rule that improves an explicit objective without reducing review safety.
|
|
273
|
+
- **Goal:** Select one run-level profile conservatively from trusted bounded inputs.
|
|
274
|
+
- **Scoped deliverables:** Document the decision rule, inputs, fallback, observability, and opt-out; implement only after replay evaluation and owner approval.
|
|
275
|
+
- **Acceptance criteria:** Routing is deterministic and explainable, never uses untrusted content as authority, never selects `ocr scan`, and falls back to `standard` on uncertainty.
|
|
276
|
+
- **Exclusions:** Learned online routing, per-tool models, multiple agents, or silent policy changes.
|
|
277
|
+
- **Validation:** Offline replay, boundary/adversarial cases, fallback tests, and quality regression thresholds.
|
|
278
|
+
- **Release classification expectation:** `release-required`.
|
|
279
|
+
|
|
280
|
+
## M6 Later and conditional work
|
|
281
|
+
|
|
282
|
+
### BL-019: Run a native fuzzing campaign
|
|
283
|
+
|
|
284
|
+
- **Status:** parked
|
|
285
|
+
- **Priority:** medium
|
|
286
|
+
- **Roadmap theme:** M6 Later and conditional work
|
|
287
|
+
- **Dependencies:** Stable evidence/MCP parser interfaces from M1 and selected Python 3.10-3.14-compatible fuzzing backend.
|
|
288
|
+
- **Activation trigger:** Reproducible local execution, bounded CI resources, corpus ownership, and high-value parser targets are agreed.
|
|
289
|
+
- **Goal:** Find crashes and invariant violations at untrusted evidence, MCP, result, GitLab payload, and registry-metadata boundaries.
|
|
290
|
+
- **Scoped deliverables:** Compare Atheris and property-based alternatives; define synthetic seeds; fuzz selected parsers; minimize and retain regressions; evaluate public service integration only after useful local results.
|
|
291
|
+
- **Acceptance criteria:** Targets are deterministic and bounded, minimized failures become tests, corpora contain no repository/provider secrets, and ownership is explicit.
|
|
292
|
+
- **Exclusions:** Unbounded CI, production data, low-value blanket fuzzing, or a runtime dependency.
|
|
293
|
+
- **Validation:** Reproducible smoke campaign across supported Python boundaries and replay of minimized corpus.
|
|
294
|
+
- **Release classification expectation:** `no-release`, except user-visible fixes found by the campaign.
|
|
295
|
+
|
|
296
|
+
### BL-020: Design file-based non-secret configuration
|
|
297
|
+
|
|
298
|
+
- **Status:** parked
|
|
299
|
+
- **Priority:** low
|
|
300
|
+
- **Roadmap theme:** M6 Later and conditional work
|
|
301
|
+
- **Dependencies:** Stable profile, MCP composition, and evidence configuration schemas.
|
|
302
|
+
- **Activation trigger:** Environment-only configuration is a demonstrated operational constraint and one coherent schema can cover the affected non-secret settings.
|
|
303
|
+
- **Goal:** Improve maintainability without weakening environment precedence, validation, or secret handling.
|
|
304
|
+
- **Scoped deliverables:** Decide format/versioning, precedence, migration, allowed non-secret fields, unknown-key behavior, target/source trust, and schema evolution before implementation.
|
|
305
|
+
- **Acceptance criteria:** Environment values retain explicit precedence, secrets are rejected from files, source-branch files cannot self-authorize, and migration is documented and tested.
|
|
306
|
+
- **Exclusions:** Credentials on disk, implicit repository configuration, multiple overlapping formats, or implementation before the design decision.
|
|
307
|
+
- **Validation:** Threat model, schema/precedence fixtures, migration compatibility tests, and secret-rejection tests.
|
|
308
|
+
- **Release classification expectation:** `release-required`.
|
|
309
|
+
|
|
310
|
+
### BL-021: Add code-hosting and review-host adapters beyond GitLab
|
|
311
|
+
|
|
312
|
+
- **Status:** conditional
|
|
313
|
+
- **Priority:** low
|
|
314
|
+
- **Roadmap theme:** M6 Later and conditional work
|
|
315
|
+
- **Dependencies:** Stable provider-neutral core contracts and a funded non-GitLab use case.
|
|
316
|
+
- **Activation trigger:** A named forge has an owner, synthetic fixtures, and explicit parity requirements for CI orchestration, positioning, deduplication, discussion ownership, and safe publication.
|
|
317
|
+
- **Goal:** Add one coherent host adapter without leaking forge semantics into evidence or core result handling.
|
|
318
|
+
- **Scoped deliverables:** Specify adapter contract gaps, implement one provider boundary, add synthetic API fixtures and public setup documentation, and preserve fail-closed write behavior.
|
|
319
|
+
- **Acceptance criteria:** Core remains provider-neutral, GitLab behavior does not regress, and the new host meets explicit lifecycle and security parity.
|
|
320
|
+
- **Exclusions:** Repository ecosystem/framework detection, partial adapters, legacy namespace shims, or multi-host abstractions without a real second provider.
|
|
321
|
+
- **Validation:** Shared adapter contract suite, provider-specific synthetic integration tests, redaction/write-bound tests, and documentation validation.
|
|
322
|
+
- **Release classification expectation:** `release-required`.
|
|
323
|
+
|
|
324
|
+
### BL-022: Register for OpenSSF Best Practices
|
|
325
|
+
|
|
326
|
+
- **Status:** owner action
|
|
327
|
+
- **Priority:** low
|
|
328
|
+
- **Roadmap theme:** M6 Later and conditional work
|
|
329
|
+
- **Dependencies:** Public repository and owner access to `bestpractices.dev`.
|
|
330
|
+
- **Activation trigger:** The owner is ready to authenticate and attest every passing-level criterion truthfully.
|
|
331
|
+
- **Goal:** Create an evidence-backed public badge record without guessing governance or usage answers.
|
|
332
|
+
- **Scoped deliverables:** Complete the questionnaire with current public evidence links, leave unsupported criteria unmet, add the badge only after readback confirms the record.
|
|
333
|
+
- **Acceptance criteria:** Record and repository badge agree, every affirmative answer has current evidence, and owner-only statements are owner-confirmed.
|
|
334
|
+
- **Exclusions:** Automated attestations, aspirational answers, or treating badge work as a product feature.
|
|
335
|
+
- **Validation:** Public record readback, repository link check, and badge target verification.
|
|
336
|
+
- **Release classification expectation:** `no-release`.
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
# Toolkit Strategy
|
|
2
|
+
|
|
3
|
+
This document is the durable source of truth for the product and architecture direction of Open Code Review Toolkit. It describes boundaries and intended outcomes, not execution order; see [the roadmap](../../ROADMAP.md) for sequencing and [the backlog](../codex/TASKS_BACKLOG.md) for implementation-ready work.
|
|
4
|
+
|
|
5
|
+
## Product purpose
|
|
6
|
+
|
|
7
|
+
Open Code Review Toolkit is a provider-neutral GitLab CI control and integration layer around Alibaba Open Code Review (OCR). Its purpose is to make OCR review predictable and safe in real pipelines: configuration is validated, project evidence is deterministic and bounded, and model-controlled results are normalized before GitLab publication.
|
|
8
|
+
|
|
9
|
+
The toolkit does not replace OCR. OCR owns diff review, file selection and bundling, codebase exploration, rule matching, its agent tool loop, finding generation, and initial finding positioning. The toolkit owns GitLab CI orchestration, OCR/provider/MCP configuration, deterministic project evidence, compact trusted bootstrap generation, project-policy overlays, OCR compatibility validation, safe result publication, and the discussion deduplication, suppression, ownership, and resolution lifecycle.
|
|
10
|
+
|
|
11
|
+
```mermaid
|
|
12
|
+
flowchart LR
|
|
13
|
+
CI[GitLab CI] --> CT[Toolkit control layer]
|
|
14
|
+
CT -->|validated config and bounded bootstrap| OCR[Alibaba OCR]
|
|
15
|
+
OCR -->|review findings| CT
|
|
16
|
+
CT -->|normalized bounded writes| GL[GitLab discussions]
|
|
17
|
+
OCR -->|native repository tools| REPO[Repository]
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
### Non-goals
|
|
21
|
+
|
|
22
|
+
The toolkit will not:
|
|
23
|
+
|
|
24
|
+
- modify or fork OCR, build a second review engine, agent loop, or per-tool model router;
|
|
25
|
+
- build a full repository scanner, symbol graph, call graph, or run full-repository `ocr scan` for merge-request review;
|
|
26
|
+
- add CodeGraph as a runtime dependency or project linters as a toolkit product capability;
|
|
27
|
+
- store versioned library documentation or prefetch issue and page contents into the bootstrap;
|
|
28
|
+
- add write tools for external systems or give OCR or an LLM direct GitLab write credentials.
|
|
29
|
+
|
|
30
|
+
Repository-maintenance analyzers such as Bandit remain valid quality controls for this codebase. They are not evidence providers or features offered to downstream repositories.
|
|
31
|
+
|
|
32
|
+
## Current state
|
|
33
|
+
|
|
34
|
+
The current context implementation is a bounded Markdown generator rather than an evidence engine. It already detects changed-file categories, reads selected manifests, extracts Python, JavaScript, Go, PHP, Ansible, container, and GitLab CI facts, and includes target-branch-safe project guidance and accepted decisions. It redacts sensitive values, limits reads and output, and degrades explicitly when evidence is incomplete.
|
|
35
|
+
|
|
36
|
+
These capabilities are partial foundations: most facts are rendered directly, dependency versions primarily reflect declarations rather than resolved source/target state, and `context/render.py` still combines collection, prioritization, and presentation. MCP configuration currently validates and installs external stdio servers with explicit tool allowlists; the toolkit does not yet provide a built-in evidence MCP.
|
|
37
|
+
|
|
38
|
+
GitLab result normalization and posting are implemented behind provider-oriented modules. They bound and neutralize model-controlled text, use stable finding fingerprints, preserve human-owned discussions, and keep GitLab credentials outside OCR. The current recommended and tested OCR baseline belongs in the operational compatibility contract, not this durable strategy.
|
|
39
|
+
|
|
40
|
+
## Repository Evidence Engine
|
|
41
|
+
|
|
42
|
+
The target architecture is one Repository Evidence Engine that analyzes source/head and target/base repository states, detects components affected by changed files, and records structured facts. Bootstrap and MCP must project the same stored evidence; they must not grow separate collectors.
|
|
43
|
+
|
|
44
|
+
```mermaid
|
|
45
|
+
flowchart LR
|
|
46
|
+
SNAP[Source and target snapshots] --> COL[Bounded collectors]
|
|
47
|
+
COL --> MODEL[Common evidence model]
|
|
48
|
+
MODEL --> PLAN[Bootstrap planner]
|
|
49
|
+
PLAN --> BOOT[Compact OCR bootstrap]
|
|
50
|
+
MODEL --> MCP[Built-in evidence MCP]
|
|
51
|
+
EXT[External read-only MCP] --> COMPOSE[MCP composition]
|
|
52
|
+
MCP --> COMPOSE
|
|
53
|
+
COMPOSE --> OCR[OCR tool loop]
|
|
54
|
+
BOOT --> OCR
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Every evidence record should preserve its kind and value together with source path, git ref, component scope, provenance, confidence, and staleness where meaningful. Collection is deterministic and network-independent. Storage has explicit bounds and stable ordering. Rendering never upgrades inferred or untrusted material into authoritative policy.
|
|
58
|
+
|
|
59
|
+
The engine separates four responsibilities now concentrated in rendering code:
|
|
60
|
+
|
|
61
|
+
1. collectors parse repository material into structured evidence;
|
|
62
|
+
2. bounded storage normalizes and indexes that evidence;
|
|
63
|
+
3. bootstrap planning selects the smallest useful trusted overview;
|
|
64
|
+
4. renderers produce stable text or read-only MCP responses.
|
|
65
|
+
|
|
66
|
+
The evidence model is the main extension point. Ecosystem and framework plugins may contribute typed facts, but cannot run arbitrary commands, fetch the network, mutate the repository, or introduce a second review workflow.
|
|
67
|
+
|
|
68
|
+
## Compact bootstrap and built-in evidence MCP
|
|
69
|
+
|
|
70
|
+
The OCR background should become a compact bootstrap, normally around 1,500-2,500 characters and always below the existing toolkit/OCR hard limit. It contains only authoritative constraints and trust instructions, base/head identity, detected ecosystems and frameworks, material runtime or dependency changes, normalized external reference identifiers, available MCP capabilities, relevant accepted decisions, and short project-guidance hints.
|
|
71
|
+
|
|
72
|
+
Complete manifests, dependency inventories, guidance documents, and external issue/page contents do not belong in the bootstrap. Detailed repository facts are available on demand through a built-in server registered under a reserved namespace such as `ocr_toolkit_evidence`, with tools prefixed `ocr_toolkit_`. Candidate tools expose review environment, changed components, dependency state and deltas, framework state, version evidence, and accepted decisions.
|
|
73
|
+
|
|
74
|
+
The server is read-only, repository-root constrained, bounded, deterministic, network-independent, and incapable of arbitrary command execution. External MCP configuration is composed with this server rather than replacing it. Reserved names prevent downstream configuration from shadowing built-in tools.
|
|
75
|
+
|
|
76
|
+
## Evidence domains
|
|
77
|
+
|
|
78
|
+
### Dependencies, runtimes, and components
|
|
79
|
+
|
|
80
|
+
Evidence distinguishes declared constraints, locked versions, installed versions, runtime-detected versions, container/image pins, and inferred or unknown values. Source and target snapshots produce explicit deltas rather than an unlabelled merged inventory.
|
|
81
|
+
|
|
82
|
+
Expansion follows demonstrated repository use. Initial work strengthens formats already represented in the current collectors: Python manifests, requirements and lockfiles; JavaScript package metadata and npm, pnpm, Yarn, or Bun locks; Go modules and toolchains; Composer manifests, locks, platform configuration and installed metadata; Ansible requirements, collections and execution environments; containers and GitLab CI images. Every format requires synthetic fixtures, deterministic semantics, size bounds, and explicit behavior for malformed or missing files.
|
|
83
|
+
|
|
84
|
+
### Framework evidence
|
|
85
|
+
|
|
86
|
+
Framework support is plugin-oriented structured extraction, not a code graph or framework-specific review engine. Useful facts are framework identity, verified version, component scope, important configuration paths, and material source/target changes. Initial plugins are selected from demonstrated repositories and testable fixtures; candidates include common Python, Go, PHP, JavaScript, test, and Ansible frameworks.
|
|
87
|
+
|
|
88
|
+
The design borrows useful CodeGraph principles without adopting CodeGraph: deterministic extraction precedes rendering, work is component-scoped, facts retain provenance and staleness, and OCR retrieves surgical evidence on demand. Route, symbol, and call graphs remain out of scope.
|
|
89
|
+
|
|
90
|
+
### Versioned documentation
|
|
91
|
+
|
|
92
|
+
Version-specific library documentation belongs to a separate future documentation MCP. The evidence MCP establishes which package and version are present; the documentation MCP supplies matching documentation; OCR combines them. The toolkit does not mirror or store that documentation.
|
|
93
|
+
|
|
94
|
+
## External MCP and references
|
|
95
|
+
|
|
96
|
+
YouTrack, Confluence, documentation, and other external sources connect directly to OCR through narrowly scoped read-only MCP tools. While OCR lacks stable native remote MCP support, the toolkit may support the existing HTTP-to-stdio proxy pattern. It composes configurations, validates explicit tool allowlists, detects candidate references in merge-request metadata, and adds only normalized identifiers and usage instructions to the bootstrap. It does not prefetch or duplicate external content.
|
|
97
|
+
|
|
98
|
+
All merge-request metadata and external MCP responses are untrusted evidence. Safe integration requires configured project-key patterns, allowed hosts or spaces, canonical parsing, bounded reference counts and link traversal, narrow tools instead of generic URL fetch, explicit prompt-injection guidance, and audit metadata for detected and retrieved references. External content cannot change review policy, suppress findings, authorize actions, modify tool permissions, or grant write access.
|
|
99
|
+
|
|
100
|
+
Public examples use only synthetic services and cover generic stdio MCP, HTTP-to-stdio proxying, read-only YouTrack, read-only Confluence, and composition with the built-in evidence MCP. External-system writes remain outside the generic toolkit scope.
|
|
101
|
+
|
|
102
|
+
## Project policy and guidance
|
|
103
|
+
|
|
104
|
+
### Accepted decisions
|
|
105
|
+
|
|
106
|
+
`.opencodereview/accepted-decisions.md` evolves into tolerant semi-structured Markdown while preserving the existing heading-and-rationale format:
|
|
107
|
+
|
|
108
|
+
```markdown
|
|
109
|
+
## generated-client-timeout
|
|
110
|
+
The generated client retains its provider timeout so regeneration stays reproducible.
|
|
111
|
+
|
|
112
|
+
- Scope: `src/client/generated/**`
|
|
113
|
+
- Category: performance
|
|
114
|
+
- Review after: 2026-12-01
|
|
115
|
+
- Owner: client-platform
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
Metadata is optional and unknown fields do not invalidate the document. Only target-branch decisions may affect a review. Scoped summaries enter the bootstrap only when relevant; complete rationale may be exposed through evidence MCP. Decisions remain contextual evidence, not unconditional suppression or permission to ignore unrelated findings.
|
|
119
|
+
|
|
120
|
+
### AGENTS.md and CLAUDE.md
|
|
121
|
+
|
|
122
|
+
The existing bounded, fail-closed guidance handling remains until upstream OCR documents and tests an automatic project-guidance contract. The intended simplification discovers applicable files, uses target-branch versions, excludes guidance modified by the current merge request, and passes paths plus short hints. Guidance is non-authoritative repository evidence; OCR may read the full target-branch files with its native repository tools when needed.
|
|
123
|
+
|
|
124
|
+
## Review profiles and quality measurement
|
|
125
|
+
|
|
126
|
+
OCR uses one configured model per review run. A lightweight explicit profile abstraction may select that run-level model and existing OCR limits: `economy`, `standard`, or `strong`. Profiles do not dispatch individual files or tools to different models.
|
|
127
|
+
|
|
128
|
+
Automatic routing is conditional on stable evidence, latency, token, and review-quality metrics. If activated, it is deterministic, conservative, observable, and never routes a merge request to a full-repository scan.
|
|
129
|
+
|
|
130
|
+
## OCR compatibility policy
|
|
131
|
+
|
|
132
|
+
Fast-moving upstream compatibility is a product capability, not an ad hoc version string update. One machine-readable manifest should define recommended and tested OCR releases and known capabilities. Version and capability inspection is centralized, additive output fields are parsed tolerantly, and required contract removal fails closed.
|
|
133
|
+
|
|
134
|
+
Contract tests cover the supported release set. Scheduled automation detects new upstream releases, records changelog impact, and runs compatibility checks, but never upgrades production pins automatically. Updating the recommended version remains a reviewed, checksum-pinned change with release classification based on user-visible impact.
|
|
135
|
+
|
|
136
|
+
## Architectural invariants
|
|
137
|
+
|
|
138
|
+
- Repository and external content are untrusted, bounded, redacted, and rendered safely.
|
|
139
|
+
- Evidence retains origin and trust level; content cannot promote itself into policy.
|
|
140
|
+
- Core evidence behavior is provider-neutral; forge-specific orchestration and publication stay behind adapters.
|
|
141
|
+
- OCR remains the only review and agent engine, and GitLab credentials remain toolkit-only.
|
|
142
|
+
- Bootstrap and MCP use one evidence model and one collector path.
|
|
143
|
+
- Built-in and external MCP tools are explicit, read-only, bounded, and auditable.
|
|
144
|
+
- Runtime dependencies remain zero unless a documented package or process boundary justifies one.
|
|
145
|
+
- Public documentation, fixtures, and examples remain synthetic.
|
|
@@ -4,7 +4,7 @@ The toolkit's first provider adapter posts review results to GitLab merge reques
|
|
|
4
4
|
|
|
5
5
|
## Installation
|
|
6
6
|
|
|
7
|
-
Install `open-code-review-toolkit` from PyPI. The example obtains the expected toolkit wheel digest from the matching immutable GitHub Release, then uses pip hash-checking and a local install. Install Open Code Review separately and pin `v1.7.
|
|
7
|
+
Install `open-code-review-toolkit` from PyPI. The example obtains the expected toolkit wheel digest from the matching immutable GitHub Release, then uses pip hash-checking and a local install. Install Open Code Review separately and pin `v1.7.17`; verify the release checksum before making the binary executable. The package never downloads OCR.
|
|
8
8
|
|
|
9
9
|
Copy and adapt [the synthetic CI example](../examples/gitlab/ocr-review.gitlab-ci.yml). Keep the lint stage before the AI review stage so failed project checks block review. The example downloads a pinned toolkit wheel with bounded retries/timeouts, verifies its SHA-256 before a local `--no-deps` install, generates one background file, and passes it once with `--background-file`.
|
|
10
10
|
|
|
@@ -18,7 +18,7 @@ The toolkit bridges four trust domains: repository content, OCR and its LLM/MCP
|
|
|
18
18
|
|
|
19
19
|
Use a dedicated bot identity and least-privilege `GITLAB_API_TOKEN`. Protect and mask credentials. Do not expose secrets to pipelines for untrusted forks. Begin with manual execution for trusted contributors, review generated notes, and enable automatic posting only after the repository's threat model is accepted.
|
|
20
20
|
|
|
21
|
-
Pin Open Code Review `v1.7.
|
|
21
|
+
Pin Open Code Review `v1.7.17` and verify its checksum. Pin Python dependencies through `uv.lock` and GitHub Actions by immutable commit SHA. MCP servers are privileged child processes; allow only reviewed commands and tools.
|
|
22
22
|
|
|
23
23
|
## Repository security posture
|
|
24
24
|
|
|
@@ -6,10 +6,10 @@ default:
|
|
|
6
6
|
image: python:3.12-slim
|
|
7
7
|
|
|
8
8
|
variables:
|
|
9
|
-
OCR_VERSION: "v1.7.
|
|
9
|
+
OCR_VERSION: "v1.7.17"
|
|
10
10
|
OCR_TOOLKIT_VERSION: "0.1.0"
|
|
11
11
|
OCR_TOOLKIT_CHECKSUMS_URL: "https://github.com/xeonvs/open-code-review-toolkit/releases/download/v0.1.0/SHA256SUMS"
|
|
12
|
-
OCR_SHA256: "
|
|
12
|
+
OCR_SHA256: "ab2fae81796a00dda292def8261bec2203d03f3909673c08219e7c5df5f4feee"
|
|
13
13
|
OCR_POST_MODE: "draft"
|
|
14
14
|
OCR_STRICT_POSTING: "true"
|
|
15
15
|
OCR_LLM_VALIDATE_MODEL: "false"
|
{open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/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.2.
|
|
22
|
-
__version_tuple__ = version_tuple = (0, 2,
|
|
21
|
+
__version__ = version = '0.2.1'
|
|
22
|
+
__version_tuple__ = version_tuple = (0, 2, 1)
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
{open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/tests/test_context_helpers.py
RENAMED
|
@@ -1775,11 +1775,11 @@ class DocumentationConsistencyTests(unittest.TestCase):
|
|
|
1775
1775
|
ci = (HELPER_DIR / "ocr-review.gitlab-ci.yml").read_text(encoding="utf-8")
|
|
1776
1776
|
internals = (HELPER_DIR.parents[1] / "docs" / "security.md").read_text(encoding="utf-8")
|
|
1777
1777
|
|
|
1778
|
-
self.assertIn('OCR_VERSION: "v1.7.
|
|
1779
|
-
self.assertIn("v1.7.
|
|
1780
|
-
self.assertIn("v1.7.
|
|
1778
|
+
self.assertIn('OCR_VERSION: "v1.7.17"', ci)
|
|
1779
|
+
self.assertIn("v1.7.17", docs)
|
|
1780
|
+
self.assertIn("v1.7.17", internals)
|
|
1781
1781
|
self.assertIn(
|
|
1782
|
-
'OCR_SHA256: "
|
|
1782
|
+
'OCR_SHA256: "ab2fae81796a00dda292def8261bec2203d03f3909673c08219e7c5df5f4feee"',
|
|
1783
1783
|
ci,
|
|
1784
1784
|
)
|
|
1785
1785
|
configuration = (HELPER_DIR.parents[1] / "docs" / "configuration.md").read_text(
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"""Contracts for the durable strategy, roadmap, and regenerated backlog."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import re
|
|
6
|
+
from pathlib import Path
|
|
7
|
+
|
|
8
|
+
ROOT = Path(__file__).parents[1]
|
|
9
|
+
PLANNING_DOCUMENTS = (
|
|
10
|
+
"AGENTS.md",
|
|
11
|
+
"README.md",
|
|
12
|
+
"ROADMAP.md",
|
|
13
|
+
"docs/engineering/toolkit_strategy.md",
|
|
14
|
+
"docs/codex/TASKS_BACKLOG.md",
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def read(path: str) -> str:
|
|
19
|
+
return (ROOT / path).read_text(encoding="utf-8")
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def test_canonical_strategy_and_roadmap_are_linked() -> None:
|
|
23
|
+
agents = read("AGENTS.md")
|
|
24
|
+
readme = read("README.md")
|
|
25
|
+
assert "docs/engineering/toolkit_strategy.md" in agents
|
|
26
|
+
assert "ROADMAP.md" in agents
|
|
27
|
+
assert "[Toolkit strategy](docs/engineering/toolkit_strategy.md)" in readme
|
|
28
|
+
assert "[Roadmap](ROADMAP.md)" in readme
|
|
29
|
+
assert "[Backlog](docs/codex/TASKS_BACKLOG.md)" in readme
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def test_local_markdown_links_resolve() -> None:
|
|
33
|
+
link_pattern = re.compile(r"(?<!!)\[[^]]+\]\(([^)]+)\)")
|
|
34
|
+
|
|
35
|
+
for document in PLANNING_DOCUMENTS:
|
|
36
|
+
path = ROOT / document
|
|
37
|
+
for target in link_pattern.findall(path.read_text(encoding="utf-8")):
|
|
38
|
+
if target.startswith(("http://", "https://", "#")):
|
|
39
|
+
continue
|
|
40
|
+
relative_path = target.split("#", 1)[0]
|
|
41
|
+
assert (path.parent / relative_path).resolve().exists(), (document, target)
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def test_durable_planning_does_not_pin_an_ocr_release() -> None:
|
|
45
|
+
durable_planning = (
|
|
46
|
+
read("docs/engineering/toolkit_strategy.md")
|
|
47
|
+
+ read("ROADMAP.md")
|
|
48
|
+
+ read("docs/codex/TASKS_BACKLOG.md")
|
|
49
|
+
)
|
|
50
|
+
assert re.search(r"\bOCR [`v]*\d+\.\d+\.\d+", durable_planning) is None
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def test_backlog_contains_complete_numbered_items() -> None:
|
|
54
|
+
backlog = read("docs/codex/TASKS_BACKLOG.md")
|
|
55
|
+
item_ids = re.findall(r"^### (BL-\d{3}):", backlog, flags=re.MULTILINE)
|
|
56
|
+
assert item_ids == [f"BL-{number:03d}" for number in range(1, 23)]
|
|
57
|
+
fields = (
|
|
58
|
+
"Status",
|
|
59
|
+
"Priority",
|
|
60
|
+
"Roadmap theme",
|
|
61
|
+
"Dependencies",
|
|
62
|
+
"Activation trigger",
|
|
63
|
+
"Goal",
|
|
64
|
+
"Scoped deliverables",
|
|
65
|
+
"Acceptance criteria",
|
|
66
|
+
"Exclusions",
|
|
67
|
+
"Validation",
|
|
68
|
+
"Release classification expectation",
|
|
69
|
+
)
|
|
70
|
+
for field in fields:
|
|
71
|
+
assert backlog.count(f"**{field}:**") == 22
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
def test_every_previous_backlog_item_has_an_explicit_disposition() -> None:
|
|
75
|
+
backlog = read("docs/codex/TASKS_BACKLOG.md")
|
|
76
|
+
previous_items = (
|
|
77
|
+
"Native fuzzing campaign",
|
|
78
|
+
"OpenSSF Best Practices registration",
|
|
79
|
+
"Additional provider adapters",
|
|
80
|
+
"File-based user configuration",
|
|
81
|
+
)
|
|
82
|
+
for previous_item in previous_items:
|
|
83
|
+
assert f"| {previous_item} |" in backlog
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
def test_roadmap_defines_every_backlog_theme() -> None:
|
|
87
|
+
roadmap = read("ROADMAP.md")
|
|
88
|
+
backlog = read("docs/codex/TASKS_BACKLOG.md")
|
|
89
|
+
themes = set(re.findall(r"\*\*Roadmap theme:\*\* (M\d [^\n]+)", backlog))
|
|
90
|
+
assert themes == {
|
|
91
|
+
"M0 Foundation",
|
|
92
|
+
"M1 Evidence architecture",
|
|
93
|
+
"M2 Ecosystem and framework coverage",
|
|
94
|
+
"M3 External MCP hardening",
|
|
95
|
+
"M4 Policy and project guidance",
|
|
96
|
+
"M5 Review profiles and quality measurement",
|
|
97
|
+
"M6 Later and conditional work",
|
|
98
|
+
}
|
|
99
|
+
roadmap_theme_names = {
|
|
100
|
+
"M0 Foundation",
|
|
101
|
+
"M1 Evidence architecture",
|
|
102
|
+
"M2 Ecosystem and framework coverage",
|
|
103
|
+
"M3 External MCP hardening",
|
|
104
|
+
"M4 Policy and project guidance",
|
|
105
|
+
"M5 Profiles and quality measurement",
|
|
106
|
+
"M6 Later and conditional work",
|
|
107
|
+
}
|
|
108
|
+
for theme in roadmap_theme_names:
|
|
109
|
+
assert theme in roadmap
|
{open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/tests/test_runtime_helpers.py
RENAMED
|
@@ -485,7 +485,7 @@ class MCPConfigTests(unittest.TestCase):
|
|
|
485
485
|
class PreflightTests(unittest.TestCase):
|
|
486
486
|
def test_validate_ocr_binary_accepts_supported_version(self) -> None:
|
|
487
487
|
completed = subprocess.CompletedProcess(
|
|
488
|
-
args=["ocr", "--version"], returncode=0, stdout="ocr 1.7.
|
|
488
|
+
args=["ocr", "--version"], returncode=0, stdout="ocr 1.7.17\n", stderr=""
|
|
489
489
|
)
|
|
490
490
|
with (
|
|
491
491
|
patched_attr(preflight.shutil, "which", lambda _name: "/usr/bin/ocr"),
|
|
@@ -513,7 +513,7 @@ class PreflightTests(unittest.TestCase):
|
|
|
513
513
|
|
|
514
514
|
def test_validate_ocr_binary_rejects_version_prefix_collision(self) -> None:
|
|
515
515
|
completed = subprocess.CompletedProcess(
|
|
516
|
-
args=["ocr", "--version"], returncode=0, stdout="ocr 1.7.
|
|
516
|
+
args=["ocr", "--version"], returncode=0, stdout="ocr 1.7.170\n", stderr=""
|
|
517
517
|
)
|
|
518
518
|
with (
|
|
519
519
|
patched_attr(preflight.shutil, "which", lambda _name: "/usr/bin/ocr"),
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
# Tasks Backlog
|
|
2
|
-
|
|
3
|
-
This file tracks future work that is not active. Active extraction work is owned by `PLANS.md`.
|
|
4
|
-
|
|
5
|
-
## Backlog Item: Native fuzzing campaign
|
|
6
|
-
|
|
7
|
-
Status: parked
|
|
8
|
-
Priority: medium
|
|
9
|
-
|
|
10
|
-
### Activation Trigger
|
|
11
|
-
|
|
12
|
-
- A supported Python fuzzing backend is selected with reproducible local execution, bounded CI resources, and corpus ownership.
|
|
13
|
-
|
|
14
|
-
### Goal
|
|
15
|
-
|
|
16
|
-
Fuzz the untrusted-input boundaries with meaningful targets for result normalization, context rendering, GitLab payload parsing, and registry metadata validation. Integrate a public fuzzing service only after the targets demonstrate useful coverage and stable crash minimization.
|
|
17
|
-
|
|
18
|
-
### Next Safe Action
|
|
19
|
-
|
|
20
|
-
1. Compare Atheris with property-based alternatives across Python 3.10-3.14 and design a small synthetic seed corpus without adding a runtime dependency.
|
|
21
|
-
|
|
22
|
-
### Exit Criteria
|
|
23
|
-
|
|
24
|
-
- Native targets run locally and in bounded CI, retain minimized synthetic regressions, publish no repository or provider secrets, and are recognized by the selected fuzzing service.
|
|
25
|
-
|
|
26
|
-
## Backlog Item: OpenSSF Best Practices registration
|
|
27
|
-
|
|
28
|
-
Status: owner action
|
|
29
|
-
Priority: low
|
|
30
|
-
|
|
31
|
-
### Activation Trigger
|
|
32
|
-
|
|
33
|
-
- The owner is ready to authenticate at `bestpractices.dev` and attest every passing-level criterion truthfully.
|
|
34
|
-
|
|
35
|
-
### Goal
|
|
36
|
-
|
|
37
|
-
Register the public repository for an OpenSSF Best Practices badge without guessing owner-only governance or project-usage answers.
|
|
38
|
-
|
|
39
|
-
### Next Safe Action
|
|
40
|
-
|
|
41
|
-
1. Complete the passing-level questionnaire with evidence links to the public repository and leave unsupported criteria unmet.
|
|
42
|
-
|
|
43
|
-
### Exit Criteria
|
|
44
|
-
|
|
45
|
-
- The public badge record exists, all answers have current evidence, and the README displays only the earned status.
|
|
46
|
-
|
|
47
|
-
## Backlog Item: Additional provider adapters
|
|
48
|
-
|
|
49
|
-
Status: parked
|
|
50
|
-
Priority: low
|
|
51
|
-
|
|
52
|
-
### Activation Trigger
|
|
53
|
-
|
|
54
|
-
- A provider-neutral core has shipped and a concrete provider integration has an owner and testable API contract.
|
|
55
|
-
|
|
56
|
-
### Goal
|
|
57
|
-
|
|
58
|
-
Add another code-hosting adapter without weakening the provider-neutral core or GitLab behavior.
|
|
59
|
-
|
|
60
|
-
### Next Safe Action
|
|
61
|
-
|
|
62
|
-
1. Write an adapter contract proposal based on the shipped GitLab boundary and validate it against synthetic fixtures.
|
|
63
|
-
|
|
64
|
-
### Exit Criteria
|
|
65
|
-
|
|
66
|
-
- The new adapter has isolated tests, documentation, and no provider-specific leakage into core modules.
|
|
67
|
-
|
|
68
|
-
## Backlog Item: File-based user configuration
|
|
69
|
-
|
|
70
|
-
Status: parked
|
|
71
|
-
Priority: low
|
|
72
|
-
|
|
73
|
-
### Activation Trigger
|
|
74
|
-
|
|
75
|
-
- Environment-only configuration becomes a demonstrated usability constraint after v0.1.
|
|
76
|
-
|
|
77
|
-
### Goal
|
|
78
|
-
|
|
79
|
-
Evaluate a versioned user configuration file without silently changing environment precedence or secret handling.
|
|
80
|
-
|
|
81
|
-
### Next Safe Action
|
|
82
|
-
|
|
83
|
-
1. Draft a schema and threat model; do not implement until compatibility and migration behavior are agreed.
|
|
84
|
-
|
|
85
|
-
### Exit Criteria
|
|
86
|
-
|
|
87
|
-
- Schema, precedence, migration, secret handling, and validation behavior are documented and tested.
|
|
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.2.0 → open_code_review_toolkit-0.2.1}/examples/gitlab/rules.json
RENAMED
|
File without changes
|
|
File without changes
|
{open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/common/__init__.py
RENAMED
|
File without changes
|
{open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/common/language.py
RENAMED
|
File without changes
|
{open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/common/markdown.py
RENAMED
|
File without changes
|
|
File without changes
|
{open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/config_writer.py
RENAMED
|
File without changes
|
{open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/configure.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/context/ansible.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/context/planner.py
RENAMED
|
File without changes
|
{open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/context/render.py
RENAMED
|
File without changes
|
{open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/context/repo.py
RENAMED
|
File without changes
|
|
File without changes
|
{open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/mcp_config.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/posting/gitlab.py
RENAMED
|
File without changes
|
{open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/posting/markers.py
RENAMED
|
File without changes
|
|
File without changes
|
{open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/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
|
|
File without changes
|
|
File without changes
|
{open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/tests/test_common_helpers.py
RENAMED
|
File without changes
|
|
File without changes
|
{open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/tests/test_operations_docs.py
RENAMED
|
File without changes
|
{open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/tests/test_posting_helpers.py
RENAMED
|
File without changes
|
{open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/tests/test_quality_script.py
RENAMED
|
File without changes
|
|
File without changes
|
{open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/tests/test_release_notes.py
RENAMED
|
File without changes
|
{open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/tests/test_release_process_docs.py
RENAMED
|
File without changes
|
{open_code_review_toolkit-0.2.0 → open_code_review_toolkit-0.2.1}/tests/test_testpypi_preview.py
RENAMED
|
File without changes
|