From cd15496f61b05820a8620c4b74e843257dbcd86c Mon Sep 17 00:00:00 2001 From: xeonvs <11463419+xeonvs@users.noreply.github.com> Date: Wed, 23 Sep 2026 09:35:08 +0200 Subject: [PATCH] Qualify OCR 1.12.8 and 1.12.9 for v0.11.1 --- PLANS.md | 47 ++-- changelog.d/217.maintenance.md | 1 + changelog.d/218.rules.md | 1 + compatibility/evidence/ocr-1.12.8.json | 288 +++++++++++++++++++++++ compatibility/evidence/ocr-1.12.9.json | 288 +++++++++++++++++++++++ compatibility/ocr-support.json | 110 ++++++++- docs/compatibility.md | 16 +- examples/gitlab/ocr-review.gitlab-ci.yml | 4 +- src/ocr_toolkit/preflight.py | 10 +- tests/test_ocr_compat.py | 17 +- 10 files changed, 750 insertions(+), 32 deletions(-) create mode 100644 changelog.d/217.maintenance.md create mode 100644 changelog.d/218.rules.md create mode 100644 compatibility/evidence/ocr-1.12.8.json create mode 100644 compatibility/evidence/ocr-1.12.9.json diff --git a/PLANS.md b/PLANS.md index e64aac5..e36eee7 100644 --- a/PLANS.md +++ b/PLANS.md @@ -3,7 +3,7 @@ ## Active Plan: Engineering Workflow Upgrade 0.9.8 -Status: active +Status: ready_for_closure Owner: root Last Updated: 2026-09-23 plan_schema_version: 2 @@ -28,7 +28,7 @@ direct_execution | REQ-001 | Full migration plan is the first target write. | engineering-workflow contract | WQ-01 | Plan schema validates. | done | | REQ-002 | Workflow owners, instruction graph, archive indexes, and manifest reach 0.9.8 while preserving protected prose. | migration report | WQ-02 | Instruction and plan checks pass; marker-only protected changes are reviewed. | done | | REQ-003 | Runtime agent configuration follows the explicit selection. | user invocation | WQ-03 | Config and generated profiles parse and name available GPT-6 models. | done | -| REQ-004 | Deliver the migration through the protected v0.11.1 feature PR. | user request | WQ-04 | Exact-head CI and reviewed merge complete. | in_progress | +| REQ-004 | Deliver the migration through the protected v0.11.1 feature PR. | user request | WQ-04 | Exact-head CI and reviewed merge complete. | done | ### Explicit Non-Goals @@ -58,7 +58,7 @@ direct_execution - [x] WQ-01 — Materialize this full plan for REQ-001 as the first write. `done` - [x] WQ-02 — Apply and validate canonical workflow/manifest changes for REQ-002. `done` - [x] WQ-03 — Preserve or structurally merge runtime configuration for REQ-003. `done` -- [ ] WQ-04 — Deliver the reviewed migration with the v0.11.1 feature PR for REQ-004. `in_progress` +- [x] WQ-04 — Deliver the reviewed migration with the v0.11.1 feature PR for REQ-004. `done` ### Locked Decisions @@ -73,7 +73,7 @@ direct_execution ### Latest Validation Results -- 2026-09-23: instruction contract v3 and archive/plan checks pass; all new TOML profiles parse. Repository public-content gate passed in the first full quality run; the full Python suite had one obsolete wording assertion, which was corrected and its owning module passed. The migration upgrader's broad privacy scan returned a hard block on pre-existing source/fixture categories; the user authorized a one-time manual migration. Publication secret gates remain required. +- 2026-09-23: instruction contract v3 and archive/plan checks pass; all new TOML profiles parse. Repository public-content and Gitleaks gates passed. Protected PR #216 passed exact-head CI and merged as 0b589f0; its development TestPyPI workflow 35831251267 succeeded. The migration upgrader's broad privacy scan returned a hard block on pre-existing source/fixture categories; the user authorized a one-time manual migration. Publication secret gates remain required. ### Risks And Recovery @@ -81,7 +81,7 @@ direct_execution ### Resume Point -- Complete WQ-04 by reviewing the aggregate diff, passing applicable gates, and merging the exact-head protected feature PR. Continue v0.11.1 delivery from the release plan below. +- Migration requirements are complete. Preserve this plan until the v0.11.1 release PR reconciles the active plan into execution history; continue at the first unfinished release work item below. ### Plan Fidelity Check @@ -89,12 +89,12 @@ direct_execution ### Reconciliation Check -- [ ] Requirements, queue, validation, working tree, manifest, and statuses agree; completed text has no stale next-work state. +- [x] Requirements, queue, validation, working tree, manifest, and statuses agree; completed text has no stale next-work state. ### Closure Gate -- [ ] Every requirement and queue item is terminal, validation is current, and no promoted backlog or index state is stale. -- [ ] Resume Point contains no unfinished in-scope work and compact closure can be applied atomically. +- [x] Every migration requirement and queue item is terminal, validation is current, and no promoted backlog or index state is stale. +- [x] Resume Point contains no unfinished migration work; closure will accompany release-plan reconciliation. ### Post-Close Delivery @@ -148,8 +148,10 @@ activation as the first slice of the same protected feature PR. ### Inputs and boundaries -Issue #214 and milestone v0.11.1; failed qualification runs 35609962907 and -35728150883; docs/release.md and docs/development.md own lifecycle/validation. +Issues #214, #217, and #218 in milestone v0.11.1; failed historical qualification +runs 35609962907 and 35728150883; successful bounded run 35831453766 owns +adjacent v1.12.8–v1.12.9 evidence. docs/release.md and docs/development.md own +lifecycle/validation. Trust inputs: registry and GitHub metadata, downloaded assets, hashes, installed package metadata, OCR binary behavior and receipt recovery state. Preserve closed schemas, bounded acquisition, exact reviewed commits and fail-closed @@ -164,10 +166,13 @@ publication; never replace already-published versions or immutable assets. pause starts 2026-10-01 UTC while manual dispatch remains available. 3. Done locally: official recipe and real installed-artifact helper/probes, including a negative clean-install control. -4. Root: finish aggregate review and applicable local gates; - signed commits, staged/tree/history Gitleaks, draft feature PR and CI. -5. Root: merge, verify dev CI, bounded hosted qualification and promotion PR; - prepare/merge draft release PR, monitor CI publication, reconcile closure. +4. Done: aggregate review, signed feature commit, Gitleaks, draft PR #216, + exact-head CI, protected merge 0b589f0, and successful development workflow + 35831251267. +5. Current: inspect compatible evidence from hosted run 35831453766 and + adjacent source; prepare and merge a protected OCR promotion PR for issues + #217 and #218. Then prepare/merge draft release PR, monitor CI publication, + and reconcile closure. ### Validation and efficiency @@ -188,11 +193,11 @@ requires human source review, not a weaker qualification gate. ### Current state and resume -Implementation is in the working tree on a branch from current main. Focused -qualification, release, installation-contract and documentation tests passed; -the clean negative install passed. Full quality reached the suite with 1780 -passes and one obsolete workflow-order assertion, corrected and checked in its -owning module. Instruction contract v3 and plan/archive checks pass. Next safe -action: finish final scoped review/lint, Gitleaks and signed feature commit, -then push one feature branch and open its draft PR. User has authorized +Feature implementation is merged into current main as 0b589f0; all protected +feature checks passed and development publication succeeded. Hosted OCR evidence +for 1.12.8 and 1.12.9 is compatible with a human-review-required chain; adjacent +source review found consumed F# Rules/selection and exclusion changes, with no +additional toolkit adaptation indicated. Next safe action: on the new branch +from main, promote the exact reviewed evidence and pins, include the Rules +changelog, then review/test and open its protected draft PR. User has authorized ready/merge/publication after gates; no separate draft approval pause. diff --git a/changelog.d/217.maintenance.md b/changelog.d/217.maintenance.md new file mode 100644 index 0000000..24df810 --- /dev/null +++ b/changelog.d/217.maintenance.md @@ -0,0 +1 @@ +Target checksum-verified Open Code Review 1.12.9 after qualifying 1.12.8 through 1.12.9. diff --git a/changelog.d/218.rules.md b/changelog.d/218.rules.md new file mode 100644 index 0000000..36229d9 --- /dev/null +++ b/changelog.d/218.rules.md @@ -0,0 +1 @@ +The recommended OCR 1.12.9 now reviews F# source, signature, and script files with built-in F# Rules. OCR also excludes F# files matching `*Test.fs` and more dependency and generated-output paths by default; review coverage follows those upstream selections. diff --git a/compatibility/evidence/ocr-1.12.8.json b/compatibility/evidence/ocr-1.12.8.json new file mode 100644 index 0000000..b5383dd --- /dev/null +++ b/compatibility/evidence/ocr-1.12.8.json @@ -0,0 +1,288 @@ +{ + "assets": [ + { + "name": "opencodereview-darwin-amd64", + "sha256": "d935b6c2a0ccafdf28a263b342ddeea812f4a6a8255c79aa2f80f76ebb850119", + "size": 57985632 + }, + { + "name": "opencodereview-darwin-arm64", + "sha256": "38fda3f7316accbb803e357dd85d77e8667307fa80730a390b366870838f3707", + "size": 54995394 + }, + { + "name": "opencodereview-linux-amd64", + "sha256": "6ad405ae67bed160cea1ad24dd2d65d27030e64466371a2ec20b86a0adfeb744", + "size": 56234146 + }, + { + "name": "opencodereview-linux-arm64", + "sha256": "08d58764a1ec81e34bb499d7959b969184dc7b26b248b838639222e0710d9def", + "size": 52953250 + }, + { + "name": "opencodereview-windows-amd64.exe", + "sha256": "150812b67201e5a5fffc4acdd05a468b0737a10606ae109f0ba08541c1bc4a18", + "size": 57700864 + }, + { + "name": "opencodereview-windows-arm64.exe", + "sha256": "1c345d2b584c3d59ee969544b00c947ec5e4b1e450da4a51811297a33772497b", + "size": 53652992 + }, + { + "name": "sha256sum.txt", + "sha256": "c1c437dc786726e1e42c769e18fb441c2e41b6d8ce6d57bd9b758ec2e8c556bb", + "size": 572 + } + ], + "classification": "human-review-required", + "classification_reasons": [ + "release notes contain a material or ambiguous compatibility signal" + ], + "comparison_version": "1.12.7", + "contracts": { + "comment_arguments_probe": { + "comments_per_batch": 2, + "failure_arguments_preserved": true, + "intact_cases": [ + "array", + "serialized", + "repaired" + ], + "repair_warning": true, + "result": "passed", + "suspect_batch_rejected": true + }, + "comment_thinking_probe": { + "additive_field_preserved": true, + "posting_exposes_thinking": false, + "result": "passed" + }, + "completion_cap_probe": { + "explicit": 4096, + "inherited": 16384, + "result": "passed", + "wire_field": "max_completion_tokens" + }, + "language_rule_probe": { + "default_excluded_paths": [ + "src/test/kotlin/scripts/Example.kts", + "test/parser.ml", + "src/test_helpers.py", + "src/WidgetTest.fs", + "node_modules/example/index.ts", + "dist/generated.js" + ], + "excluded_extensions": [ + ".svh" + ], + "extensions": [ + ".cjs", + ".cxx", + ".fs", + ".fsi", + ".fsx", + ".hxx", + ".kts", + ".mjs", + ".ml", + ".mli", + ".mm", + ".pug", + ".pyi", + ".re", + ".rego", + ".rei", + ".sv", + ".v", + ".vh", + ".vhd", + ".vhdl" + ], + "m_routing": "matlab_and_objective_c", + "result": "passed", + "rule_source": "system_builtin", + "selected": 21 + }, + "numeric_cli_probe": { + "max_tokens_budget": { + "cases": { + "invalid_below": { + "effective": null, + "input": -1, + "outcome": "rejected" + }, + "minimum": { + "effective": 1, + "input": 1, + "outcome": "accepted" + }, + "omitted": { + "effective": "unlimited", + "input": null, + "outcome": "accepted" + }, + "representative": { + "effective": 30000, + "input": 30000, + "outcome": "accepted" + }, + "sentinel": { + "effective": "unlimited", + "input": 0, + "outcome": "accepted" + } + }, + "maximum": null, + "owner": "ocr-cli" + }, + "max_tools": { + "cases": { + "invalid_below": { + "effective": null, + "input": -1, + "outcome": "rejected" + }, + "minimum": { + "effective": 100, + "input": 50, + "outcome": "accepted" + }, + "minimum_minus_one": { + "effective": 100, + "input": 49, + "outcome": "normalized", + "reported_normalization": 50 + }, + "omitted": { + "effective": 100, + "input": null, + "outcome": "accepted" + }, + "representative": { + "effective": 101, + "input": 101, + "outcome": "accepted" + }, + "sentinel": { + "effective": 100, + "input": 0, + "outcome": "accepted" + } + }, + "maximum": null, + "owner": "ocr-template-or-higher-cli", + "reported_minimum": 50 + }, + "result": "passed" + }, + "optional_capabilities": [ + "llm_result_identity", + "per_run_model_override", + "per_run_provider_override", + "review_effort", + "semantic_grouping" + ], + "preview_probe": { + "format": "json", + "path": "example.py", + "result": "passed", + "session_store_created": false + }, + "provider_directory_preview_probe": { + "result": "passed", + "tracked_provider_directory": "reported" + }, + "reasoning_effort_probe": { + "efforts": [ + "unset", + "none", + "high" + ], + "protocols": [ + "openai", + "openai-responses" + ], + "provider_acceptance": "not-tested", + "responses_siblings_preserved": true, + "result": "passed" + }, + "required_review_flags": [ + "--audience", + "--background-file", + "--effort", + "--format", + "--from", + "--max-tokens-budget", + "--max-tools", + "--preview", + "--rule", + "--to" + ], + "result_contract_probe": { + "additive_fields_allowed": true, + "comment_fields": [ + "category", + "content", + "end_line", + "existing_code", + "path", + "severity", + "start_line", + "thinking" + ], + "manifest_schema": "ocr.run-manifest/v1", + "normalized_outcome": "clean", + "result": "passed" + }, + "review_budget_probe": { + "budget": 30000, + "completed": 2, + "failed_budget": 1, + "grouping_requests": 0, + "grouping_strategy": "per_file", + "partial_findings_preserved": true, + "result": "passed", + "selected": 3 + }, + "semantic_grouping_probe": { + "default_effort": "medium", + "files": 4, + "filter_requests": 1, + "grouping_completion_cap": 16384, + "grouping_requests": 1, + "main_requests": 3, + "prior_finding_semantics": "filter_survivors_as_confirmed", + "recheck_instruction_requests": 3, + "result": "passed", + "review_rounds": 2 + }, + "small_change_grouping_probe": { + "grouping_requests": 0, + "high_churn": "per_file", + "low_churn": "bundle_all", + "result": "passed", + "single_file": "per_file", + "threshold_files": 4 + }, + "target_rule_selection_probe": { + "format": "json", + "from_to_unchanged": true, + "path": "synthetic-template.ocrfixture", + "result": "passed", + "source_exclusion": "unsupported_ext", + "target_selected": true + }, + "version_probe": "passed" + }, + "published_at": "2026-09-21T12:46:24Z", + "release_changes": "## 🚀 Features\n\n- feat(rules): add F# review support (#1448)\n\n## 🐛 Bug Fixes\n\n- fix(config): exclude dependency and build-output directories by default (#1499)\n- fix(viewer): keep vertical mouse-wheel working over scroll regions (#1515)\n- fix(action): honor an explicit llm_protocol instead of forcing openai or anthropic (#1192)\n- fix(diff): parse git's quoted pathnames instead of dropping the file (#1498)\n- fix(scan): keep NUL-delimited pathnames from git ls-files intact (#1497)\n- fix(viewer): shorten the session id cell on the session list (#1488)\n- fix(viewer): responsive, accessibility and contrast polish across the four screens (#1426)\n- fix(tool): keep non-ASCII paths literal in code_search results (#1425)\n\n## 📖 Documentation\n\n- docs(assurance): correct API key storage claims (#1449)\n- docs(extensions): new translations for vscode ext (#1381)\n- docs(review): synchronize exclude & secret patterns (#1491)\n\n## Other Changes\n\n- perf(viewer): paginate large review result lists (#1460)\n\n**Full Changelog**: https://github.com/alibaba/open-code-review/compare/v1.12.7...v1.12.8", + "release_notes_sha256": "67c74e0573a6d0ebc01fa18df9066c14702c865a07e664d790c62f573fcdaee2", + "result": "compatible", + "schema_version": 3, + "tag": "v1.12.8", + "tested_baseline_version": "1.12.7", + "upstream_repository": "alibaba/open-code-review", + "version": "1.12.8" +} diff --git a/compatibility/evidence/ocr-1.12.9.json b/compatibility/evidence/ocr-1.12.9.json new file mode 100644 index 0000000..f1df35b --- /dev/null +++ b/compatibility/evidence/ocr-1.12.9.json @@ -0,0 +1,288 @@ +{ + "assets": [ + { + "name": "opencodereview-darwin-amd64", + "sha256": "3b57d01a3253fb7b9793ca50474a1f9471ddaf1c25520fd81869efa071f94d95", + "size": 58003696 + }, + { + "name": "opencodereview-darwin-arm64", + "sha256": "93a4fad7b65dd6e953d7e33d72a26b5a1799e06576cada294cf3458a346c4640", + "size": 55030082 + }, + { + "name": "opencodereview-linux-amd64", + "sha256": "9105c7081b8362a1cb0167f1ddfd1437e147a0e3c9a5af89c03c8859a5b0f0e8", + "size": 56254626 + }, + { + "name": "opencodereview-linux-arm64", + "sha256": "e384ffb33af54e1f0d486312938a30f1dba29c02222b55793ec34b085b56d2b3", + "size": 53018786 + }, + { + "name": "opencodereview-windows-amd64.exe", + "sha256": "ae6f4785fea34a5cfef93ad22d8e7fb8032bbd12c45f2cbcc98cbe1b38cceff1", + "size": 57718272 + }, + { + "name": "opencodereview-windows-arm64.exe", + "sha256": "63c30da3695a7693f6eed38ee7e977b2e4b79664f26790c6e6841c83e07533ba", + "size": 53668352 + }, + { + "name": "sha256sum.txt", + "sha256": "2253bd9efe95b38165ac957c5f2d26f6fc99085a8428db6a4b269e002964ce55", + "size": 572 + } + ], + "classification": "human-review-required", + "classification_reasons": [ + "release notes contain a material or ambiguous compatibility signal" + ], + "comparison_version": "1.12.8", + "contracts": { + "comment_arguments_probe": { + "comments_per_batch": 2, + "failure_arguments_preserved": true, + "intact_cases": [ + "array", + "serialized", + "repaired" + ], + "repair_warning": true, + "result": "passed", + "suspect_batch_rejected": true + }, + "comment_thinking_probe": { + "additive_field_preserved": true, + "posting_exposes_thinking": false, + "result": "passed" + }, + "completion_cap_probe": { + "explicit": 4096, + "inherited": 16384, + "result": "passed", + "wire_field": "max_completion_tokens" + }, + "language_rule_probe": { + "default_excluded_paths": [ + "src/test/kotlin/scripts/Example.kts", + "test/parser.ml", + "src/test_helpers.py", + "src/WidgetTest.fs", + "node_modules/example/index.ts", + "dist/generated.js" + ], + "excluded_extensions": [ + ".svh" + ], + "extensions": [ + ".cjs", + ".cxx", + ".fs", + ".fsi", + ".fsx", + ".hxx", + ".kts", + ".mjs", + ".ml", + ".mli", + ".mm", + ".pug", + ".pyi", + ".re", + ".rego", + ".rei", + ".sv", + ".v", + ".vh", + ".vhd", + ".vhdl" + ], + "m_routing": "matlab_and_objective_c", + "result": "passed", + "rule_source": "system_builtin", + "selected": 21 + }, + "numeric_cli_probe": { + "max_tokens_budget": { + "cases": { + "invalid_below": { + "effective": null, + "input": -1, + "outcome": "rejected" + }, + "minimum": { + "effective": 1, + "input": 1, + "outcome": "accepted" + }, + "omitted": { + "effective": "unlimited", + "input": null, + "outcome": "accepted" + }, + "representative": { + "effective": 30000, + "input": 30000, + "outcome": "accepted" + }, + "sentinel": { + "effective": "unlimited", + "input": 0, + "outcome": "accepted" + } + }, + "maximum": null, + "owner": "ocr-cli" + }, + "max_tools": { + "cases": { + "invalid_below": { + "effective": null, + "input": -1, + "outcome": "rejected" + }, + "minimum": { + "effective": 100, + "input": 50, + "outcome": "accepted" + }, + "minimum_minus_one": { + "effective": 100, + "input": 49, + "outcome": "normalized", + "reported_normalization": 50 + }, + "omitted": { + "effective": 100, + "input": null, + "outcome": "accepted" + }, + "representative": { + "effective": 101, + "input": 101, + "outcome": "accepted" + }, + "sentinel": { + "effective": 100, + "input": 0, + "outcome": "accepted" + } + }, + "maximum": null, + "owner": "ocr-template-or-higher-cli", + "reported_minimum": 50 + }, + "result": "passed" + }, + "optional_capabilities": [ + "llm_result_identity", + "per_run_model_override", + "per_run_provider_override", + "review_effort", + "semantic_grouping" + ], + "preview_probe": { + "format": "json", + "path": "example.py", + "result": "passed", + "session_store_created": false + }, + "provider_directory_preview_probe": { + "result": "passed", + "tracked_provider_directory": "reported" + }, + "reasoning_effort_probe": { + "efforts": [ + "unset", + "none", + "high" + ], + "protocols": [ + "openai", + "openai-responses" + ], + "provider_acceptance": "not-tested", + "responses_siblings_preserved": true, + "result": "passed" + }, + "required_review_flags": [ + "--audience", + "--background-file", + "--effort", + "--format", + "--from", + "--max-tokens-budget", + "--max-tools", + "--preview", + "--rule", + "--to" + ], + "result_contract_probe": { + "additive_fields_allowed": true, + "comment_fields": [ + "category", + "content", + "end_line", + "existing_code", + "path", + "severity", + "start_line", + "thinking" + ], + "manifest_schema": "ocr.run-manifest/v1", + "normalized_outcome": "clean", + "result": "passed" + }, + "review_budget_probe": { + "budget": 30000, + "completed": 2, + "failed_budget": 1, + "grouping_requests": 0, + "grouping_strategy": "per_file", + "partial_findings_preserved": true, + "result": "passed", + "selected": 3 + }, + "semantic_grouping_probe": { + "default_effort": "medium", + "files": 4, + "filter_requests": 1, + "grouping_completion_cap": 16384, + "grouping_requests": 1, + "main_requests": 3, + "prior_finding_semantics": "filter_survivors_as_confirmed", + "recheck_instruction_requests": 3, + "result": "passed", + "review_rounds": 2 + }, + "small_change_grouping_probe": { + "grouping_requests": 0, + "high_churn": "per_file", + "low_churn": "bundle_all", + "result": "passed", + "single_file": "per_file", + "threshold_files": 4 + }, + "target_rule_selection_probe": { + "format": "json", + "from_to_unchanged": true, + "path": "synthetic-template.ocrfixture", + "result": "passed", + "source_exclusion": "unsupported_ext", + "target_selected": true + }, + "version_probe": "passed" + }, + "published_at": "2026-09-22T11:17:44Z", + "release_changes": "## 🐛 Bug Fixes\n\n- fix(session): preserve findings across file renames (#1529)\n- fix(config): preserve unknown JSON fields during config updates (#1508)\n- fix(review): keep git stderr out of --commit background (#1467)\n- fix(ci): pin workflow action references to full commit SHAs (#856)\n- fix(viewer): wrap long session metadata on mobile (#1458)\n\n## 📖 Documentation\n\n- docs(agents): add guideline to comment sparingly and explain why (#1534)\n\n## Other Changes\n\n- security: validate credential commands and expand .gitattributes binary markers (#1291)\n- Fix/gitlab multiline comments and suggestions (#1000)\n- test: stabilize token boundary fixtures (#1015)\n- test(diff): guard quoted-path parsing through a real git subprocess (#1516)\n\n**Full Changelog**: https://github.com/alibaba/open-code-review/compare/v1.12.8...v1.12.9", + "release_notes_sha256": "ebda61f25f499fcb06739cf0a9d879787c113893126291716b54febf86cecab2", + "result": "compatible", + "schema_version": 3, + "tag": "v1.12.9", + "tested_baseline_version": "1.12.7", + "upstream_repository": "alibaba/open-code-review", + "version": "1.12.9" +} diff --git a/compatibility/ocr-support.json b/compatibility/ocr-support.json index a2b9e12..2976c0d 100644 --- a/compatibility/ocr-support.json +++ b/compatibility/ocr-support.json @@ -1,6 +1,6 @@ { - "monitoring_floor": "1.12.7", - "recommended_version": "1.12.7", + "monitoring_floor": "1.12.9", + "recommended_version": "1.12.9", "releases": [ { "assets": [ @@ -2247,6 +2247,112 @@ "release_url": "https://github.com/alibaba/open-code-review/releases/tag/v1.12.7", "status": "tested", "version": "1.12.7" + }, + { + "assets": [ + { + "name": "opencodereview-darwin-amd64", + "sha256": "d935b6c2a0ccafdf28a263b342ddeea812f4a6a8255c79aa2f80f76ebb850119", + "size": 57985632 + }, + { + "name": "opencodereview-darwin-arm64", + "sha256": "38fda3f7316accbb803e357dd85d77e8667307fa80730a390b366870838f3707", + "size": 54995394 + }, + { + "name": "opencodereview-linux-amd64", + "sha256": "6ad405ae67bed160cea1ad24dd2d65d27030e64466371a2ec20b86a0adfeb744", + "size": 56234146 + }, + { + "name": "opencodereview-linux-arm64", + "sha256": "08d58764a1ec81e34bb499d7959b969184dc7b26b248b838639222e0710d9def", + "size": 52953250 + }, + { + "name": "opencodereview-windows-amd64.exe", + "sha256": "150812b67201e5a5fffc4acdd05a468b0737a10606ae109f0ba08541c1bc4a18", + "size": 57700864 + }, + { + "name": "opencodereview-windows-arm64.exe", + "sha256": "1c345d2b584c3d59ee969544b00c947ec5e4b1e450da4a51811297a33772497b", + "size": 53652992 + }, + { + "name": "sha256sum.txt", + "sha256": "c1c437dc786726e1e42c769e18fb441c2e41b6d8ce6d57bd9b758ec2e8c556bb", + "size": 572 + } + ], + "capabilities": [ + "llm_result_identity", + "per_run_model_override", + "per_run_provider_override", + "review_effort", + "semantic_grouping" + ], + "evidence": "compatibility/evidence/ocr-1.12.8.json", + "evidence_sha256": "d64bcab53c834cd9608f8485f9f0911820cbfc2459690092662e17af535c2c01", + "human_conclusion": "Compatible after checksum-verified hosted Linux qualification in run 35831453766 and adjacent upstream source review. Built-in Rules and file selection add F# .fs/.fsi/.fsx, exclude F# *Test.fs, and broaden dependency/build-output exclusions; the toolkit live probes cover these consumed selection contracts. Quoted, NUL and non-ASCII path fixes improve reviewed-range reliability without changing toolkit invocation or result schema. Upstream GitHub Action, config CLI save, viewer and documentation are outside the toolkit execution path. Model-backed finding quality is not claimed.", + "published_at": "2026-09-21T12:46:24Z", + "release_url": "https://github.com/alibaba/open-code-review/releases/tag/v1.12.8", + "status": "tested", + "version": "1.12.8" + }, + { + "assets": [ + { + "name": "opencodereview-darwin-amd64", + "sha256": "3b57d01a3253fb7b9793ca50474a1f9471ddaf1c25520fd81869efa071f94d95", + "size": 58003696 + }, + { + "name": "opencodereview-darwin-arm64", + "sha256": "93a4fad7b65dd6e953d7e33d72a26b5a1799e06576cada294cf3458a346c4640", + "size": 55030082 + }, + { + "name": "opencodereview-linux-amd64", + "sha256": "9105c7081b8362a1cb0167f1ddfd1437e147a0e3c9a5af89c03c8859a5b0f0e8", + "size": 56254626 + }, + { + "name": "opencodereview-linux-arm64", + "sha256": "e384ffb33af54e1f0d486312938a30f1dba29c02222b55793ec34b085b56d2b3", + "size": 53018786 + }, + { + "name": "opencodereview-windows-amd64.exe", + "sha256": "ae6f4785fea34a5cfef93ad22d8e7fb8032bbd12c45f2cbcc98cbe1b38cceff1", + "size": 57718272 + }, + { + "name": "opencodereview-windows-arm64.exe", + "sha256": "63c30da3695a7693f6eed38ee7e977b2e4b79664f26790c6e6841c83e07533ba", + "size": 53668352 + }, + { + "name": "sha256sum.txt", + "sha256": "2253bd9efe95b38165ac957c5f2d26f6fc99085a8428db6a4b269e002964ce55", + "size": 572 + } + ], + "capabilities": [ + "llm_result_identity", + "per_run_model_override", + "per_run_provider_override", + "review_effort", + "semantic_grouping" + ], + "evidence": "compatibility/evidence/ocr-1.12.9.json", + "evidence_sha256": "cb533c50843a6c0dec7a7e704a26eb93c8af4571711a048ad7a7e7b6471c6052", + "human_conclusion": "Compatible after checksum-verified hosted Linux qualification in run 35831453766 and adjacent upstream source review. The reviewed-range invocation, built-in rule selection and consumed result/manifest contracts remain compatible. The --commit background fix, session comparison, upstream GitLab posting example, credential-command validation, config CLI unknown-field preservation, viewer and CI changes are outside the toolkit execution path. Model-backed finding quality is not claimed.", + "published_at": "2026-09-22T11:17:44Z", + "release_url": "https://github.com/alibaba/open-code-review/releases/tag/v1.12.9", + "status": "tested", + "version": "1.12.9" } ], "runtime_support": { diff --git a/docs/compatibility.md b/docs/compatibility.md index 1da60cd..7aee567 100644 --- a/docs/compatibility.md +++ b/docs/compatibility.md @@ -256,14 +256,26 @@ default `**/test_*.py` exclusion; qualification proves the exact pytest-style path is excluded while neighboring `contest_*.py` and `test_*.go` controls remain reviewable. +### OCR 1.12.8–1.12.9 — toolkit 0.11.1 target + +Toolkit 0.11.1 recommends exact OCR 1.12.9. Bounded hosted run +[35831453766](https://github.com/xeonvs/open-code-review-toolkit/actions/runs/35831453766) +qualified the adjacent 1.12.8–1.12.9 chain with verified upstream assets and +deterministic Linux probes. OCR 1.12.8 adds built-in F# Rules for `.fs`, `.fsi`, +and `.fsx`; its default selection excludes paths matching `*Test.fs` and more +dependency and generated-output paths. The qualification probes cover those +selection contracts. OCR 1.12.9 retains the toolkit-consumed invocation, +selection, result, and manifest contracts. Source review and hosted probes do +not establish configured provider/model finding quality. + Runtime support is rolling and exact-patch-only. Qualified 1.11.x and 1.12.x entries are supported, qualified 1.10.x entries are accepted with a deprecation warning, and earlier or unqualified patches fail preflight. Historical evidence remains readable without widening current execution support. The manifest's -`monitoring_floor: 1.12.7` means release discovery starts above that tag; it is +`monitoring_floor: 1.12.9` means release discovery starts above that tag; it is not a minimum accepted runtime and cannot silently admit an unseen patch. -The public GitLab example pins `v1.12.7` and its Linux amd64 SHA-256. Deployments +The public GitLab example pins `v1.12.9` and its Linux amd64 SHA-256. Deployments must still verify the exact platform asset against the matching manifest entry. The compatibility chain establishes deterministic toolkit boundaries, not configured provider/model quality or stable toolkit delivery. diff --git a/examples/gitlab/ocr-review.gitlab-ci.yml b/examples/gitlab/ocr-review.gitlab-ci.yml index e2ac550..6764e57 100644 --- a/examples/gitlab/ocr-review.gitlab-ci.yml +++ b/examples/gitlab/ocr-review.gitlab-ci.yml @@ -6,10 +6,10 @@ default: image: python:3.12-slim variables: - OCR_VERSION: "v1.12.7" + OCR_VERSION: "v1.12.9" OCR_TOOLKIT_VERSION: "0.11.0" OCR_TOOLKIT_CHECKSUMS_URL: "https://github.com/xeonvs/open-code-review-toolkit/releases/download/v${OCR_TOOLKIT_VERSION}/SHA256SUMS" - OCR_SHA256: "56649575421b8ca3be3cfaededc0a9037ae7cc9ae560f167bf504bfb4054451a" + OCR_SHA256: "9105c7081b8362a1cb0167f1ddfd1437e147a0e3c9a5af89c03c8859a5b0f0e8" OCR_POST_MODE: "draft" OCR_STRICT_POSTING: "true" # Secure default: reject an unprotected GitLab target before OCR. diff --git a/src/ocr_toolkit/preflight.py b/src/ocr_toolkit/preflight.py index 63bb6d6..237a9ee 100644 --- a/src/ocr_toolkit/preflight.py +++ b/src/ocr_toolkit/preflight.py @@ -29,7 +29,7 @@ "Accept": "application/json", "User-Agent": "open-code-review-ci-preflight/1.0", } -RECOMMENDED_OCR_VERSION = "1.12.7" +RECOMMENDED_OCR_VERSION = "1.12.9" SUPPORTED_OCR_VERSIONS = ( "1.11.0", "1.11.1", @@ -49,8 +49,14 @@ "1.12.5", "1.12.6", "1.12.7", + "1.12.8", + "1.12.9", +) +DEPRECATED_OCR_VERSIONS = ( + "1.10.0", + "1.10.1", + "1.10.2", ) -DEPRECATED_OCR_VERSIONS = ("1.10.0", "1.10.1", "1.10.2") # Retain the public constant as the recommended pin, not as the runtime acceptance policy. EXPECTED_OCR_VERSION = RECOMMENDED_OCR_VERSION diff --git a/tests/test_ocr_compat.py b/tests/test_ocr_compat.py index 2a85ce6..02efdd0 100644 --- a/tests/test_ocr_compat.py +++ b/tests/test_ocr_compat.py @@ -152,8 +152,8 @@ def test_committed_manifest_is_valid_and_has_recommended_tested_baseline() -> No module.validate_manifest(manifest, PROJECT_ROOT) assert manifest["schema_version"] == 2 - assert manifest["recommended_version"] == "1.12.7" - assert manifest["monitoring_floor"] == "1.12.7" + assert manifest["recommended_version"] == "1.12.9" + assert manifest["monitoring_floor"] == "1.12.9" assert manifest["runtime_support"] == { "deprecated_lines": ["1.10"], "qualified_patches_only": True, @@ -205,6 +205,8 @@ def test_committed_manifest_is_valid_and_has_recommended_tested_baseline() -> No ("1.12.5", "tested"), ("1.12.6", "tested"), ("1.12.7", "tested"), + ("1.12.8", "tested"), + ("1.12.9", "tested"), ] assert module.qualified_runtime_versions(manifest) == ( @@ -227,6 +229,8 @@ def test_committed_manifest_is_valid_and_has_recommended_tested_baseline() -> No "1.12.5", "1.12.6", "1.12.7", + "1.12.8", + "1.12.9", ], ["1.10.0", "1.10.1", "1.10.2"], ) @@ -2333,7 +2337,14 @@ def test_current_promotion_rejects_missing_contract_before_writing( module = load_script() promotion_manifest = tmp_path / "ocr-support.json" - promotion_manifest.write_bytes(MANIFEST.read_bytes()) + previous_manifest = module.load_json(MANIFEST) + set_manifest_recommendation(module, previous_manifest, "1.12.7") + previous_manifest["releases"] = [ + item + for item in previous_manifest["releases"] + if module._version(item["version"]) <= (1, 12, 7) + ] + promotion_manifest.write_text(json.dumps(previous_manifest), encoding="utf-8") evidence = module.load_json(PROJECT_ROOT / "compatibility/evidence/ocr-1.12.7.json") evidence["version"] = "1.12.8" evidence["tag"] = "v1.12.8"