Skip to content

deps: bump pypdf from 6.20.1 to 6.21.4 - #133

Open
dependabot[bot] wants to merge 1 commit into
mainfrom
dependabot/uv/pypdf-6.21.4
Open

dependabot[bot] wants to merge 1 commit into
mainfrom
dependabot/uv/pypdf-6.21.4

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Oct 31, 2026

Copy link
Copy Markdown

Bumps pypdf from 6.20.1 to 6.21.4.

Release notes

Sourced from pypdf's releases.

Version 6.21.4, 2026-10-28

What's new

Security (SEC)

Documentation (DOC)

Full Changelog

Version 6.21.3, 2026-10-27

What's new

Security (SEC)

Performance Improvements (PI)

Bug Fixes (BUG)

Documentation (DOC)

Developer Experience (DEV)

Maintenance (MAINT)

  • Revert: Reject unsupported key lengths in the /Encrypt dictionary by @​stefan6419846

Full Changelog

Version 6.21.2, 2026-10-21

What's new

Security (SEC)

Bug Fixes (BUG)

... (truncated)

Changelog

Sourced from pypdf's changelog.

Version 6.21.4, 2026-10-28

Security (SEC)

  • Limit the number of copied page attributes during flattening (#4290)
  • Detect EOF when reading standard xref table trailer (#4289)
  • Fix loop detection when cloning DictionaryObject (#4288)

Documentation (DOC)

  • Exclude performance issues from security reports (#4280)

Full Changelog

Version 6.21.3, 2026-10-27

Security (SEC)

  • Use the validated page count after decrypting a document (#4270)
  • Limit total number of cross-reference stream entries (#4269)
  • Avoid excessive error messages (#4265)

Performance Improvements (PI)

  • Read flat page label number trees once for all pages (#4251)
  • Collect the named destinations once when resolving links (#4249)
  • Avoid scanning all objects in get_outline_root (#4245)

Bug Fixes (BUG)

  • Resolve indirect widths in CID font /W arrays (#4267)

Documentation (DOC)

  • Block incremental writes of encrypted documents (#4246)

Developer Experience (DEV)

  • Update to PyPy 3.12 and pinned requirements (#4244)

Maintenance (MAINT)

  • Revert: Reject unsupported key lengths in the /Encrypt dictionary

Full Changelog

Version 6.21.2, 2026-10-21

Security (SEC)

  • Avoid repeated full file loads (#4240)
  • Limit size of standard xref table (#4239)

Bug Fixes (BUG)

  • Decode UniGB-UTF16 CMaps as UTF-16BE (#4231)
  • Keep 8-bit DeviceRGB image mode (#4230)
  • Preserve all annotation quadrilaterals when merging pages (#4223)

Robustness (ROB)

... (truncated)

Commits
  • b2c3fa2 REL: 6.21.4
  • ea4ac66 SEC: Limit the number of copied page attributes during flattening (#4290)
  • 06593f9 SEC: Detect EOF when reading standard xref table trailer (#4289)
  • f176db1 SEC: Fix loop detection when cloning DictionaryObject (#4288)
  • c7d391c PI: Speed up transformation matrix handling for layout mode text extraction (...
  • b330dcd DEV: Bump actions/setup-python from 7.0.0 to 7.1.0 (#4278)
  • 8901534 DOC: Exclude performance issues from security reports (#4280)
  • 70eab9b PI: Speed up parse_bfchar (#4273)
  • 4ef744f ROB: Skip an embedded file specification that is not a dictionary (#4256)
  • 945216f ROB: Keep the text state when a text state operator has no operand in layout ...
  • Additional commits viewable in compare view

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    You can disable automated security fix PRs for this repo from the Security Alerts page.

Bumps [pypdf](https://github.com/py-pdf/pypdf) from 6.20.1 to 6.21.4.
- [Release notes](https://github.com/py-pdf/pypdf/releases)
- [Changelog](https://github.com/py-pdf/pypdf/blob/main/CHANGELOG.md)
- [Commits](py-pdf/pypdf@6.20.1...6.21.4)

---
updated-dependencies:
- dependency-name: pypdf
  dependency-version: 6.21.4
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot
dependabot Bot requested a review from Cranot as a code owner October 31, 2026 03:59
@dependabot dependabot Bot added the dependencies Pull requests that update a dependency file label Oct 31, 2026
@github-actions

Copy link
Copy Markdown

roam-code Analysis

Mode: incremental (changed-only) — base 88a19184a56beb1a66ad9cf0d22b4c8ab73a7b4c, 1 changed+dependent files

Health Score: 82/100 HEALTHY

health: Healthy codebase (82/100) — 52 critical issues, focus: god_components
pr-risk: Moderate risk (30/100) — review recommended (risk_level medium) (driver: test_coverage_low)

Health Metrics

Metric Value
Health Score 82/100
Tangle Ratio 1.1%
Propagation Cost 0.0304
Total Issues 65

PR Risk

Metric Value
Risk Score 30/100

Quality Gate: PASSED

Gate expression: health_score>=50

SARIF Upload

Metric Value
Category roam-code-self-analysis/self-analysis/py3.12
Results Uploaded 140
Full analysis output

health

{
  "_meta": {
    "cache_ttl_s": 300,
    "cacheable": true,
    "index_age_s": 4,
    "index_status": {
      "dirty_files": 0,
      "fresh": false,
      "head_commit": "5c28fcccb559",
      "hint": "index latest commit f2e9ffc51e90 != HEAD 5c28fcccb559 — git-derived metrics (commits, churn, co-change, weather) may be stale. Run `roam index --force`.",
      "indexed_commit": "f2e9ffc51e90"
    },
    "latency_ms": null,
    "response_tokens": 8847,
    "roam_version": "14.1.0",
    "timestamp": "2026-10-31T04:02:47Z"
  },
  "actionable_count": 13,
  "actionable_cycles": 0,
  "agent_contract": {
    "confidence": null,
    "facts": [
      "Healthy codebase (82/100) — 52 critical issues, focus: god_components",
      "health score 82",
      "tangle ratio 1.1",
      "0.0304 propagation cost findings",
      "issue count 65"
    ],
    "next_commands": [
      "roam debt",
      "roam trends --days 30"
    ],
    "risks": []
  },
  "algebraic_connectivity": null,
  "algebraic_connectivity_available": false,
  "bottleneck_thresholds": {
    "list_limit": 15,
    "p70": 41710.5,
    "p90": 189987,
    "population": 3359,
    "utility_multiplier": 1.5
  },
  "category_severity": {
    "bottlenecks": {
      "critical": 15,
      "info": 0,
      "warning": 0
    },
    "cycles": {
      "critical": 0,
      "info": 0,
      "warning": 0
    },
    "god_components": {
      "critical": 37,
      "info": 5,
      "warning": 8
    },
    "layer_violations": {
      "critical": 0,
      "info": 0,
      "warning": 0
    }
  },
  "command": "health",
  "cycles_actionable": 0,
  "cycles_total": 75,
  "framework_filtered": 0,
  "god_component_thresholds": {
    "list_limit": 50,
    "min_degree": 20,
    "population": 438
  },
  "health_score": 82,
  "ignored_cycles": 75,
  "imported_coverable_lines": 0,
  "imported_coverage_files": 0,
  "imported_coverage_pct": null,
  "imported_covered_lines": 0,
  "index_status": {
    "dirty_files": 0,
    "fresh": false,
    "head_commit": "5c28fcccb559",
    "hint": "index latest commit f2e9ffc51e90 != HEAD 5c28fcccb559 — git-derived metrics (commits, churn, co-change, weather) may be stale. Run `roam index --force`.",
    "indexed_commit": "f2e9ffc51e90"
  },
  "issue_count": 65,
  "list_counts": {
    "bottlenecks": 15,
    "cycle_break_suggestions": 0,
    "cycles": 75,
    "god_components": 50,
    "layer_violations": 0,
    "next_steps": 2,
    "score_breakdown": 5
  },
  "project": "roam-code",
  "propagation_cost": 0.0304,
  "schema": "roam-envelope-v1",
  "schema_version": "1.2.0",
  "severity": {
    "critical": 52,
    "info": 80,
    "warning": 8
  },
  "summary": {
    "actionable_cycles": 0,
    "algebraic_connectivity": null,
    "algebraic_connectivity_available": false,
    "category_severity": {
      "bottlenecks": {
        "critical": 15,
        "info": 0,
        "warning": 0
      },
      "cycles": {
        "critical": 0,
        "info": 0,
        "warning": 0
      },
      "god_components": {
        "critical": 37,
        "info": 5,
        "warning": 8
      },
      "layer_violations": {
        "critical": 0,
        "info": 0,
        "warning": 0
      }
    },
    "cycles_actionable": 0,
    "cycles_definition": "Cycle counts derived from `roam.graph.cycles.find_cycles(G, min_size=2)` on the symbol graph. `cycles_total` = all SCCs of size >= 2; `cycles_actionable` = SCCs spanning >=2 files AND no test files (same-file and test-only cycles are informational). Run `roam health` for the per-cycle breakdown.",
    "cycles_total": 75,
    "detail_available": true,
    "god_components": 50,
    "god_components_definition": "God components: symbols where `(in_degree + out_degree) > 20` from the `graph_metrics` table, with utility-aware severity bands (standard >50=CRITICAL >30=WARNING; utility >150=CRITICAL >90=WARNING). Run `roam health` for the per-symbol breakdown. Legacy aliases: `god_objects` (fingerprint), `god_classes` (rules).",
    "health_score": 82,
    "health_score_definition": "weighted geometric mean (0-100) of 5 sigmoid health factors: tangle_ratio, god_components, bottlenecks, layer_violations, file_health (+coverage if available); computed by roam.quality.health_score.compute_health_score, shared verbatim with the `snapshots` writer so `roam health --baseline` compares like with like.",
    "health_score_scope": "legacy_top_candidates",
    "ignored_cycles": 75,
    "imported_coverage_files": 0,
    "imported_coverage_pct": null,
    "issue_collection_scope": "top_candidates",
    "issue_count": 65,
    "partial_success": true,
    "preserved_list_truncations": {},
    "propagation_cost": 0.0304,
    "severity": {
      "critical": 52,
      "info": 80,
      "warning": 8
    },
    "tangle_ratio": 1.1,
    "tangle_ratio_definition": "percent of symbols inside non-trivial SCCs (size >= 2), counting ALL such SCCs, not just actionable ones; higher = more cyclic coupling. `roam fingerprint` reports the identical measurement as a fraction (percent / 100).",
    "total_cycles": 75,
    "truncated": true,
    "truncation_reason": "detail_mode",
    "verdict": "Healthy codebase (82/100) — 52 critical issues, focus: god_components",
    "warnings_out": [
      "health_algebraic_connectivity_warning:RuntimeWarning:algebraic_connectivity compute failed (ModuleNotFoundError): No module named 'numpy'; returning 0.0 sentinel — value is NOT a legitimate disconnected-graph reading",
      "health_god_components_list_capped:showing_top_50_of_438",
      "health_bottlenecks_list_capped:showing_top_15_of_3359"
    ]
  },
  "tangle_ratio": 1.1,
  "total_cycles": 75,
  "utility_count": 37,
  "version": "14.1.0",
  "warnings_out": [
    "health_algebraic_connectivity_warning:RuntimeWarning:algebraic_connectivity compute failed (ModuleNotFoundError): No module named 'numpy'; returning 0.0 sentinel — value is NOT a legitimate disconnected-graph reading",
    "health_god_components_list_capped:showing_top_50_of_438",
    "health_bottlenecks_list_capped:showing_top_15_of_3359"
  ]
}

pr-risk

{
  "_meta": {
    "cache_ttl_s": 60,
    "cacheable": true,
    "index_age_s": 6,
    "index_status": {
      "dirty_files": 0,
      "fresh": false,
      "head_commit": "5c28fcccb559",
      "hint": "index latest commit f2e9ffc51e90 != HEAD 5c28fcccb559 — git-derived metrics (commits, churn, co-change, weather) may be stale. Run `roam index --force`.",
      "indexed_commit": "f2e9ffc51e90"
    },
    "latency_ms": null,
    "response_tokens": 861,
    "roam_version": "14.1.0",
    "timestamp": "2026-10-31T04:02:49Z"
  },
  "actor": null,
  "agent_contract": {
    "confidence": null,
    "facts": [
      "Moderate risk (30/100) — review recommended (risk_level medium) (driver: test_coverage_low)",
      "risk score 30",
      "2 risk rank findings",
      "1 changed files",
      "1 lines added"
    ],
    "next_commands": [],
    "risks": [
      "pr-risk: moderate (30/100) on 88a19184a56beb1a66ad9cf0d22b4c8ab73a7b4c..HEAD — driver: test_coverage_low"
    ]
  },
  "author": null,
  "blast_radius_pct": 0,
  "bus_factor_risk": 0,
  "change_shape": "mixed",
  "changed_files": 1,
  "closest_historical_pattern": null,
  "closest_similarity": 0,
  "cluster_spread": 0,
  "clusters_touched": 0,
  "command": "pr-risk",
  "coupling_score": 0,
  "dead_code": [],
  "dead_exports": 0,
  "familiarity": {
    "avg_familiarity": 1,
    "files": [],
    "files_assessed": 0
  },
  "findings": [
    {
      "claim": "pr-risk: moderate (30/100) on 88a19184a56beb1a66ad9cf0d22b4c8ab73a7b4c..HEAD — driver: test_coverage_low",
      "confidence": "heuristic",
      "evidence": {
        "actor": null,
        "author": null,
        "blast_radius_pct": 0,
        "bus_factor_risk": 0,
        "changed_files_count": 1,
        "commit_range": "88a19184a56beb1a66ad9cf0d22b4c8ab73a7b4c..HEAD",
        "coupling_score": 0,
        "created_at_epoch": 1793419369,
        "diff_id": "72bcd16149ae",
        "familiarity_risk": 0,
        "file_list": [
          "pyproject.toml"
        ],
        "hotspot_score": 0,
        "label": "88a19184a56beb1a66ad9cf0d22b4c8ab73a7b4c..HEAD",
        "lines_added": 1,
        "lines_removed": 1,
        "minor_risk": 0,
        "novelty_score": 0,
        "reductive_change": false,
        "risk_level": "moderate",
        "risk_score": 30,
        "staged": false,
        "test_coverage_pct": 0,
        "top_driver": "test_coverage_low"
      },
      "finding_id_str": "pr-risk:composite-risk-score:72bcd16149ae",
      "kind": "pr-risk:composite-risk-score",
      "severity": "medium",
      "source_detector": "pr-risk",
      "source_version": "1.0.0",
      "subject_id": null,
      "subject_kind": "commit"
    }
  ],
  "hotspot_score": 0,
  "label": "88a19184a56beb1a66ad9cf0d22b4c8ab73a7b4c..HEAD",
  "layer_spread": 0,
  "layers_touched": 0,
  "lines_added": 1,
  "lines_removed": 1,
  "minor_risk": {
    "files": [],
    "files_assessed": 0,
    "minor_files": 0
  },
  "novelty_score": 0,
  "per_file": [
    {
      "blast": 0,
      "churn": 693,
      "is_test": false,
      "lines_added": 1,
      "lines_removed": 1,
      "path": "pyproject.toml",
      "symbols": 0
    }
  ],
  "project": "roam-code",
  "reductive_change": false,
  "reductive_discount_applied": false,
  "risk_level": "moderate",
  "risk_level_canonical": "medium",
  "risk_rank": 2,
  "risk_score": 30,
  "schema": "roam-envelope-v1",
  "schema_version": "1.2.0",
  "suggested_reviewers": [
    {
      "actor": "Cranot",
      "author": "Cranot",
      "lines": 492
    },
    {
      "actor": "dependabot[bot]",
      "author": "dependabot[bot]",
      "lines": 1
    }
  ],
  "summary": {
    "change_shape": "mixed",
    "changed_files": 1,
    "findings_count": 1,
    "lines_added": 1,
    "lines_removed": 1,
    "partial_success": false,
    "risk_level": "moderate",
    "risk_level_canonical": "medium",
    "risk_rank": 2,
    "risk_score": 30,
    "score_classification": "classified",
    "verdict": "Moderate risk (30/100) — review recommended (risk_level medium) (driver: test_coverage_low)"
  },
  "test_coverage_pct": 0,
  "total_clusters": 12878,
  "total_layers": 38,
  "version": "14.1.0",
  "warnings_out": []
}

roam-code analysis | Commands: health pr-risk

@github-actions

Copy link
Copy Markdown

Roam Agent Review

Verdict: SAFE (risk_level low)

blast-radius 0/100 · ai-likelihood 14/100 · rule violations 0 · critique high-severity 0

Verdict: SAFE. All structural signals clean at the configured thresholds.

Next steps

  • No structural concerns at the configured thresholds. Standard review still recommended.

Powered by roam-code — Apache 2.0, Local source analysis. Customize thresholds in .roam/rules.yml. Docs.

This branch has not been deployed

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

Labels

dependencies Pull requests that update a dependency file

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants