Skip to content

fix: patch sharp advisory in live application lock - #797

Merged
seathatflowsinourveins merged 4 commits into
mainfrom
codex/ns2604-sharp-relock-20261006
Oct 6, 2026
Merged

seathatflowsinourveins merged 4 commits into
mainfrom
codex/ns2604-sharp-relock-20261006

Conversation

@seathatflowsinourveins

@seathatflowsinourveins seathatflowsinourveins commented Oct 6, 2026 •

Copy link
Copy Markdown
Owner

Scope

Patch the live application recipe's sharp 0.35.4 dependency to the first fixed release 0.35.5 for GHSA-wq5f-xc86-pv6w. Its required Sharp/@img family moves with it; the captured macOS lock stays byte-identical under one file-scoped exception expiring 2026-12-24.

  • Base commit: 0d5e6506434fab598dee861c749a22e628beb75a.
  • Lane: lane:foundation.
  • Owned paths: live application pnpm lock, retained prior lock and recipe history, bounded qualification outputs, dedicated frozen-macOS exception, its coverage test, dated decision, qualification receipt and evidence registry.
  • .github/osv-scanner.toml and .github/osv-scanner-lockfiles.json are byte-identical to the base. The frozen variant retains SHA-256 f1c707b8295e85bd396e49b990de92dc82bc0d58eca1e4e4bef31262d9898cd2.

SOTA sources

  • Sharp maintainer advisory GHSA-wq5f-xc86-pv6w, published 2026-10-06T13:43:57Z: affected <0.35.5, first patched 0.35.5, librsvg CVE-2026-96889.
  • Sharp v0.35.5 release, published 2026-09-27T13:44:22Z, lovell/sharp@51a990faa26ade5586a4934ac9673c98d8893326; sharp-libvips v1.3.4 supplies librsvg 2.63.2.
  • pnpm supported targeted update and frozen-lockfile installation, read 2026-10-06; installed pinned pnpm 12.4.2 help/error rejects a versioned selector on an indirect dependency. Published latest and the resulting resolved version were independently checked as exactly 0.35.5; no override or package.json edit was needed.
  • Next 16.3.8 published metadata: its optionalDependencies.sharp range ^0.35.4 permits 0.35.5. This is the lock's only direct dependent on sharp. All 27 replacement resolution integrity values match published npm metadata; 67 unrelated package entries, importers and the pnpm manager document remain unchanged.
  • Sharp source at the prior pin, src/common.cc:323,506,596, and src/pipeline.cc:48: SVG file/buffer input can reach librsvg. Exception justification rests on the retained variant having no supported installer/build/server/replay consumer found in scoped source review, with removal before any manual replay or new consuming route; the macOS label is not itself a reachability exemption.
  • Repository conventions: native-agent-stack@0d5e6506434fab598dee861c749a22e628beb75a:blueprints/convergence-practice/application-delivery/Makefile:3-5,27-32, README.md:170-180; #765, #587 and #252 retain prior bytes/qualifications and append supersessions. Original full-stack receipts and canonical experiment records remain untouched.

Evidence-class table

Claim Evidence class Command / receipt
First patched release, dependent range and SVG reachability source_review Maintainer advisory/release, pinned source and published npm metadata above
Exact frozen install, peers, typecheck, production build, loaded sharp/librsvg versions local_integration relock-2026-10-06-sharp.*.txt; evidence/receipts/sharp-0355-qualification-20261006.json
Frozen byte identity, retained old live lock and bounded family-only changes local_integration Hash/source comparisons and recipe revision ledger; 27 replacements / 67 unrelated unchanged
Repository integrity and declared-record consistency local_integration Validator, 32 convergence records and 96 touched tests pass; these do not establish upstream or live application acceptance
Advisory present for sharp 0.35.4 and absent for 0.35.5 source_review Supported OSV version-query API; this is not a native scanner or full-inventory scan
Complete application/API/browser qualification local_integration, failed make verify exits 2 on 12 dedicated-PostgreSQL setup errors; browser attempt exits 1 on occupied configured port 18080, with no browser case executed
Required hosted OSV and other CI checks pending Must be observed at this PR's head; no local scanner executable was found in the inspected locations

Local commands run

Frontend commands below ran in the live application directory, using the recipe's pinned pnpm 12.4.2 through Corepack, task-private cache/store/state/temp paths and a public-registry-only npmrc; heavy commands ran one at a time at nice 19. relock-2026-10-06-sharp.sh.txt records the supported replay pattern. Worktree/state path prefixes are sanitized in public outputs.

corepack pnpm update sharp --no-save --lockfile-only --ignore-scripts
exit 0; exact resolved sharp 0.35.5 checked
corepack pnpm install --frozen-lockfile --ignore-scripts
exit 0
corepack pnpm peers check
exit 0
corepack pnpm typecheck
exit 0
corepack pnpm build
exit 0
node -e 'const r=require("module").createRequire(require.resolve("next/package.json"));const s=r("sharp");console.log(JSON.stringify({sharp:s.versions.sharp,vips:s.versions.vips,rsvg:s.versions.rsvg}));if(s.versions.sharp!=="0.35.5"||s.versions.rsvg!=="2.63.2")process.exit(1)'
exit 0; sharp 0.35.5, vips 8.18.7, rsvg 2.63.2
nice -n 19 python3 scripts/validate.py
exit 0; 69 components, 4 profiles, 214 receipts, 10,345 hashed files
nice -n 19 python3 scripts/validate_convergence.py --all-recorded --json
exit 0; all 32 records valid
nice -n 19 python3 -m unittest tests.test_osv_lockfile_coverage tests.test_frozen_macos_variant_no_use tests.test_native_maintenance
exit 0; 96 tests, repeated after the new files were staged
git diff --check
exit 0
git diff --cached --check
exit 0 after explicit output whitespace sanitization

Failed attempts and acceptance limits

  • pnpm update sharp@0.35.5 --no-save --lockfile-only --ignore-scripts exits 1 with ERR_PNPM_UPDATE_VERSION_ON_INDIRECT_DEP, before mutation. The supported unversioned indirect update resolves exactly the independently verified first patch; no override is added.
  • A single-document PyYAML read exits 1 because pnpm 12 stores two YAML documents; upstream safe_load_all corrects the comparison.
  • First make verify exits 2 because pnpm is not on PATH. Supported Corepack enable creates only task-private shims. The second unchanged run passes schema/type/build checks on supported Python 3.13.16, then exits 2 on 12 PostgreSQL connection-timeout setup errors. The full actual failed log is retained privately and its decisive counts/cause in the public receipt. No PostgreSQL build, container/image pull or global installer was introduced.
  • Separate unchanged pnpm test:e2e exits 1 because port 18080 is occupied and Playwright's recipe refuses reuse. No other owner's service was stopped and no test was relaxed. Full-stack acceptance remains unfinished.
  • Initial staged diff checking found three trailing build-progress spaces. They were trimmed with that sanitization explicitly recorded, their hashes re-registered and the check repeated. Actual private output remains retained.
  • Native full-inventory OSV execution and unchanged upstream tests are unclaimed. The database's zero finding for the fixed version does not replace the required hosted scanner verdict.

Decision record

docs/decisions/2026-10-06-sharp-live-relock-frozen-variant.md records the targeted patch, rejected broad-ignore/historical-rewrite alternatives and evidence boundaries. Remove or re-review the frozen exception before replay, a new consumer, changed bytes or 2026-12-24. Registry is committed last. Independent bounded source/scope critic accepted this separation; co-op GPT micro-check and command-center exact-head ACK are requested. PR stays draft for that read; 5f owns landing.

Host evidence

No evidence/hosts/ change or platform-status claim.

  • Host-receipt validation: not applicable.
  • Command-center exact-head review requested; no platform status flip.

Checklist

  • No workflow/action change; existing pinned actions and permissions stay untouched.
  • No secrets are printed, logged or committed; no new required secret.
  • No paid hosting or billing surface.
  • Peer-owned paths, services and worktrees preserved.
  • Frozen evidence remains byte-identical; registry last; no merge or settings change.

Review follow-up — 2026-10-06

The co-op relays CC item task-ns2604-coop-20261006T170124Z, ruling 2: accept the disclosed browser gap for this urgent security landing conditional on a fresh frozen install/frontend build and restoration of the unrelated Mako JSON escape spelling. Both fresh frontend commands passed. make postgres-init exits 2 (inner 127) because the recipe's .runtime/postgresql/18.6/bin/initdb is missing. The recipe's postgres-install source-build target was not run under the upstream-never-rebuild and park rules. Playwright fixes both service and base URLs to port 18080, held by the local alert service; the service is untouched. No new browser cases ran.

Source: native-agent-stack@4f32d59d0b411cc69beccac9a2676449c70d0e9d:blueprints/convergence-practice/application-delivery/Makefile:3-5,27-32,34-58 and playwright.config.ts:8-16; original Mako row at base 0d5e6506. Full sanitized argv, return codes, actual outputs and classes are in evidence/receipts/sharp-review-followup-20261006.json and relock-2026-10-06-sharp.review-*.txt. Actual returned output remains privately durable; public progress whitespace/EOF normalization is explicit. The original qualification receipt and production/frozen locks stay byte-identical to the reviewed head.

pnpm 12.4.2 install --frozen-lockfile (task-private cache/store/state/public-registry config)
exit 0; lock current, resolution skipped, 26ms
NEXT_TELEMETRY_DISABLED=1 pnpm build
exit 0; Next 16.3.8 production build
make postgres-init
exit 2; missing .runtime/postgresql/18.6/bin/initdb, inner 127
nice -n 19 python3 -m unittest tests.test_osv_lockfile_coverage tests.test_frozen_macos_variant_no_use tests.test_native_maintenance
exit 0; 96 tests, 8.999s
nice -n 19 python3 scripts/validate.py
exit 0; 69 components, 4 profiles, 214 receipts, 10,349 hashed files

Both original literal Mako \u2192 spellings now exactly match the base row; parsed values are unchanged. Dated unfinished follow-up after the tools window: qualify the dedicated test DB through an upstream-supported release path and run the unchanged browser recipe in an isolated network namespace if no supported port override exists. Frontend build is not a browser/image-response or exploit test. Independent bounded source critic accepts the repair and separation. New-head co-op micro-check/CC ACK and hosted checks still required; registry is committed last. No broad ignore, alert-service takeover, source build, host configuration or merge.

@seathatflowsinourveins seathatflowsinourveins added the lane:foundation Foundation lane: Claude/Codex setup, hosts, memory, RAG, research, workers label Oct 6, 2026
@socket-security

socket-security Bot commented Oct 6, 2026 •

Copy link
Copy Markdown

Dependency limit exceeded — report not shown.

This pull request scan exceeded the 10,000-dependency limit applied to this scan, so the results are incomplete and may be inaccurate. To avoid reporting false positives, Socket has not posted a report.

Upgrade your plan to raise the dependency limit and get complete reports, or view the partial scan in the dashboard.

Socket is always free for open source. If this is a non-commercial open source project, contact us to request a free Team account.

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 6, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-06T20:49:27.151827Z 5f5f635 Draft marked ready
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@seathatflowsinourveins

Copy link
Copy Markdown
Owner Author

Claude session native-agent-stack-5f: landing at head 5f5f635c80941e27281b4d3877c05c7e29b430c9. The command center (wsl-architecture-design) gave its ACK at this exact head; under the user's 2026-10-04 decision it owns merges that touch the hot registry. The read-only cross-family review (GPT-6.1 Sol max, the packaged Codex SDK worker) returned ACCEPT at this exact head, with no P1 item.

Observed main 0d5e6506434fab598dee861c749a22e628beb75a. coordination/merge_tree_landing_check.py (sha256 a11649fcf2e5844c…) exit 0:

main 0d5e6506434fab598dee861c749a22e628beb75a head 5f5f635c80941e27281b4d3877c05c7e29b430c9 base 0d5e6506434fab598dee861c749a22e628beb75a merged-tree 03d4c43fb43b1565dd58b1f8fe0023ca26729afe merge-tree-exit 0
ok   1: clean three-way merge
ok   2: merged-vs-main paths 19, outside PR-owned 0 []
ok   3: main drift 0 paths, overlap with PR-owned inputs (registry excluded) []
ok   4: registry foreign rows equal True, order preserved True, PR-owned rows 18, unowned top-level keys differing []
ok   5: merged files[] sorted by path with no duplicates: True (10349 rows)
LANDABLE
condition 5: merged files[] sorted and unique (tree 03d4c43fb43b1565dd58b1f8fe0023ca26729afe)

Required checks at this head: 7 pass . Unresolved review threads: 0.

Accepted residual (the command center, item task-native-agent-stack-5f-20261006T204429Z). Application qualification is unfinished at this head:

  • the browser suite and the API tests did not run;
  • test-database init failed on a missing initdb;
  • the browser config needs ports 18080 and 18081, and 18080 is held by the old distribution's ntfy.

The frozen-lockfile install and the production build passed. The command center accepted this P2 explicitly for this landing. It is a security relock of one dependency with an unchanged frozen lock, and every open PR's required osv-scanner check is blocked until it lands. The follow-up stays registered with github-ci-finalize.

@seathatflowsinourveins
seathatflowsinourveins merged commit 4ce7632 into main Oct 6, 2026
27 of 30 checks passed
@seathatflowsinourveins

Copy link
Copy Markdown
Owner Author

Claude session native-agent-stack-5f: post-merge observation. Landed as 4ce7632b865a19fe806f12442f64d7157f08f18c (parent 0d5e6506434fab598dee861c749a22e628beb75a), tree 03d4c43fb43b1565dd58b1f8fe0023ca26729afe. The landed tree equals the checked merged tree and the parent is the observed main.

@seathatflowsinourveins
seathatflowsinourveins deleted the codex/ns2604-sharp-relock-20261006 branch October 6, 2026 20:45
seathatflowsinourveins added a commit that referenced this pull request Oct 7, 2026
…837)

### Scope

- What this PR changes: unblocks the required `osv-scanner` check, which fails on every pull request since six advisories published 2026-10-07 list `next` 16.3.5 in the frozen macOS application variant lock. Each advisory gets one dated exception (`ignoreUntil = 2026-12-24`) in `.github/osv-scanner-frozen-macos.toml`, the config `security-scan.yml` applies to that one digest-bound lock alone. The lock bytes, `.github/osv-scanner.toml` and `.github/osv-scanner-lockfiles.json` are unchanged; the maintained application lock already pins `next` 16.3.8.
- Base commit: `b16cb8cf7cb8e37bf0d0edb9924502beb3e6a276` (origin/main).
- Lane: `lane:foundation`.
- Owned paths touched: `.github/osv-scanner-frozen-macos.toml` (+30), `tests/test_osv_lockfile_coverage.py` (`FROZEN_LOCKS` advisories and evidence, +5/-2), `evidence/receipts/osv-frozen-macos-next-1638-20261007.json` (new, 230 lines), `manifests/evidence.json` (three entries via `host_receipts.register_file`, +9/-4).
- The frozen lock keeps SHA-256 `f1c707b8295e85bd396e49b990de92dc82bc0d58eca1e4e4bef31262d9898cd2`; no byte under `evidence/artifacts/macos-application-20260924/` changed.

The failure, from [run 37689576446](https://github.com/seathatflowsinourveins/native-agent-stack/actions/runs/37689576446) (pull_request, 2026-10-07T21:27:51Z): preflight `Ran 21 tests ... OK`, ordinary group `No issues found`, frozen group `Total 1 package affected by 6 known vulnerabilities (0 Critical, 1 High, 5 Medium, 0 Low, 0 Unknown)`, then `OSV primary exit codes: ordinary=0 frozen-macos=1`. The same workflow passed on the push to main at `b16cb8cf` ([run 37667431606](https://github.com/seathatflowsinourveins/native-agent-stack/actions/runs/37667431606), 18:31:00Z) and on a pull request at 20:37:00Z ([run 37683363803](https://github.com/seathatflowsinourveins/native-agent-stack/actions/runs/37683363803)); the lock's only commit is `67666d6e` (#201, 2026-09-24).

| Advisory (read with `gh api /advisories/<id>`) | Affected range containing 16.3.5 | First patched | Advisory's stated condition |
| --- | --- | --- | --- |
| [GHSA-39w2-rjm5-chcv](GHSA-39w2-rjm5-chcv) (CVE-2026-94486) | `>= 16.0.0, < 16.3.8` | 16.3.8 | only `next dev`: the dev server's MCP endpoint does not verify request origin |
| [GHSA-3w37-wq28-93x7](GHSA-3w37-wq28-93x7) (CVE-2026-94544) | `>= 16.3.0, < 16.3.8` | 16.3.8 | Cache Components or `experimental.useCache` with Draft Mode previews |
| [GHSA-4jqv-mc3x-m676](GHSA-4jqv-mc3x-m676) (CVE-2026-94543) | `>= 16.0.0, < 16.3.8` (also lists `>= 15.0.0, < 15.5.27`, which does not apply) | 16.3.8 | self-hosted Pages Router with SSG or ISR pages |
| [GHSA-cjq9-62q9-8jv4](GHSA-cjq9-62q9-8jv4) (CVE-2026-94483) | `>= 16.0.0, < 16.3.8` | 16.3.8 | Image Optimization SSRF through an allow-listed `images.remotePatterns` URL |
| [GHSA-f87g-xv8r-7p7x](GHSA-f87g-xv8r-7p7x) (CVE-2026-94485) | `>= 16.0.0, < 16.3.8` | 16.3.8 | App Router built with webpack: metadata image routes ignore `dynamicParams` |
| [GHSA-mcj8-r9mp-w47p](GHSA-mcj8-r9mp-w47p) (CVE-2026-94484) | `>= 16.0.0, < 16.3.8` (also lists `>= 15.0.0, < 15.5.27`, which does not apply) | 16.3.8 | root-level catch-all page with SSG or ISR routes |

Whether the captured application met any of these conditions is not established: the artifact keeps only `run-summary.json`, `package.json` and the lock, with no application source or Next.js configuration. Its `package.json` declares `"dev": "next dev ..."`, the only mode GHSA-39w2 affects. The exceptions rest on non-use, as for the three existing entries. Each reason names the range and fix with the advisory URL, the scope (the lock named in the file's header, with its SHA-256), the source review at `b16cb8cf` and the removal condition. No reason line names the artifact directory, so the no-use tripwire's pins are unchanged (the sharp entry's pattern).

`ignoreUntil` is 2026-12-24, the date of the three existing entries, of `REVIEW_DATE` in `tests/test_frozen_macos_variant_no_use.py` and of the closure decision's frozen-lock exception. It is within the 90-day bound `tests/test_osv_lockfile_coverage.py` enforces (2026-10-07 + 90 days = 2027-01-05).

### SOTA sources

- [OSV-Scanner v2.6.0 release](https://github.com/google/osv-scanner/releases/tag/v2.6.0), tag commit `google/osv-scanner@e840a6e8adb14b7777c78e26cfbf6e2abc1d1fc6`, published 2026-09-14T02:55:16Z. `osv-scanner_linux_amd64` SHA-256 `ca69b3d3cd08f889a49dc0a383122f71cc528b83803671df5fd874d97485b108` equals the workflow's `OSV_SCANNER_SHA256`, the release's `osv-scanner_SHA256SUMS` line and the release API asset digest. The binary reports `osv-scanner version: 2.6.0`, `commit: e840a6e8adb14b7777c78e26cfbf6e2abc1d1fc6`.
- [`docs/configuration.md` at v2.6.0](https://github.com/google/osv-scanner/blob/v2.6.0/docs/configuration.md): [line 23](https://github.com/google/osv-scanner/blob/v2.6.0/docs/configuration.md#L23) says `--config=/path/to/config.toml` "will apply `config.toml` to all files parsed", which is why the exception lives in the dedicated config the workflow applies to this lock alone. [Lines 27-44](https://github.com/google/osv-scanner/blob/v2.6.0/docs/configuration.md#L27-L44) define `[[IgnoredVulns]]` with `id`, optional `ignoreUntil` and `reason`, and state that ignoring an id also ignores its aliases.
- The six GitHub advisories, linked in the table above (GitHub global advisory database, read 2026-10-07T21:33:15Z), each referencing the fixed release [vercel/next.js v16.3.8](https://github.com/vercel/next.js/releases/tag/v16.3.8).
- Repository practice followed: `docs/decisions/2026-09-22-github-automation-closure.md`, section "urllib3 and PyJWT relock and a frozen macOS lock (2026-09-30)" (lines 325-371) and "Four production relocks and preserved receipt inputs (2026-10-06)" (lines 2028-2070); the frozen-lock parts of [#797](#797) (one appended entry, `FROZEN_LOCKS` advisories and evidence); the receipts `evidence/receipts/osv-frozen-macos-source-map-js-20261005.json` and `evidence/receipts/sharp-0355-qualification-20261006.json`. The no-consumer checks repeat the 2026-09-30 transcript (`blueprints/runtime-workers/openhands/evidence/relock-2026-09-30-urllib3.txt:185-214`).

### Evidence-class table

| Claim | Evidence class | Command / receipt |
| --- | --- | --- |
| Each advisory's affected range, first patched version and stated condition | source_review | `gh api /advisories/<id>` for the six ids; receipt `advisory_records` |
| The failure comes from the new advisory records, not a repository change | source_review | Run 37689576446 log; passes 37667431606 (main at `b16cb8cf`) and 37683363803; the lock's single commit #201 |
| No supported installer, build, server or replay consumer of the variant at `b16cb8cf` | source_review | `git grep -l -F macos-application-20260924/variant/pnpm-lock b16cb8c -- . ':(exclude)evidence/artifacts/macos-application-20260924'`: 46 files, all scan configuration and checks, the experiment record and a retained copy, retained scan outputs, controls, reviews, path listings, receipts, the manifest and tests; none pairs the path with an install, build or serve command. `git grep -n -i pnpm b16cb8c -- .github/workflows`: one line, the frozen assignment check. Tripwire 10/10 at base. A direct-reference check only: indirect routes stay outside it (receipt `limits`) |
| Whether the captured application met each advisory's condition | not established | No application source or Next.js configuration is retained; `package.json` has a `next dev` script |
| Exceptions are confined to the frozen config and this lock | local_integration | Control: the frozen lock under `.github/osv-scanner.toml` exits 1 with all nine advisories; `FrozenScanTests` pass |
| The workflow's scan step exits 0 with the six filtered | local_integration | The step extracted from `security-scan.yml` and run by bash with the verified binary: `ordinary=0 frozen-macos=0`, `Filtered 9 vulnerabilities from output` |
| Hosted `osv-scanner` and the other required checks at this head | pending | To be observed on this PR |

### Local commands run

```
$ curl ... osv-scanner_linux_amd64 (v2.6.0) into a fresh scratch directory; printf '<OSV_SCANNER_SHA256 read from security-scan.yml>  <binary>' | sha256sum --check
<binary>: OK   (exit 0; also matches osv-scanner_SHA256SUMS and the release asset digest)
$ <binary> --version
osv-scanner version: 2.6.0 / osv-scalibr version: 0.5.2 / commit: e840a6e8adb14b7777c78e26cfbf6e2abc1d1fc6   (exit 0)

$ RUNNER_TEMP=<scratch>/runner WRITE_SARIF=false /usr/bin/bash --noprofile --norc -e -o pipefail <step extracted from security-scan.yml, 66 lines>
exit 0 (2026-10-07T21:45:58Z to 21:46:01Z, against the final config bytes, SHA-256 a00d1e2d...)
Ran 21 tests in 0.281s / OK
Filtered 4 vulnerabilities from output / No issues found                     (ordinary group)
GHSA-39w2-rjm5-chcv and 1 alias have been filtered out because: next 16.3.5 is in the advisory's affected range >= 16.0.0, < 16.3.8, ...
GHSA-3w37-wq28-93x7 and 1 alias have been filtered out because: next 16.3.5 is in the advisory's affected range >= 16.3.0, < 16.3.8, ...
GHSA-4jqv-mc3x-m676 and 1 alias have been filtered out because: ...
GHSA-cjq9-62q9-8jv4 and 1 alias have been filtered out because: ...
GHSA-f87g-xv8r-7p7x and 1 alias have been filtered out because: ...
GHSA-mcj8-r9mp-w47p and 1 alias have been filtered out because: ...
(GHSA-vcvr-r3jv-pc5j, GHSA-wq5f-xc86-pv6w and GHSA-68fv-2mgg-jv7q filtered as before)
Filtered 9 vulnerabilities from output / No issues found                     (frozen group)
OSV primary exit codes: ordinary=0 frozen-macos=0

$ <binary> scan source --config .github/osv-scanner.toml --no-resolve --lockfile=:evidence/artifacts/macos-application-20260924/variant/pnpm-lock.yaml   (control)
exit 1; Total 3 packages affected by 9 known vulnerabilities: the six next advisories (fixed 16.3.8), GHSA-vcvr-r3jv-pc5j, GHSA-wq5f-xc86-pv6w, GHSA-68fv-2mgg-jv7q

$ python3 -m unittest tests.test_osv_lockfile_coverage tests.test_frozen_macos_variant_no_use
exit 0; Ran 67 tests in 6.296s, OK
$ python3 scripts/evidence_manifest.py --check
exit 0; {"files": 10554, "status": "passed"}
$ python3 scripts/validate.py
exit 0; {"components": 69, "hashed_files": 10554, "profiles": 4, "receipts": 226, "status": "passed"}
$ python3 -m unittest tests.test_agentsview_qualification tests.test_openhands_lock_binding tests.test_pin_holds tests.test_pre_push_gate tests.test_runtime_worker_openhands_resolver tests.test_sim_crosscheck_hftbacktest tests.test_workflow_hardening
exit 0; Ran 318 tests, OK (skipped=19)   (other modules that name these files)
$ git diff --check && git diff --cached --check
exit 0
```

At base, before the change: `python3 -m unittest tests.test_frozen_macos_variant_no_use` exited 0 (10 tests) and `tests.test_osv_lockfile_coverage` exited 0 (57 tests). An earlier local run of the same step, before the reasons' description of the 46 files was made more precise, also exited 0 with 9 filtered.

### Decision record

No new decision record: the change applies the existing one, `docs/decisions/2026-09-22-github-automation-closure.md`, section "urllib3 and PyJWT relock and a frozen macOS lock (2026-09-30)". Its alternatives (inventory exclusion, editing the hash-bound lock, a repo-wide ignore) and overturn (the frozen lock stops being kept, or an application built from it runs) still apply. Evidence: `evidence/receipts/osv-frozen-macos-next-1638-20261007.json`. Remove the six exceptions and re-review before manual installation, replay, a new consuming route, changed lock bytes or 2026-12-24.

Not covered here:
- Dependabot alerts come from GitHub's dependency graph, not OSV configs. If Dependabot raises alerts for these six advisories on the variant's `package.json` (as alert 16 did for GHSA-vcvr-r3jv-pc5j), they need their own decision.
- The frozen config's header still says "the advisory below" (singular). Its line is pinned by the tripwire and was left unchanged.
- The `.frozen` rename remains a separately tracked follow-up.

### Host evidence

Not applicable: no file under `evidence/hosts/` changes.

### Checklist

- [x] New/changed GitHub Actions are pinned to a full commit SHA with a version comment (n/a: no workflow or action changes).
- [x] New/changed workflows declare top-level `permissions: {}` (n/a: no workflow changes).
- [x] No secrets are printed, logged or committed; no new required secret was added.
- [x] No new paid hosting, subscription or billing surface was introduced.
- [x] Peer-owned untracked files and worktrees were preserved (work confined to this branch's own worktree).

🤖 Generated with [Claude Code](https://claude.com/claude-code)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

lane:foundation Foundation lane: Claude/Codex setup, hosts, memory, RAG, research, workers

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant