diff --git a/.next-version b/.next-version index 7ada0d3..7fc2521 100644 --- a/.next-version +++ b/.next-version @@ -1 +1 @@ -0.8.5 +0.8.6 diff --git a/.release-metadata.json b/.release-metadata.json index d5df970..fde2b4c 100644 --- a/.release-metadata.json +++ b/.release-metadata.json @@ -1,8 +1,8 @@ { "issues": [ - 145, - 146 + 149, + 151 ], "schema_version": "ocr-toolkit.release-authorization/v1", - "version": "0.8.4" + "version": "0.8.5" } diff --git a/.release-source-date-epoch b/.release-source-date-epoch index 651a150..fa9a82a 100644 --- a/.release-source-date-epoch +++ b/.release-source-date-epoch @@ -1 +1 @@ -1787744412 +1787824489 diff --git a/.release-version b/.release-version index b60d719..7ada0d3 100644 --- a/.release-version +++ b/.release-version @@ -1 +1 @@ -0.8.4 +0.8.5 diff --git a/CHANGELOG.md b/CHANGELOG.md index 53f1350..9ace170 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,34 @@ +## 0.8.5 - 2026-08-27 + +### 🚀 Features + +- Classified LLM-provider failures now emit at most one toolkit-authored CI diagnostic line with closed HTTP detail and non-zero aggregate retry counts from a fully validated `ocr.llm-retry-report/v1`. + + - **Added:** HTTP `402` is shown as `http-payment-required`, HTTP `429` as `http-rate-limited`, a uniform status is shown only when all terminal failures share it, and mixed details are deterministically count-aggregated. + - **Changed:** The `rate-or-spending-limit` GitLab remediation now recommends lowering `OCR_REVIEW_CONCURRENCY` and/or `OCR_LLM_MAX_COMPLETION_TOKENS`, starting a new merge request pipeline, and checking provider request/account limits without claiming either setting caused the failure. + - **Unchanged:** The GitLab summary/reason, previous-review preservation, DLP, receipt v5, toolkit telemetry, and automatic-approval contracts are unchanged; raw provider-controlled fields and stderr remain private. + + ([#149](https://github.com/xeonvs/open-code-review-toolkit/issues/149)) + +### 🐛 Bug Fixes + +- OCR compatibility classification now sends feature-bearing patch releases to human review instead of allowing adjacent maintenance keywords to misclassify them as `automatic-safe`. ([#151](https://github.com/xeonvs/open-code-review-toolkit/issues/151)) + +### 🛠 Maintenance + +- Open Code Review 1.10.2 is the checksum-pinned runtime dependency for toolkit 0.8.5. + + - **Changed:** The current GitLab example, runtime preflight, compatibility manifest, and qualification evidence move from OCR 1.10.1 to 1.10.2. The inherited OpenAI completion cap remains `16384`, but OCR grouping requests now use that template-owned cap instead of a separate `4096`; an explicit `OCR_LLM_MAX_COMPLETION_TOKENS` continues to override every request. + - **Changed:** Daily OCR compatibility discovery moves from `05:41 UTC` to `07:15 UTC`; exact-tag manual dispatch remains the recovery path when GitHub delays or omits a scheduled run. + - **Unchanged:** OCR result and manifest schemas, default `medium` effort, effective max-tools behavior, DLP, receipt v5, toolkit telemetry ownership, and approval contracts are unchanged. + + ([#151](https://github.com/xeonvs/open-code-review-toolkit/issues/151)) + +### 🧩 Rules + +- The recommended OCR 1.10.2 built-in Rules and reviewable-file allowlist now cover Solidity (`.sol`) and Vyper (`.vy`). ([#151](https://github.com/xeonvs/open-code-review-toolkit/issues/151)) + + ## 0.8.4 - 2026-08-26 ### 🐛 Bug Fixes diff --git a/PLANS.md b/PLANS.md index a94dc35..ca171a2 100644 --- a/PLANS.md +++ b/PLANS.md @@ -4,340 +4,4 @@ Use this file for active or blocked repository work. Update it before implementa ## Active Work -### Toolkit 0.8.5 - provider diagnostics, OCR 1.10.2, and compatibility scheduling - -Status: release execution in progress - -#### Goal - -Deliver and publish stable toolkit 0.8.5 with verified artifacts. The release implements -issue #149's bounded provider diagnostics, qualifies and adopts OCR 1.10.2, moves the -daily compatibility discovery after the observed upstream release window, reconciles -upstream capabilities with the durable backlog, and completes independent external -readback and issue/milestone closure. - -#### Plan Origin - -`plan_mode_approved` - -#### Requested Scope - -- Take open issue #149 and the canonical OCR 1.10.2 compatibility issue into one - `v0.8.5` milestone and assign them to the repository owner. -- Change the single daily compatibility cron from `05:41 UTC` to `07:15 UTC`, retaining - manual dispatch as the recovery path. -- Manually qualify exact OCR 1.10.2 rather than waiting for the next scheduled run. -- Promote the checksum-pinned compatibility manifest, preflight, GitLab example, current - documentation, and effective Rules contract to OCR 1.10.2. -- Update the PATH-effective local Darwin arm64 OCR to 1.10.2 atomically after checksum - verification and no-LLM isolated checks. -- Add one bounded deterministic CI diagnostic line derived only from a fully validated - `ocr.llm-retry-report/v1`, without changing the merge-request summary structure. -- Reconcile every relevant OCR 1.10.2 capability and #149 outcome against backlog goals, - activation triggers, dependencies, and acceptance criteria. -- Update the PATH-effective local OCR to exact 1.10.2, run one real final review of the - complete feature range with the configured provider at concurrency `2`, retain its - private artifacts only through finding analysis, and remediate confirmed findings. -- Complete holistic self-review and deterministic gates, merge the protected feature PR, - verify the protected-main development publication, prepare and merge `release/v0.8.5`, - publish stable artifacts, and independently reconcile every release surface. - -Release classification: `release-required`; target stable version: `0.8.5`; delivery -state for this task: full stable delivery authorized on 2026-08-27. - -#### Requirement Traceability - -| Requirement | Outcome | Queue | Verification | -| --- | --- | --- | --- | -| `REQ-001` | Start from synchronized released `v0.8.4`, materialize this complete plan first, and open a Draft PR after one signed planning commit/push. | `WQ-01` | Plan fidelity, signed commit, remote branch, Draft readback | -| `REQ-002` | Create milestone `v0.8.5`; assign/milestone #149 and the canonical OCR 1.10.2 issue while leaving both open. | `WQ-02` | GitHub API readback | -| `REQ-003` | Run daily compatibility discovery at `07:15 UTC` with manual recovery retained. | `WQ-03` | Exact workflow contract test and documentation test | -| `REQ-004` | Qualify and adopt checksum-pinned OCR 1.10.2 without weakening compatibility gates. | `WQ-02`, `WQ-03` | Hosted run, evidence/manifest validation, exact hashes, focused probes | -| `REQ-005` | Classify every upstream 1.10.2 change and reconcile any completed or partially satisfied backlog item. | `WQ-03` | Source audit, backlog/roadmap/strategy consistency review | -| `REQ-006` | Update local OCR to 1.10.2 without LLM calls or user configuration changes. | `WQ-03` | Binary digest/version/help and isolated Solidity/Vyper preview | -| `REQ-007` | Produce at most one closed numeric provider diagnostic line from a strictly validated retry report. | `WQ-04` | Parser, renderer, bounds, aggregation, and hostile-input tests | -| `REQ-008` | Preserve GitLab summary shape, prior review, DLP, receipt, telemetry, and approval boundaries while improving remediation text. | `WQ-04` | Posting/review/approval/privacy regressions | -| `REQ-009` | Document current behavior and classify dependency, Rules, feature, and scheduling changes accurately for humans and release agents. | `WQ-03`, `WQ-05` | Towncrier draft and documentation contract tests | -| `REQ-010` | Run one complete real OCR 1.10.2 review over the final feature range, remediate confirmed findings, and finish deterministic validation and self-review. | `WQ-05`, `WQ-06` | Private complete OCR result, finding trace, quality/coverage/Gitleaks/checks | -| `REQ-011` | Merge the exact protected feature PR after required checks and thread reconciliation, then verify the deterministic TestPyPI development build. | `WQ-07` | PR/merge/tree/rules/checks and registry/provenance readback | -| `REQ-012` | Prepare and merge the final protected `Release v0.8.5` PR with release metadata, changelog, notes, plan archival, and next-version state. | `WQ-08` | Exact release head/tree/checks/threads/authorization metadata | -| `REQ-013` | Publish and independently verify stable TestPyPI/PyPI bytes, provenance/attestations, supported-Python installs, annotated tag, immutable GitHub Release/receipt, issue receipts, and milestone closure. | `WQ-09` | Live registry, GitHub, workflow, install, issue, milestone, and clean-main readback | - -#### Explicit Non-Goals - -- No real LLM or provider request, local model peer, OCR config/credential change, or - caller-owned `HOME` use. -- No second scheduled compatibility run, dynamically calculated cron, polling service, - or general provider-diagnostics framework. -- No new environment variable, public OCR result schema, receipt field, telemetry field, - DLP input, or approval signal. -- No raw provider response parsing or publication of provider/model/task identity, - response text, headers, URLs, request IDs, paths, warnings, or stderr. -- No toolkit consumption of OCR's GitHub Action checkpoint ranges or `ocr session - compare`; resemblance alone does not activate or close backlog work. -- No mechanical test-directory reorganization or production refactor solely for coverage. -- No B2B, `core/common`, shared-template, or consumer-repository integration. - -#### Constraints - -- Keep one owner for retry-report validation and let review/post consume the same closed - projection; provider-controlled strings never cross that boundary. -- The GitLab renderer consumes only the existing closed reason. Numeric diagnostics stay - in toolkit-controlled CI output and cannot affect DLP, receipt v5, findings, severity, - suppression, resolution, or automatic approval. -- Only positive/bounded schema counts and HTTP statuses `100..599` are admitted. - Malformed, oversized, contradictory, unknown-version, or unsupported reports retain the - existing generic fail-closed behavior. -- Omit unavailable and zero counters. Emit a single `detail=` for one terminal category, - deterministic `details=:,...` for mixed categories, and `status=` only - for one shared HTTP status. -- Use `http-payment-required` for 402 and `http-rate-limited` for 429 without claiming a - provider business cause. Other details remain closed and provider-neutral. -- Recovered requests affect aggregate counts but never the terminal failure reason. -- A backlog item becomes completed only when its acceptance criteria are met. Partial - overlap updates the item's upstream overlap and remaining criteria without a false - completion claim. -- Every production/test function added in this work receives a purpose-focused docstring. -- Before each signed logical commit: focused tests, complete slice diff review, - trust/data-flow/privacy review, requirement/backlog reconciliation, and - `git diff --check`. -- Do not run a second repository-diff OCR review after the authorized final run. Confirmed - findings are repaired and covered by deterministic tests plus holistic self-review. - -#### Inputs And Sources - -- Approved implementation plan in the preceding Plan Mode conversation. -- Open toolkit issue #149 and released toolkit `v0.8.4`/next line `0.8.5`. -- Official OCR v1.10.2 release, release assets, checksums, comparison with v1.10.1, and - upstream PRs #961, #945, #946, #1066, and #1067. -- Current `compatibility/ocr-support.json`, compatibility workflow, evidence harness, - provider-failure parser, review runner, posting workflow, tests, public docs, strategy, - roadmap, and backlog. -- Observed 30-release sample: approximately 5.35 stable releases/week, 27.3-hour median - interval, and long-window publish density around 06:43 UTC. OCR 1.10.2 was published at - 05:49 UTC after the current 05:41 cron; no 2026-08-27 scheduled run existed by 08:29 UTC. -- Exact release anchors: Linux amd64 - `e9205614f80e009ee7b1f444c9da08486fb9ff6db022954fe9203d923ab720b2`, Darwin arm64 - `74fc7bcc0e6d0790c5ca033fd82a5474b6f05d443ed51a26a6f61c0cac6589fd`, and - `sha256sum.txt` `b5176aaa04a7f00bd84dd61556ca29e6cbdfcfe64cc50af6653163d9be4e7654`. - -#### User Decisions And Answers - -- The 2026-08-27 owner instruction supersedes the Draft-only boundary and authorizes - feature merge, release preparation/merge, stable publication, and external closure. -- Use one daily `07:15 UTC` compatibility check, not two checks. -- Update any backlog item that toolkit or OCR actually closes; update partial overlap - truthfully and keep unmet work open. -- Update the PATH-effective local OCR binary and run the required real local OCR review. -- Work efficiently in complete logical commits with self-review before each commit. - -#### Completed Baseline State - -- `main` is synchronized and clean at released toolkit v0.8.4 commit `299e7b1`. -- `.next-version` is `0.8.5`; `PLANS.md` contained no active work before this plan. -- Issue #149 is the only open toolkit issue; no open PR or `v0.8.5` milestone exists. -- OCR compatibility is active, daily at `05:41 UTC`, and supports exact manual tags. -- The manifest recommends OCR 1.10.1; local `/opt/homebrew/bin/ocr` reports 1.10.1. -- Existing retry-report v1 validation already maps terminal failures to a closed public - reason but discards safe aggregate/status detail. -- Repository workflow audit classified the repository as mature with canonical plan, - backlog, principle, instruction, and documentation-index owners present. - -#### Current Work Queue - -| Queue | Status | Deliverable | -| --- | --- | --- | -| `WQ-01` | `completed` | Planning commit `123c331` was signed and pushed once; Draft PR #150 is open. | -| `WQ-02` | `completed` | Milestone `v0.8.5` owns assigned open issues #149/#151; hosted run 33055459209 qualified exact OCR 1.10.2. | -| `WQ-03` | `completed` | OCR 1.10.2 pins/evidence, schedule, classifier correction, current docs/Rules, source audit, backlog reconciliation, and local no-LLM update are complete. | -| `WQ-04` | `completed` | One closed provider-neutral projection renders the single numeric review log line; GitLab keeps only the prior reason with safer remediation. | -| `WQ-05` | `completed` | Changelog/docs are reconciled; the complete local quality, coverage, manifest, lock, Towncrier, Gitleaks, and diff gates pass. | -| `WQ-06` | `completed` | Owner-approved OCR provider-failure waiver, holistic self-review, privacy remediation, and all deterministic final feature gates are complete. | -| `WQ-07` | `pending` | Reconcile exact feature head/checks/threads, mark PR ready, merge it, synchronize `main`, and verify its TestPyPI development publication. | -| `WQ-08` | `pending` | Prepare the signed `release/v0.8.5` repository state and merge its exact protected release PR after all gates. | -| `WQ-09` | `pending` | Monitor stable publication and independently read back bytes, provenance, attestations, installs, tag, immutable Release/receipt, issue receipts, milestone, main, and cleanup. | - -#### Locked Decisions - -- Branch: `codex/v0.8.5-provider-diagnostics-ocr-1.10.2`; Draft base: protected `main`. -- Schedule: `15 7 * * *`; `workflow_dispatch` remains unchanged. -- Provider data flow: - `private OCR result -> bounded retry-report parser -> closed numeric projection ->` - `one toolkit-authored CI line`; GitLab continues to receive only the public reason. -- Example single-detail output: - `OCR provider diagnostics: summary=rate-or-spending-limit detail=http-rate-limited status=429 failed_requests=1 retried_requests=1 total_retries=2`. -- Mixed output uses deterministic category counts and omits a non-uniform status. -- Rate/spending remediation recommends lowering `OCR_REVIEW_CONCURRENCY` and/or - `OCR_LLM_MAX_COMPLETION_TOKENS`, starting a new MR pipeline, then checking provider - request/account limits; it never states the cap is the proven cause. -- OCR 1.10.2 Solidity/Vyper support is a Rules change. Pin/evidence/schedule work is - Maintenance. #149 is a Feature. Do not combine or misclassify these release notes. -- BL-021 remains conditional because an upstream GitHub Action is not a toolkit forge - adapter. BL-010 is not activated by review-language rules alone. #149 remains bounded - operator output and does not reopen the completed telemetry/export audit. - -#### Verification - -- Focused workflow/compatibility tests for exact cron, manual dispatch, evidence, hashes, - manifest/preflight/example consistency, and Rules documentation. -- No-LLM exact OCR 1.10.2 version/help and Solidity/Vyper selection/rule preview in an - isolated temporary home. -- Provider parser/renderer cases for 400, 401, 402, 403, 404, 408, 409, 413, 422, 429, - 5xx, 529, timeout, network, response decode/status/stream, cancellation, retries, - recovery, grouping/grace-round records, mixed aggregation, bounds, zero omission, - malformed/oversized/contradictory inputs, and deterministic rendering. -- Privacy regressions prove credentials, provider body/code, URL, model, request ID, task - identity, paths, warnings, and stderr do not enter toolkit-controlled logs, GitLab - notes, receipts, DLP signals, or approval inputs. -- Lifecycle regressions prove previous review preservation, no failed-result findings, - no approval, unchanged public classification, and strict/non-strict posting behavior. -- One complete local OCR 1.10.2 review of `origin/main..HEAD` at concurrency `2`; inspect - its private result/manifest completeness and trace every candidate before accepting or - rejecting it. Do not post the result. -- Final local gate after remediation: `scripts/quality.sh check`, all coverage floors, - `scripts/ocr_compat.py validate`, lock check, Towncrier draft, `scripts/gitleaks.sh`, - and `git diff --check`. Hosted PR workflows own package/OS/Python/Security/CodeQL gates. - -#### Latest Validation Results - -- 2026-08-27: synchronized `main` to released v0.8.4 commit `299e7b1`; worktree clean. -- 2026-08-27: engineering-workflow repository audit reported `mature_repo`, complete - required documentation indexes, and all canonical workflow owners present. -- 2026-08-27: live GitHub readback found open #149, no open PR, no open milestone, active - compatibility workflow, and no scheduled compatibility run for the day by 08:29 UTC. -- 2026-08-27: signed planning commit `123c331` was pushed and Draft PR #150 opened; - milestone `v0.8.5` was created and assigned open issues #149/#151. -- 2026-08-27: hosted run 33055459209 passed OCR 1.10.2 checksum and compatibility - probes. Human semantic review overrode its erroneous `automatic-safe` result because - the release contains Features; the classifier now routes feature-bearing patches to - human review. -- 2026-08-27: exact local Darwin arm64 OCR 1.10.2 at SHA-256 - `74fc7bcc0e6d0790c5ca033fd82a5474b6f05d443ed51a26a6f61c0cac6589fd` passed - version/help, isolated Solidity/Vyper selection/rule checks, and a loopback-only - semantic grouping probe with cap `16384` and default-medium stage sequence. No external - LLM/provider call or user OCR configuration change occurred. -- 2026-08-27: 104 focused compatibility/workflow/environment tests pass; manifest - validation, focused Ruff, Towncrier draft, and `git diff --check` pass. -- 2026-08-27: 403 provider parser, review runner, posting, approval, and documentation - tests plus 217 subtests pass. The reviewed flow is `private OCR result -> strict retry - parser -> closed immutable reason/detail/status/counts -> one local line`; GitLab uses - only the reason, and DLP/receipt/telemetry/approval projections are unchanged. -- 2026-08-27: `scripts/quality.sh check` passes 1,296 tests and 337 subtests with - branch-aware total coverage 86.51%. Risk groups pass at 85%, 82%, 86%, and 87% - against required 80%, 80%, 85%, and 85% floors. -- 2026-08-27: locked dependency resolution, OCR manifest validation, rendered Towncrier - 0.8.5 draft, and `git diff --check` pass. Checksum-verified temporary Gitleaks 8.24.3 - passes the complete first-parent feature history; the installed unrelated 8.30.1 was - not substituted for the repository pin. -- 2026-08-27: requirements, provider-data-flow, privacy, DLP/approval independence, - compatibility, telemetry ownership, backlog, documentation, and complete feature diff - self-reviews are complete. Exact temporary OCR/Gitleaks artifacts and the recoverable - OCR 1.10.1 backup were removed after successful validation; local OCR remains 1.10.2. -- 2026-08-27 release-resume audit found that the PATH-effective executable still reports - 1.10.1, contradicting the earlier PATH-effective 1.10.2 claim. Release work therefore - reopens local OCR installation and the required real review gate before feature merge. -- 2026-08-27: the shadow executable was atomically replaced. `command -v ocr`, ordinary - `ocr --version`, and review help now resolve and report 1.10.2, and SHA-256 is the - official Darwin arm64 - `74fc7bcc0e6d0790c5ca033fd82a5474b6f05d443ed51a26a6f61c0cac6589fd`; the temporary - download and rollback copy were removed after verification. -- 2026-08-27: the first real exact-range OCR 1.10.2 invocation selected nine supported - files at concurrency `2` but failed before generation: all 13 logical requests received - HTTP 429 through 65 retries, token usage and findings stayed zero, and the complete - structured result was retained owner-only for audit. This proves the current binary and - review path executed but does not qualify semantic review or toolkit correctness. No - second configured backend exists; do not describe this outcome as a passing OCR review - or waive the required completed review. -- 2026-08-27: the owner authorized one retry at concurrency `1` and an explicit release - waiver if it repeated the provider failure. That retry again selected all nine supported - files but every one of 13 logical requests received HTTP 429 through 65 retries, with - zero input/output tokens and zero findings. The semantic OCR gate is therefore waived - for v0.8.5 as an external provider-infrastructure failure, not passed; no further local - OCR invocation is authorized. Deterministic tests and holistic manual review remain - mandatory before merge. -- 2026-08-27: post-waiver validation passes 1,296 tests and 337 subtests at 86.51% - branch-aware total coverage; risk groups pass at 85%, 82%, 86%, and 87% against their - 80%, 80%, 85%, and 85% floors. The 78 current release-contract tests, focused docs and - provider/privacy suites, Ruff, strict MyPy, Bandit, manifest and lock validation, - Towncrier draft, pinned Gitleaks, public-diff privacy scan, and `git diff --check` pass. - Holistic review confirms that provider diagnostics remain one closed numeric local line - and cannot affect GitLab text, DLP, receipt, telemetry, findings, or approval. Public - guidance no longer recommends or hardcodes a provider-specific completion cap, and all - required configuration-table variables remain bold. - -#### Risks And Recovery - -- GitHub scheduled workflows may be delayed or omitted. The later cron fixes the observed - pre-release ordering but does not claim delivery guarantees; exact manual dispatch is - the retained recovery path. -- The hosted compatibility run may classify 1.10.2 as human-review-required or fail. Keep - its canonical issue/evidence, perform semantic review, and do not promote until every - consumed contract is reconciled. -- An automation PR may appear. Compare its exact patch; integrate only reviewed bytes into - this Draft and close/supersede the automation PR truthfully. -- Local OCR replacement may fail. Keep the verified 1.10.1 binary until the new binary - passes all isolated checks and restore it on any post-replacement mismatch. -- A broader diagnostic projection could leak provider data or affect control flow. Keep - the type closed/numeric, render through one bounded owner, and prove GitLab/DLP/approval - independence with hostile values. -- Upstream features can resemble backlog outcomes without meeting toolkit acceptance - criteria. Require exact goal/dependency/acceptance mapping before status changes. -- Hosted CI evidence may expose a real defect. Fix only the evidenced boundary through a - separately reviewed signed commit; do not broaden scope or push partial work. - -#### Resume Point - -Continue through `WQ-07`: commit and push the reviewed feature state, reconcile exact -hosted checks and review threads, mark PR #150 ready, merge its exact reviewed tree, and -verify protected-main TestPyPI development publication. Then complete `WQ-08` and -`WQ-09` without redefining stable delivery as complete before independent readback. - -#### Plan Fidelity Check - -- [x] Every approved outcome has a stable requirement and queue owner. -- [x] Release classification, target, superseded Draft-only boundary, and stable delivery - authorization are explicit. -- [x] Inputs, exact hashes, schedule evidence, public/private data flow, backlog rules, - non-goals, validation, recovery, and resume state are retained. -- [x] DLP, receipt, telemetry, approval, GitLab summary, local OCR, and no-LLM boundaries - are explicit. -- [x] Initial and final push behavior plus hosted ownership are explicit. - -#### Reconciliation Check - -- [x] Current `main`, tag, next version, open issues/PRs/milestones, local OCR, workflow, - plan, and worktree were read before this first write. -- [x] Current backlog, strategy, roadmap, compatibility, release, development, operations, - security, and GitLab owners were identified for focused reconciliation. -- [ ] OCR 1.10.2 semantic audit/evidence and canonical issue are reconciled. -- [ ] Backlog/roadmap/strategy status agrees with demonstrated upstream/toolkit outcomes. -- [ ] Final diff, validation, Draft, issues, milestone, remote ref, and hosted CI agree. - -#### Closure Gate - -- [ ] All requirements and queue items are `done` or explicitly `out_of_scope`. -- [x] Every completed feature logical commit passed focused tests, self-review, boundary review, and - `git diff --check`. -- [x] Final quality, coverage, OCR validation, lock, Towncrier, Gitleaks, and diff gates - are green on the exact final tree. -- [ ] Hosted required checks are green and the Draft PR has no unresolved conversations. -- [ ] Exact feature and release PR heads passed required checks with no unresolved threads - and their merge trees match reviewed trees. -- [ ] Stable external bytes, provenance, attestations, installs, tag, immutable Release, - receipt, issue receipts/closure, milestone closure, synchronized main, and cleanup are - independently verified. - -#### Post-Close Delivery - -- This task ends only after stable v0.8.5 publication and independent external - reconciliation. Hosted package, OS/Python, Dependency Review, Security, and CodeQL jobs - remain required PR evidence; macOS jobs are advisory under the documented policy. - -#### Handoff Notes - -- Final Draft body must identify toolkit target 0.8.5, OCR target 1.10.2, exact head/tree, - exact OCR hashes and qualification run/issue, schedule rationale, Added/Fixed/Changed/ - Unchanged behavior, backlog disposition, local no-LLM checks, and hosted validation. -- Release closure must retain the exact feature/release heads, merge/tree identities, - workflow run/attempt, artifact hashes, registry provenance, receipt hash, issue receipts, - and final cleanup evidence. +No active or blocked repository work. diff --git a/changelog.d/149.feature.md b/changelog.d/149.feature.md deleted file mode 100644 index d809a9e..0000000 --- a/changelog.d/149.feature.md +++ /dev/null @@ -1,5 +0,0 @@ -Classified LLM-provider failures now emit at most one toolkit-authored CI diagnostic line with closed HTTP detail and non-zero aggregate retry counts from a fully validated `ocr.llm-retry-report/v1`. - -- **Added:** HTTP `402` is shown as `http-payment-required`, HTTP `429` as `http-rate-limited`, a uniform status is shown only when all terminal failures share it, and mixed details are deterministically count-aggregated. -- **Changed:** The `rate-or-spending-limit` GitLab remediation now recommends lowering `OCR_REVIEW_CONCURRENCY` and/or `OCR_LLM_MAX_COMPLETION_TOKENS`, starting a new merge request pipeline, and checking provider request/account limits without claiming either setting caused the failure. -- **Unchanged:** The GitLab summary/reason, previous-review preservation, DLP, receipt v5, toolkit telemetry, and automatic-approval contracts are unchanged; raw provider-controlled fields and stderr remain private. diff --git a/changelog.d/151.bugfix.md b/changelog.d/151.bugfix.md deleted file mode 100644 index f7b79ac..0000000 --- a/changelog.d/151.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -OCR compatibility classification now sends feature-bearing patch releases to human review instead of allowing adjacent maintenance keywords to misclassify them as `automatic-safe`. diff --git a/changelog.d/151.maintenance.md b/changelog.d/151.maintenance.md deleted file mode 100644 index c6a453e..0000000 --- a/changelog.d/151.maintenance.md +++ /dev/null @@ -1,5 +0,0 @@ -Open Code Review 1.10.2 is the checksum-pinned runtime dependency for toolkit 0.8.5. - -- **Changed:** The current GitLab example, runtime preflight, compatibility manifest, and qualification evidence move from OCR 1.10.1 to 1.10.2. The inherited OpenAI completion cap remains `16384`, but OCR grouping requests now use that template-owned cap instead of a separate `4096`; an explicit `OCR_LLM_MAX_COMPLETION_TOKENS` continues to override every request. -- **Changed:** Daily OCR compatibility discovery moves from `05:41 UTC` to `07:15 UTC`; exact-tag manual dispatch remains the recovery path when GitHub delays or omits a scheduled run. -- **Unchanged:** OCR result and manifest schemas, default `medium` effort, effective max-tools behavior, DLP, receipt v5, toolkit telemetry ownership, and approval contracts are unchanged. diff --git a/changelog.d/151.rules.md b/changelog.d/151.rules.md deleted file mode 100644 index 9f05787..0000000 --- a/changelog.d/151.rules.md +++ /dev/null @@ -1 +0,0 @@ -The recommended OCR 1.10.2 built-in Rules and reviewable-file allowlist now cover Solidity (`.sol`) and Vyper (`.vy`). diff --git a/docs/compatibility.md b/docs/compatibility.md index 66a0eef..4063d72 100644 --- a/docs/compatibility.md +++ b/docs/compatibility.md @@ -71,7 +71,7 @@ Solidity (`.sol`) and Vyper (`.vy`) join the effective built-in Rules and review The hosted qualification initially labelled the patch `automatic-safe` because maintenance keywords masked the `Features` section. Human review overrode that result, and the classifier now treats feature-bearing patch notes as material so they require the human lane. -Deploy toolkit 0.8.5 directly with OCR 1.10.2 after the Draft release work is approved. The public Linux amd64 example verifies SHA-256 `e9205614f80e009ee7b1f444c9da08486fb9ff6db022954fe9203d923ab720b2`; the independently checked Darwin arm64 artifact verifies `74fc7bcc0e6d0790c5ca033fd82a5474b6f05d443ed51a26a6f61c0cac6589fd`, and the upstream `sha256sum.txt` verifies `b5176aaa04a7f00bd84dd61556ca29e6cbdfcfe64cc50af6653163d9be4e7654`. +Deploy toolkit 0.8.5 directly with OCR 1.10.2. The public Linux amd64 example verifies SHA-256 `e9205614f80e009ee7b1f444c9da08486fb9ff6db022954fe9203d923ab720b2`; the independently checked Darwin arm64 artifact verifies `74fc7bcc0e6d0790c5ca033fd82a5474b6f05d443ed51a26a6f61c0cac6589fd`, and the upstream `sha256sum.txt` verifies `b5176aaa04a7f00bd84dd61556ca29e6cbdfcfe64cc50af6653163d9be4e7654`. The contiguous 1.9.7 through 1.9.8 promotion combines the repository-owned hosted Linux qualification with adjacent upstream source review. It also repeats the required 1.9.8 contract probes through the checksum-verified Darwin arm64 artifact. Multi-tool MCP initialization, fixed tool discovery and dispatch, and owner-only session persistence remain compatible with the M5 design: the toolkit may expose several fixed tools from its one built-in process, while an isolated `HOME` contains OCR's `.opencodereview/sessions` state for deterministic cleanup. Gemini and Bedrock are optional upstream provider capabilities that the toolkit neither selects nor configures; mirror-aware installation is outside the toolkit-owned download path; native severity retains the structured result fields already consumed; and human-audience progress routing does not affect the toolkit's agent-audience invocation. Therefore this promotion requires no toolkit CI behavior adaptation beyond version and checksum pins. These source observations establish capability only; the M5 production-path tests remain responsible for proving the toolkit's composition and containment. diff --git a/docs/configuration.md b/docs/configuration.md index 5112842..55091df 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -94,7 +94,7 @@ These names belong to `examples/gitlab/ocr-review.gitlab-ci.yml`; they are shell | --- | --- | --- | --- | --- | | **`OCR_VERSION`** | Example pipeline | Yes | `v1.10.2` | Checksum-pinned recommended OCR binary release for toolkit 0.8.5. | | **`OCR_SHA256`** | Example pipeline | Yes | `e9205614f80e009ee7b1f444c9da08486fb9ff6db022954fe9203d923ab720b2` | Expected Linux AMD64 OCR binary digest. | -| **`OCR_TOOLKIT_VERSION`** | Example pipeline | Yes | `0.8.4` | Exact toolkit wheel release installed by the current published example. | +| **`OCR_TOOLKIT_VERSION`** | Example pipeline | Yes | `0.8.5` | Exact toolkit wheel release installed by the current published example. | | **`OCR_TOOLKIT_CHECKSUMS_URL`** | Example pipeline | Yes | Release URL derived from `OCR_TOOLKIT_VERSION` | Toolkit `SHA256SUMS` URL. | | `OCR_TOOLKIT_WHEEL` | Example shell | Computed | `open_code_review_toolkit-${OCR_TOOLKIT_VERSION}-py3-none-any.whl` | Exact wheel filename selected from the release. | | `OCR_TOOLKIT_WHEEL_SHA256` | Example shell | Computed | Matching value from `SHA256SUMS` | Digest checked before installing the toolkit wheel. | diff --git a/docs/engineering/execution_history/README.md b/docs/engineering/execution_history/README.md index 7ecae69..dee5a10 100644 --- a/docs/engineering/execution_history/README.md +++ b/docs/engineering/execution_history/README.md @@ -6,6 +6,7 @@ | Stable tag | Primary archived plan | Related context in the same archive | | --- | --- | --- | +| `v0.8.5` | [Provider diagnostics and OCR 1.10.2](releases.md#plan-toolkit-0-8-5) | Closed numeric provider diagnostics, unchanged GitLab/DLP/receipt/approval projections, OCR 1.10.2 qualification and Rules, compatibility scheduling, explicit local OCR provider-failure waiver, feature merge, development artifact verification, and stable-delivery handoff. | | `v0.8.4` | [GitLab summary correctness and OCR 1.10.1](releases.md#plan-toolkit-0-8-4) | Receipt-bound OCR core advisory, publication-filtered coverage, field-bounded HTAB with unchanged-value DLP checks, non-duplicating one-finding guide, OCR 1.10.1 qualification, final local OCR remediation, feature merge, development artifact verification, and stable-delivery handoff. | | `v0.8.3` | [OCR boundaries and review tool-usage visibility](releases.md#plan-toolkit-0-8-3) | Authoritative compatibility failure publication, installed-OCR numeric boundary ownership, complete bounded review tool-activity counters, advisory macOS endpoint checks, feature merge, development artifact verification, explicit local-LLM non-claim, and stable-delivery handoff. | | `v0.8.2` | [OCR 1.10.0, review effort, and compatibility failure recovery](releases.md#plan-toolkit-0-8-2) | Exact OCR 1.10.0 promotion, medium review effort, private grouping/round data, toolkit-owned output/DLP/approval boundaries, failed-qualification retention, BL-017 ownership audit, feature merge, development artifact verification, explicit local-LLM non-claim, and stable-delivery handoff. | diff --git a/docs/engineering/execution_history/releases.md b/docs/engineering/execution_history/releases.md index e2bd76b..47201ec 100644 --- a/docs/engineering/execution_history/releases.md +++ b/docs/engineering/execution_history/releases.md @@ -2,6 +2,102 @@ This archive preserves completed execution plans moved out of the active registry; the release index associates each plan with the stable tag or release cycle it supported. `PLANS.md` remains the source for active or blocked repository work; historical receipts here remain part of the audit trail. + + +## Toolkit 0.8.5 — provider diagnostics and OCR 1.10.2 + +Status: repository complete; external stable delivery pending +Release classification: `release-required` +Target stable version: `0.8.5` +Repository completion date: 2026-08-27 + +### Goal and delivered scope + +Toolkit 0.8.5 adds one bounded provider-neutral CI diagnostic line derived +only from a fully validated private `ocr.llm-retry-report/v1`. HTTP 402 and +429 retain the same public `rate-or-spending-limit` reason while the local log +can distinguish `http-payment-required` from `http-rate-limited`, include one +uniform HTTP status, and aggregate only non-zero closed retry counters. Mixed +terminal details are deterministically counted. Provider-controlled text, +identities, paths, URLs, headers, request IDs, and stderr cannot enter that +projection. + +The GitLab summary shape, previous-review preservation, publication DLP, receipt +v5, toolkit telemetry, findings, severity, suppression, and automatic approval +remain unchanged. Rate/spending remediation suggests lowering concurrency and/or +an operator-selected completion cap, starting a new pipeline, and checking the +provider's request/account limits without claiming a proven cause or recommending +a provider-specific numeric cap. + +The release qualifies and pins OCR 1.10.2, records its grouping-cap and +grace-round behavior, adds Solidity and Vyper to the effective Rules contract, +and makes feature-bearing OCR patch releases require human compatibility review. +Daily discovery moves to 07:15 UTC while exact-tag manual dispatch remains the +recovery path. + +### Decisions and non-claims + +- Issues #149 and #151 are the complete tracked release set. +- Provider diagnostics remain one toolkit-authored local line from a strict + closed numeric projection; they are not telemetry, receipt, DLP, finding, + severity, outcome, publication, or approval inputs. +- OCR 1.10.2 qualification is Maintenance, the classifier correction is a Bug + Fix, the diagnostic is a Feature, and Solidity/Vyper support is Rules. +- Session comparison and upstream GitHub Action checkpoint ranges are not + consumed. The latter does not activate or complete a second forge adapter. +- B2B, `core/common`, shared templates, and consumer repositories remain outside + this release. +- Local semantic OCR review is explicitly waived for this release, not passed: + both owner-authorized invocations failed before generation only at the external + provider boundary. + +### Repository, OCR, and hosted evidence + +- Official Darwin arm64 OCR 1.10.2 was installed as the PATH-effective binary + and verified at SHA-256 + `74fc7bcc0e6d0790c5ca033fd82a5474b6f05d443ed51a26a6f61c0cac6589fd`. + Hosted qualification run 33055459209 and local isolated probes verified the + consumed OCR contracts without changing user configuration. +- The exact-range local OCR attempts used concurrency 2 and then the + owner-requested concurrency 1. Each selected all nine supported files, but all + 13 logical requests received HTTP 429 through 65 retries, with zero input/output + tokens and zero findings. The owner authorized release continuation if the + concurrency-1 retry repeated that class. No OCR finding or semantic-pass claim + was derived from these failures. +- The final deterministic gate passed 1,296 tests plus 337 subtests at 86.51% + branch-aware coverage. Risk groups passed at 85%, 82%, 86%, and 87% against + floors of 80%, 80%, 85%, and 85%. The current release-contract tests, Ruff, + strict MyPy, Bandit, manifest and lock validation, Towncrier draft, pinned + Gitleaks, public-diff privacy scan, and `git diff --check` passed. +- Feature PR #150 passed all 13 hosted checks at reviewed head + `701bedd2e39b67a7433a63c0b2019354fc751089` and tree + `0ecda6c3836201378220e7935eaadc72a8ff9a58`, with zero unresolved review + threads. It was squash-merged as verified commit + `6a9d6d37833dabe75d09937694c958e75fe77faa` with the same tree. +- Development workflow run 33060708492 published and independently verified + `0.8.5.dev76`. TestPyPI wheel SHA-256 is + `d340472778120454fc7b0a74f37d743d592e536c3dcc41c83f0c9afc02da7af6`; + sdist SHA-256 is + `efa9c865f8e959d774710976453422625f566fd1835d868c066a6b6a87644aa3`. + Workflow/TestPyPI bytes, PEP 740 provenance, and clean wheel/sdist installs + agree. + +### Stable delivery handoff + +The release PR is the final repository mutation. It sets +`.release-version=0.8.5`, `.next-version=0.8.6`, deterministic source epoch +`1787824489` one second after the feature squash merge, exact sorted issues +`[149, 151]`, generated Towncrier notes, stable example pins, and this archived +plan while returning `PLANS.md` to its inactive template. + +External closure remains pending until the exact reviewed release head is +squash-merged and stable workflow output is independently reconciled across +TestPyPI, PyPI, workflow artifacts, and the immutable GitHub Release. Closure +requires byte equality, PEP 740 provenance and GitHub attestations, annotated +`v0.8.5` tag and peeled target, immutable `release-receipt.json`, clean PyPI +wheel and sdist installs on Python 3.12-3.14, Actions-owned receipts, closed +#149/#151 and milestone `v0.8.5`, synchronized clean `main`, and scratch cleanup. + ## Toolkit 0.8.4 — GitLab summary correctness and OCR 1.10.1 diff --git a/examples/gitlab/ocr-review.gitlab-ci.yml b/examples/gitlab/ocr-review.gitlab-ci.yml index f63b407..6b3eb84 100644 --- a/examples/gitlab/ocr-review.gitlab-ci.yml +++ b/examples/gitlab/ocr-review.gitlab-ci.yml @@ -7,7 +7,7 @@ default: variables: OCR_VERSION: "v1.10.2" - OCR_TOOLKIT_VERSION: "0.8.4" + OCR_TOOLKIT_VERSION: "0.8.5" OCR_TOOLKIT_CHECKSUMS_URL: "https://github.com/xeonvs/open-code-review-toolkit/releases/download/v${OCR_TOOLKIT_VERSION}/SHA256SUMS" OCR_SHA256: "e9205614f80e009ee7b1f444c9da08486fb9ff6db022954fe9203d923ab720b2" OCR_POST_MODE: "draft" diff --git a/tests/test_release_notes.py b/tests/test_release_notes.py index ee67df5..73cc2f5 100644 --- a/tests/test_release_notes.py +++ b/tests/test_release_notes.py @@ -204,6 +204,27 @@ def test_084_release_notes_separate_advisory_publication_and_dlp_contracts() -> assert phrase in notes +def test_085_release_notes_keep_provider_diagnostics_bounded_and_actionable() -> None: + """Keep the provider and OCR upgrade boundaries explicit for deployment.""" + + changelog = (ROOT / "CHANGELOG.md").read_text(encoding="utf-8") + notes = release.release_notes(changelog, "0.8.5") + + for phrase in ( + "ocr.llm-retry-report/v1", + "http-payment-required", + "http-rate-limited", + "OCR_REVIEW_CONCURRENCY", + "OCR_LLM_MAX_COMPLETION_TOKENS", + "GitLab summary/reason", + "Open Code Review 1.10.2", + "07:15 UTC", + "Solidity", + "Vyper", + ): + assert phrase in notes + + def test_extracts_only_the_exact_release_section() -> None: changelog = "# Changelog\n\n## 0.2.0 - later\n\nnew\n\n## 0.1.0 - now\n\nfirst\n"