Repository navigation
Relock OpenHands onto oauthlib 4.0.0 and delete the expired oauthlib ignores - #1060
Merged
seathatflowsinourveins merged 3 commits intoOct 13, 2026
Merged
Conversation
4 tasks done
…ignores From 2026-10-13T00:00Z the required osv-scanner check failed on every run: the two oauthlib ignores (GHSA-hj66-6f7g-4r5v, GHSA-xpv3-w29h-x7cv) carried ignoreUntil = 2026-10-13, and the scan step's unittest preflight rejects an expired ignore (CI run 38326740785). - Relock blueprints/runtime-workers/openhands/requirements.lock from oauthlib 3.3.1 to 4.0.0, the first patched release of both advisories, with the recipe's paired uv 0.12.22 relock: the fsspec relock's nine version-pinned upgrades plus --upgrade-package oauthlib==4.0.0. The control reproduces the committed lock byte for byte; the new lock differs in the three oauthlib lines only, and both hashes are PyPI's 4.0.0 wheel and sdist. No other pin moves. - Delete both ignores, their IGNORE_SCOPES rows and the lock's IGNORE_ALLOWED_LOCKS entry. The Lumibot lock they also covered has been excluded from the inventory since 2026-10-06 and is unchanged. - Record it: research.md section, a dated supersession in the automation closure decision, receipt evidence/receipts/osv-openhands-oauthlib-relock-20261013.json, returned outputs under the relock-2026-10-13-oauthlib prefix, the pins.json digest, the receipt's Architecture grant and post-pin ledger entry, and manifests/evidence.json. Checks: the workflow's own scan step exits 1 at 738fdf7 and 0 here; its ordinary OSV-Scanner 2.6.0 scan exits 1 (the two oauthlib findings) and 0; TZ=UTC unit runs of the coverage modules go from 4 failures to OK; the hashed install, uv pip check, SDK import and requests-oauthlib 2.0.0's own tests pass on the new lock. Refs #518 Co-Authored-By: Claude Opus 5.5 <[email protected]>
…delete the unused ignores From the Claude read of e393356 (CHANGES_REQUESTED) and the GPT read of e393356 (ACK, no blockers): - P1, correction #161: delete the sha256 of the two scratch uv.lock files from the receipt (control_uv_lock_sha256, new_uv_lock_sha256), from relock.txt and from the relock script's sha256sum; uv_lock_diff and uv_change_list_delta carry the claim. Add tests/test_receipt_sha256_key_custody.py: every evidence/receipts key ending in _sha256 must hash a tracked file or name a public artifact (an https URL under url or a key of its own prefix, or a tracked pin record); 99 older receipts are frozen by count (702 keys). It fails at e393356 on exactly those two keys. - P3: the post-pin grant reason and the receipt's cross_family_review cite #1060 and both reads. - GPT read follow-up 1: delete the unused nltk and setuptools ignores (GHSA-8mgp-746c-j5xp, GHSA-h35f-9h28-mq5c), which would have failed the scan step's preflight on 2026-12-24, and their IGNORE_SCOPES rows; the guard's own tests keep the two scopes as GUARD_FIXTURE_SCOPES. No ordinary input pins a version they affect, and the ordinary config now holds no ignore. Checks: validate.py passed (11872 hashed files); 11 modules under TZ=UTC, 319 tests OK; the workflow's scan step exits 0, No issues found; ignore_entry_problems with the date 2026-12-24 returns nothing. Co-Authored-By: Claude Opus 5.5 <[email protected]>
seathatflowsinourveins
force-pushed
the
foundation/osv-oauthlib-relock-20261013
branch
from
October 13, 2026 04:00
e393356 to
4b23521
Compare
The organization transfer reset CodeQL default setup; it was restored at 2026-10-13T04:53Z, and default setup analyzes a pull request only on a push. Co-Authored-By: Claude Opus 5.5 <[email protected]>
seathatflowsinourveins
deleted the
foundation/osv-oauthlib-relock-20261013
branch
October 13, 2026 05:53
seathatflowsinourveins
added a commit
that referenced
this pull request
Oct 15, 2026
CI run 38799026807 failed validate-shard-4 at 191f6c6, and the command center's read of 191f6c6 found the same P1: tests.test_local_pages_architecture_landscape_exclusions refused the new registered receipt ("Architecture role/path has no independent approval: architecture_receipt"). Every registered evidence/receipts/*.json needs an exact grant, as #1060 added for its relock receipt. - tools/local-pages/source_policy.json: the exact architecture_receipt grant. - tests/test_local_pages_policy_grants.py: its POST_PIN_RECEIPT_GRANTS row. - manifests/evidence.json: the two rows re-hashed. Co-Authored-By: Claude Opus 5.5 <[email protected]>
Merged
5 tasks done
seathatflowsinourveins
added a commit
that referenced
this pull request
Oct 15, 2026
…HSA-qhrr-8q5h-9q3h) (#1178) * fix(trading): relock the LEAN Alpaca adapter onto MessagePack 3.1.9 GHSA-qhrr-8q5h-9q3h (CVE-2026-92707), published 2026-10-15T18:35:46Z, affects MessagePack >= 3.0.0, < 3.1.9. The Alpaca adapter lock pinned 3.1.7, so the required osv-scanner check failed on every run after main's 16:47Z pass. The Alpaca source patch now also raises the adapter's direct MessagePack reference to 3.1.9 (vendor dotnet add, native git diff -U0). The pinned .NET SDK 10.0.401 regenerated the lock: MessagePack, MessagePack.Annotations and MessagePackAnalyzer move to 3.1.9, nothing else changes, and the 22 LEAN locks stay byte-identical. A fresh adapter clone restores the published patch and lock in locked mode and builds with zero errors. No ignore entry is added. Receipt: evidence/receipts/osv-alpaca-messagepack-relock-20261015.json. Co-Authored-By: Claude Opus 5.5 <[email protected]> * Grant the MessagePack relock receipt to the Architecture reader CI run 38799026807 failed validate-shard-4 at 191f6c6, and the command center's read of 191f6c6 found the same P1: tests.test_local_pages_architecture_landscape_exclusions refused the new registered receipt ("Architecture role/path has no independent approval: architecture_receipt"). Every registered evidence/receipts/*.json needs an exact grant, as #1060 added for its relock receipt. - tools/local-pages/source_policy.json: the exact architecture_receipt grant. - tests/test_local_pages_policy_grants.py: its POST_PIN_RECEIPT_GRANTS row. - manifests/evidence.json: the two rows re-hashed. Co-Authored-By: Claude Opus 5.5 <[email protected]> --------- Co-authored-by: Claude Opus 5.5 <[email protected]>
4 tasks done
seathatflowsinourveins
added a commit
that referenced
this pull request
Oct 15, 2026
) GHSA-84m7-p3x7-pcfv (CVE-2026-59951: unbounded session accumulation in the MCP Python SDK's Streamable HTTP transport; CVSS 3.1 7.5, GitHub severity field medium) affects mcp >= 1.8.0, < 1.30.0 and >= 2.0.0, < 2.2.0; the recipe lock pinned mcp 1.28.1. Sources, read 2026-10-15: - gh api /advisories/GHSA-84m7-p3x7-pcfv (published 20:13:13Z, updated 20:13:14Z, read 20:55:51Z), and the repository advisory it cites, GHSA-84m7-p3x7-pcfv (published 2026-09-30T20:53:30Z, the same ranges); - the v1.30.0 release, gh api repos/modelcontextprotocol/python-sdk/releases/tags/v1.30.0: tag commit 8c2fa6eabacde869d75568e33b9d466b58c2f512; body lines 13-17 ("Idle Streamable HTTP sessions now expire (#3426)"), 33 and 38 name the fix, #3426 at 92120b4b0f50385af096592d7cee932fc1d994e7; - OSV.dev's record, modified 20:30:08Z, after the hosted osv-scanner job at 5561321 had passed (run 38801792191, job 116652403677, 20:25:18Z to 20:25:41Z). - Relock blueprints/runtime-workers/openhands/requirements.lock with the recipe's own paired uv 0.12.22 relock, #1060's procedure: the control, #1060's ten version-pinned upgrades on a fresh extraction of the pinned SDK archive, reproduces the committed lock byte for byte, and the new run adds one upgrade: uv lock --upgrade-package anyio==4.14.2 --upgrade-package click==8.5.0 --upgrade-package pypdf==6.19.0 --upgrade-package soupsieve==2.9.2 --upgrade-package pyjwt==2.15.0 --upgrade-package urllib3==2.8.0 --upgrade-package litellm==1.93.2 --upgrade-package fsspec==2026.6.0 --upgrade-package multidict==6.9.1 --upgrade-package oauthlib==4.0.0 --upgrade-package mcp==1.30.0 uv export --frozen --format requirements.txt --no-header --no-annotate --package openhands-tools --no-emit-workspace The flags at astral-sh/uv 0.12.22 (tag commit 70fe1196a546e49148a73b1c592b2f74c33af80e): docs/concepts/projects/sync.md:157-182 (lock --upgrade-package <package>==<version>) and :35-50 (lock --check); docs/concepts/projects/export.md:43-55 (requirements.txt); crates/uv-cli/src/lib.rs:7506-7509 (--upgrade-package, in ResolverArgs, flattened into LockArgs at 4157-4158), 4102-4110 (--check), 4757-4764 (--format), 4776-4780 (--package), 4811-4813 (--no-annotate), 4818-4820 (--no-header), 4900-4913 (--no-emit-workspace) and 4982-4986 (--frozen); the kept workspace settings at docs/concepts/resolution.md:142-173 (environments), 303-309 (preferences), 846-852 (exclude-newer-package) and 891-921 (the relative exclude-newer). - Moved: mcp 1.28.1 -> 1.30.0, and nothing else. uv's change list differs from the control's by "Updated mcp v1.28.1 -> v1.30.0" only, uv.lock by the mcp entry only and the export by lines 365-367 only; both hashes are PyPI's 1.30.0 wheel and sdist (uploaded 2026-09-07, outside the 7-day exclude-newer window). 1.30.0 declares the same requirements as 1.28.1, and the lock's two dependents admit it: fastmcp 3.2.0 (mcp<2.0,>=1.24.0) and browser-use 0.11.9 (mcp>=1.10.1). fastmcp's <2.0 keeps the 2.x fix out of reach. - pins.json requirements_sha256: a3303759da2895ecb87e0a9fa7e45878bb2588208615e6a6059704a98e71e396 (was 32bc153428aaef2018adcdca53337e4a74b464ca94a96b9905e1bc6174503400). Fail-first: security-scan.yml's own "Scan every listed lockfile and manifest" step (extracted at 5561321, bash --noprofile --norc -eo pipefail, TZ=UTC, WRITE_SARIF=false, RUNNER_TEMP holding OSV-Scanner 2.6.0 checked against OSV_SCANNER_SHA256 ca69b3d3...) exits 1 with exactly GHSA-84m7-p3x7-pcfv on requirements.lock at 5561321 (2026-10-15T20:58:30Z) and at main's a93ba0b (21:23:15Z, a detached worktree, removed), and exits 0 on this change (21:25:47Z, preflight 23 tests OK, ordinary=0, No issues found over the 60 ordinary inputs). A scan of this lock alone exits 1, then 0. Tests, TZ=UTC, on this change's final tree (21:32:48Z to 21:39:30Z): tests.test_osv_lockfile_coverage with tests.test_wsl_retrieval.RetiredRunnerTests, 65 tests OK; the 16 modules that name the recipe or its lock outside local pages, with tests.test_provenance_digest_custody, 950 tests OK (55 skipped); the 32 tests/test_local_pages*.py modules, tests.test_local_pages_policy_grants among them, 547 tests OK. After the receipt's and the summary's last edits, tests.test_receipt_sha256_key_custody, tests.test_provenance_digest_custody and the 32 local-pages modules ran again: 578 tests OK. validate.py passed (12148 hashed files); evidence_manifest.py --check passed; git diff --check is clean. The isolated hashed install (CPython 3.13.16), uv pip check (178 packages), the SDK import, an mcp 1.30.0 check (StreamableHTTPSessionManager defaults session_idle_timeout 1800, max_sessions 10000) and a fastmcp 3.2.0 in-memory client smoke pass; the PyPI hash check exits 0; resolver.py --help and run --help exit 0. Not run: run-e2e.sh and e2e/ (the installed prefix, images, gateway and model calls) and install.sh (a host install). Record: the research.md section; the receipt evidence/receipts/osv-openhands-mcp-relock-20261015.json, with its exact architecture_receipt grant in tools/local-pages/source_policy.json and its POST_PIN_RECEIPT_GRANTS row in tests/test_local_pages_policy_grants.py; the returned outputs under the relock-2026-10-15-mcp prefix beside the recipe; manifests/evidence.json. The NuGet-digest P3 from the GPT read of #1178 lands in the next commit, as the command center's 20:58Z ruling directs. Co-authored-by: Claude Opus 5.5 <[email protected]>
seathatflowsinourveins
added a commit
that referenced
this pull request
Oct 17, 2026
adoption/platforms/linux-wsl2-new-distro.md:1247 keeps the raw stage-1 transcript private and never committed, and :1240-1274 prescribe a stage-1 receipt filled from adoption/templates/wsl/stage1-receipt.example.json instead. So this commit: - removes evidence/artifacts/live-distro-stage1-logs-20261017/ (the three redacted transcripts and their receipt.json) and its four files[] rows; - adds one receipt per distribution under evidence/receipts/: wsl-new-distro-stage1-nativestack2604-20261002, wsl-new-distro-stage1-nativehorizonny-20261015 and wsl-new-distro-stage1-nativehorizonny-r1-20261015, each filled only from its own private transcript, with the template's 212 recipe steps, null where the transcript holds no record, and source_transcript giving the original's path, size and sha256 on Z:; - registers the three files through scripts/host_receipts.py register_file and adds their receipts[] rows (same id, kind, component_ids, claim and limitations, plus path), as the recipe's Contribute step says. Sanitizing follows :1248-1250 and <win-host>; the transcripts hold no GUID. The Architecture build refuses a registered receipt that has no exact grant (tests.test_local_pages_architecture_landscape_exclusions failed in CI run 39001649622, validate-shard-6, at b72d3d6). Following the post-pin grant precedent (#1047, #1060, #1178, #1191), this commit adds one exact architecture_receipt row per new receipt to tools/local-pages/source_policy.json and one POST_PIN_RECEIPT_GRANTS entry each, with its reason, to tests/test_local_pages_policy_grants.py. Both files are re-registered through register_file. Co-Authored-By: Claude Opus 5.5 <[email protected]>
5 tasks done
seathatflowsinourveins
added a commit
that referenced
this pull request
Oct 17, 2026
…onNY's rehearsal (#1235) * Harvest the live distros' Stage-1 transcripts as sanitized evidence (cleanup H01) Add evidence/artifacts/live-distro-stage1-logs-20261017/ with sanitized copies of the three Stage-1 PowerShell transcripts that existed only on Z: (NativeStack2604, NativeHorizonNY and NativeHorizonNY-r1). Add receipt.json, which gives each original's path, size, sha256 and mtime and lists every redaction by line. The originals stay on Z: unchanged. Sanitizing follows adoption/platforms/linux-wsl2-new-distro.md:1248-1250 and docs/decisions/2026-10-09-host-name-scan.md:160-161. The placeholders are <win-host>, <win-user>, %USERPROFILE% and <WSL_USER>, replaced inside lines only: 66 lines change, and no line is added or removed. CRLF becomes LF per .gitattributes:2. The four files are registered in manifests/evidence.json through scripts/host_receipts.py register_file. Co-Authored-By: Claude Opus 5.5 <[email protected]> * Rework H01 into stage-1 receipts per the WSL recipe's documented form adoption/platforms/linux-wsl2-new-distro.md:1247 keeps the raw stage-1 transcript private and never committed, and :1240-1274 prescribe a stage-1 receipt filled from adoption/templates/wsl/stage1-receipt.example.json instead. So this commit: - removes evidence/artifacts/live-distro-stage1-logs-20261017/ (the three redacted transcripts and their receipt.json) and its four files[] rows; - adds one receipt per distribution under evidence/receipts/: wsl-new-distro-stage1-nativestack2604-20261002, wsl-new-distro-stage1-nativehorizonny-20261015 and wsl-new-distro-stage1-nativehorizonny-r1-20261015, each filled only from its own private transcript, with the template's 212 recipe steps, null where the transcript holds no record, and source_transcript giving the original's path, size and sha256 on Z:; - registers the three files through scripts/host_receipts.py register_file and adds their receipts[] rows (same id, kind, component_ids, claim and limitations, plus path), as the recipe's Contribute step says. Sanitizing follows :1248-1250 and <win-host>; the transcripts hold no GUID. The Architecture build refuses a registered receipt that has no exact grant (tests.test_local_pages_architecture_landscape_exclusions failed in CI run 39001649622, validate-shard-6, at b72d3d6). Following the post-pin grant precedent (#1047, #1060, #1178, #1191), this commit adds one exact architecture_receipt row per new receipt to tools/local-pages/source_policy.json and one POST_PIN_RECEIPT_GRANTS entry each, with its reason, to tests/test_local_pages_policy_grants.py. Both files are re-registered through register_file. Co-Authored-By: Claude Opus 5.5 <[email protected]> * Fold both families' reads of c4c5242 into the three stage-1 receipts The three receipts are rebuilt by the same transcript-line generator, and their files[] and receipts[] rows are re-registered. Claude family: - P2-1 (two real-run receipts, the 29 R1 rows): rows the transcript does not record keep the template's text, so no R1 row names a production distribution (linux-wsl2-new-distro.md:167-168, :172, :1269-1270). The steps[] limitation states the R1 exception; in the r1 receipt only the recorded R1 rows carry its own name. - P3-1 (nativestack2604 steps 90, 91, 94, 95): the unlabeled '0' lines are no longer read as exits; those exits are null and the excerpts say so. - P3-2 (creation_path_basis and the 24 W6 excerpts): no "--from-file" claim; the basis is W3's '#cloud-config' output and the absent W6 block. - P3-3 (nativehorizonny rehearsal block, its limitation and the 29 R1 excerpts): the R1 identity is hedged as "taken as". - P3-4 (r1 rehearsal.basis): cites docs/decisions/2026-10-15-new-wsl-clean-install-plan.md:914-915, whose 18:37:42Z removal equals the transcript's last End time, and drops the "every proof held" implication. - P3-5 (every null field): each receipt names every null field with its reason, and the generator asserts none is left unnamed. - P3-6 (nativestack2604 rehearsal limitation): points to evidence/artifacts/new-wsl-rehearsal-20261002/ and says those records name StackRehearsal2604 and its e1, r2 and r3 runs, not NativeStack2604. Muse family: - P2 (nativehorizonny :15), P2 (nativehorizonny-r1 :15) and P2 (nativestack2604 :15), with their manifest copies: covered by the full null-field naming above. - P2 (nativestack2604 :19): the rehearsal block is described as present with null fields. - P3 (each receipt :14): the sanitizing note lists only the placeholders in copied values, keeps the template's own placeholders apart, and says why <win-user> and <win-host> do not appear. - P3 (nativehorizonny :20): same fix as Claude P3-3. 13 of 13 findings covered. Co-Authored-By: Claude Opus 5.5 <[email protected]> * Cleanup H01 fold: move three 2604 null fields to the no-line bucket, correct the sanitizing note Closes both findings of the CC verdict on 39ab807 (/var/tmp/cc-cc-work/nas1235-micro/CC-DELTA-39ab8072.md, CHANGES_REQUESTED; full read /var/tmp/cc-cc-work/nas1235-micro/MICRO-delta-39ab8072.md). P3-A: in the NativeStack2604 stage-1 receipt, first_launch.user_prompt_marker, first_launch.oobe_failed_marker and first_launch.systemd_user_session_warning sat in the "shows the source command but not the output" null bucket (:17). The transcript has no line for the W5 launch command (its W5 block shows only an unlabeled '0' before its first labeled command, as the receipt's own launch row says), so the three fields move to the "no line for the source command" bucket (:18). The manifest row matches. The NativeHorizonNY receipts keep their buckets: their launch is labeled. P3-B: the sanitizing note (:14 of each of the three receipts) said the Windows user name and computer name occur only in transcript header lines the receipt does not copy. They also occur in transcript body paths and in the Host Application header, of which each receipt copies a sanitized run-from path (deviations[0] in 2604, deviations[1] in the NativeHorizonNY receipts). The note now says so and names the replacements that remove them. The three manifest copies match word for word. The three receipt rows in manifests/evidence.json are re-registered with host_receipts.register_file (sha256 and bytes). validate.py and evidence_manifest.py --check pass. Co-Authored-By: Claude Sonnet 5.5 <[email protected]> * Cleanup H01 fold 4: give each receipt's sanitizing note the facts its own transcript supports Closes P3-1 of the CC verdict on 5ed31f6 (/var/tmp/cc-cc-work/nas1235-micro/CC-DELTA-5ed31f69.md, CHANGES_REQUESTED; full read /var/tmp/cc-cc-work/nas1235-micro/MICRO-delta-5ed31f69.md). The previous fold copied one sentence into all three receipts' :14 note. It was true only for the Windows user name in the NativeStack2604 receipt. The verdict records that the sentence came from the CC's earlier verdict. NativeStack2604 receipt: the Windows user name appears in body paths, in the Host Application header (copied only as the sanitized run-from path at deviations[0]) and in the Username and RunAs User headers, and the listed replacements remove it. The computer name appears only in the Username, RunAs User and Machine headers, which the receipt does not copy. NativeHorizonNY and r1 receipts: the user name appears in two body lines (the user-data name line and the default= line, rendered <WSL_USER>) and in the Username and RunAs User headers. The computer name appears only in the Username, RunAs User and Machine headers. The Host Application header carries neither name, and deviations[1] copies its run-from directory as it stands. The three manifest copies (manifests/evidence.json, the limitations of each receipt row) match the receipts word for word, and the three file rows are re-registered with host_receipts.register_file (sha256 and bytes). No other line changes. Co-Authored-By: Claude Sonnet 5.5 <[email protected]> --------- Co-authored-by: Claude Opus 5.5 <[email protected]>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Scope
ignoreUntil = 2026-10-13has failed the requiredosv-scannercheck on every run since 2026-10-13T00:00Z, with theirIGNORE_SCOPESrows and the lock'sIGNORE_ALLOWED_LOCKSentry. From the review it also deletes the two unused nltk and setuptools ignores, which would have failed the check the same way on 2026-12-24, so the ordinary OSV config holds no ignore. No other pin moves; the hash-bound Lumibot lock is untouched.c63c83a822f2687c3e7aed2d3b3ede0413119c9b(rebased from738fdf70; main's one new commit, Rule text: converged candidates by multi-angle convergence, models only through a converged harness #1049, overlapped only inmanifests/evidence.json). Commits:8d459ce9(the relock) and4b23521c(the review fixes).lane:foundationblueprints/runtime-workers/openhands/requirements.lock,blueprints/runtime-workers/openhands/pins.json(requirements_sha256),blueprints/runtime-workers/openhands/research.md,blueprints/runtime-workers/openhands/evidence/relock-2026-10-13-oauthlib.*(new),.github/osv-scanner.toml,tests/test_osv_lockfile_coverage.py,docs/decisions/2026-09-22-github-automation-closure.md,evidence/receipts/osv-openhands-oauthlib-relock-20261013.json(new),manifests/evidence.json, and the receipt's registration: its exactarchitecture_receiptgrant intools/local-pages/source_policy.jsonand itsPOST_PIN_RECEIPT_GRANTSledger row intests/test_local_pages_policy_grants.py(the Register Harbor 0.24.0 as a container harness with a measured install, smoke and route-b probe #1047 pattern; without them the Architecture build refuses a registered receipt); andtests/test_receipt_sha256_key_custody.py(new, the regression test of the review fix below).Review fixes (Claude read and GPT read of e393356)
reproduction.control_uv_lock_sha256andreproduction.new_uv_lock_sha256, tworelock.txtlines, and theuv.lockargument of the relock script'ssha256sum. Those files are not in the repository. All of these are deleted;uv_lock_diffanduv_change_list_deltacarry the claim without a digest. The rule isdocs/decisions/2026-10-12-harbor-parallel-runtimes.md, "Custody of the run originals". The receipt records the correction. A re-run of the corrected script reproduced the committed lock (cmpexit 0), and its output equalsrelock.txtexcept four timestamps and two resolver timings.tests/test_receipt_sha256_key_custody.pychecks everyevidence/receiptskey ending in_sha256. Each must be the sha256 of a tracked file or name a public artifact: an https URL underurlor under a key of its own prefix (<prefix>_url,<prefix>_published_source), or the same digest in a tracked pin record (pins.json,pins-*.json, a workflow). The 99 older receipts that carry the shape are frozen by count (702 keys); the frozen list only shrinks. Digests of earlier versions of a tracked file, such as a relock receipt'sprevious_sha256, stay frozen: the check reads the current checkout, not history. The test fails ate3933560(and at the rebased pre-fix commit) on exactlyreproduction.control_uv_lock_sha256andreproduction.new_uv_lock_sha256, and passes after the fix.tests/test_local_pages_policy_grants.pyand the receipt'scross_family_reviewnow cite Relock OpenHands onto oauthlib 4.0.0 and delete the expired oauthlib ignores #1060 and both reads by name instead of a pending read.ignore_entry_problemswith the date 2026-12-24 returned "ignoreUntil has expired" for both, andaffected_pinsover the 60 ordinary inputs returned no pin either would hide. Both ignores and theirIGNORE_SCOPESrows are deleted; the guard's own mutation tests keep the two scopes asGUARD_FIXTURE_SCOPES, which grant nothing. After it, the ordinary config parses to an empty table,ignore_entry_problemsreturns nothing with the date 2026-12-24, and the scan step exits 0 with "No issues found" and no unused ignore. The receipt (unused_ignores_removed) and the decision record's supersession record it.Refs #518 (its oauthlib half; the PyJWT 2.15.1 half is deferred, so #518 stays open).
SOTA sources
oauthlib-4.0.0-py3-none-any.whlsha256624c28c13a0a59cabf9747dfa52af63be3e512a7f2714df16e91b5b3a145e6cd, sdistoauthlib-4.0.0.tar.gzsha256efb274799819440f95b4ab3b818869f1ce9ae26c5beacba0201d1a1b76b54f86, uploaded 2026-09-28T06:01:17Z and 06:01:18Z; PyPI's latest), and its release notes https://github.com/oauthlib/oauthlib/releases/tag/v4.0.0 (tag commit145a9a4690cb4d9de30d15fcc2984e34c49df741: two server-side breaking changes, fix(local-pages): show native Claude record rates and resilient probes #951 and Allow configured loopback Loki endpoints for native-data #919/Secret-path guard hook refuses when its script is missing #920, plus the PKCE fix Add isolated opt-in OmniRoute transport to the Codex lane #963).>= 0.6.1, <= 3.3.1, first patched 4.0.0) and GHSA-xpv3-w29h-x7cv (CVE-2026-49265,>= 3.0.0, < 4.0.0, first patched 4.0.0); OSV aliases https://osv.dev/vulnerability/PYSEC-2026-4113 and https://osv.dev/vulnerability/PYSEC-2026-4114 (fixed 4.0.0).security-scan.ymlpins: https://github.com/google/osv-scanner/releases/tag/v2.6.0 (osv-scanner_linux_amd64sha256ca69b3d3cd08f889a49dc0a383122f71cc528b83803671df5fd874d97485b108, commite840a6e8adb14b7777c78e26cfbf6e2abc1d1fc6), installed by the workflow's own checksum-verified download; itsinternal/config/config.gomatches an ignore by id and applies it only whileignoreUntilis in the future.uv lock --upgrade-package,uv lock --checkanduv export --frozen --no-emit-workspaceas the installed client's--helpdocuments them; the workspace'sexclude-newer = "7 days"applies.blueprints/runtime-workers/openhands/evidence/relock-2026-10-05-fsspec.relock.sh.txtandresearch.md"Runtime lock security relock (2026-09-27)", on the pinned SDK archive OpenHands/software-agent-sdk@fcc102a697874d54a357e36004e02c95040dbdc0(sha2562d3006de86eaec690a82e497fcd4459816637afe6e53f7da87783183792148a8).oauthlib>=3.0.0); its own test suite from the sdist the lock pins (sha256b3dffaebd884d8cd778494369603a9e7b58d29111bf6b41bdc2dcd87203af4e9).docs/decisions/2026-10-12-harbor-parallel-runtimes.md("Custody of the run originals") andtests/test_provenance_digest_custody.pystate it; the new test extends that rule fromprovenancelists to every receipt key ending in_sha256.Evidence-class table
relock-2026-10-13-oauthlib.relock.sh.txt,.relock.txtcmpwithu3/new/requirements.lock.repro, exit 0 (first run and the corrected-script re-run)relock-2026-10-05-fsspec.hash-check.py.txt(unchanged) withoauthlib, exit 0uv pip check, SDK/tools and oauthlib imports passrelock-2026-10-13-oauthlib.install-check.sh.txt, exit 0relock-2026-10-13-oauthlib.requests-oauthlib-tests.sh.txtrelock-2026-10-13-oauthlib.oauthlib-importers.py.txtrelock-2026-10-13-oauthlib.osv-scan-step.sh.txt,.osv-before/after/final.ordinary.txtexcluded) and unchanged.github/osv-scanner-lockfiles.json; sha256a8dce0af..._sha256publishes a digest no one can check, beyond the frozen older receiptstests/test_receipt_sha256_key_custody.py: fails ate3933560on the two scratch uv.lock keys, passes after the fixaffected_pinsover the 60 ordinary inputs (none);ignore_entry_problemswith the date 2026-12-24, before (both expired) and after (none);.osv-final.ordinary.txtLocal commands run
Decision record
docs/decisions/2026-09-22-github-automation-closure.md, new section "oauthlib relock and the end of the oauthlib ignores (2026-10-13)" with its paragraph on the nltk and setuptools ignores, plus a dated supersession line in its ignore list. It supersedes, for the Lumibot lock, the 2026-09-29 and 2026-09-30 Expiry sentences (renew the oauthlib ignores for that lock alone, or delete it), and the Expiry sentences of the 2026-09-26 entries and the 2026-09-27 allowlist (relock onto a fixed nltk release, or renew). The Lumibot lockchecks have been excluded from the inventory since the 2026-10-06 ruling, so no scan reads them and their bytes stay unchanged. Recipe record:blueprints/runtime-workers/openhands/research.md"Runtime lock oauthlib relock (2026-10-13)". Receipt:evidence/receipts/osv-openhands-oauthlib-relock-20261013.json. Overturn: an advisory for oauthlib 4.0.0 that only a later release fixes, an OpenHands run that fails with 4.0.0 and passes with 3.3.1, a scanned lock pinning oauthlib below 4.0.0 again, or a new ordinary ignore (it needs its own reachability review andIGNORE_SCOPESrow).Host evidence
Not applicable: no file under
evidence/hosts/changes.Checklist
version comment (no floating tags). No workflow changes.
permissions: {}and grant each jobonly what it needs (
contents: read, or an explicitly justified addition). No workflow changes.added without a documented owner.
moved or overwritten).
Follow-ups
ignoreUntil, as its own PR. Both calendar failures here (the oauthlib pair on 2026-10-13, and the nltk and setuptools pair that would have failed on 2026-12-24) surfaced first as a failed required check. A scheduled or preflight warning ahead of each expiry would raise them while the fix can still be planned.fcc102a6, the uv 0.12.22 tag, the advisory records or the three CI runs. So the release-note, PyPI metadata, resolver-replay and upstream-test claims are retained evidence, not results that read reproduced. Supply the pinned source, metadata and artifact captures and rerun the native checks.docs/decisions/2026-09-28-community-sweep.md:298cites lines 1626-1631 of the automation-closure record, which no longer hold the cited policy; it was already wrong before this PR. Bind historical references to their commit, or move live references to stable section anchors.manifests/evidence.jsonandtools/local-pages/source_policy.json, none added here; normalize them when those records are next maintained.blueprints/runtime-workers/openhands/README.mdstill says the lock carries "five dependency upgrades" (stale since the urllib3 relock; ten with this one).🤖 Generated with Claude Code