Repository navigation
Bump certifi to 2026.10.19 (GHSA-6q48-6c7w-9gw2) - #1266
Open
seathatflowsinourveins wants to merge 3 commits into
Open
seathatflowsinourveins wants to merge 3 commits into
seathatflowsinourveins wants to merge 3 commits into
Conversation
GHSA-6q48-6c7w-9gw2 (published 2026-10-20 19:35Z): certifi >= 2019.03.09, < 2026.10.19 bundles emSign ECC Root CA - G3, whose intermediates had compromised keys. certifi 2026.10.19 drops that root and keeps the unaffected emSign roots. #1262's required osv-scanner context fails on it across every lock below. Lock delta (certifi only, following #1265's method): - certifi 2026.7.22 -> 2026.10.19 in every lock that pinned it: the adaptive-paper engine lock, the trading-2604 runtime uv.lock, the memory native-qualification uv.lock, the OpenHands worker lock and pins, the adoption SDK lock and constraints, portfolio-risk, catalyst-provenance, sim-crosscheck-hftbacktest, deepagents-omniroute, openhands-native-capabilities, mlx-smoke and the macOS e2e evidence lock. - Hashes from PyPI's JSON for 2026.10.19, each file downloaded and checked: wheel 42d35340cc5b9ba78e818ddbff0c5b1c2b779de448a340fd1b989f5fa8670e1b, sdist 035c1e85572b141bf1c3a3eff0e33a8eb74917522f2559075ff8d2fea780a1ae. No other package line changes in any lock. - adaptive-paper engine lock sha256 645544edbd13e7ff2434d5459e981ec0a2506c944e30d47844b4f3c57f602db8 -> 8e08849c3370b905b7993a75e2f356920d45cdba81d64709a71fa3ff6263cb2d. - trading-2604 runtime lock a1413f20... -> 2df71327...; the published a1413f20 becomes one more recorded migration input in install-trading-2604.sh, as #873 and #1265 did, never acceptance; accept-trading-2604.sh and adaptive-paper/scheduled_trial.sh require the new hash. Bindings refreshed: .github/osv-scanner-lockfiles.json (per-lock sha256 and the retained fixtures as excluded evidence), adaptive-paper/source-hashes.json (scheduled_trial.sh, test_scheduled_trial.py), tests/test_scheduled_trial.py, tests/test_trading_2604_migration.py, runtime-2604/README.md, the convergence records' frozen inputs re-pointed to the retained copies, catalogs/landscape/final-stack.json (sources hash of the trading-2604 lock only), and manifests/evidence.json for every changed and added file. Retained bytes: each pre-bump lock is kept byte-identical (git show da55495) under evidence/artifacts/certifi-2026.10.19-repin-20261020/ historical/ as published-<hash>-<name>, an excluded evidence fixture in the osv inventory (not an install input; the active lock is scanned), with repin.json as the record. Checks (python -B, scratch venv from .github/requirements-ci.txt with --require-hashes): - scripts/validate_convergence.py --all-recorded: 33 records, all valid; - scripts/validate.py: passed; - scripts/evidence_manifest.py --check: passed (12,342 files); - scripts/final_stack.py --check: passed; - unittest of test_trading_2604_lock, test_trading_2604_migration, test_scheduled_trial, test_osv_lockfile_coverage, test_receipt_sha256_key_custody, test_convergence_contract, test_evidence_manifest, test_research_convergence_practice and test_sota_convergence: 310 tests, OK; - git diff --check: clean. osv-scanner was not run locally (not installed); the required context runs it. No install, accept or trial script was run; no host state, broker or paper contact. LIVE remains NO-GO. Co-Authored-By: Claude Opus 5.5 <[email protected]>
…rd-5) The certifi bump changes adoption/sdk/requirements-linux-x86_64-py313.lock, which tests/test_adoption_contract.py binds two ways: every non-SDK pin must equal the supply-chain receipt's historical inventory (certifi 2026.7.22), and the runtime-sdk-20261003 qualification receipt's lock_sha256 (3a17fa09) must equal the current lock. Both failed at 1328f12, in test_lock_matches_accepted_inventory_and_all_pins_have_hashes and test_sdk_upgrade_keeps_independent_inventory_and_client_guards (validate-shard-5); both pass at da55495. The ignore route does not apply: .github/osv-scanner.toml allows an ignore only for unreachable code, and certifi's bundle is reachable from any HTTPS client in this SDK environment. The relock is recorded instead of silently re-baselined, in the shape of IGNORE_ALLOWED_LOCKS in tests/test_osv_lockfile_coverage.py: - SDK_SECURITY_RELOCKS names certifi 2026.7.22 -> 2026.10.19 and GHSA-6q48-6c7w-9gw2 (GHSA-6q48-6c7w-9gw2, first patched version 2026.10.19). The inventory guard applies exactly that move, and only from the inventory's own version. - SDK_QUALIFIED_LOCK is the retained pre-bump lock (this PR's evidence fixture, byte-identical to da55495). When the receipt's lock_sha256 is not the current lock's, it must be that fixture's, and the current lock may differ from it only in the relocked blocks; the preamble and every other block must be byte-identical. - The historical receipts stay unedited. A re-qualification of the SDK pair records the new lock and inventory and empties the table. New regression test: test_relocked_lock_differs_from_the_qualified_lock_only_in_recorded_relocks. It keeps every version, changes one charset-normalizer hash in the current lock and then in the qualified fixture, and requires the two new guards to refuse each. The existing duckdb and openai-codex-cli-bin drift cases still fail on their own guards. manifests/evidence.json carries the test file's new hash. Local, in a requirements-ci venv: - tests.test_adoption_contract, test_osv_lockfile_coverage and test_evidence_manifest: 80 tests, OK; - scripts/validate.py: rc 0; evidence_manifest --check: passed (12,342 files); final_stack --check: passed; git diff --check: clean. validate_shards.py run --shard 5 --shards 8 at 1328f12 also failed locally in test_adoption_launchd and test_codex_job_lane_hardening. Those failures come from the checkout location: mise installs [email protected] there, and GitHub's attestation API refused it with a 403 rate limit. In clean worktrees of 1328f12 and of da55495, the same three modules give the same result (1 pre-existing error, test_claude_usage_sampler). test_runtime_boot needs PyYAML, which this venv lacks, on both commits. No install, accept or trial script was run; no host state, broker or paper contact. LIVE remains NO-GO. Co-Authored-By: Claude Opus 5.5 <[email protected]>
…ree modes Both families' checks of 1328f12 (AMEND, agreed): 1. HIGH (Claude D1, GPT P2a): the adoption SDK lock contract. The contract now admits exactly the move evidence/artifacts/ certifi-2026.10.19-repin-20261020/repin.json records for adoption/sdk/requirements-linux-x86_64-py313.lock: - certifi 2026.7.22 -> 2026.10.19, GHSA-6q48-6c7w-9gw2; - prior 3a17fa09... (the retained qualified lock, which the runtime-sdk-20261003 receipt names) -> current 9ee41e37.... It also requires the record's "Prior native acceptance does not transfer". The dated receipts (the 09-19 supply-chain inventory and the 10-03 SDK qualification) are unedited. The inventory guard and the client mutation guard both stay (the duckdb and openai-codex-cli-bin cases). The regression test test_relocked_lock_differs_from_the_qualified_lock_only_in_recorded_relocks now refuses four version-preserving mutations, each by its own guard: a lock hash, a qualified-fixture hash, the record's current sha256 and the record's no-transfer sentence. 2. GPT P2b: tools/mlx-smoke/requirements.lock.txt did not reproduce under hardware-profile-smoke.yml's --exclude-newer 2026-09-23T00:00:00Z. The step adds --exclude-newer-package certifi=2026-10-20T02:30:00Z. That is uv 0.12.17's own per-package override (crates/uv-cli/src/lib.rs: 7158-7177, PACKAGE=DATE, flattened into pip compile through ResolverArgs:7486 and PipCompileArgs:1642, at tag 0.12.17). certifi 2026.10.19's files reached PyPI at 2026-10-20T02:24:15Z and 02:24:16Z, and no later release exists. Every other pin keeps the original cutoff. Reproduced locally with the pinned uv 0.12.17 (x86_64 release archive, sha256 fa82fd8d..., equal to its published .sha256) and the step's exact arguments: diff -u against the committed lock is empty. 3. MEDIUM (Claude D2, GPT P3): mode 100755 restored on adaptive-paper/scheduled_trial.sh, runtime-2604/accept-trading-2604.sh and runtime-2604/install-trading-2604.sh, with no content change (blobs afe6305, ed1b600 and 412c571, unchanged). manifests/evidence.json carries the new hashes of the test and the workflow. No lock byte changes; the engine lock stays 8e08849c. Local, in a requirements-ci venv: - scripts/validate.py: rc 0; - evidence_manifest --check: passed (12,342 files); - final_stack --check: passed; - validate_convergence --all-recorded: 33 records valid; - test_adoption_contract, test_osv_lockfile_coverage, test_evidence_manifest, test_workflow_hardening, test_workflow_security_coverage, test_scheduled_trial and test_trading_2604_migration: 234 tests, OK (13 skipped); - git diff --check: clean. Shard 5 (validate_shards.py run --shard 5 --shards 8) at 710733d, in a clean worktree: 2,304 tests, 0 failures. Its 2 errors are local only and the same on da55495: test_claude_usage_sampler, and test_runtime_boot, which needs PyYAML. No install, accept or trial script was run; no host state, broker or paper contact. LIVE remains NO-GO. Co-Authored-By: Claude Opus 5.5 <[email protected]>
seathatflowsinourveins
added a commit
that referenced
this pull request
Oct 21, 2026
Stack the five native Pillow relocks on #1266 accepted head eb898b5, carrying its reviewed certifi pins unchanged. Only Pillow package entries move. Preserve exactly the two reviewed trading certifi timestamp strings under the wave builder decision; both pinned uv versions accept the lock offline. Reproduce the worker certifi export byte for byte before reapplying the unchanged scratch-only Pillow override, rule-6 turn-back and F18 scope. Retain each accepted intermediate input once; reuse #1266 reviewed history and relocate only frozen receipt paths, never their digests or acceptance. Refresh all live binders and add real predecessor-admission regression. Checks: 901 tests, 873 pass and 28 optional skips; publication validation, all 33 convergence records, evidence manifest, final-stack, trading gates, shell syntax and whitespace pass. Local osv-scanner is unavailable; normal exact-head hosted checks and both-family reviews remain required. Sources and compatibility evidence: evidence/artifacts/ pillow-13-repin-20261020/RESEARCH.md and worker research.md, 2026-10-21. No destination-host, image, grader, model, broker or paper acceptance.
8 of 12 tasks
seathatflowsinourveins
added a commit
that referenced
this pull request
Oct 21, 2026
* Bump certifi to 2026.10.19 (GHSA-6q48-6c7w-9gw2) GHSA-6q48-6c7w-9gw2 (published 2026-10-20 19:35Z): certifi >= 2019.03.09, < 2026.10.19 bundles emSign ECC Root CA - G3, whose intermediates had compromised keys. certifi 2026.10.19 drops that root and keeps the unaffected emSign roots. #1262's required osv-scanner context fails on it across every lock below. Lock delta (certifi only, following #1265's method): - certifi 2026.7.22 -> 2026.10.19 in every lock that pinned it: the adaptive-paper engine lock, the trading-2604 runtime uv.lock, the memory native-qualification uv.lock, the OpenHands worker lock and pins, the adoption SDK lock and constraints, portfolio-risk, catalyst-provenance, sim-crosscheck-hftbacktest, deepagents-omniroute, openhands-native-capabilities, mlx-smoke and the macOS e2e evidence lock. - Hashes from PyPI's JSON for 2026.10.19, each file downloaded and checked: wheel 42d35340cc5b9ba78e818ddbff0c5b1c2b779de448a340fd1b989f5fa8670e1b, sdist 035c1e85572b141bf1c3a3eff0e33a8eb74917522f2559075ff8d2fea780a1ae. No other package line changes in any lock. - adaptive-paper engine lock sha256 645544edbd13e7ff2434d5459e981ec0a2506c944e30d47844b4f3c57f602db8 -> 8e08849c3370b905b7993a75e2f356920d45cdba81d64709a71fa3ff6263cb2d. - trading-2604 runtime lock a1413f20... -> 2df71327...; the published a1413f20 becomes one more recorded migration input in install-trading-2604.sh, as #873 and #1265 did, never acceptance; accept-trading-2604.sh and adaptive-paper/scheduled_trial.sh require the new hash. Bindings refreshed: .github/osv-scanner-lockfiles.json (per-lock sha256 and the retained fixtures as excluded evidence), adaptive-paper/source-hashes.json (scheduled_trial.sh, test_scheduled_trial.py), tests/test_scheduled_trial.py, tests/test_trading_2604_migration.py, runtime-2604/README.md, the convergence records' frozen inputs re-pointed to the retained copies, catalogs/landscape/final-stack.json (sources hash of the trading-2604 lock only), and manifests/evidence.json for every changed and added file. Retained bytes: each pre-bump lock is kept byte-identical (git show da55495) under evidence/artifacts/certifi-2026.10.19-repin-20261020/ historical/ as published-<hash>-<name>, an excluded evidence fixture in the osv inventory (not an install input; the active lock is scanned), with repin.json as the record. Checks (python -B, scratch venv from .github/requirements-ci.txt with --require-hashes): - scripts/validate_convergence.py --all-recorded: 33 records, all valid; - scripts/validate.py: passed; - scripts/evidence_manifest.py --check: passed (12,342 files); - scripts/final_stack.py --check: passed; - unittest of test_trading_2604_lock, test_trading_2604_migration, test_scheduled_trial, test_osv_lockfile_coverage, test_receipt_sha256_key_custody, test_convergence_contract, test_evidence_manifest, test_research_convergence_practice and test_sota_convergence: 310 tests, OK; - git diff --check: clean. osv-scanner was not run locally (not installed); the required context runs it. No install, accept or trial script was run; no host state, broker or paper contact. LIVE remains NO-GO. Co-Authored-By: Claude Opus 5.5 <[email protected]> * Bind the SDK lock's certifi relock to its qualification (validate-shard-5) The certifi bump changes adoption/sdk/requirements-linux-x86_64-py313.lock, which tests/test_adoption_contract.py binds two ways: every non-SDK pin must equal the supply-chain receipt's historical inventory (certifi 2026.7.22), and the runtime-sdk-20261003 qualification receipt's lock_sha256 (3a17fa09) must equal the current lock. Both failed at 1328f12, in test_lock_matches_accepted_inventory_and_all_pins_have_hashes and test_sdk_upgrade_keeps_independent_inventory_and_client_guards (validate-shard-5); both pass at da55495. The ignore route does not apply: .github/osv-scanner.toml allows an ignore only for unreachable code, and certifi's bundle is reachable from any HTTPS client in this SDK environment. The relock is recorded instead of silently re-baselined, in the shape of IGNORE_ALLOWED_LOCKS in tests/test_osv_lockfile_coverage.py: - SDK_SECURITY_RELOCKS names certifi 2026.7.22 -> 2026.10.19 and GHSA-6q48-6c7w-9gw2 (GHSA-6q48-6c7w-9gw2, first patched version 2026.10.19). The inventory guard applies exactly that move, and only from the inventory's own version. - SDK_QUALIFIED_LOCK is the retained pre-bump lock (this PR's evidence fixture, byte-identical to da55495). When the receipt's lock_sha256 is not the current lock's, it must be that fixture's, and the current lock may differ from it only in the relocked blocks; the preamble and every other block must be byte-identical. - The historical receipts stay unedited. A re-qualification of the SDK pair records the new lock and inventory and empties the table. New regression test: test_relocked_lock_differs_from_the_qualified_lock_only_in_recorded_relocks. It keeps every version, changes one charset-normalizer hash in the current lock and then in the qualified fixture, and requires the two new guards to refuse each. The existing duckdb and openai-codex-cli-bin drift cases still fail on their own guards. manifests/evidence.json carries the test file's new hash. Local, in a requirements-ci venv: - tests.test_adoption_contract, test_osv_lockfile_coverage and test_evidence_manifest: 80 tests, OK; - scripts/validate.py: rc 0; evidence_manifest --check: passed (12,342 files); final_stack --check: passed; git diff --check: clean. validate_shards.py run --shard 5 --shards 8 at 1328f12 also failed locally in test_adoption_launchd and test_codex_job_lane_hardening. Those failures come from the checkout location: mise installs [email protected] there, and GitHub's attestation API refused it with a 403 rate limit. In clean worktrees of 1328f12 and of da55495, the same three modules give the same result (1 pre-existing error, test_claude_usage_sampler). test_runtime_boot needs PyYAML, which this venv lacks, on both commits. No install, accept or trial script was run; no host state, broker or paper contact. LIVE remains NO-GO. Co-Authored-By: Claude Opus 5.5 <[email protected]> * Bind the SDK relock to repin.json, reproduce the mlx lock, restore three modes Both families' checks of 1328f12 (AMEND, agreed): 1. HIGH (Claude D1, GPT P2a): the adoption SDK lock contract. The contract now admits exactly the move evidence/artifacts/ certifi-2026.10.19-repin-20261020/repin.json records for adoption/sdk/requirements-linux-x86_64-py313.lock: - certifi 2026.7.22 -> 2026.10.19, GHSA-6q48-6c7w-9gw2; - prior 3a17fa09... (the retained qualified lock, which the runtime-sdk-20261003 receipt names) -> current 9ee41e37.... It also requires the record's "Prior native acceptance does not transfer". The dated receipts (the 09-19 supply-chain inventory and the 10-03 SDK qualification) are unedited. The inventory guard and the client mutation guard both stay (the duckdb and openai-codex-cli-bin cases). The regression test test_relocked_lock_differs_from_the_qualified_lock_only_in_recorded_relocks now refuses four version-preserving mutations, each by its own guard: a lock hash, a qualified-fixture hash, the record's current sha256 and the record's no-transfer sentence. 2. GPT P2b: tools/mlx-smoke/requirements.lock.txt did not reproduce under hardware-profile-smoke.yml's --exclude-newer 2026-09-23T00:00:00Z. The step adds --exclude-newer-package certifi=2026-10-20T02:30:00Z. That is uv 0.12.17's own per-package override (crates/uv-cli/src/lib.rs: 7158-7177, PACKAGE=DATE, flattened into pip compile through ResolverArgs:7486 and PipCompileArgs:1642, at tag 0.12.17). certifi 2026.10.19's files reached PyPI at 2026-10-20T02:24:15Z and 02:24:16Z, and no later release exists. Every other pin keeps the original cutoff. Reproduced locally with the pinned uv 0.12.17 (x86_64 release archive, sha256 fa82fd8d..., equal to its published .sha256) and the step's exact arguments: diff -u against the committed lock is empty. 3. MEDIUM (Claude D2, GPT P3): mode 100755 restored on adaptive-paper/scheduled_trial.sh, runtime-2604/accept-trading-2604.sh and runtime-2604/install-trading-2604.sh, with no content change (blobs afe6305, ed1b600 and 412c571, unchanged). manifests/evidence.json carries the new hashes of the test and the workflow. No lock byte changes; the engine lock stays 8e08849c. Local, in a requirements-ci venv: - scripts/validate.py: rc 0; - evidence_manifest --check: passed (12,342 files); - final_stack --check: passed; - validate_convergence --all-recorded: 33 records valid; - test_adoption_contract, test_osv_lockfile_coverage, test_evidence_manifest, test_workflow_hardening, test_workflow_security_coverage, test_scheduled_trial and test_trading_2604_migration: 234 tests, OK (13 skipped); - git diff --check: clean. Shard 5 (validate_shards.py run --shard 5 --shards 8) at 710733d, in a clean worktree: 2,304 tests, 0 failures. Its 2 errors are local only and the same on da55495: test_claude_usage_sampler, and test_runtime_boot, which needs PyYAML. No install, accept or trial script was run; no host state, broker or paper contact. LIVE remains NO-GO. Co-Authored-By: Claude Opus 5.5 <[email protected]> * Pin Pillow 13.0.0 on reviewed certifi 2026.10.19 head Stack the five native Pillow relocks on #1266 accepted head eb898b5, carrying its reviewed certifi pins unchanged. Only Pillow package entries move. Preserve exactly the two reviewed trading certifi timestamp strings under the wave builder decision; both pinned uv versions accept the lock offline. Reproduce the worker certifi export byte for byte before reapplying the unchanged scratch-only Pillow override, rule-6 turn-back and F18 scope. Retain each accepted intermediate input once; reuse #1266 reviewed history and relocate only frozen receipt paths, never their digests or acceptance. Refresh all live binders and add real predecessor-admission regression. Checks: 901 tests, 873 pass and 28 optional skips; publication validation, all 33 convergence records, evidence manifest, final-stack, trading gates, shell syntax and whitespace pass. Local osv-scanner is unavailable; normal exact-head hosted checks and both-family reviews remain required. Sources and compatibility evidence: evidence/artifacts/ pillow-13-repin-20261020/RESEARCH.md and worker research.md, 2026-10-21. No destination-host, image, grader, model, broker or paper acceptance. --------- Co-authored-by: Claude Opus 5.5 <[email protected]>
This branch has not been deployed
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.
Summary
Bump certifi to 2026.10.19 in every lock that pins it, for GHSA-6q48-6c7w-9gw2: from 2026.7.22, and from 2025.8.3 in
blueprints/runtime-workers/openhands/requirements.lock. The method is #1265's: certifi's pin and hashes change only, the lock-hash bindings are refreshed, and the pre-bump bytes are retained as excluded evidence fixtures.da5549584abb3c95f0c90d7aa0d948b2f72c7876(main).lane:shared. It touches the trading engine and runtime locks and other lanes' locks, so the other lane's acknowledgement is needed before merge.blueprints/us-equities/adaptive-paper/requirements-linux-x86_64-py312.lock(645544ed → 8e08849c);blueprints/us-equities/runtime-2604/trading-2604-runtime/uv.lock(a1413f20 → 2df71327);blueprints/memory-stack/native-qualification/uv.lock;blueprints/runtime-workers/openhands/requirements.lockandpins.json;adoption/sdk/requirements-linux-x86_64-py313.lockandaccepted-constraints.txt;blueprints/gap-wave2-20260923/us-equities__portfolio-risk/requirements-libs.lock;blueprints/us-equities/catalyst-provenance/requirements.lock;blueprints/us-equities/sim-crosscheck-hftbacktest/requirements.lock;examples/deepagents-omniroute/requirements.lock;examples/openhands-native-capabilities/requirements.lock;tools/mlx-smoke/requirements.lock.txt;evidence/artifacts/macos-syn-e2e-20260924/requirements-macos-arm64-py312.lock..github/osv-scanner-lockfiles.json;adaptive-paper/scheduled_trial.shandsource-hashes.json;runtime-2604/install-trading-2604.sh, where the published a1413f20 becomes a recorded migration input (as in Publish final runtime pins with lock-bound native acceptance #873 and Pin aiohttp 3.14.4 in all four runtime locks (GHSA-2g87, GHSA-5wr8, GHSA-494j) #1265), andaccept-trading-2604.shand its README;tests/test_scheduled_trial.pyandtests/test_trading_2604_migration.py;catalogs/landscape/final-stack.json;manifests/evidence.json;tests/test_adoption_contract.py: the SDK lock's certifi relock is recorded against its retained qualified lock and admitted exactly asrepin.jsonrecords it, with no transfer of prior acceptance (710733d, eb898b5);.github/workflows/hardware-profile-smoke.yml: the mlx-smoke lock check adds uv's own--exclude-newer-package certifi=2026-10-20T02:30:00Z, so the narrow repin reproduces and every other pin keeps the 2026-09-23 cutoff (eb898b5).scheduled_trial.sh,accept-trading-2604.shandinstall-trading-2604.sh; eb898b5 restores what 1328f12 dropped, and base..head shows no mode change.SOTA sources
The advisory: GHSA-6q48-6c7w-9gw2, "certifi bundles emSign root CAs with compromised intermediate CA keys", published 2026-10-20 19:35Z: GHSA-6q48-6c7w-9gw2 (also GHSA-6q48-6c7w-9gw2). It affects certifi >= 2019.03.09, < 2026.10.19, and the first patched version is 2026.10.19. Only emSign ECC Root CA - G3 is affected; 2026.10.19 drops it and keeps the unaffected emSign roots.
The maintained source: https://github.com/certifi/python-certifi, release 2026.10.19, as published on PyPI (https://pypi.org/pypi/certifi/2026.10.19/json):
certifi-2026.10.19-py3-none-any.whl: sha25642d35340cc5b9ba78e818ddbff0c5b1c2b779de448a340fd1b989f5fa8670e1b;certifi-2026.10.19.tar.gz: sha256035c1e85572b141bf1c3a3eff0e33a8eb74917522f2559075ff8d2fea780a1ae.Each file was downloaded and checked against PyPI's digest, and every new lock hash is one of these two.
The method followed: Pin aiohttp 3.14.4 in all four runtime locks (GHSA-2g87, GHSA-5wr8, GHSA-494j) #1265 (merged as 151f1e4). That means an edit to the one package only, refreshed lock-hash bindings, and the published lock as a recorded migration input, following Publish final runtime pins with lock-bound native acceptance #873 (a484989). Retained pre-bump bytes are excluded evidence fixtures in the osv inventory, not install inputs, and their names match no manifest pattern, following Pin aiohttp 3.14.4 in all four runtime locks (GHSA-2g87, GHSA-5wr8, GHSA-494j) #1265's fourth commit.
The trigger: Withhold selection-bearing evidence from blind lane packets #1262's required osv-scanner context fails on this advisory across these locks.
Evidence
git diff -U0check against PyPI's JSON digests: all 12 locks plus the constraints file (the 13 osv inventory inputs), certifi-onlypython -B scripts/validate_convergence.py --all-recorded: 33 records, all validscripts/validate.py: passed;scripts/evidence_manifest.py --check: passed (12,342 files);scripts/final_stack.py --check: passed;git diff --check: cleantests.test_adoption_contractfailed 2 tests (the SDK lock's inventory and qualification bindings; both pass at da55495). Fixed in 710733d by a recorded relock (SDK_SECURITY_RELOCKS,SDK_QUALIFIED_LOCK), plus a new regression test; test_adoption_contract, test_osv_lockfile_coverage and test_evidence_manifest: 80 tests, OK;validate.pyrc 0--exclude-newer-package certifi=2026-10-20T02:30:00Z(uv 0.12.17crates/uv-cli/src/lib.rs:7158-7177):diff -uagainst the committed lock is emptyvalidate_shards.py run --shard 5 --shards 8at 710733d in a clean worktree: 2,304 tests, 0 failures (2 local-only errors, the same on da55495);validate_convergence --all-recorded: 33 valid at eb898b5python -B -m unittestover test_trading_2604_lock, test_trading_2604_migration, test_scheduled_trial, test_osv_lockfile_coverage, test_receipt_sha256_key_custody, test_convergence_contract, test_evidence_manifest, test_research_convergence_practice and test_sota_convergence: 310 tests, OKThese ran in a scratch venv built from
.github/requirements-ci.txtwith--require-hashes. No install, accept or trial script was run, and there was no host-state, broker or paper contact.Known limits
validate-shard-5was reproduced locally at 1328f12 with CI's command. Its deterministic failure wastest_adoption_contract, caused by this PR and fixed in 710733d. Its other local failures (test_adoption_launchd,test_codex_job_lane_hardening: mise's GitHub attestation check hit a 403 rate limit in that checkout) are environmental. Clean worktrees of 1328f12 and da55495 give identical results for those modules.macos-profileis not a required context.Review and landing
Both families check this head, and the other lane acknowledges it (
lane:shared). The lander merges it. LIVE remains NO-GO.🤖 Generated with Claude Code