From 2911435a1f076207241e4d532a8742482b62a1c0 Mon Sep 17 00:00:00 2001
From: xeonvs <11463419+xeonvs@users.noreply.github.com>
Date: Tue, 1 Sep 2026 11:50:36 +0200
Subject: [PATCH] Release v0.8.7
---
.next-version | 2 +-
.release-metadata.json | 11 +-
.release-source-date-epoch | 2 +-
.release-version | 2 +-
CHANGELOG.md | 32 ++
PLANS.md | 388 +-----------------
changelog.d/157.doc.md | 1 -
changelog.d/158.maintenance.md | 7 -
changelog.d/158.rules.md | 1 -
changelog.d/159.bugfix.md | 1 -
changelog.d/160.feature.md | 1 -
changelog.d/161.feature.md | 1 -
changelog.d/162.bugfix.md | 1 -
changelog.d/165.maintenance.md | 1 -
docs/configuration.md | 2 +-
docs/engineering/execution_history/README.md | 1 +
.../engineering/execution_history/releases.md | 79 ++++
examples/gitlab/ocr-review.gitlab-ci.yml | 2 +-
tests/test_release_notes.py | 25 ++
19 files changed, 151 insertions(+), 409 deletions(-)
delete mode 100644 changelog.d/157.doc.md
delete mode 100644 changelog.d/158.maintenance.md
delete mode 100644 changelog.d/158.rules.md
delete mode 100644 changelog.d/159.bugfix.md
delete mode 100644 changelog.d/160.feature.md
delete mode 100644 changelog.d/161.feature.md
delete mode 100644 changelog.d/162.bugfix.md
delete mode 100644 changelog.d/165.maintenance.md
diff --git a/.next-version b/.next-version
index 1e9b46b..6201b5f 100644
--- a/.next-version
+++ b/.next-version
@@ -1 +1 @@
-0.8.7
+0.8.8
diff --git a/.release-metadata.json b/.release-metadata.json
index 760dc93..9b70ddf 100644
--- a/.release-metadata.json
+++ b/.release-metadata.json
@@ -1,8 +1,13 @@
{
"issues": [
- 153,
- 155
+ 157,
+ 158,
+ 159,
+ 160,
+ 161,
+ 162,
+ 163
],
"schema_version": "ocr-toolkit.release-authorization/v1",
- "version": "0.8.6"
+ "version": "0.8.7"
}
diff --git a/.release-source-date-epoch b/.release-source-date-epoch
index dea0a93..37077ca 100644
--- a/.release-source-date-epoch
+++ b/.release-source-date-epoch
@@ -1 +1 @@
-1787913471
+1788255290
diff --git a/.release-version b/.release-version
index 7fc2521..1e9b46b 100644
--- a/.release-version
+++ b/.release-version
@@ -1 +1 @@
-0.8.6
+0.8.7
diff --git a/CHANGELOG.md b/CHANGELOG.md
index dae3760..395dbaa 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,35 @@
+## 0.8.7 - 2026-09-01
+
+### 🚀 Features
+
+- Add two fixed read-only built-in MCP tools for bounded literal evidence search and exact scoped coverage checks. OCR now receives concise summary/list/search/get/coverage routing, while action receipt v2 and toolkit receipt v6 reconcile all five actions to OCR's per-tool counts. Search applies the same public delta-kind semantics as list, rejects compatibility-normalized operators, and authoritative absence requires an exact component/path scope with no evidence-store admission limit, ambiguous or oversized omission, or incomplete semantic comparison. Evidence admission performs one live secret-value scan per scalar instead of repeating the same scan within a redaction pass. Only non-zero numeric counts may reach GitLab; queries, scopes, matched values, IDs, and results remain private, and incomplete coverage can never prove absence or authorize automatic approval. ([#160](https://github.com/xeonvs/open-code-review-toolkit/issues/160))
+- Add protected review-context policy v3 for bounded same-revision CI outcomes. Operators may map exact GitLab job names to protected path prefixes; the toolkit twice reads exact-head pipeline/job metadata, ignores unrelated jobs, treats provider response ordering as non-semantic, selects the unambiguously newest requested retry, and exposes only closed status, required/advisory classification, current-or-same-revision provenance, scope, and completion time through the existing private context MCP. Hostile persisted scopes are revalidated against the protected repository-relative path grammar, and optional record rejection does not become required-source degradation. Logs, artifacts, URLs, provider IDs, identities, variables, and raw payloads remain private and unpersisted. CI outcomes provide review context only: they cannot suppress findings, prove unrelated absence, change severity/lifecycle, or authorize approval. Policies v1/v2 remain valid without `ci_outcomes`. ([#161](https://github.com/xeonvs/open-code-review-toolkit/issues/161))
+
+### 🐛 Bug Fixes
+
+- Prevent incomplete base/head evidence admission from manufacturing dependency deltas. Once admission for a fact kind is incomplete, all semantic deltas for that kind are omitted with an explicit diagnostic because the missing value cannot be attributed safely to one identity. ([#159](https://github.com/xeonvs/open-code-review-toolkit/issues/159))
+- Keep OCR review-filter survivors unverified across multiple review rounds. The mandatory evidence guidance now requires every prior claim to be checked again against current code, tests, and trusted evidence without changing finding, DLP, receipt, or approval schemas. ([#162](https://github.com/xeonvs/open-code-review-toolkit/issues/162))
+
+### 🛠 Maintenance
+
+- Target checksum-verified Open Code Review 1.11.1 as the sole supported runtime for toolkit 0.8.7.
+
+ Changed: small change sets use OCR-owned local grouping below four files, while threshold-crossing changes retain semantic grouping; project `rule.json` file references are confined to the canonical repository root; selected session files follow manifest coverage.
+
+ Unchanged: result and manifest schemas, inherited completion cap `16384`, explicit positive completion-cap transport, default `medium` effort, effective max-tools, private reasoning/session data, DLP, receipts, telemetry ownership, and approval authority.
+
+ Deployment: install OCR 1.11.1 directly and verify the platform checksum from the compatibility manifest; OCR 1.11.0 is historical comparison evidence, not a runtime fallback. ([#158](https://github.com/xeonvs/open-code-review-toolkit/issues/158))
+- Update the pinned CI, CodeQL, TestPyPI, release, and build-provenance actions used by protected workflows. ([#165](https://github.com/xeonvs/open-code-review-toolkit/issues/165))
+
+### 📖 Documentation
+
+- Add dynamic stable PyPI version, supported-Python, and Apache-2.0 license badges to the root README. The badges derive product metadata from the supported distribution instead of a hardcoded release or the development-only TestPyPI index. ([#157](https://github.com/xeonvs/open-code-review-toolkit/issues/157))
+
+### 🧩 Rules
+
+- Review Pug (`.pug`), Verilog/SystemVerilog (`.v`, `.vh`, `.sv`), and VHDL (`.vhd`, `.vhdl`) through the built-in OCR 1.11.1 allowlist and language-specific Rules. The upstream allowlist does not include `.svh`. ([#158](https://github.com/xeonvs/open-code-review-toolkit/issues/158))
+
+
## 0.8.6 - 2026-08-28
### 🐛 Bug Fixes
diff --git a/PLANS.md b/PLANS.md
index 9edded1..6d4abc7 100644
--- a/PLANS.md
+++ b/PLANS.md
@@ -6,390 +6,4 @@ before handoff or commit. Completed stable plans are indexed in
## Active Work
-### Toolkit 0.8.7 — OCR 1.11.1, evidence integrity, and efficient built-in MCP
-
-- **Status:** active
-- **Plan Origin:** plan_mode_approved
-- **Release classification:** release-required
-- **Target stable version:** 0.8.7
-- **Branch:** `codex/v0.8.7-ocr-1.11.1-evidence-trust`
-- **Delivery boundary:** published stable toolkit 0.8.7 with independently verified registry,
- provenance, attestation, immutable Release, issue, milestone, and synchronized-main receipts.
-
-#### Goal
-
-Qualify and adopt exact OCR 1.11.1, repair evidence comparison integrity, prevent OCR
-multi-round wording from becoming toolkit validation, make admitted evidence efficiently
-searchable with an explicit completeness check, admit protected same-revision GitLab CI
-outcomes as provider-neutral context, and complete the related documentation work without
-weakening DLP, privacy, approval, or immutable-ref boundaries.
-
-#### Requested Scope
-
-- Restore OCR 1.11.1 qualification through #163 and complete dependency tracker #158.
-- Fix #159 so bounded base/head admission cannot synthesize dependency deltas.
-- Fix #162 so repeated OCR findings remain unverified reports unless current evidence proves
- them; preserve the default `medium` effort and private reasoning/session boundary.
-- Implement #160 as two dedicated built-in MCP tools: bounded search and authoritative
- coverage evaluation, with a model-facing routing contract.
-- Implement #161 using protected-target context-policy v3 and provider-neutral same-revision
- CI evidence.
-- Complete #157 with stable PyPI, supported-Python, and license badges.
-- Reconcile backlog, public contracts, test-evidence ownership, changelog, Draft PR, issue
- checklists, and milestone state.
-- Incorporate merged maintenance PR #165 from protected `main` before final qualification so
- the reviewed tree uses the updated CI, CodeQL, TestPyPI, release, and provenance actions.
-- Run one configured semantic qualification of the new MCP/context contracts and one final
- repository review with project rules; remediate validated findings before the final push.
-- Use the owner-authorized second complete review to re-check the corrected built-in evidence
- MCP as one coherent product slice: runtime schemas and routing, user documentation, changelog,
- and regression examples. Record selected/completed coverage and reconciled MCP use privately.
-- Merge the protected feature and release pull requests, publish stable 0.8.7, independently
- read back every external artifact, close tracking, and clean task-owned scratch state.
-
-#### Requirement Traceability
-
-| Requirement | Outcome | Work queue | Acceptance evidence |
-| --- | --- | --- | --- |
-| REQ-001 | OCR 1.11.1 qualification separates budget, threshold-crossing, and below-threshold grouping behavior | WQ-02, WQ-03 | hosted compatibility artifact, strict fixture tests |
-| REQ-002 | Runtime accepts only exact OCR 1.11.1 and records verified hashes plus semantic audit | WQ-05 | manifest/evidence validation, preflight/docs tests, isolated local binary checks |
-| REQ-003 | Base/head truncation cannot create synthetic add/remove deltas | WQ-04 | oversized unchanged Go and second lock fixture, add/delete/change and hostile-readback tests |
-| REQ-004 | Multi-round survivor wording cannot become toolkit confirmation | WQ-05 | two-round controlled peer, public unverified status, approval/privacy tests |
-| REQ-005 | OCR can efficiently discover admitted facts without arbitrary repository search | WQ-06 | `ocr_toolkit_evidence_search` schema, routing and installed-artifact tests |
-| REQ-006 | OCR can distinguish authoritative absence from unknown scope | WQ-06 | `ocr_toolkit_evidence_coverage` joins, no-match and partial-coverage tests |
-| REQ-007 | OCR receives deterministic, efficient instructions for summary/list/get/search/coverage/context tools | WQ-06 | tool descriptions, bootstrap decision table, controlled call-sequence qualification |
-| REQ-008 | New tools have exact count-only receipt and GitLab-summary attribution without content leakage | WQ-06 | receipt v6, action receipt v2, reconciliation/DLP/approval tests |
-| REQ-009 | Protected same-revision GitLab CI outcomes become bounded provider-neutral evidence only | WQ-07 | policy v3, stable API snapshot, store/MCP and negative provider tests |
-| REQ-010 | Public docs, badges, backlog, roadmap, strategy, and changelog describe added, changed, removed, and unchanged contracts | WQ-08 | documentation contracts and Towncrier draft |
-| REQ-011 | Final feature head includes protected-main PR #165 and passes configured semantic qualification plus project-rule OCR review | WQ-09, WQ-10 | exact base/head receipts, complete manifests, remediation and self-review |
-| REQ-012 | Stable 0.8.7 is published and independently reconciled across every release surface | WQ-11, WQ-12 | feature/release PR receipts, registry bytes, provenance, attestations, tag, Release, installs, issue and milestone closure |
-
-#### Explicit Non-Goals
-
-- No support or runtime fallback for OCR 1.11.0 or older releases.
-- No automatic cap, tool choice, model, or protocol inference from provider metadata.
-- No arbitrary repository grep, model-loop network, second evidence/context store, second OCR
- pass, or new DDL/testcontainer parser for evidence search.
-- No CI log, artifact, job URL, runner, user, raw identifier, provider payload, reasoning,
- prompt, tool arguments, or tool results in public output or receipts.
-- No approval, suppression, lifecycle, or severity authority from remediation text, search
- results, coverage hints, CI outcomes, OCR survivor wording, or tool-call counts.
-- No downstream consumer or shared-template integration.
-- No public retention of sensitive external-system data, model-session data, private fixtures,
- credentials, or local environment details.
-
-#### Constraints
-
-- Preserve Python 3.12–3.14 and standard-library-only runtime code.
-- Fixtures and public material remain private-safe. All untrusted values are bounded before
- normalization, persistence, search indexing, MCP response, and publication.
-- Provider-specific acquisition remains at the GitLab edge; evidence/store/MCP/receipt and
- approval layers remain provider-neutral.
-- Existing context policy v1/v2 remain valid without CI outcomes. This policy compatibility is
- separate from exact OCR runtime compatibility.
-- The only mandatory model-time evidence call remains one successful summary. Search and
- coverage are conditional and must not create needless calls for small reviews.
-- Every Python slice runs formatter before self-review and passes repository-wide format check.
-- New runtime functions/classes and new tests receive purpose-focused docstrings.
-
-#### Inputs And Sources
-
-- Approved conversation plan and subsequent delivery reset: protected policy v3; include #157;
- add dedicated search and coverage MCP tools; preserve efficient OCR routing; complete stable
- delivery after configured exact-head validation.
-- GitHub issues #157–#163 and OCR dependency tracker #158.
-- OCR v1.11.1 release/source diff and compatibility workflow run `33391721404`.
-- OCR v1.11.1 pins: Linux amd64
- `1cdc7d1f776f1cdb69850130b930e40f64accc86ecaf09600573b3600456322f`, Darwin arm64
- `5fdf72e51aae021ac7bf43d7b9dcb160f04880f623c66e8ada5e6ae5a92e172c`, checksum file
- `8760d31184c12f947c182fcb00114730707892524ddf1beac78fc415cb61b37b`.
-- Canonical owners: `docs/engineering/project_principles.md`, `docs/development.md`,
- `docs/release.md`, `docs/configuration.md`, `docs/gitlab.md`, `docs/operations.md`,
- `docs/review-context.md`, `docs/security.md`, and `docs/codex/TASKS_BACKLOG.md`.
-
-#### User Decisions And Answers
-
-- Delivery continues from a green Draft through configured exact-head qualification and the
- complete protected stable-release lifecycle.
-- CI outcome authority is owned only by protected-target policy v3.
-- Documentation issue #157 is part of v0.8.7.
-- Built-in MCP gains two separate tools rather than another union action.
-- OCR must receive explicit routing guidance and qualification proving correct and efficient
- use; optional tools are not forced on every review.
-- Current GitLab technical-summary format stays stable and emits only non-zero tool names.
-- Full delivery includes publication, independent external readback, Actions-owned issue
- receipts, milestone closure, synchronized `main`, and cleanup; merge or green CI is not final.
-- Final repository OCR review uses project rules, `medium` effort, concurrency two, OCR-owned
- completion limits, and max-tools sentinel zero. Confirmed findings are fixed before push and
- followed by deterministic validation plus a complete self-review.
-- If a newer stable OCR appears before the final repository review, qualify and adopt it as the
- sole runtime when compatible. Freeze the qualified OCR version once that review begins.
-
-#### Completed Baseline State
-
-- Protected `main` contains released v0.8.6 plus verified maintenance squash #165 at
- `4fd4eda3fb10ff3ae7c40b099ab791ba4797c134`; its development publication and Scorecard pass.
- `.next-version` selects 0.8.7.
-- Existing evidence store v4 exposes one built-in MCP with summary/list/get; context uses fixed
- context_list/context_get; receipt v5 reconciles count-only evidence usage.
-- OCR 1.11.1 is the exact target runtime; the PATH-effective local binary still requires an
- atomic checksum-verified update before configured qualification.
-- Workflow audit with engineering-workflow 0.9.0 found canonical files and navigation indexes;
- no target workflow migration is required.
-- OCR v1.11.1 assets verify, while current qualification fails because its probes assume
- pre-1.11.1 small-change grouping behavior.
-
-#### Current Work Queue
-
-| Queue | Status | Work |
-| --- | --- | --- |
-| WQ-01 | done | Materialize plan, create milestone/issue relationships, planning commit, and fidelity check |
-| WQ-02 | done | #163 harness committed; initial push and Draft PR #164 created |
-| WQ-03 | done | Hosted run 33400677367 accepted exact OCR 1.11.1 structural evidence |
-| WQ-04 | done | #159 suppresses unsafe deltas when either side was not admitted while preserving comparable pairs |
-| WQ-05 | done | #162 guidance, exact OCR 1.11.1 pins/rules/evidence, and local binary are complete |
-| WQ-06 | done | Implement #160 search/coverage tools, OCR routing, action receipt v2, and toolkit receipt v6 |
-| WQ-07 | done | Implement #161 protected policy v3 and same-revision GitLab CI evidence |
-| WQ-08 | done | Implement #157, public docs, backlog/strategy/roadmap, changelog, and final plan truth |
-| WQ-09 | done | Merge protected `main` #165 into the Draft branch, update maintenance notes, and revalidate the combined tree |
-| WQ-10 | done | Reconcile all three project-rule OCR reviews, close repeated findings, and prove the complete legacy/new built-in MCP route through one bounded controlled OCR qualification before push |
-| WQ-11 | in_progress | Push the final feature head, reconcile hosted checks, merge #164, and verify its development publication |
-| WQ-12 | pending | Prepare and merge `Release v0.8.7`, publish stable artifacts, independently read back every release surface, close tracking, and clean scratch state |
-
-#### Locked Decisions
-
-- Search tool: NFKC/casefold query of 1–128 characters and at most eight tokens; no regex,
- wildcard, operators, controls, bidi/format characters, or broad empty search. Search only
- DLP-admitted source paths, identities, and per-kind allowlisted scalar values.
-- Coverage tool: exact kind/ref supports broad discovery, while authoritative absence also
- requires exact component/path. Missing mappings, broad or incomplete scope, and admission
- truncation yield unknown; `absence_authoritative` requires complete scope and zero matches.
-- Routing: summary once, list for known kinds/deltas, search for unknown location/identity, get
- selected records, coverage only before a negative claim, context_list before context_get,
- and stop when evidence is sufficient. No forced `tool_choice`.
-- Receipt v6 replaces v5 for current results. Private action receipt v2 counts exactly
- summary/list/get/search/coverage; exact OCR by-tool/capability/server reconciliation is
- required. Only closed numeric counts may reach Technical details.
-- CI policy v3 uses `required` default false, `max_age_seconds` default 86400 with range
- 60–604800, unique exact check names, and normalized protected path prefixes.
-- OCR survivor state is an unverified report. Toolkit guidance mitigates but does not claim to
- rewrite upstream prompt semantics.
-
-#### Verification
-
-- Focused grouping, compatibility, evidence comparison/store/readback, MCP/routing, receipt,
- posting/approval/DLP, context-policy/provider, installed-artifact, documentation, and
- changelog tests as mapped to each queue item.
-- Local no-LLM OCR 1.11.1 version/help, rules, confinement, and grouping/background previews in
- an isolated temporary HOME after checksum verification.
-- Before each commit: `scripts/quality.sh format` for Python changes,
- `uv run --frozen ruff format --check .`, focused tests, full slice diff/trust review, and
- `git diff --check`.
-- Once on final local head: `scripts/quality.sh check`, scoped coverage floors,
- `PYTHONPATH=src python scripts/ocr_compat.py validate`, lock/manifest checks, Towncrier draft,
- `scripts/gitleaks.sh`, and `git diff --check`.
-- Hosted PR workflows own OS/Python matrix, packages, dependencies, Security, and CodeQL.
-- External configured qualification owns real OCR 1.11.1 LLM behavior, multi-round correction,
- search/get and no-match/coverage routing, same-revision CI evidence, and leakage audit.
-- Final repository OCR review owns the complete `v0.8.6..feature-head` diff with
- `examples/gitlab/rules.json`; it runs only after the protected-main merge and latest-stable OCR
- check. Full output remains ignored and owner-only.
-- Stable closure requires byte equality across workflow artifact, TestPyPI, PyPI, and immutable
- GitHub Release; PEP 740 provenance; GitHub attestations; annotated tag target; receipt
- validation; Python 3.12-3.14 wheel/sdist installs; Actions-owned issue receipts; closed
- milestone; and clean `main == origin/main == v0.8.7^{}`.
-
-#### Latest Validation Results
-
-- 2026-08-31: clean branch created from remote `main` at
- `d98763fc1cb3c14079a4b79911be57c63c7f767b`.
-- 2026-08-31: engineering-workflow 0.9.0 audit found all canonical workflow files and required
- navigation indexes; ignored `.quality-logs` were audit noise only.
-- 2026-08-31: milestone `v0.8.7` created; #157–#163 assigned to `xeonvs`; dependency and
- production-slice boundaries recorded on #158, #160, and #161.
-- 2026-08-31: `tests/test_ocr_compat.py` passed with 88 tests after repository formatting;
- `git diff --check` passed.
-- 2026-08-31: checksum-verified temporary OCR 1.11.1 passed the full local no-LLM contract
- probe. Evidence separates local single-file, bundle-all, and high-churn per-file grouping
- from the four-file semantic grouping request; it also records two medium review rounds,
- filter-survivor wording, partial budget coverage 2/3, completion cap, and max-tools behavior.
-- 2026-08-31: Draft PR #164 opened from the two reviewed initial commits. Hosted compatibility
- run `33400677367` passed on exact commit `ffe1233242eb1c102b1cf34306d0c106bad60806`;
- candidate #158 now records schema-v3 compatible evidence and a human-review-required semantic
- audit classification.
-- 2026-08-31: #159 focused evidence/store/MCP suite passed with 197 tests. Generated Go and
- Composer lock fixtures prove byte-identical over-limit inputs publish no semantic delta;
- bounded one-sided and ordinary version changes remain available.
-- 2026-08-31: exact local OCR 1.11.1 passed the extended no-LLM contract. Small-change and
- semantic grouping remain distinct; the mandatory re-check marker reached all three main
- requests; Pug, `.v`, `.vh`, `.sv`, `.vhd`, and `.vhdl` were selected with system rules while
- unqualified `.svh` remained excluded. The focused compatibility/runtime/docs suite passed
- with 291 tests and 104 subtests.
-- 2026-08-31: #160 adds separate fixed literal-search and exact-coverage tools over the existing
- DLP-admitted store. Action receipt v2 and toolkit receipt v6 reconcile every tool separately;
- incomplete coverage cannot prove absence or support approval, and only non-zero reconciled
- counts reach Technical details. Ruff format/check, `git diff --check`, and the focused boundary,
- installed-artifact, documentation, receipt, publication, and approval suite passed with 621
- tests and 350 subtests. Self-review also corrected two current-contract references from receipt
- v5 to v6 without rewriting historical compatibility records.
-- 2026-08-31: #161 adds protected policy v3, a bounded twice-read GitLab pipeline/job adapter,
- and one immutable provider-neutral `ci_outcome` projection through the existing store and MCP.
- Exact-head and protected path scope are mandatory; pagination, stale checks, duplicate retries,
- mutation, DLP mismatch, hostile persistence, and replay fail closed. Only count hints enter the
- bootstrap, while raw provider identities/payloads and CI status stay outside receipts, public
- summaries, and approval authority. Ruff format/check, `git diff --check`, and the focused
- policy/provider/store/MCP/review/publication suite passed with 350 tests and 83 subtests.
-- 2026-08-31: #157 adds dynamic stable PyPI version, supported-Python, and Apache-2.0
- product badges ahead of the unchanged supply-chain/CI badges. Live Shields readback reported
- stable `v0.8.6`, Python `3.12 | 3.13 | 3.14`, and Apache-2.0; no TestPyPI or duplicate GitHub
- version badge was added. Current strategy, roadmap, M5 evidence matrix, and conditional
- forge/fuzzing backlog now include the policy-v3 CI-outcome boundary without rewriting release
- history or marking those future backlog items complete. Documentation tests passed 56 tests;
- Towncrier draft renders every v0.8.7 category once without duplicate issue links.
-- 2026-08-31: the first exact-head quality run reached 86.18% combined coverage and exposed one
- stale cross-provider assertion that still expected the pre-#159 one-sided-delta diagnostic in
- the compact bootstrap. Production behavior and budgets were unchanged; the test continues to
- prove actual framework/template deltas, summary counts, MCP list/get projection, and bootstrap
- routing without requiring a removed diagnostic. Its focused owner suite passed 41 tests.
-- 2026-08-31: the corrected exact-head local gate passed 1,367 tests plus 366 subtests at 86.18%
- combined branch coverage; the four risk groups passed at 85%, 82%, 86%, and 87%. Ruff format
- and lint, strict MyPy, Bandit, lock, OCR manifest/evidence, rendered Towncrier, and
- `git diff --check` passed. Repository-pinned Gitleaks 8.24.3 passed the complete first-parent
- branch history from `origin/main`; its official Darwin arm64 archive verified SHA-256
- `b90f13bb8c90ab72083d9b0c842e39dafb82c0e5c3f872f407366b7a58909013`, the temporary files
- were removed, and the global 8.30.1 installation was not changed.
-- 2026-08-31: engineering-workflow 0.9.0 plan lifecycle check passed. Its value-free public-tree
- privacy scanner reported 339 established baseline matches and 346 on the final tree; the seven
- added match counts are limited to controlled OCR qualification probes, the new GitLab token
- parser owner, and explicit DLP/evidence test owners. No new hard-category appeared. This
- repository-owned synthetic/false-positive provenance agrees with the clean redacted Gitleaks
- history scan; no candidate value was opened or copied into the review.
-- 2026-09-01: protected-main PR #165 was squash-merged as verified commit `4fd4eda`; its seven
- workflow-only pin changes have no path overlap or merge conflict with #164. Development run
- 33482577560 and Scorecard run 33482577475 completed successfully on that exact commit.
-- 2026-09-01: signed local merge `0ca7b93` incorporates exact protected-main #165 into the Draft
- branch. The combined tree passes the complete local gate with 1,367 tests plus 366 subtests at
- 86.18% branch coverage and risk groups at 85%, 82%, 86%, and 87%; manifest validation,
- Towncrier rendering, Gitleaks, and diff hygiene also pass. Checksum-verified OCR 1.11.1 is now
- PATH-effective, and its configured LLM connectivity test passes. Current compatibility wording
- preserves only explicit positive completion-cap transport: the toolkit default remains unset
- and no provider-specific cap is recommended.
-- 2026-09-01: the one owner-authorized final repository review used OCR 1.11.1 through the
- production wrapper with project rules, `medium` effort, concurrency `2`, OCR-owned completion
- limits, and context mode `off`. It completed all 29 selected files with no failed, reused, or
- waived work; cleanup, publication DLP, receipt v6, and all 139 attributed tool calls reconciled.
- Nine candidates were statically re-checked. Confirmed compatibility-evidence, optional-CI,
- retry-selection, hostile-scope, evidence-search, and authoritative-coverage defects were fixed
- with focused regressions. The corrected tree passes 1,377 tests plus 366 subtests at 86.24%
- branch coverage; risk groups pass at 85%, 82%, 86%, and 87%, with Ruff, strict MyPy, Bandit,
- OCR manifest validation, Towncrier, Gitleaks, and diff/privacy hygiene also green. The owner
- subsequently authorized one second complete project-rule review on the committed corrected
- head, with explicit attention to the updated built-in evidence MCP code and user material;
- no separate enriched-context qualification is claimed.
-- 2026-09-01: the second owner-authorized repository review completed the same immutable 29-file
- range with no failed, reused, or waived work. Its bootstrap advertised the primary evidence,
- search, and coverage tools; OCR recorded eight primary-tool calls and one search-tool call.
- It did not call coverage, and the private completed-action receipt did not reconcile to the
- OCR by-tool attempt counts, so action attribution correctly remained unavailable. The run
- therefore proves real primary/search MCP reachability but does not prove summary/list/get or
- coverage routing and cannot close REQ-007/REQ-008 by itself. Its nine candidates repeat the
- first run's review surfaces. Current-code revalidation confirmed seven boundary defects in CI
- outcome typing, hostile Unicode handling, incomplete-kind deltas and coverage, mandatory-summary
- enforcement, action-summary rendering, and CI outcome DLP inputs. The fixes and expanded negative
- regressions pass 1,382 tests plus 367 subtests at 86.25% branch coverage; risk groups pass at
- 85%, 82%, 86%, and 87%, with Ruff, strict MyPy, manifest validation, Towncrier, Gitleaks, and
- diff hygiene green. Self-review additionally removed schema-owned CI enums from forbidden-value
- matching and reconciled the affected changelog contracts.
-- 2026-09-01: the third owner-authorized OCR 1.11.1 review completed all 29 selected files on
- signed head `66bc208` with no failed, reused, waived, publication, cleanup, or warning state.
- Its four candidates were revalidated against the current implementation: provider-order-sensitive
- GitLab CI mutation hashing and compatibility-normalized search operators were confirmed and fixed;
- the context-contract exception and unused evidence-receipt claims were rejected because the former
- is already caught through `ValueError` and the latter is returned as `evidence.used`. Reversed
- pipeline/job order and fullwidth operator regressions pass in a 305-test, 8-subtest focused suite.
- Production-composed stdio MCP profiling found repeated live environment scans inside one evidence
- redaction pass. Removing only that duplicate call, without caching secrets or changing their live
- lifecycle, reduced three unprofiled synthetic runs to 1.51-1.63 seconds from the prior 1.95-second
- baseline while preserving the 2,244-character bootstrap and private, read-only, clean-repository
- assertions. A regression now locks one complete redaction pass per string leaf. The review used
- the mandatory summary action but did not exercise all five routes, so the controlled exact-OCR
- qualification and final full gate remain required before push.
-- 2026-09-01: the bounded controlled OCR 1.11.1 qualification completed its one selected file
- without findings, warnings, failed, reused, or waived work. The actual model selected every
- documented built-in evidence route exactly once: summary, list, get, literal search, and scoped
- coverage. The primary action subtotal of three reconciles exactly to three
- `ocr_toolkit_evidence` calls, while search and coverage each reconcile exactly to their one
- dedicated OCR by-tool call. Receipt v6, publication DLP, and cleanup passed; context mode stayed
- off, so this proves the complete legacy/new evidence MCP route without claiming enriched context.
-
-#### Risks And Recovery
-
-- If hosted OCR qualification still fails, do not promote OCR pins; update #158 with the closed
- failed subprobe/counts and keep WQ-03 blocked.
-- If pair-aware comparison cannot prove source completeness, degrade to unknown rather than
- emit a one-sided delta.
-- If search cannot map a value safely, omit it from the index. If coverage applicability is
- ambiguous, return unknown and prohibit an absence claim.
-- If MCP counts do not reconcile, receipt v6 is invalid and auto-approval remains blocked;
- never coerce a new tool into a legacy action count.
-- If GitLab CI snapshot mutates, paginates beyond bounds, or has ambiguous retries, admit no
- trusted outcome and apply required/optional degradation policy.
-- If local OCR replacement validation fails, restore the verified previous binary and keep the
- runtime pin work blocked; never modify OCR config, credentials, or user HOME.
-- Evidence-backed CI fixes use a new logical commit after the same focused tests and review.
-
-#### Resume Point
-
-Finalize the signed plan truth, repeat the bounded five-action qualification on that immutable
-plan-only head, then push the exact feature head to Draft PR #164. Reconcile hosted checks and
-threads before Ready and merge; verify its development publication before preparing the separate
-stable release PR.
-
-#### Plan Fidelity Check
-
-- [x] Every approved outcome has a stable requirement ID and queue owner.
-- [x] Stable-release boundary, exact OCR target, checksums, and external qualification are explicit.
-- [x] Data-flow, DLP, provider-neutral ownership, approval, and failure semantics are explicit.
-- [x] Rejected alternatives and non-goals prevent compatibility fallbacks and extra infrastructure.
-- [x] Validation maps production owners, installed boundaries, hosted ownership, and local limits.
-- [x] Resume point names the first safe unfinished action.
-
-#### Reconciliation Check
-
-- [x] Live `main`, released v0.8.6, `.next-version`, open issues, local OCR, and workflow owners
- were inspected before implementation.
-- [x] No pre-existing user changes are present in the worktree.
-- [x] Milestone and issue relationships agree with this plan.
-- [x] Draft PR, protected-main #165, and compatibility artifact agree with this plan.
-- [x] Final implementation, docs, changelog, backlog, and local tests agree.
-- [x] Local exact-OCR qualification, compatibility artifact, implementation, and plan agree.
-- [ ] Remote Draft head and hosted checks agree.
-
-#### Closure Gate
-
-- [ ] All REQ and WQ items are done or explicitly out of scope.
-- [ ] Final local and hosted checks are current for the exact Draft head.
-- [ ] Feature and release PR exact heads pass their owned checks and have no unresolved threads.
-- [x] All three owner-authorized project-rule reviews completed; their confirmed findings were
- remediated and revalidated, and the current implementation passed the separate five-action
- controlled receipt. No enriched-context qualification is claimed.
-- [ ] Stable publication and independent readback satisfy every external closure invariant.
-- [ ] #157-#163 and any added release tracker are closed by Actions receipts; milestone is closed.
-- [ ] Task-owned scratch state is removed and local/remote `main` equals the peeled stable tag.
-
-#### Stable Delivery
-
-The feature PR becomes Ready only after the combined exact head passes project-rule review,
-remediation, self-review, and hosted checks. Its verified squash merge is
-followed by development publication readback and a separate protected `Release v0.8.7` PR. The
-release merge authorizes stable publication; independent registry/Release/provenance/install and
-tracking readback completes delivery without another repository PR.
-
-#### Handoff Notes
-
-- Do not repeat local development or qualify OCR 1.11.0 as a supported runtime.
-- OCR v1.11.0 may appear only as historical comparison evidence.
-- Do not publish external qualification prompts, reasoning, tool arguments/results, provider
- bodies, session files, credentials, or private fixture content.
-- Keep #157-#163 and milestone `v0.8.7` open until the protected stable workflow records its
- Actions-owned receipts. PR #165 is included maintenance history, not a release-closure issue.
+No active or blocked repository work.
diff --git a/changelog.d/157.doc.md b/changelog.d/157.doc.md
deleted file mode 100644
index decd865..0000000
--- a/changelog.d/157.doc.md
+++ /dev/null
@@ -1 +0,0 @@
-Add dynamic stable PyPI version, supported-Python, and Apache-2.0 license badges to the root README. The badges derive product metadata from the supported distribution instead of a hardcoded release or the development-only TestPyPI index.
diff --git a/changelog.d/158.maintenance.md b/changelog.d/158.maintenance.md
deleted file mode 100644
index c8833a9..0000000
--- a/changelog.d/158.maintenance.md
+++ /dev/null
@@ -1,7 +0,0 @@
-Target checksum-verified Open Code Review 1.11.1 as the sole supported runtime for toolkit 0.8.7.
-
-Changed: small change sets use OCR-owned local grouping below four files, while threshold-crossing changes retain semantic grouping; project `rule.json` file references are confined to the canonical repository root; selected session files follow manifest coverage.
-
-Unchanged: result and manifest schemas, inherited completion cap `16384`, explicit positive completion-cap transport, default `medium` effort, effective max-tools, private reasoning/session data, DLP, receipts, telemetry ownership, and approval authority.
-
-Deployment: install OCR 1.11.1 directly and verify the platform checksum from the compatibility manifest; OCR 1.11.0 is historical comparison evidence, not a runtime fallback.
diff --git a/changelog.d/158.rules.md b/changelog.d/158.rules.md
deleted file mode 100644
index 80b722b..0000000
--- a/changelog.d/158.rules.md
+++ /dev/null
@@ -1 +0,0 @@
-Review Pug (`.pug`), Verilog/SystemVerilog (`.v`, `.vh`, `.sv`), and VHDL (`.vhd`, `.vhdl`) through the built-in OCR 1.11.1 allowlist and language-specific Rules. The upstream allowlist does not include `.svh`.
diff --git a/changelog.d/159.bugfix.md b/changelog.d/159.bugfix.md
deleted file mode 100644
index 17f63d4..0000000
--- a/changelog.d/159.bugfix.md
+++ /dev/null
@@ -1 +0,0 @@
-Prevent incomplete base/head evidence admission from manufacturing dependency deltas. Once admission for a fact kind is incomplete, all semantic deltas for that kind are omitted with an explicit diagnostic because the missing value cannot be attributed safely to one identity.
diff --git a/changelog.d/160.feature.md b/changelog.d/160.feature.md
deleted file mode 100644
index 3e5c3e6..0000000
--- a/changelog.d/160.feature.md
+++ /dev/null
@@ -1 +0,0 @@
-Add two fixed read-only built-in MCP tools for bounded literal evidence search and exact scoped coverage checks. OCR now receives concise summary/list/search/get/coverage routing, while action receipt v2 and toolkit receipt v6 reconcile all five actions to OCR's per-tool counts. Search applies the same public delta-kind semantics as list, rejects compatibility-normalized operators, and authoritative absence requires an exact component/path scope with no evidence-store admission limit, ambiguous or oversized omission, or incomplete semantic comparison. Evidence admission performs one live secret-value scan per scalar instead of repeating the same scan within a redaction pass. Only non-zero numeric counts may reach GitLab; queries, scopes, matched values, IDs, and results remain private, and incomplete coverage can never prove absence or authorize automatic approval.
diff --git a/changelog.d/161.feature.md b/changelog.d/161.feature.md
deleted file mode 100644
index dd9b6e4..0000000
--- a/changelog.d/161.feature.md
+++ /dev/null
@@ -1 +0,0 @@
-Add protected review-context policy v3 for bounded same-revision CI outcomes. Operators may map exact GitLab job names to protected path prefixes; the toolkit twice reads exact-head pipeline/job metadata, ignores unrelated jobs, treats provider response ordering as non-semantic, selects the unambiguously newest requested retry, and exposes only closed status, required/advisory classification, current-or-same-revision provenance, scope, and completion time through the existing private context MCP. Hostile persisted scopes are revalidated against the protected repository-relative path grammar, and optional record rejection does not become required-source degradation. Logs, artifacts, URLs, provider IDs, identities, variables, and raw payloads remain private and unpersisted. CI outcomes provide review context only: they cannot suppress findings, prove unrelated absence, change severity/lifecycle, or authorize approval. Policies v1/v2 remain valid without `ci_outcomes`.
diff --git a/changelog.d/162.bugfix.md b/changelog.d/162.bugfix.md
deleted file mode 100644
index 42f2845..0000000
--- a/changelog.d/162.bugfix.md
+++ /dev/null
@@ -1 +0,0 @@
-Keep OCR review-filter survivors unverified across multiple review rounds. The mandatory evidence guidance now requires every prior claim to be checked again against current code, tests, and trusted evidence without changing finding, DLP, receipt, or approval schemas.
diff --git a/changelog.d/165.maintenance.md b/changelog.d/165.maintenance.md
deleted file mode 100644
index 41c7921..0000000
--- a/changelog.d/165.maintenance.md
+++ /dev/null
@@ -1 +0,0 @@
-Update the pinned CI, CodeQL, TestPyPI, release, and build-provenance actions used by protected workflows.
diff --git a/docs/configuration.md b/docs/configuration.md
index f2255e1..16a8fb6 100644
--- a/docs/configuration.md
+++ b/docs/configuration.md
@@ -96,7 +96,7 @@ These names belong to `examples/gitlab/ocr-review.gitlab-ci.yml`; they are shell
| --- | --- | --- | --- | --- |
| **`OCR_VERSION`** | Example pipeline | Yes | `v1.11.1` | Checksum-pinned recommended OCR binary release for toolkit 0.8.7. |
| **`OCR_SHA256`** | Example pipeline | Yes | `1cdc7d1f776f1cdb69850130b930e40f64accc86ecaf09600573b3600456322f` | Expected Linux AMD64 OCR binary digest. |
-| **`OCR_TOOLKIT_VERSION`** | Example pipeline | Yes | `0.8.6` | Exact toolkit wheel release installed by the current published example. |
+| **`OCR_TOOLKIT_VERSION`** | Example pipeline | Yes | `0.8.7` | 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 f98b59f..3a0edbc 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.7` | [OCR 1.11.1, evidence integrity, and efficient built-in MCP](releases.md#plan-toolkit-0-8-7) | Evidence comparison integrity, bounded search and exact coverage tools, protected same-revision CI outcomes, OCR 1.11.1 qualification, three complete local reviews, controlled five-action MCP qualification, feature merge, development artifact verification, and stable-delivery handoff. |
| `v0.8.6` | [OCR 1.11.0 and precise security signals](releases.md#plan-toolkit-0-8-6) | Contextual injection classification, provider-private OCR-state containment, OCR 1.11.0 qualification and Rules, one complete local semantic review with remediation, feature merge, development artifact verification, and stable-delivery handoff. |
| `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. |
diff --git a/docs/engineering/execution_history/releases.md b/docs/engineering/execution_history/releases.md
index dc74b30..b6ca3c2 100644
--- a/docs/engineering/execution_history/releases.md
+++ b/docs/engineering/execution_history/releases.md
@@ -2,6 +2,85 @@
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.7 — OCR 1.11.1, evidence integrity, and efficient built-in MCP
+
+Status: repository complete; external stable delivery pending
+Release classification: `release-required`
+Target stable version: `0.8.7`
+Repository completion date: 2026-09-01
+
+### Goal and delivered scope
+
+Toolkit 0.8.7 prevents incomplete evidence admission from creating dependency
+deltas, keeps repeated OCR claims unverified until current evidence supports
+them, and adds bounded literal search plus exact scoped coverage to the existing
+read-only evidence MCP. Action receipt v2 and toolkit receipt v6 reconcile all
+five evidence actions while preserving established public-output privacy
+boundaries.
+
+Protected review-context policy v3 admits bounded same-revision CI outcomes as
+provider-neutral review context. Exact-head and protected-path scope remain
+mandatory. CI outcomes cannot suppress findings, prove unrelated absence,
+change severity or lifecycle, or authorize approval. Policies v1 and v2 remain
+valid without CI outcomes.
+
+The release qualifies OCR 1.11.1 as its sole supported runtime, adds its Pug,
+Verilog/SystemVerilog, and VHDL review coverage, refreshes protected workflow
+actions, and exposes stable package, Python-support, and license metadata in the
+README without hardcoding the package version.
+
+### Qualification, review, and performance evidence
+
+- OCR 1.11.1 was checksum-qualified through hosted and local no-model probes.
+ OCR 1.11.0 is adjacent historical evidence, not a runtime fallback.
+- Three complete repository reviews were performed with project rules. Confirmed
+ findings and profiler findings were corrected and covered by regressions.
+- A final controlled model-driven qualification on feature head
+ `410194895f85be37e1801b3b92e959177aabf04f` completed one selected item with
+ zero failures, warnings, or findings. It reconciled exactly one summary, list,
+ get, search, and coverage action, proving both legacy and new evidence tools
+ were actually selected.
+- Context mode was off for that controlled qualification. It therefore does not
+ claim model-time enriched `context_list` or `context_get` qualification.
+- The final gate passed 1,386 tests plus 367 subtests at 86.26% branch coverage.
+ Risk groups passed at 85%, 82%, 86%, and 87%.
+- MCP profiling improved the measured path from 1.95 seconds to 1.51–1.63
+ seconds with a 2,244-character bootstrap by removing one redundant live-secret
+ scan per scalar while preserving live-secret semantics.
+
+### Repository and development-publication evidence
+
+- Feature PR #164 passed all 13 exact-head checks with zero active review
+ threads. Reviewed feature head `410194895f85be37e1801b3b92e959177aabf04f`
+ and squash merge `73a17ffddc4fcefef0ebca914966876222b84528`
+ have the same tree `3c63cf60a9de30ac375e3bec88712fd3e5b32a42`.
+- Development workflow run 33492962175 published and independently verified
+ `0.8.7.dev81`. The TestPyPI wheel SHA-256 is
+ `339d92b914fac77e535a85efcded2bbd408b209758599e45edf76d3738d3416e`;
+ the sdist SHA-256 is
+ `d9d16ebfb1930258d0b59da6d339a8cf1102f2aa9774ec08f7945b23a151ea5d`.
+ Workflow and registry bytes, publisher provenance, and clean installs agree.
+
+### Stable delivery handoff
+
+The release PR is the final repository mutation. It sets
+`.release-version=0.8.7`, `.next-version=0.8.8`, deterministic source epoch
+`1788255290`, exact sorted issues `#157`–`#163`, generated Towncrier notes, the
+stable example pin, and this archive while returning `PLANS.md` to its inactive
+template. Release-preparation validation passed 1,387 tests plus 367 subtests at
+86.26% branch coverage, the four risk-group floors, release contracts,
+manifest and secret checks, and byte-identical local wheel/sdist builds.
+
+External closure remains pending until the exact reviewed release head is
+squash-merged and the protected workflow 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.7` tag and peeled target, immutable `release-receipt.json`, clean PyPI
+wheel and sdist installs on Python 3.12–3.14, Actions-owned receipts, closed
+#157–#163 and milestone `v0.8.7`, synchronized clean `main`, and scratch cleanup.
+
## Toolkit 0.8.6 — OCR 1.11.0 and precise security signals
diff --git a/examples/gitlab/ocr-review.gitlab-ci.yml b/examples/gitlab/ocr-review.gitlab-ci.yml
index 6aaf92c..305fac3 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.11.1"
- OCR_TOOLKIT_VERSION: "0.8.6"
+ OCR_TOOLKIT_VERSION: "0.8.7"
OCR_TOOLKIT_CHECKSUMS_URL: "https://github.com/xeonvs/open-code-review-toolkit/releases/download/v${OCR_TOOLKIT_VERSION}/SHA256SUMS"
OCR_SHA256: "1cdc7d1f776f1cdb69850130b930e40f64accc86ecaf09600573b3600456322f"
OCR_POST_MODE: "draft"
diff --git a/tests/test_release_notes.py b/tests/test_release_notes.py
index dd5e4f3..11fbc55 100644
--- a/tests/test_release_notes.py
+++ b/tests/test_release_notes.py
@@ -249,6 +249,31 @@ def test_086_release_notes_preserve_privacy_and_exact_ocr_migration() -> None:
assert phrase in notes
+def test_087_release_notes_cover_evidence_integrity_and_mcp_routing() -> None:
+ """Keep the 0.8.7 evidence, context, and OCR migration actionable."""
+
+ changelog = (ROOT / "CHANGELOG.md").read_text(encoding="utf-8")
+ notes = release.release_notes(changelog, "0.8.7")
+
+ for phrase in (
+ "literal evidence search",
+ "exact scoped coverage checks",
+ "summary/list/search/get/coverage routing",
+ "action receipt v2",
+ "toolkit receipt v6",
+ "same-revision CI outcomes",
+ "cannot suppress findings",
+ "manufacturing dependency deltas",
+ "unverified across multiple review rounds",
+ "Open Code Review 1.11.1",
+ "sole supported runtime",
+ "Pug",
+ "SystemVerilog",
+ "VHDL",
+ ):
+ 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"