From 005debeeebb2c86a08b35b0600d3191f35fc84f4 Mon Sep 17 00:00:00 2001
From: xeonvs <11463419+xeonvs@users.noreply.github.com>
Date: Wed, 26 Aug 2026 13:49:55 +0200
Subject: [PATCH] Release v0.8.4
---
.next-version | 2 +-
.release-metadata.json | 8 +-
.release-source-date-epoch | 2 +-
.release-version | 2 +-
CHANGELOG.md | 31 ++
PLANS.md | 334 +-----------------
changelog.d/145.bugfix.md | 6 -
changelog.d/146.maintenance.md | 8 -
changelog.d/146.rules.md | 1 -
docs/configuration.md | 2 +-
docs/engineering/execution_history/README.md | 1 +
.../engineering/execution_history/releases.md | 88 +++++
examples/gitlab/ocr-review.gitlab-ci.yml | 2 +-
tests/test_release_notes.py | 22 ++
14 files changed, 151 insertions(+), 358 deletions(-)
delete mode 100644 changelog.d/145.bugfix.md
delete mode 100644 changelog.d/146.maintenance.md
delete mode 100644 changelog.d/146.rules.md
diff --git a/.next-version b/.next-version
index b60d719..7ada0d3 100644
--- a/.next-version
+++ b/.next-version
@@ -1 +1 @@
-0.8.4
+0.8.5
diff --git a/.release-metadata.json b/.release-metadata.json
index ca837e8..d5df970 100644
--- a/.release-metadata.json
+++ b/.release-metadata.json
@@ -1,10 +1,8 @@
{
"issues": [
- 139,
- 140,
- 142,
- 143
+ 145,
+ 146
],
"schema_version": "ocr-toolkit.release-authorization/v1",
- "version": "0.8.3"
+ "version": "0.8.4"
}
diff --git a/.release-source-date-epoch b/.release-source-date-epoch
index 7a102d1..651a150 100644
--- a/.release-source-date-epoch
+++ b/.release-source-date-epoch
@@ -1 +1 @@
-1787732180
+1787744412
diff --git a/.release-version b/.release-version
index ee94dd8..b60d719 100644
--- a/.release-version
+++ b/.release-version
@@ -1 +1 @@
-0.8.3
+0.8.4
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 74bcf2c..53f1350 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,34 @@
+## 0.8.4 - 2026-08-26
+
+### 🐛 Bug Fixes
+
+- Correct GitLab review summaries by keeping OCR coverage, publication integrity, findings, and OCR core advisories as independent signals.
+
+ - **Added:** accepted OCR background recommendations are projected as a receipt-bound numeric `ocr.toolkit-advisory/v1` line under Technical details, including failed-result summaries; they no longer become OCR warnings or approval blockers.
+ - **Fixed:** complete OCR coverage followed by publication filtering now renders `Review complete with publication filtering`, preserves only exhaustively validated original outcome/count combinations, and does not invent partial-coverage or pathless failed-item diagnostics.
+ - **Changed:** horizontal tabs are retained only in `existing_code` and `suggestion_code` after the unchanged value passes all secret, PII, forbidden-value, laundering, and budget checks, and Recommended focus areas are shown only for two or more published findings.
+ - **Unchanged:** publication filtering remains warning-bearing and automatic-approval-ineligible; receipt v5, publication-DLP signal v2, manifest/result schemas, secret/PII/laundering/budget checks, ordinary OCR warnings, real partial/budget outcomes, and the existing non-zero tool-call/token summary format remain authoritative.
+
+ ([#145](https://github.com/xeonvs/open-code-review-toolkit/issues/145))
+
+### 🛠 Maintenance
+
+- Qualify and promote checksum-pinned Open Code Review 1.10.1 for toolkit 0.8.4.
+
+ - **Added:** canonical qualification evidence records the hosted OCR 1.10.1 result, completion-cap, medium-effort, and max-tools probes.
+ - **Changed:** preflight, the compatibility manifest, and the GitLab example now require OCR 1.10.1. SHA-256 pins are Linux AMD64 `8b806c221d409727a21611b4a7952d8e15edadbbc25f5affccaeb8f677e4055c`, Darwin ARM64 `8fc24bd825c9d918b894be05c0cf27fac8d30bc549257c812d87337167c7563c`, and upstream `sha256sum.txt` `ec72bda51f1227f412ee00602d952868efc57d847cce0ae1586fb97069d4139d`.
+ - **Consumed:** bounded private session-cache keys reduce upstream cache-key risk without adding a toolkit receipt or telemetry field.
+ - **Unchanged:** result and manifest schemas, inherited OpenAI completion cap `16384`, explicit `4096` override, default `medium` effort, and behaviorally qualified max-tools semantics remain unchanged.
+ - **Not consumed:** the upstream GitHub Action, delegate skill, npm launcher, provider preset, and repository-local `providers.go` rule do not alter the toolkit's native-binary, explicit-protocol integration.
+ - **Deployment:** update directly from OCR 1.10.0 to 1.10.1; no intermediate OCR version is required.
+
+ ([#146](https://github.com/xeonvs/open-code-review-toolkit/issues/146))
+
+### 🧩 Rules
+
+- OCR 1.10.1 adds `.m` files to its review allowlist and selects MATLAB or Objective-C built-in rules from file content. The upstream repository-local `providers.go` rule is not a toolkit-wide rule. ([#146](https://github.com/xeonvs/open-code-review-toolkit/issues/146))
+
+
## 0.8.3 - 2026-08-26
### 🚀 Features
diff --git a/PLANS.md b/PLANS.md
index 6a0703c..ca171a2 100644
--- a/PLANS.md
+++ b/PLANS.md
@@ -4,336 +4,4 @@ Use this file for active or blocked repository work. Update it before implementa
## Active Work
-### Toolkit 0.8.4 - GitLab summary correctness and OCR 1.10.1
-
-#### Goal
-
-Deliver toolkit `0.8.4` through the complete protected stable-release lifecycle:
-finish and independently review the existing Draft feature PR, run one final
-local OCR `1.10.1` review, correct confirmed findings, merge the exact hosted-
-green feature head, prepare and merge `release/v0.8.4`, and independently
-reconcile the published artifacts, provenance, immutable receipt, issues, and
-milestone.
-
-#### Plan Origin
-
-`plan_mode_approved`
-
-#### Requested Scope
-
-- Resolve #145 by separating four GitLab summary inputs: OCR coverage,
- publication integrity, ordinary findings/warnings, and a toolkit-owned OCR
- core advisory.
-- Resolve #146 by recording hosted qualification evidence for OCR `1.10.1`,
- promoting the exact version and checksums, documenting relevant upstream
- behavior, and updating the direct local OCR binary without changing user
- configuration.
-- Permit HTAB only in published `existing_code` and `suggestion_code` values
- while preserving all remaining publication-DLP checks.
-- Avoid duplicating one published finding in `Recommended focus areas` while
- preserving the deterministic ranking for two or more findings.
-- Preserve the current tool-call and token technical-summary format and emit
- those independent non-empty metrics under passed, private-sanitized, and
- publication-filtered states.
-- Finish with verified stable `0.8.4` artifacts and provenance, Actions-owned
- receipts on #145/#146, both issues closed, milestone `v0.8.4` closed, and a
- clean local `main` synchronized with `origin/main`.
-
-#### Requirement Traceability
-
-| Requirement | Owner | Implementation evidence | Acceptance evidence |
-| --- | --- | --- | --- |
-| OCR 1.10.1 compatibility and local update | #146 | compatibility evidence, manifest/preflight/example pins, current-version docs, Rules and Maintenance changelog fragments | hosted run `32955196785`, exact checksum validation, isolated no-LLM version/help/background/rule checks |
-| Closed OCR advisory | #145 | strict private `ocr.toolkit-advisory/v1` parser/projection and Technical details renderer | spoof/malformed/duplicate/extra-key/no-receipt and approval-independence regressions |
-| Correct publication-filtered coverage | #145 | derive original coverage from validated receipt v5 `publication.original`; keep publication integrity separate | complete 5/5 filtering, real partial/budget, no pathless fallback regressions |
-| Field-bounded HTAB support | #145 | allow HTAB only for `existing_code` and `suggestion_code` through private and public publication DLP | tab preservation plus secrets/PII/laundering/control-character regressions |
-| Non-duplicating reviewer guide | #145 | omit focus-area ranking for one published finding | one- and two-finding renderer regressions |
-| Operational handoff | #145, #146 | Draft body and issue checklists with exact head/tree, checksums, validation, Added/Fixed/Changed/Unchanged | hosted-green Draft status, clean merge state, zero unresolved threads, remote/worktree readback |
-
-#### Explicit Non-Goals
-
-- No additional OCR qualification campaign or enriched-context qualification;
- run only the user-authorized final local OCR review on this repository.
-- No receipt v5, publication-DLP signal v2, result, manifest, telemetry, or
- approval-contract version changes.
-- No weakening of global context DLP or publication controls outside the two
- exact code-value fields.
-- No adoption of upstream GitHub Action, delegate skill, npm launcher,
- provider preset, or upstream repository-local `providers.go` rule.
-- No mechanical test-directory reorganization or refactor unrelated to the
- two activated issues.
-- No consumer-repository, B2B, `core/common`, or shared-template integration.
-- No issue or milestone closure before independent stable-release readback.
-
-#### Constraints
-
-- Release classification: `release-required`; target stable version: `0.8.4`;
- delivery state: `active stable delivery`.
-- Branch: `codex/v0.8.4-summary-ocr-1.10.1`, based on clean released `v0.8.3`
- `main`; `.next-version` already owns `0.8.4`.
-- The first tracked repository write is this complete active plan.
-- After the signed planning commit, make one initial push and open the Draft PR;
- make no further pushes until all local implementation slices are complete.
-- Every logical signed commit requires focused tests, complete slice diff
- self-review, trust/data-flow review, and `git diff --check`.
-- New tests stay with existing thematic owners and include docstrings.
-- Do not change OCR configuration, credentials, or the user's `HOME`.
-- The final local OCR review uses the already configured local OCR `1.10.1`,
- concurrency `2`, no provider-specific `4096` completion cap, and private
- ignored artifacts. Its exit status is insufficient without complete result
- and manifest readback.
-- Keep long-running test and OCR output in ignored owner-only logs and expose
- only bounded summaries in the interactive session.
-- Run the full local gate after the final fixes; hosted workflows own the
- cross-platform, dependency, Security, and CodeQL validation, while local
- release closure additionally owns deterministic package and clean-install
- evidence.
-
-#### Inputs And Sources
-
-- GitHub issues #145 and #146 and compatibility run `32955196785`.
-- OCR `1.10.1` release assets and checksums:
- - Linux amd64: `8b806c221d409727a21611b4a7952d8e15edadbbc25f5affccaeb8f677e4055c`.
- - Darwin arm64: `8fc24bd825c9d918b894be05c0cf27fac8d30bc549257c812d87337167c7563c`.
- - `sha256sum.txt`: `ec72bda51f1227f412ee00602d952868efc57d847cce0ae1586fb97069d4139d`.
-- Current public contracts in `docs/configuration.md`, `docs/gitlab.md`,
- `docs/operations.md`, `docs/security.md`, and `docs/compatibility.md`.
-- Runtime owners under `src/ocr_toolkit/` and their existing thematic tests.
-
-#### User Decisions And Answers
-
-- Complete and publish stable toolkit `0.8.4` in this task.
-- Run one final local OCR `1.10.1` review, correct confirmed findings, perform a
- holistic self-review, then push and move the exact Draft head through the
- protected release process.
-- Preserve the existing technical-summary format and publish tool-call/token
- numeric metrics only when their list/value is non-empty and non-zero.
-- Default `OCR_REVIEW_EFFORT` remains `medium`.
-- Highlight required environment variables in public documentation where
- applicable.
-- Avoid duplicate local validation already owned by hosted PR workflows.
-
-#### Completed Baseline State
-
-- `main` and `origin/main` both resolve to released `v0.8.3` commit
- `4c697fee6eeceb02a50fbed1c150a6eb953a08d6` with a clean worktree.
-- `.next-version` contains `0.8.4`; `.release-version` contains `0.8.3`.
-- Hosted OCR compatibility run `32955196785` passed the required result,
- completion-cap, medium-effort, and max-tools probes for `1.10.1`.
-- The direct local OCR binary is `1.10.0`; no Homebrew-managed OCR package is
- installed.
-- Upstream semantic audit identified bounded session cache keys and `.m`
- MATLAB/Objective-C rule resolution as consumed behavior; result/manifest,
- completion cap `16384`, explicit cap `4096`, medium effort, and max-tools
- semantics remain unchanged.
-
-#### Current Work Queue
-
-1. **Plan and Draft coordination - completed**
- - Create milestone `v0.8.4`, assign #145/#146 to `xeonvs`, add both issues to
- the milestone, commit this plan, push once, and open the Draft PR.
-2. **OCR 1.10.1 qualification - completed locally**
- - Import canonical evidence, human conclusion, manifest/preflight/example
- pins, current-version docs, and separate Maintenance/Rules fragments.
- - Atomically update the direct local binary with checksum verification and
- rollback on validation failure; run isolated no-LLM checks.
-3. **Closed advisory contract - completed locally**
- - Remove the accepted background advisory from OCR warnings; validate and
- attach a private toolkit-owned numeric advisory after publication DLP;
- render it only with a valid receipt in Technical details.
-4. **Coverage, publication DLP, and reviewer guide - completed locally**
- - Use `publication.original` for filtered coverage; suppress the legacy
- warning fallback in filtered state; correct DLP wording; permit HTAB only
- in the two code fields; omit focus areas for one finding.
-5. **Independent feature review and final OCR - active**
- - Review the complete Draft diff and trust/data flows, run focused and full
- validation with bounded output, then execute the single final local OCR
- `1.10.1` review with concurrency `2`.
- - Inspect the OCR result and manifest for complete selected-item coverage;
- trace and fix only confirmed findings, rerun their owner tests, and record
- the private-safe conclusions without publishing raw provider artifacts.
- - The final exact-range run completed all 10 selected items at
- `02c2f9d8f76d736ba83deed7700bed9374c4e38d` with no failed, reused, or
- waived coverage and produced three confirmed boundary corrections: make
- receipt-v5 original outcome/count validation exhaustive; preserve the
- original HTAB-bearing code value for secret and forbidden matching while
- relaxing only its control-character admission; and carry a valid
- receipt-bound OCR core advisory into failed-result Technical details.
-6. **Holistic self-review and feature delivery**
- - Review the complete post-OCR diff, correct findings, run the final
- quality/coverage, lock, manifest, Towncrier, Gitleaks, deterministic-build,
- clean-install, and diff gates, then push the exact reviewed head.
- - Verify hosted checks and unresolved threads on that head, move #147 to
- Ready, and squash-merge it through the protected branch policy.
-7. **Release PR and stable publication**
- - Verify the protected-main development publication, prepare
- `release/v0.8.4` with the canonical release metadata, changelog, issue set,
- and plan archive, then validate and squash-merge the exact release head.
- - Monitor the Release workflow and independently verify TestPyPI/PyPI/GitHub
- bytes, PEP 740 provenance, GitHub attestations, annotated tag target,
- immutable Release, receipt identities, and clean Python 3.12-3.14 installs.
-8. **External closure**
- - Verify Actions-owned receipts, close #145/#146 and milestone `v0.8.4` only
- after external reconciliation, re-read planning sources, synchronize clean
- local `main`, and remove temporary logs, archives, and unused environments.
-
-#### Locked Decisions
-
-- Data flow for the advisory is
- `exact preview stderr -> strict parser -> numeric toolkit state -> closed renderer -> Technical details`.
-- The accepted advisory is not an OCR warning, DLP input, coverage signal,
- receipt input, telemetry field, or approval signal.
-- Raw OCR output may not supply the reserved `_ocr_toolkit_advisory` key.
-- Advisory schema is exact `ocr.toolkit-advisory/v1` with kind
- `background_recommended_limit`, bounded positive non-boolean `actual` and
- `recommended`, `actual > recommended`, and unit `characters`.
-- Without a valid receipt v5 the advisory is untrusted; malformed, extended,
- duplicated, or spoofed forms fail closed.
-- Complete OCR coverage plus publication filtering renders
- `Review complete with publication filtering`; real failed/budget/partial
- coverage retains its existing higher-priority state.
-- Publication filtering always blocks auto-approval; a valid advisory alone
- does not.
-- HTAB is allowed only in values of `comments[*].existing_code` and
- `comments[*].suggestion_code`; all secret, PII, forbidden-value, laundering,
- budget, and other control-character checks remain active.
-- OCR `1.10.1` promotion is Maintenance; MATLAB/Objective-C rule effects are a
- separate Rules entry. Historical `1.10.0` records remain immutable.
-
-#### Verification
-
-- Per slice: focused owner tests, complete diff review, requirement and
- trust/data-flow review, `git diff --check`, signed commit.
-- OCR checks: compatibility evidence/manifest validation, exact checksum and
- documentation consistency, isolated `--version`/`--help`, soft/hard
- background preview, and MATLAB/Objective-C rule resolution without LLM.
-- #145 regression matrix: both reported scenarios; advisory spoof/malformed/
- duplicate/extra-key/no-receipt; approval independence; complete filtered and
- actual partial/budget coverage; field-specific HTAB and remaining DLP
- controls; one/two finding guide; tool-call/token summaries across publication
- states.
-- One final local gate: `scripts/quality.sh check`, coverage floors,
- `uv lock --check`, `scripts/ocr_compat.py validate`, Towncrier draft,
- `scripts/gitleaks.sh`, and `git diff --check`.
-- Hosted Draft PR: build artifacts, Twine, clean installs, OS/Python matrix,
- dependency checks, Security, and CodeQL.
-
-#### Latest Validation Results
-
-- Baseline branch/worktree check: clean `main` at
- `4c697fee6eeceb02a50fbed1c150a6eb953a08d6`.
-- Hosted OCR compatibility run `32955196785`: successful.
-- OCR `1.10.1` compatibility slice: 146 focused tests passed; support manifest
- and Towncrier draft validated.
-- The direct local Darwin arm64 binary now reports OCR `1.10.1` and matches
- SHA-256 `8fc24bd825c9d918b894be05c0cf27fac8d30bc549257c812d87337167c7563c`;
- upstream `sha256sum.txt` matches
- `ec72bda51f1227f412ee00602d952868efc57d847cce0ae1586fb97069d4139d`.
-- Isolated no-LLM version/help, hosted/local contract, soft/hard background,
- and MATLAB/Objective-C rule-resolution checks passed without changing user
- configuration or `HOME`.
-- Closed advisory slice: 360 focused tests and Ruff passed. Raw/duplicate/
- malformed/unbound advisory input fails closed; the valid numeric projection
- remains outside OCR warnings, publication DLP, coverage, receipt v5,
- telemetry, and approval inputs and renders only in Technical details.
-- Coverage/publication slice: 342 focused tests and 209 subtests passed. The
- complete 5/5 filtered scenario retains its original coverage counts without
- legacy pathless failures; real partial/budget state remains stronger;
- passed/private-sanitized/publication-filtered tool and token lines remain
- independent; field-specific HTAB, hostile controls and remaining DLP checks,
- one/two-finding guide behavior, and impossible receipt counts are covered.
-- Final quality gate passed: Ruff format/lint, mypy, Bandit, and the complete
- pytest run produced 86% combined coverage. Risk groups passed at 85%
- (result/preflight), 82% (posting/GitLab transaction), 86%
- (review/context/DLP/approval), and 87% (MCP/provider/policy/result).
-- `uv lock --check`, OCR support-manifest validation, Towncrier 0.8.4 draft,
- and `git diff --check` passed. The rendered draft has separate Bug Fixes
- (#145), Maintenance (#146), and Rules (#146) sections with explicit
- deployment and unchanged-contract guidance.
-- The original product implementation and all three final-OCR corrections are
- complete locally. Focused posting/review regressions pass 343 tests plus 217
- subtests; shared DLP callers pass 66 tests plus 8 subtests; Ruff and strict
- MyPy pass. The release remains active pending the final holistic gates, push,
- hosted CI reconciliation, Draft transition, and protected release lifecycle.
-- The single authorized final local OCR `1.10.1` review completed the exact
- `origin/main..02c2f9d8f76d736ba83deed7700bed9374c4e38d` range in 6m23s with
- concurrency `2`, complete 10/10 coverage, no failed/reused/waived items,
- no stderr, and 102 tool calls. Its three candidates were all confirmed as
- bounded correctness or trust-boundary defects and are the active corrective
- scope above; the retained private result and DLP sidecar remain local-only
- remediation evidence and will be deleted after verification.
-- Final holistic gates passed after the corrective slice: Gitleaks 8.24.3
- scanned the complete `origin/main..HEAD` feature range; `pip-audit
- --skip-editable` found no known dependency vulnerabilities; the focused
- public-contract suite passed 25 tests; and `git diff --check` passed.
-- Two independent local `0.8.4` builds with one fixed source epoch were
- byte-identical. Twine accepted both wheel/sdist pairs, archive inspection
- found no private/log/Git/environment/key paths, and clean wheel plus sdist
- installations passed `ocr-ci --help` on Python 3.12, 3.13, and 3.14.
-- Holistic documentation review replaced the remaining obsolete
- tab-normalized-copy wording with the implemented unchanged-value DLP
- contract. Required variables remain bold in the canonical tables, and the
- example toolkit pin correctly stays at the currently published `0.8.3`
- until the release PR advances it.
-
-#### Risks And Recovery
-
-- **Advisory spoofing or privilege confusion:** reject reserved input before
- toolkit projection; exact-schema validation and receipt-gated rendering fail
- closed. Revert the advisory slice if the boundary cannot be proven.
-- **Coverage conflation:** use only already-validated receipt v5 original counts
- for filtered publication; preserve real partial/budget outcomes. Revert the
- summary slice if legacy result compatibility regresses.
-- **DLP weakening:** make the allowance field-aware and tab-only; retain every
- semantic scanner. Any secret/PII/control regression blocks the commit.
-- **Local OCR replacement:** verify release checksum and existing source binary,
- stage an adjacent replacement atomically, retain a rollback copy until all
- no-LLM checks pass, and restore `1.10.0` on failure.
-- **Hosted-only failure:** diagnose from exact job evidence, make a focused
- reviewed fix commit, rerun the affected local owner check, and push only the
- evidence-driven correction.
-
-#### Resume Point
-
-Current action: sign and push the complete post-OCR corrective head, verify the
-hosted checks and review threads on that exact head, then move Draft PR #147 to
-Ready and squash-merge it through the protected branch policy.
-
-#### Plan Fidelity Check
-
-- The active queue maps every accepted requirement to #145 or #146 and retains
- all approved trust, DLP, approval, compatibility, and release boundaries.
-- No requested product behavior is deferred silently; stable publication alone
- is intentionally deferred.
-- Scope additions require an explicit plan update before implementation.
-
-#### Reconciliation Check
-
-- Before final push, compare implementation, tests, docs, changelog, manifest,
- examples, and issue acceptance criteria against this plan.
-- After hosted CI, verify the exact remote head/tree, all required checks,
- unresolved review threads, Draft state, merge state, and local cleanliness.
-
-#### Closure Gate
-
-This objective is complete only when the exact protected release is externally
-reconciled: registry and Release bytes agree, provenance and attestations
-validate, the annotated tag and immutable receipt bind the reviewed release,
-Python 3.12-3.14 clean installs pass, Actions-owned issue receipts exist,
-#145/#146 and milestone `v0.8.4` are closed, and local `main` is clean and
-synchronized. Earlier feature, merge, development-publication, or workflow-green
-states are intermediate only.
-
-#### Post-Close Delivery
-
-No post-close repository delivery remains in this objective. Conditional backlog
-work stays inactive unless its own trigger and authorization are met.
-
-#### Handoff Notes
-
-- Draft PR #147 may move to Ready only after the final OCR fixes, holistic
- self-review, exact-head local gates, push, and hosted reconciliation.
-- #145, #146, and milestone `v0.8.4` remain open until the stable receipt and
- independent external readback prove closure.
-- OCR `1.10.1` is the qualified toolkit target; the previous `1.10.0` evidence
- remains historical and must not be rewritten.
+No active or blocked repository work.
diff --git a/changelog.d/145.bugfix.md b/changelog.d/145.bugfix.md
deleted file mode 100644
index 7fec936..0000000
--- a/changelog.d/145.bugfix.md
+++ /dev/null
@@ -1,6 +0,0 @@
-Correct GitLab review summaries by keeping OCR coverage, publication integrity, findings, and OCR core advisories as independent signals.
-
-- **Added:** accepted OCR background recommendations are projected as a receipt-bound numeric `ocr.toolkit-advisory/v1` line under Technical details, including failed-result summaries; they no longer become OCR warnings or approval blockers.
-- **Fixed:** complete OCR coverage followed by publication filtering now renders `Review complete with publication filtering`, preserves only exhaustively validated original outcome/count combinations, and does not invent partial-coverage or pathless failed-item diagnostics.
-- **Changed:** horizontal tabs are retained only in `existing_code` and `suggestion_code` after the unchanged value passes all secret, PII, forbidden-value, laundering, and budget checks, and Recommended focus areas are shown only for two or more published findings.
-- **Unchanged:** publication filtering remains warning-bearing and automatic-approval-ineligible; receipt v5, publication-DLP signal v2, manifest/result schemas, secret/PII/laundering/budget checks, ordinary OCR warnings, real partial/budget outcomes, and the existing non-zero tool-call/token summary format remain authoritative.
diff --git a/changelog.d/146.maintenance.md b/changelog.d/146.maintenance.md
deleted file mode 100644
index e24a454..0000000
--- a/changelog.d/146.maintenance.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Qualify and promote checksum-pinned Open Code Review 1.10.1 for toolkit 0.8.4.
-
-- **Added:** canonical qualification evidence records the hosted OCR 1.10.1 result, completion-cap, medium-effort, and max-tools probes.
-- **Changed:** preflight, the compatibility manifest, and the GitLab example now require OCR 1.10.1. SHA-256 pins are Linux AMD64 `8b806c221d409727a21611b4a7952d8e15edadbbc25f5affccaeb8f677e4055c`, Darwin ARM64 `8fc24bd825c9d918b894be05c0cf27fac8d30bc549257c812d87337167c7563c`, and upstream `sha256sum.txt` `ec72bda51f1227f412ee00602d952868efc57d847cce0ae1586fb97069d4139d`.
-- **Consumed:** bounded private session-cache keys reduce upstream cache-key risk without adding a toolkit receipt or telemetry field.
-- **Unchanged:** result and manifest schemas, inherited OpenAI completion cap `16384`, explicit `4096` override, default `medium` effort, and behaviorally qualified max-tools semantics remain unchanged.
-- **Not consumed:** the upstream GitHub Action, delegate skill, npm launcher, provider preset, and repository-local `providers.go` rule do not alter the toolkit's native-binary, explicit-protocol integration.
-- **Deployment:** update directly from OCR 1.10.0 to 1.10.1; no intermediate OCR version is required.
diff --git a/changelog.d/146.rules.md b/changelog.d/146.rules.md
deleted file mode 100644
index 14acb34..0000000
--- a/changelog.d/146.rules.md
+++ /dev/null
@@ -1 +0,0 @@
-OCR 1.10.1 adds `.m` files to its review allowlist and selects MATLAB or Objective-C built-in rules from file content. The upstream repository-local `providers.go` rule is not a toolkit-wide rule.
diff --git a/docs/configuration.md b/docs/configuration.md
index 7dbe3b9..be5c021 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.1` | Checksum-pinned recommended OCR binary release for toolkit 0.8.4. |
| **`OCR_SHA256`** | Example pipeline | Yes | `8b806c221d409727a21611b4a7952d8e15edadbbc25f5affccaeb8f677e4055c` | Expected Linux AMD64 OCR binary digest. |
-| **`OCR_TOOLKIT_VERSION`** | Example pipeline | Yes | `0.8.3` | Exact toolkit wheel release installed by the current published example. |
+| **`OCR_TOOLKIT_VERSION`** | Example pipeline | Yes | `0.8.4` | 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 f512c2e..7ecae69 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.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. |
| `v0.8.1` | [Completion cap, safe provider failures, and validation ownership](releases.md#plan-toolkit-0-8-1) | Protocol-aware completion cap, canonical provider configuration, bounded provider-failure projection, privacy and approval invariants, protected validation deduplication, feature merge, development artifact verification, and stable-delivery handoff. |
diff --git a/docs/engineering/execution_history/releases.md b/docs/engineering/execution_history/releases.md
index 6274df4..a9d0c94 100644
--- a/docs/engineering/execution_history/releases.md
+++ b/docs/engineering/execution_history/releases.md
@@ -2,6 +2,94 @@
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.4 — GitLab summary correctness and OCR 1.10.1
+
+Status: repository complete; external stable delivery pending
+Release classification: `release-required`
+Target stable version: `0.8.4`
+Repository completion date: 2026-08-26
+
+### Goal and delivered scope
+
+Separate OCR coverage, publication integrity, ordinary findings or warnings,
+and the low-level OCR core background recommendation in GitLab summaries. A
+strict receipt-bound `ocr.toolkit-advisory/v1` projection now renders only in
+Technical details and does not become an OCR warning, DLP input, coverage
+signal, receipt field, telemetry field, or approval signal. Complete OCR
+coverage followed by publication filtering retains its validated original
+counts and renders the publication-filtered state; real partial, budget, and
+failed outcomes remain authoritative.
+
+Publication DLP admits HTAB only in `existing_code` and `suggestion_code` while
+checking the unchanged value for secrets, PII, forbidden values, laundering,
+and budget. A single published finding no longer repeats itself in Recommended
+focus areas; deterministic ranking remains for two or more findings. Toolkit
+0.8.4 promotes checksum-pinned OCR 1.10.1, including its `.m` MATLAB versus
+Objective-C rule selection, while preserving receipt v5, publication-DLP signal
+v2, result and manifest schemas, ordinary OCR warnings, and the existing
+non-zero tool-call and token summary format.
+
+### Decisions and non-claims
+
+- Issues #145 and #146 are the complete tracked release set.
+- The OCR core advisory is accepted only from the exact preview diagnostic,
+ projected to bounded positive character counts, bound to a valid receipt,
+ and rendered under Technical details. Raw or malformed advisory input fails
+ closed and cannot affect approval.
+- HTAB admission is field-specific rather than a whitespace-normalized checking
+ copy: every private and public DLP check sees the original code value.
+- OCR 1.10.1 compatibility is Maintenance; its effective `.m` review behavior
+ is a separate Rules entry. Historical OCR 1.10.0 evidence is unchanged.
+- The final OCR run used context mode `off`; no enriched-context qualification
+ is claimed and no second local OCR run is part of release preparation.
+- B2B, `core/common`, shared templates, and other consumer repositories remain
+ outside this release.
+
+### Repository, OCR, and hosted evidence
+
+- Final local OCR 1.10.1 reviewed exact range
+ `origin/main..02c2f9d8f76d736ba83deed7700bed9374c4e38d` with concurrency
+ `2`, context mode `off`, and no explicit completion cap. It completed all
+ 10 selected items with failed/reused/waived `0/0/0`, 102 tool calls, and
+ empty stderr.
+- Three confirmed OCR findings were corrected: exhaustive receipt-v5 original
+ outcome/count validation; unchanged HTAB-bearing values across all remaining
+ DLP checks; and valid advisory rendering for failed-result Technical details.
+- The final local gate passed 1,290 tests plus 337 subtests at 86.46% combined
+ branch coverage against the 85% floor. Risk groups passed at 85%, 82%, 86%,
+ and 87%; Ruff, strict MyPy, Bandit, Gitleaks 8.24.3, lock and OCR manifest
+ validation, Towncrier draft, deterministic builds, Twine, archive privacy,
+ and clean Python 3.12-3.14 wheel and sdist installs passed.
+- Feature PR #147 passed all 13 hosted checks at reviewed head
+ `54521ceb370a91cd5b5d5cf95eb7565cd8da78b0` and tree
+ `619869ca79d687fab3feb5c374096b5b35d39230`, with zero unresolved review
+ threads. It was squash-merged as verified commit
+ `5393e7526c9358873ad668fdd1d8f35443d14940` with the same tree.
+- Development workflow run 32964488326 published and independently verified
+ `0.8.4.dev74`. TestPyPI wheel SHA-256 is
+ `dbb97bee0fe74d75721ab978d6db49c7e6c265f6d059186276a60430fb32e095`;
+ sdist SHA-256 is
+ `904b829ffde000e2825bf979147fed9e1191317aca7957d8570eedff360d26f0`.
+ Trusted Publishing provenance, exact readback, and clean installs passed.
+
+### Stable delivery handoff
+
+The release PR is the final repository mutation. It sets
+`.release-version=0.8.4`, `.next-version=0.8.5`, deterministic source epoch
+`1787744412` one second after the feature squash merge, exact sorted issues
+`[145, 146]`, 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.4` tag and peeled target, immutable `release-receipt.json`, clean PyPI
+wheel and sdist installs on Python 3.12-3.14, Actions-owned receipts, closed
+#145/#146 and milestone `v0.8.4`, synchronized clean `main`, and scratch cleanup.
+
## Toolkit 0.8.3 — OCR boundaries and review tool-usage visibility
diff --git a/examples/gitlab/ocr-review.gitlab-ci.yml b/examples/gitlab/ocr-review.gitlab-ci.yml
index 99a452f..b7a9bef 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.1"
- OCR_TOOLKIT_VERSION: "0.8.3"
+ OCR_TOOLKIT_VERSION: "0.8.4"
OCR_TOOLKIT_CHECKSUMS_URL: "https://github.com/xeonvs/open-code-review-toolkit/releases/download/v${OCR_TOOLKIT_VERSION}/SHA256SUMS"
OCR_SHA256: "8b806c221d409727a21611b4a7952d8e15edadbbc25f5affccaeb8f677e4055c"
OCR_POST_MODE: "draft"
diff --git a/tests/test_release_notes.py b/tests/test_release_notes.py
index eb95a1f..ee67df5 100644
--- a/tests/test_release_notes.py
+++ b/tests/test_release_notes.py
@@ -182,6 +182,28 @@ def test_083_release_notes_cover_hotfix_activity_and_release_gates() -> None:
assert phrase in notes
+def test_084_release_notes_separate_advisory_publication_and_dlp_contracts() -> None:
+ """Keep the summary hotfix and OCR deployment boundary explicit."""
+
+ changelog = (ROOT / "CHANGELOG.md").read_text(encoding="utf-8")
+ notes = release.release_notes(changelog, "0.8.4")
+
+ for phrase in (
+ "ocr.toolkit-advisory/v1",
+ "Technical details",
+ "Review complete with publication filtering",
+ "original outcome/count combinations",
+ "horizontal tabs",
+ "unchanged value",
+ "secret, PII, forbidden-value, laundering, and budget checks",
+ "two or more published findings",
+ "Open Code Review 1.10.1",
+ "MATLAB or Objective-C",
+ "update directly from OCR 1.10.0 to 1.10.1",
+ ):
+ 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"