Skip to content

v1.91.122.0 fix(deps): clear the 2026-11-30 OSV suppressions, replace #3228, exempt dependabot from Version Gate rule 1 - #3239

Merged
capy-ai[bot] merged 8 commits into
mainfrom
w1-osv-expiry-deps
Oct 17, 2026
Merged

capy-ai[bot] merged 8 commits into
mainfrom
w1-osv-expiry-deps

Conversation

@garrytan

@garrytan garrytan commented Oct 17, 2026 •

Copy link
Copy Markdown
Owner

Main CI goes red on 2026-11-16: all seven .osv-scanner.toml suppressions say ignoreUntil = 2026-11-30, and test/osv-ignore-expiry.test.ts fails 14 days early. This clears six of them and re-dates the seventh, replaces dependabot #3228 by hand, and stops Version Gate from failing every dependabot package.json PR. Unstamped; the version slot comes from the queue.

OSV suppressions

Verified with osv-scanner 2.7.0 on both lockfiles. Before: 4 findings with no config, and three ignores reported as unused. After: one finding (katex, ignored), no unused ignores, No issues found.

Advisory Package Change
GHSA-frvp-7c67-39w9 @hono/node-server Ignore deleted. The lock already resolves 2.1.1, outside the affected range.
GHSA-p7fg-763f-g4gf (#2754) @anthropic-ai/sdk Ignore deleted. #3209 moved the agent-sdk pin; lock entries are 0.78.0 and 0.93.0, and the affected range is >=0.79.0 <0.91.1.
GHSA-hp3w-g68c-fv3c sprintf-js Ignore deleted. global-agent 4.x dropped roarr, so sprintf-js is gone from the lock.
GHSA-5p2g-fcmc-qvqq, GHSA-w3rx-r6r6-pgpr (#2753) image-size overrides: image-size 2.0.4; both ignores deleted.
GHSA-vfj7-8cjw-p6xm braces (no fixed release) lib/diagram-render overrides chokidar to 4.0.3 (sass's only use of it, never bundled), which removes braces. A rebuild of the bundle with and without the override gives the same sha256, so dist/ is untouched. Ignore deleted.
GHSA-238p-pmpm-9mq7 katex (low) Re-dated to 2027-01-31. The fix (0.18.2) is outside mermaid 11's ^0.16.47. Mermaid 12 accepts it, but @excalidraw/mermaid-to-excalidraw 2.2.2 needs mermaid ^11, and katex 0.18 renames its CSS classes. Upstream: mermaid-js/mermaid#8388.

html-to-docx ships its own image-size

html-to-docx 1.8.0 bundles its own image-size 1.x copy into dist/, so the override fixes the lockfile but not the code that runs. That copy hangs forever on the GHSA-w3rx ICNS input (reproduced: 24-byte crafted buffer, HTMLtoDOCX never returns; image-size 2.0.4 throws Invalid ICNS). Its detector sends a buffer to the ICNS parser exactly when the first four bytes are icns, and no other parser in that copy has a known advisory.

The new make-pdf/src/docx-images.ts runs before conversion:

  • It mirrors all three html-to-docx sizing paths. Two paragraph paths match the raw src and URI-decode the payload. buildImage URI-decodes the whole src first.
  • It drops any <img> that would hand ICNS bytes to the sizer, with a warning. Every other format embeds exactly as before.
  • It re-parses the result with html-to-docx's own html-to-vdom 0.7.0, now a direct dependency pinned to the copy html-to-docx loads. If any <img> would still size ICNS bytes, it throws, so a tag the regex misreads fails closed instead of hanging.

make-pdf/test/docx-image-size.test.ts covers this:

  • A golden word/document.xml was captured before the override from a PNG, a JPEG and a GIF. The test checks it, plus the EMU extents and the media bytes. It passes before and after.
  • Eight tag spellings are dropped: quoted, single-quoted, unquoted, uppercase, a data-src decoy, a percent-encoded payload, %3B and %3A. PNG and BMP are kept.
  • An alt=">" tag that the regex misreads throws through the real parser.
  • A subprocess runs generate() on an ICNS file named .png plus an inline ICNS data URI and gets two warnings and no hang. Without the guard, this case is killed at the timeout.

Still open (in TODOS.md, #2753 residual, revisit 2026-12-15): with --allow-network, html-to-docx downloads remote images and sizes them with the bundled copy.

Dependencies (replaces #3228)

  • @types/bun 1.4.2 → 1.4.3 and prettier 3.9.9 → 3.9.10. format:cso:check is clean. The new types retire 18 test type diagnostics, so the baseline shrinks. One as const in test/ceo-finding-fixture.test.ts keeps a test.each table typed as tuples.
  • .github/dependabot.yml ignores semver-minor and semver-major updates for @anthropic-ai/claude-agent-sdk and @anthropic-ai/sdk. Their breaking 0.x releases (0.2 → 0.3, 0.78 → 0.133) count as minor to dependabot, so ignoring majors alone would not stop build(deps-dev): bump the development-dependencies group across 1 directory with 4 updates #3228 from coming back. Patch updates still flow.
  • Both lockfiles install with --frozen-lockfile under Bun 1.4.2, the version CI pins.

Version Gate: dependabot exemption

scripts/compare-pr-version.ts hard rule 1 (VERSION above base) failed every dependabot package.json PR. The workflow now passes PR_AUTHOR (github.event.pull_request.user.login) and PR_CHANGED_FILES (paginated pulls/N/files, read-only token). Rule 1 is skipped only when the author is dependabot[bot] and every changed file is a package.json, bun.lock/bun.lockb at any depth, or .github/dependabot.yml. An empty or failed file lookup keeps the rule (a failed paginated call empties the list), and the collision rule is unchanged. test/compare-pr-version.test.ts runs the script for human authors, mixed files, look-alike names (evil-package.json, package.json.bak), a missing author or file list, a bumped dependabot collision, and the workflow wiring.

Gate edits

  • scripts/compare-pr-version.ts + .github/workflows/version-gate.yml: new dependabot exemption to hard rule 1, described above.
  • test/osv-ignore-expiry.test.ts: the OSV ignore ledger: image-size (no fixed release) via html-to-docx — re-justify by 2026-11-30 #2753 test asserted that both image-size ignores exist. It now asserts they are gone, overrides['image-size'] === '2.0.4', and the lock resolves 2.0.4 with no 1.x. The expiry window test and the 14-day threshold are unchanged.
  • test/osv-config-wiring.test.ts: adds an assertion that lib/diagram-render overrides chokidar to 4.x and its lock has no braces. The existing conditional braces-page test is unchanged.
  • test/workflow-action-pins.test.ts: adds an assertion for the Anthropic SDK dependabot ignores.
  • test/ceo-finding-fixture.test.ts: one as const so a test.each table types as tuples under @types/bun 1.4.3. Runtime behavior is unchanged.
  • tsconfig.test.json: includes the new make-pdf/src/html-to-vdom.d.ts.
  • scripts/typecheck-test-baseline.json: 18 fixed diagnostics removed (allowance only shrinks; regenerated with --write-baseline).
  • .osv-scanner.toml: 6 suppressions removed, 1 re-dated with reason and upstream link.

Open in Capy

Fixes #2754. #2753 stays open for the --allow-network gap: html-to-docx still downloads remote images and sizes them with its bundled image-size 1.x copy (TODOS, revisit 2026-12-15).

garrytan and others added 3 commits October 17, 2026 04:20
Delete the hono, @anthropic-ai/sdk (#2754) and sprintf-js ignores, which the
lockfiles no longer match. Override image-size to 2.0.4 (#2753) and chokidar
to 4.0.3 in lib/diagram-render (drops braces), and delete those ignores.
Re-date katex to 2027-01-31: its fix is outside mermaid 11's range
(mermaid-js/mermaid#8388).

html-to-docx 1.8.0 bundles its own image-size 1.x, which the override cannot
reach and whose ICNS parser loops forever. make-pdf --to docx now hands it
only PNG, JPEG, GIF, WebP or SVG bytes. A golden docx test proves the Word
output is unchanged.

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
…c SDKs to patches

Replaces dependabot #3228 without its agent-sdk 0.3 and sdk 0.133 bumps,
which break typecheck:test and overlay-sdk-cancel-eof. Their 0.x breaking
releases are semver-minor to dependabot, so the ignore covers minor and major.
@types/bun 1.4.3 retires 18 test type diagnostics; the baseline locks that in.

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
…rule 1

Dependabot never edits VERSION, so hard rule 1 failed every package.json PR
it opened. The workflow now passes the PR author and changed-file list; the
gate skips rule 1 only for dependabot[bot] when every file is a package.json,
bun.lock(b) or .github/dependabot.yml. A failed file lookup keeps the rule.

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
@trunk-io

trunk-io Bot commented Oct 17, 2026 •

Copy link
Copy Markdown

😎 This pull request was merged.

@github-actions

github-actions Bot commented Oct 17, 2026 •

Copy link
Copy Markdown
Contributor

E2E Evals: ❌ FAIL

[test:paid] VERDICT RED — lane gate/pr, attempt 1
  rule 107/108 · behavior 0/0 · judge 24/24 · quarantined 0 (0 failing the lane)
  SKIPPED 0 · INFRA 0 · INCOMPLETE 0 · unattributed 0 · ACTION REQUIRED 2
  wall 10m02s · cost $94.66 known + 54 of 132 trial(s) cost unknown

121 executed, 0 reused rule/judge records | 0 manual accepted (unscored; no score-cache credit) | $94.66 rule/judge cost | reconcile exit: 1

Profile: pr / mode full-fallback; selected behaviors: 108, judges: 24. Deferred to scheduled/release coverage: 139 behaviors and 0 changed prompt files. Deferred checks did not run and receive no PR-pass credit.

Full gate restored by:

  • .github/dependabot.yml (real unknown dependency): register .github/dependabot.yml under the cases that consume it in test/helpers/touchfiles-data.ts, add it to FREE_ONLY_PR_FILES in scripts/test-pr-profile.ts if no paid case reads it, or add its directory to DERIVABLE_PREFIXES so scripts/pr-dependencies.ts derives its consumers
  • .osv-scanner.toml (real unknown dependency): register .osv-scanner.toml under the cases that consume it in test/helpers/touchfiles-data.ts, add it to FREE_ONLY_PR_FILES in scripts/test-pr-profile.ts if no paid case reads it, or add its directory to DERIVABLE_PREFIXES so scripts/pr-dependencies.ts derives its consumers

Derived dependents (scripts/pr-dependencies.ts):

  • make-pdf/src/docx-images.ts: 246 case(s), 24 judge(s)
  • make-pdf/src/html-to-vdom.d.ts: 246 case(s), 24 judge(s)
  • make-pdf/src/orchestrator.ts: 246 case(s), 24 judge(s)
  • make-pdf/test/fixtures/docx-images/doc.md: 246 case(s), 24 judge(s)
  • make-pdf/test/fixtures/docx-images/document.golden.xml: 246 case(s), 24 judge(s)
  • make-pdf/test/fixtures/docx-images/square.gif: 246 case(s), 24 judge(s)
  • make-pdf/test/fixtures/docx-images/tall.jpg: 246 case(s), 24 judge(s)
  • make-pdf/test/fixtures/docx-images/wide.png: 246 case(s), 24 judge(s)
Rule and judge shards
Shard Automated result Manual/unscored Executed Reused Status Cost
e2e/skill-e2e-workflow 4/4 0 4 0 ✅ $3.31
e2e-deploy/skill-e2e-deploy--land-and-deploy-workflow 1/1 0 1 0 ✅ $1.89
e2e-safety-codex-consult/skill-e2e-safety-codex-consult 1/1 0 1 0 ✅ $1.26
e2e-ship-docsync/skill-e2e-ship-docsync--ship-docsync-stale-before 1/1 0 1 0 ✅ $1.05
e2e-review-attribution/skill-e2e-review-attribution 3/3 0 3 0 ✅ $0.89
e2e/skill-e2e-shared-libs--shared-libs-review-lifecycle 1/1 0 1 0 ✅ $2.76
e2e-qa-workflow/skill-e2e-qa-workflow--qa-quick 1/1 0 1 0 ✅ $2.16
e2e/skill-e2e-shared-libs-paths--shared-libs-review-prior-coverage 1/1 0 1 0 ✅ $2.67
e2e/skill-e2e-ship-skip 1/1 0 1 0 ✅ $0.64
e2e-qa-callers/skill-e2e-qa-callers--review-exploratory-small-cli 1/1 0 1 0 ✅ $1.86
e2e/skill-e2e-test-value 3/3 0 3 0 ✅ $2.57
e2e-qa-workflow/skill-e2e-qa-workflow--qa-only-no-fix 1/1 0 1 0 ✅ $1.68
e2e-qa-callers/skill-e2e-qa-callers--ship-exploratory-plan-checks 1/1 0 1 0 ✅ $2.07
e2e/skill-e2e-shared-libs--shared-libs-review-revalidation 1/1 0 1 0 ✅ $4.89
e2e-ship-docsync/skill-e2e-ship-docsync--ship-docsync-recovery 1/1 0 1 0 ✅ $1.03
e2e-review/skill-e2e-review 2/2 0 2 0 ✅ $1.35
e2e-ship-docsync/skill-e2e-ship-docsync--ship-docsync-failure 1/1 0 1 0 ✅ $2.14
e2e-skillify/skill-e2e-skillify 3/3 0 3 0 ✅ $2.67
e2e/skill-e2e-shared-libs-paths--shared-libs-review-path-eligibility 1/1 0 1 0 ✅ $3.77
e2e-ship-docsync/skill-e2e-ship-docsync--ship-docsync-current 1/1 0 1 0 ✅ $3.09
llm-judge/skill-llm-eval 24/24 0 24 0 ✅ $1.44
e2e/skill-e2e-coverage-audit 2/2 0 2 0 ✅ $0.75
e2e-deploy/skill-e2e-deploy--setup-deploy-workflow 1/1 0 1 0 ✅ $0.44
e2e-review-army/skill-e2e-review-army--review-army-perf-n-plus-one 1/1 0 1 0 ✅ $1.12
e2e/skill-e2e-shared-libs-paths--shared-libs-review-index-flags 1/1 0 1 0 ✅ $2.49
e2e/skill-e2e-investigate-owned-completion 1/1 0 1 0 ✅ $0.21
e2e-ship-docsync/skill-e2e-ship-docsync--ship-docsync-late-result 1/1 0 1 0 ✅ $1
e2e-review-army/skill-e2e-review-army--review-army-json-findings 1/1 0 1 0 ✅ $0.24
e2e-deploy/skill-e2e-deploy--benchmark-workflow 1/1 0 1 0 ✅ $0.55
e2e-qa-callers/skill-e2e-qa-callers--ship-exploratory-small-cli 1/1 0 1 0 ✅ $1.76
e2e-learnings/skill-e2e-learnings 1/1 0 1 0 ✅ $0.38
e2e-deploy/skill-e2e-deploy--land-and-deploy-review-gate 1/1 0 1 0 ✅ $1.48
e2e-review-army/skill-e2e-review-army--review-army-migration-safety 1/1 0 1 0 ✅ $1.11
e2e/skill-e2e-shared-libs--shared-libs-read-only 1/1 0 1 0 ✅ $0.83
e2e-ship-docsync/skill-e2e-ship-docsync--ship-docsync-stale-after 1/1 0 1 0 ✅ $1.13
e2e-deploy/skill-e2e-deploy--land-and-deploy-first-run 1/1 0 1 0 ✅ $1.01
e2e-docsync-spawned/skill-e2e-docsync-spawned 1/1 0 1 0 ✅ $1.24
e2e-qa-functional-fix/skill-e2e-qa-functional-fix 2/2 0 2 0 ✅ $2.65
e2e/skill-e2e-plan--plan-review-report 1/1 0 1 0 ✅ $1.04
e2e-qa-callers/skill-e2e-qa-callers--ship-exploratory-unavailable 1/1 0 1 0 ✅ $1.98
e2e-retro/skill-e2e-retro 1/1 0 1 0 ✅ $1.64
e2e-qa-functional/skill-e2e-qa-functional 2/2 0 2 0 ✅ $2.59
e2e-qa-callers/skill-e2e-qa-callers--ship-exploratory-late-input 1/1 0 1 0 ✅ $2.25
e2e-cso/skill-e2e-cso 1/1 0 1 0 ✅ $1.31
e2e-ship-docsync/skill-e2e-ship-docsync--ship-docsync-store 1/1 0 1 0 ✅ $3.45
e2e-ship-docsync/skill-e2e-ship-docsync--ship-docsync-completion 1/1 0 1 0 ✅ $3.65
e2e-design/skill-e2e-design--design-review-detector-shim-dom 1/1 0 1 0 ✅ $0.63
e2e/skill-e2e-shared-libs--shared-libs-unsupported-git 1/1 0 1 0 ✅ $0.65
e2e-ship-docsync/skill-e2e-ship-docsync--ship-docsync-missing-asset 1/1 0 1 0 ✅ $1.39
e2e-review-army/skill-e2e-review-army--review-army-quality-score 1/1 0 1 0 ✅ $0.33
e2e-safety-ship-evidence/skill-e2e-safety-ship-evidence 1/1 0 1 0 ✅ $0.59
e2e-hermetic/skill-e2e-hermetic-canary 2/2 0 2 0 ✅ $0.02
e2e-design/skill-e2e-design--design-review-plugin-handoff 1/1 0 1 0 ✅ $0.53
e2e-ship-docsync/skill-e2e-ship-docsync--ship-docsync-missing-marker 1/1 0 1 0 ✅ $0.53
e2e-browse/skill-e2e-bws 6/6 0 6 0 ✅ $0.83
e2e-third-party-actions/skill-e2e-third-party-actions 4/5 0 5 0 ❌ $1.46
e2e-plan-tune/skill-e2e-plan-tune 1/1 0 1 0 ✅ $0.68
e2e-session-intelligence/skill-e2e-session-intelligence 4/4 0 4 0 ✅ $0.73
e2e-safety-pair-agent/skill-e2e-safety-pair-agent 1/1 0 1 0 ✅ $0.29
e2e-design/skill-e2e-design--design-review-detector-shim 1/1 0 1 0 ✅ $0.36
e2e-qa-workflow/skill-e2e-qa-workflow--qa-bootstrap 1/1 0 1 0 ✅ $0.25
e2e-triage/skill-e2e-triage 1/1 0 1 0 ✅ $0.46
e2e/skill-e2e-ship-hook-consent 2/2 0 2 0 ✅ $0.68
e2e-review-army/skill-e2e-review-army--review-army-delivery-audit 1/1 0 1 0 ✅ $0.33
e2e-ship-docsync/skill-e2e-ship-docsync--ship-docsync-timeout-unsettled 1/1 0 1 0 ✅ $0.52
e2e/skill-e2e-ship-hook-refresh 1/1 0 1 0 ✅ $0.27
e2e/skill-e2e-investigate-owned-termination 2/2 0 2 0 ✅ $0.52
e2e-ship-docsync/skill-e2e-ship-docsync--ship-docsync-launch-failure 1/1 0 1 0 ✅ $0.44
e2e-deploy/skill-e2e-deploy--canary-workflow 1/1 0 1 0 ✅ $0.31
e2e-design/skill-e2e-design--plan-design-review-no-ui-scope 1/1 0 1 0 ✅ $0.37
Fail-closed reconciliation
ion.test.ts
  slice 12  passed             32s  test/skill-e2e-review-army.test.ts#review-army-json-findings
  slice 13  passed            111s  test/skill-e2e-ship-docsync.test.ts#ship-docsync-missing-asset
  slice 13  passed             87s  test/skill-e2e-plan-devex-plan-mode.test.ts
  slice 13  passed             90s  test/skill-e2e-safety-ship-evidence.test.ts
  slice 13  passed             94s  test/skill-e2e-design.test.ts#design-review-detector-shim-dom
  slice 13  passed            100s  test/skill-e2e-shared-libs.test.ts#shared-libs-unsupported-git
  slice 13  passed             57s  test/skill-e2e-office-hours-auto-mode.test.ts
  slice 13  passed             79s  test/skill-e2e-design.test.ts#design-review-plugin-handoff
  slice 13  passed             59s  test/skill-e2e-bws.test.ts
  slice 13  passed             59s  test/skill-e2e-ship-docsync.test.ts#ship-docsync-missing-marker
  slice 13  passed             45s  test/skill-e2e-review-army.test.ts#review-army-quality-score
  slice 13  passed              6s  test/skill-e2e-hermetic-canary.test.ts
  slice 14  failed             71s  test/skill-e2e-third-party-actions.test.ts
  slice 14  passed             73s  test/skill-e2e-plan-tune.test.ts
  slice 14  passed             71s  test/skill-e2e-triage.test.ts
  slice 14  passed             58s  test/skill-e2e-ship-docsync.test.ts#ship-docsync-timeout-unsettled
  slice 14  passed             45s  test/skill-e2e-ask-user-question-format-compliance.test.ts
  slice 14  passed             48s  test/skill-e2e-ship-docsync.test.ts#ship-docsync-launch-failure
  slice 14  passed             53s  test/skill-e2e-session-intelligence.test.ts
  slice 14  passed             52s  test/skill-e2e-ship-hook-consent.test.ts
  slice 14  passed             46s  test/skill-e2e-investigate-owned-termination.test.ts
  slice 14  passed             41s  test/skill-e2e-design.test.ts#design-review-detector-shim
  slice 14  passed             30s  test/skill-e2e-deploy.test.ts#canary-workflow
  slice 14  passed             40s  test/skill-e2e-ship-hook-refresh.test.ts
  slice 14  passed             51s  test/skill-e2e-design.test.ts#plan-design-review-no-ui-scope
  slice 14  passed             32s  test/skill-e2e-review-army.test.ts#review-army-delivery-audit
  slice 14  passed             38s  test/skill-e2e-safety-pair-agent.test.ts
  slice 14  passed             42s  test/skill-e2e-qa-workflow.test.ts#qa-bootstrap
  slice 15  passed             27s  test/skill-e2e-learnings.test.ts
  slice 15  passed             23s  test/skill-e2e-diagram.test.ts
[test:paid] collector final outcomes: 121 executed, 0 reused; 120 passed, 1 failed, 0 manual accepted (unscored; no score-cache credit) (121 attempt records from 70 collectors; every record counts)
[test:paid] deselected testcases, zero credit (312):
[test:paid]    298  sibling case of a case shard (its own shard runs it)
[test:paid]      8  periodic-tier case (this lane runs gate)
[test:paid]      6  Bun hook placeholder of a skipped describe block (not a test)
[test:paid] VERDICT RED — lane gate/pr, attempt 1
  rule 107/108 · behavior 0/0 · judge 24/24 · quarantined 0 (0 failing the lane)
  SKIPPED 0 · INFRA 0 · INCOMPLETE 0 · unattributed 0 · ACTION REQUIRED 2
  wall 10m02s · cost $94.66 known + 54 of 132 trial(s) cost unknown
[test:paid] failures and split verdicts:
  ✗ tpa-absent-linux  rule  FAIL  assertion — expect(received).toMatch(expected)  · cause assertion: session completed; check failed  Expected: /\b[A-D]\)/ · Received: "I'll read the policy file first, then follow it.\nThe contract requires the Aside readiness probe before any consent question. Running it exactly as written.\nProbe result: Aside is not detected on …  [slice 14, attempt 1]  evidence: paid-slice-14-a1/shards/skill-e2e-third-party-actions (fetch: bun run eval:pass-rates --run 39011101113 --case tpa-absent-linux)  after a repair: bun run scripts/test-paid-shards.ts --tier gate --case tpa-absent-linux

Sliced lane: planner → duration-packed executors → fail-closed report. Behavior cases run a pre-registered 3-trial panel (PASS at 2/3 with no contract violation); a PASS 2/3 is shown with its failed trial, never as a clean pass. Reused results retain their original provenance and expiry.

Failures and split verdicts

✗ tpa-absent-linux  rule  FAIL  assertion — expect(received).toMatch(expected)  · cause assertion: session completed; check failed  Expected: /\b[A-D]\)/ · Received: "I'll read the policy file first, then follow it.\nThe contract requires the Aside readiness probe before any consent question. Running it exactly as written.\nProbe result: Aside is not detected on …  [slice 14, attempt 1]  evidence: paid-slice-14-a1/shards/skill-e2e-third-party-actions (fetch: bun run eval:pass-rates --run 39011101113 --case tpa-absent-linux)  after a repair: bun run scripts/test-paid-shards.ts --tier gate --case tpa-absent-linux

garrytan and others added 3 commits October 17, 2026 04:56
…rmats

Review found three spellings that got past the regex guard and still hung
--to docx: a data-src decoy, a percent-encoded separator, and an unquoted
encoded colon. html-to-docx sizes images on three paths, and buildImage
URI-decodes the whole src first. The guard now mirrors all three, drops ICNS
(the only input its bundled image-size routes to the looping parser) instead
of allowlisting formats, so BMP and TIFF embed as before, and re-parses the
result with html-to-docx's own html-to-vdom to fail closed on anything the
regex misreads. The golden test tolerates CRLF checkouts on Windows.

Version Gate treats a failed file lookup as an empty list, so a partial
paginated result cannot decide the exemption.

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
@capy-ai capy-ai Bot changed the title fix(deps): clear the 2026-11-30 OSV suppressions, replace #3228, exempt dependabot from Version Gate rule 1 v1.91.121.0 fix(deps): clear the 2026-11-30 OSV suppressions, replace #3228, exempt dependabot from Version Gate rule 1 Oct 17, 2026
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
@capy-ai capy-ai Bot changed the title v1.91.121.0 fix(deps): clear the 2026-11-30 OSV suppressions, replace #3228, exempt dependabot from Version Gate rule 1 v1.91.122.0 fix(deps): clear the 2026-11-30 OSV suppressions, replace #3228, exempt dependabot from Version Gate rule 1 Oct 17, 2026
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>

# Conflicts:
#	CHANGELOG.md
#	VERSION
#	agents-digest/gstack-AGENTS.md
#	package.json
@capy-ai
capy-ai Bot merged commit 9dea818 into main Oct 17, 2026
67 of 69 checks passed
@capy-ai

capy-ai Bot commented Oct 17, 2026

Copy link
Copy Markdown
Contributor

Merged by GStack Minder as 9dea818 (v1.91.122.0) under a named exception from Garry ("Accept all recommendations", 2026-10-17). The exception covered the single paid-gate red outside this diff: tpa-absent-linux in run 39011101113, 131/132. The three earlier runs each failed a different unrelated case: ship-exploratory-plan-checks (39002269281), plan-mode-no-op (39004466422) and qa-functional-webhook-report (39006896632). Every other check passed at 599d3f0. These single-trial reds are W3's subject in fix wave 3.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

OSV ignore ledger: @anthropic-ai/sdk 0.81.0 under the pinned claude-agent-sdk — drop on the next harness bump (by 2026-11-30)

1 participant