open-code-review-toolkit 0.1.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.1.0 → open_code_review_toolkit-0.2.1}/CHANGELOG.md +33 -0
- {open_code_review_toolkit-0.1.0 → open_code_review_toolkit-0.2.1}/PKG-INFO +19 -3
- {open_code_review_toolkit-0.1.0 → open_code_review_toolkit-0.2.1}/README.md +18 -2
- open_code_review_toolkit-0.2.1/changelog.d/README.md +3 -0
- {open_code_review_toolkit-0.1.0 → open_code_review_toolkit-0.2.1}/docs/codex/AGENT_EXECUTION_PITFALLS.md +16 -0
- open_code_review_toolkit-0.2.1/docs/codex/TASKS_BACKLOG.md +336 -0
- {open_code_review_toolkit-0.1.0 → open_code_review_toolkit-0.2.1}/docs/configuration.md +23 -0
- {open_code_review_toolkit-0.1.0 → open_code_review_toolkit-0.2.1}/docs/engineering/project_principles.md +5 -1
- open_code_review_toolkit-0.2.1/docs/engineering/toolkit_strategy.md +145 -0
- {open_code_review_toolkit-0.1.0 → open_code_review_toolkit-0.2.1}/docs/gitlab.md +5 -1
- open_code_review_toolkit-0.2.1/docs/operations.md +83 -0
- {open_code_review_toolkit-0.1.0 → open_code_review_toolkit-0.2.1}/docs/release.md +17 -2
- {open_code_review_toolkit-0.1.0 → open_code_review_toolkit-0.2.1}/docs/security.md +7 -1
- {open_code_review_toolkit-0.1.0 → open_code_review_toolkit-0.2.1}/examples/gitlab/ocr-review.gitlab-ci.yml +4 -2
- {open_code_review_toolkit-0.1.0 → open_code_review_toolkit-0.2.1}/pyproject.toml +1 -1
- {open_code_review_toolkit-0.1.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/_version.py +2 -2
- {open_code_review_toolkit-0.1.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/posting/formatting.py +1 -1
- {open_code_review_toolkit-0.1.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/posting/markers.py +9 -7
- {open_code_review_toolkit-0.1.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/posting/snapshot.py +31 -34
- {open_code_review_toolkit-0.1.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/posting/workflow.py +21 -17
- {open_code_review_toolkit-0.1.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/preflight.py +1 -1
- {open_code_review_toolkit-0.1.0 → open_code_review_toolkit-0.2.1}/tests/test_context_helpers.py +14 -3
- open_code_review_toolkit-0.2.1/tests/test_install_local_artifact.py +67 -0
- open_code_review_toolkit-0.2.1/tests/test_operations_docs.py +58 -0
- {open_code_review_toolkit-0.1.0 → open_code_review_toolkit-0.2.1}/tests/test_posting_helpers.py +129 -21
- open_code_review_toolkit-0.2.1/tests/test_project_strategy.py +109 -0
- open_code_review_toolkit-0.2.1/tests/test_quality_script.py +12 -0
- {open_code_review_toolkit-0.1.0 → open_code_review_toolkit-0.2.1}/tests/test_release_authorization.py +18 -0
- {open_code_review_toolkit-0.1.0 → open_code_review_toolkit-0.2.1}/tests/test_release_notes.py +8 -0
- open_code_review_toolkit-0.2.1/tests/test_release_process_docs.py +30 -0
- {open_code_review_toolkit-0.1.0 → open_code_review_toolkit-0.2.1}/tests/test_runtime_helpers.py +2 -2
- {open_code_review_toolkit-0.1.0 → open_code_review_toolkit-0.2.1}/tests/test_testpypi_preview.py +36 -4
- open_code_review_toolkit-0.1.0/changelog.d/README.md +0 -3
- open_code_review_toolkit-0.1.0/docs/codex/TASKS_BACKLOG.md +0 -45
- {open_code_review_toolkit-0.1.0 → open_code_review_toolkit-0.2.1}/.gitignore +0 -0
- {open_code_review_toolkit-0.1.0 → open_code_review_toolkit-0.2.1}/CONTRIBUTING.md +0 -0
- {open_code_review_toolkit-0.1.0 → open_code_review_toolkit-0.2.1}/LICENSE +0 -0
- {open_code_review_toolkit-0.1.0 → open_code_review_toolkit-0.2.1}/SECURITY.md +0 -0
- {open_code_review_toolkit-0.1.0 → open_code_review_toolkit-0.2.1}/docs/development.md +0 -0
- {open_code_review_toolkit-0.1.0 → open_code_review_toolkit-0.2.1}/examples/gitlab/rules.json +0 -0
- {open_code_review_toolkit-0.1.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/__init__.py +0 -0
- {open_code_review_toolkit-0.1.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/cli.py +0 -0
- {open_code_review_toolkit-0.1.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/common/__init__.py +0 -0
- {open_code_review_toolkit-0.1.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/common/language.py +0 -0
- {open_code_review_toolkit-0.1.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/common/markdown.py +0 -0
- {open_code_review_toolkit-0.1.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/common/redaction.py +0 -0
- {open_code_review_toolkit-0.1.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/config_writer.py +0 -0
- {open_code_review_toolkit-0.1.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/configure.py +0 -0
- {open_code_review_toolkit-0.1.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/context/__init__.py +0 -0
- {open_code_review_toolkit-0.1.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/context/__main__.py +0 -0
- {open_code_review_toolkit-0.1.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/context/ansible.py +0 -0
- {open_code_review_toolkit-0.1.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/context/categorize.py +0 -0
- {open_code_review_toolkit-0.1.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/context/instructions.py +0 -0
- {open_code_review_toolkit-0.1.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/context/manifests.py +0 -0
- {open_code_review_toolkit-0.1.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/context/planner.py +0 -0
- {open_code_review_toolkit-0.1.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/context/render.py +0 -0
- {open_code_review_toolkit-0.1.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/context/repo.py +0 -0
- {open_code_review_toolkit-0.1.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/context/settings.py +0 -0
- {open_code_review_toolkit-0.1.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/mcp_config.py +0 -0
- {open_code_review_toolkit-0.1.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/posting/__init__.py +0 -0
- {open_code_review_toolkit-0.1.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/posting/__main__.py +0 -0
- {open_code_review_toolkit-0.1.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/posting/comments.py +0 -0
- {open_code_review_toolkit-0.1.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/posting/gitlab.py +0 -0
- {open_code_review_toolkit-0.1.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/posting/payloads.py +0 -0
- {open_code_review_toolkit-0.1.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/posting/result.py +0 -0
- {open_code_review_toolkit-0.1.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/posting/settings.py +0 -0
- {open_code_review_toolkit-0.1.0 → open_code_review_toolkit-0.2.1}/src/ocr_toolkit/py.typed +0 -0
- {open_code_review_toolkit-0.1.0 → open_code_review_toolkit-0.2.1}/tests/__init__.py +0 -0
- {open_code_review_toolkit-0.1.0 → open_code_review_toolkit-0.2.1}/tests/support.py +0 -0
- {open_code_review_toolkit-0.1.0 → open_code_review_toolkit-0.2.1}/tests/test_cli.py +0 -0
- {open_code_review_toolkit-0.1.0 → open_code_review_toolkit-0.2.1}/tests/test_common_helpers.py +0 -0
|
@@ -1,3 +1,36 @@
|
|
|
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
|
+
|
|
12
|
+
## 0.2.0 - 2026-07-21
|
|
13
|
+
|
|
14
|
+
### Features
|
|
15
|
+
|
|
16
|
+
- Target Open Code Review 1.7.14 in preflight validation and the checksum-pinned GitLab CI example. ([#11](https://github.com/xeonvs/open-code-review-toolkit/issues/11))
|
|
17
|
+
- Replace the ambiguous `/ocr keep` and `/ocr skip` discussion replies with `/ocr resolve` and `/ocr suppress`, preserve human-owned deduplication, and document the complete GitLab review lifecycle for developers and CI operators. ([#8](https://github.com/xeonvs/open-code-review-toolkit/issues/8))
|
|
18
|
+
|
|
19
|
+
### Bug fixes
|
|
20
|
+
|
|
21
|
+
- Allow stable release verification to coexist with previously published development builds of the same base version on TestPyPI. ([#10](https://github.com/xeonvs/open-code-review-toolkit/issues/10))
|
|
22
|
+
- Treat ordinary merged pull requests as a successful no-op in the production release workflow while keeping release-branch authorization fail-closed. ([#7](https://github.com/xeonvs/open-code-review-toolkit/issues/7))
|
|
23
|
+
|
|
24
|
+
### Security
|
|
25
|
+
|
|
26
|
+
- Mark every source-distribution smoke install as hash-required while retaining the no-dependency boundary, and document the single-maintainer security posture and Scorecard triage policy. ([#6](https://github.com/xeonvs/open-code-review-toolkit/issues/6))
|
|
27
|
+
|
|
28
|
+
### Documentation
|
|
29
|
+
|
|
30
|
+
- Reduce the routine Ubuntu CI matrix to the supported Python 3.10 and 3.14 endpoints, matching the macOS matrix. ([#10](https://github.com/xeonvs/open-code-review-toolkit/issues/10))
|
|
31
|
+
- Document accepted project decisions, their optional `ocr-accept` marker convention, and the guard that prevents a merge request from whitelisting its own findings. ([#11](https://github.com/xeonvs/open-code-review-toolkit/issues/11))
|
|
32
|
+
|
|
33
|
+
|
|
1
34
|
## 0.1.0 - 2026-07-20
|
|
2
35
|
|
|
3
36
|
### Features
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: open-code-review-toolkit
|
|
3
|
-
Version: 0.1
|
|
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,11 +243,27 @@ 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.
|
|
250
250
|
|
|
251
|
+
## How reviews evolve
|
|
252
|
+
|
|
253
|
+
On a successful rerun, the toolkit replaces untouched OCR-only notes instead of accumulating stale reviews. A human reply transfers that discussion to the team: the conversation is preserved and a matching finding is suppressed. Reply with `/ocr suppress` to keep a discussion open without future repeats, or `/ocr resolve` to suppress it and resolve the discussion after the next successful posting transaction.
|
|
254
|
+
|
|
255
|
+
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.
|
|
256
|
+
|
|
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
|
+
|
|
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
|
+
|
|
251
267
|
## GitLab CI quick start
|
|
252
268
|
|
|
253
269
|
1. Configure protected/masked `GITLAB_API_TOKEN` and LLM variables in GitLab.
|
|
@@ -264,7 +280,7 @@ ocr-ci context --output .review-context/dependencies.md
|
|
|
264
280
|
ocr-ci post --result /tmp/ocr-result.json --stderr /tmp/ocr-stderr.log
|
|
265
281
|
```
|
|
266
282
|
|
|
267
|
-
See the fully synthetic [`examples/gitlab/ocr-review.gitlab-ci.yml`](examples/gitlab/ocr-review.gitlab-ci.yml)
|
|
283
|
+
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).
|
|
268
284
|
|
|
269
285
|
## Configuration and safety
|
|
270
286
|
|
|
@@ -15,11 +15,27 @@ 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.
|
|
22
22
|
|
|
23
|
+
## How reviews evolve
|
|
24
|
+
|
|
25
|
+
On a successful rerun, the toolkit replaces untouched OCR-only notes instead of accumulating stale reviews. A human reply transfers that discussion to the team: the conversation is preserved and a matching finding is suppressed. Reply with `/ocr suppress` to keep a discussion open without future repeats, or `/ocr resolve` to suppress it and resolve the discussion after the next successful posting transaction.
|
|
26
|
+
|
|
27
|
+
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.
|
|
28
|
+
|
|
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
|
+
|
|
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
|
+
|
|
23
39
|
## GitLab CI quick start
|
|
24
40
|
|
|
25
41
|
1. Configure protected/masked `GITLAB_API_TOKEN` and LLM variables in GitLab.
|
|
@@ -36,7 +52,7 @@ ocr-ci context --output .review-context/dependencies.md
|
|
|
36
52
|
ocr-ci post --result /tmp/ocr-result.json --stderr /tmp/ocr-stderr.log
|
|
37
53
|
```
|
|
38
54
|
|
|
39
|
-
See the fully synthetic [`examples/gitlab/ocr-review.gitlab-ci.yml`](examples/gitlab/ocr-review.gitlab-ci.yml)
|
|
55
|
+
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).
|
|
40
56
|
|
|
41
57
|
## Configuration and safety
|
|
42
58
|
|
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
# Agent Execution Pitfalls
|
|
2
2
|
|
|
3
|
+
## Closing a public-contract change after only the feature merge
|
|
4
|
+
|
|
5
|
+
**Failure mode:** A feature changes a public command or integration contract, its pull request merges, and a TestPyPI `.devN` build succeeds. The plan is then marked completed even though stable PyPI users still receive the old behavior.
|
|
6
|
+
|
|
7
|
+
**Why it happens:** Implementation, preview publication, and stable delivery are treated as separate mental tasks even when the user asked for one outcome. SCM-derived versions also make the source tree appear ready for the next version without proving that a stable tag or package exists.
|
|
8
|
+
|
|
9
|
+
**Required prevention:**
|
|
10
|
+
|
|
11
|
+
1. Classify the work at plan start and write the target stable version into `PLANS.md`.
|
|
12
|
+
2. Treat feature merge and TestPyPI `.devN` verification as intermediate receipts.
|
|
13
|
+
3. When release is required, prepare the version/changelog release PR immediately after the development build is verified.
|
|
14
|
+
4. Keep the objective active until the release workflow publishes and independent readback confirms PyPI, TestPyPI, the signed tag, immutable GitHub Release, hashes, attestations, and supported-Python installs.
|
|
15
|
+
5. If publication is intentionally deferred, record who deferred it, why, and the exact command or PR needed to resume.
|
|
16
|
+
|
|
17
|
+
**Closure question:** "Can a user installing from production PyPI obtain the promised behavior now?" If not, the stable-release objective is not complete.
|
|
18
|
+
|
|
3
19
|
This note records recurring execution mistake patterns discovered during real work. Record generalized lessons, not one-off complaints.
|
|
4
20
|
|
|
5
21
|
## Planning And Context Discipline
|
|
@@ -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`.
|
|
@@ -41,4 +41,27 @@ Posting requires `GITLAB_API_TOKEN`, `CI_SERVER_URL`, `CI_PROJECT_ID`, and `CI_M
|
|
|
41
41
|
|
|
42
42
|
The `OCR_CONTEXT_*` family bounds files, bytes, changed paths, instructions, manifest content, dependency output, and generated background size. `OCR_BACKGROUND_MAX_CHARS` defaults to and is capped at `7950`; `OCR_BACKGROUND_MAX_BYTES` independently enforces the UTF-8 byte budget. The default output is `.review-context/dependencies.md`. The generator rejects symlink escapes and prunes common vendor/build directories.
|
|
43
43
|
|
|
44
|
+
### Accepted project decisions
|
|
45
|
+
|
|
46
|
+
Use `.opencodereview/accepted-decisions.md` for a reviewed, project-wide decision that OCR would otherwise report repeatedly. Each entry should have a stable slug, a concise rationale, an explicit scope, and an inline marker that ties the decision to the relevant code or configuration:
|
|
47
|
+
|
|
48
|
+
```markdown
|
|
49
|
+
## generated-client-timeout
|
|
50
|
+
|
|
51
|
+
The generated client keeps the provider's 90-second timeout so regenerated
|
|
52
|
+
code remains reproducible. Do not report that timeout in `src/client/generated.py`.
|
|
53
|
+
|
|
54
|
+
Look for `# ocr-accept: generated-client-timeout` at the configured value.
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
```python
|
|
58
|
+
REQUEST_TIMEOUT = 90 # ocr-accept: generated-client-timeout
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
`ocr-accept` is a human-readable convention, not a source-code parser or blanket linter suppression. The complete, byte-bounded Markdown file is sanitized, redacted, and included under `Accepted project decisions` in the generated review background; OCR is instructed not to raise matching findings. Keep the rationale narrow and name the affected paths or behavior so unrelated findings remain reviewable.
|
|
62
|
+
|
|
63
|
+
The decision file must already exist on the target branch and pass normal review. If the current merge request changes `.opencodereview/accepted-decisions.md`, or changed-file discovery fails, the toolkit omits all accepted decisions for that run to prevent self-whitelisting. A decision reduces repeated model findings but is not a deterministic static-analysis exemption: reviewers should still use `/ocr suppress` or `/ocr resolve` for a concrete GitLab discussion, and should update or remove stale decisions when the underlying tradeoff changes.
|
|
64
|
+
|
|
65
|
+
Use the default `OCR_POST_MODE=draft` for normal CI so all current notes are created as drafts before they are published and replaceable notes from the previous run are removed. Draft publication is sequential rather than atomic; the previous review is preserved unless every current draft publishes. Set `OCR_STRICT_POSTING=true` when the review job is a required merge gate; keep the default `false` only for advisory pipelines where GitLab posting availability must not block the pipeline. Reviewer commands and the complete repeated-run contract are documented in [GitLab review operations](operations.md).
|
|
66
|
+
|
|
44
67
|
Run `ocr-ci --help` and each subcommand's help for command arguments. Secret values are redacted from operational error text.
|
|
@@ -14,6 +14,10 @@ This is the short index of stable cross-cutting engineering rules for Open Code
|
|
|
14
14
|
8. Use coherent production-quality slices when work must be decomposed; do not leave placeholder architecture as a milestone.
|
|
15
15
|
9. Require changelog fragments for user-visible 0.1.x changes and SCM tags for versions.
|
|
16
16
|
10. Treat TestPyPI as public disclosure and preserve the manual privacy/license gate before publishing.
|
|
17
|
+
11. Treat automated security scores as evidence to classify, not targets to game; remediate concrete repository-owned risk and document temporal or governance constraints truthfully.
|
|
18
|
+
12. Version public behavior deliberately. An incompatible pre-1.0 contract change may select the next minor version, but it is not delivered to stable users until the versioned package and release artifacts are published and independently verified.
|
|
19
|
+
13. Keep implementation and release as one traceable objective whenever stable publication is requested or required. Feature validation proves readiness; registry and GitHub readback prove delivery.
|
|
20
|
+
14. A deferral is a blocked or pending release state, not successful closure. Preserve the exact continuation point so a later agent does not infer that a development build satisfied a stable-release promise.
|
|
17
21
|
|
|
18
22
|
## Documentation Ownership
|
|
19
23
|
|
|
@@ -22,5 +26,5 @@ This is the short index of stable cross-cutting engineering rules for Open Code
|
|
|
22
26
|
- `docs/gitlab.md` owns GitLab installation and operating guidance.
|
|
23
27
|
- `docs/security.md` owns the runtime trust model; `SECURITY.md` owns vulnerability reporting.
|
|
24
28
|
- `docs/development.md` owns local contributor commands.
|
|
25
|
-
- `docs/release.md` owns
|
|
29
|
+
- `docs/release.md` owns release classification, delivery, and disclosure.
|
|
26
30
|
- `AGENTS.md`, `PLANS.md`, and `docs/codex/` own agent workflow rather than product behavior.
|