deps: bump pypdf from 6.16.1 to 6.16.2 - #110
Conversation
roam-code AnalysisMode: incremental ( Health Score: 76/100 health: Fair codebase (76/100) — 66 critical, 0 warnings, focus: god_components Health Metrics
PR Risk
Quality Gate: PASSEDGate expression: SARIF Upload
Full analysis outputhealth{
"_meta": {
"cache_ttl_s": 300,
"cacheable": true,
"index_age_s": 423433,
"index_status": {
"dirty_files": 0,
"fresh": false,
"head_commit": "708dbc0b6c4c",
"hint": "index latest commit e4ce5f1cfe7a != HEAD 708dbc0b6c4c — git-derived metrics (commits, churn, co-change, weather) may be stale. Run `roam index --force`.",
"indexed_commit": "e4ce5f1cfe7a"
},
"latency_ms": null,
"response_tokens": 6996,
"roam_version": "14.0.2",
"timestamp": "2026-09-05T08:16:22Z"
},
"actionable_count": 18,
"actionable_cycles": 1,
"agent_contract": {
"confidence": null,
"facts": [
"Fair codebase (76/100) — 66 critical, 0 warnings, focus: god_components",
"health score 76",
"tangle ratio 0.7",
"0.0279 propagation cost findings",
"issue count 66"
],
"next_commands": [
"roam debt",
"roam trends --days 30"
],
"risks": []
},
"algebraic_connectivity": null,
"algebraic_connectivity_available": false,
"bottleneck_thresholds": {
"list_limit": 15,
"p70": 36867.2,
"p90": 174379.9,
"population": 3449,
"utility_multiplier": 1.5
},
"category_severity": {
"bottlenecks": {
"critical": 15,
"info": 0,
"warning": 0
},
"cycles": {
"critical": 1,
"info": 0,
"warning": 0
},
"god_components": {
"critical": 50,
"info": 0,
"warning": 0
},
"layer_violations": {
"critical": 0,
"info": 0,
"warning": 0
}
},
"command": "health",
"cycles_actionable": 1,
"cycles_total": 52,
"framework_filtered": 0,
"god_component_thresholds": {
"list_limit": 50,
"min_degree": 20,
"population": 634
},
"health_score": 76,
"ignored_cycles": 51,
"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": "708dbc0b6c4c",
"hint": "index latest commit e4ce5f1cfe7a != HEAD 708dbc0b6c4c — git-derived metrics (commits, churn, co-change, weather) may be stale. Run `roam index --force`.",
"indexed_commit": "e4ce5f1cfe7a"
},
"issue_count": 66,
"list_counts": {
"bottlenecks": 15,
"cycle_break_suggestions": 1,
"cycles": 52,
"god_components": 50,
"layer_violations": 0,
"next_steps": 2,
"score_breakdown": 5
},
"project": "roam-code",
"propagation_cost": 0.0279,
"schema": "roam-envelope-v1",
"schema_version": "1.2.0",
"severity": {
"critical": 66,
"info": 51,
"warning": 0
},
"summary": {
"actionable_cycles": 1,
"algebraic_connectivity": null,
"algebraic_connectivity_available": false,
"category_severity": {
"bottlenecks": {
"critical": 15,
"info": 0,
"warning": 0
},
"cycles": {
"critical": 1,
"info": 0,
"warning": 0
},
"god_components": {
"critical": 50,
"info": 0,
"warning": 0
},
"layer_violations": {
"critical": 0,
"info": 0,
"warning": 0
}
},
"cycles_actionable": 1,
"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": 52,
"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": 76,
"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.",
"ignored_cycles": 51,
"imported_coverage_files": 0,
"imported_coverage_pct": null,
"issue_count": 66,
"partial_success": true,
"preserved_list_truncations": {},
"propagation_cost": 0.0279,
"severity": {
"critical": 66,
"info": 51,
"warning": 0
},
"tangle_ratio": 0.7,
"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": 52,
"truncated": true,
"truncation_reason": "detail_mode",
"verdict": "Fair codebase (76/100) — 66 critical, 0 warnings, 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_634",
"health_bottlenecks_list_capped:showing_top_15_of_3449"
]
},
"tangle_ratio": 0.7,
"total_cycles": 52,
"utility_count": 32,
"version": "14.0.2",
"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_634",
"health_bottlenecks_list_capped:showing_top_15_of_3449"
]
}pr-risk{
"_meta": {
"cache_ttl_s": 60,
"cacheable": true,
"index_age_s": 423434,
"index_status": {
"dirty_files": 0,
"fresh": false,
"head_commit": "708dbc0b6c4c",
"hint": "index latest commit e4ce5f1cfe7a != HEAD 708dbc0b6c4c — git-derived metrics (commits, churn, co-change, weather) may be stale. Run `roam index --force`.",
"indexed_commit": "e4ce5f1cfe7a"
},
"latency_ms": null,
"response_tokens": 873,
"roam_version": "14.0.2",
"timestamp": "2026-09-05T08:16:23Z"
},
"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 2b7ce4094d7c02b7088f40e3a385edb1e5dfdbb5..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 2b7ce4094d7c02b7088f40e3a385edb1e5dfdbb5..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": "2b7ce4094d7c02b7088f40e3a385edb1e5dfdbb5..HEAD",
"coupling_score": 0,
"created_at_epoch": 1788596183,
"diff_id": "7fccaded5a22",
"familiarity_risk": 0,
"file_list": [
"pyproject.toml"
],
"hotspot_score": 0,
"label": "2b7ce4094d7c02b7088f40e3a385edb1e5dfdbb5..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:7fccaded5a22",
"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": "2b7ce4094d7c02b7088f40e3a385edb1e5dfdbb5..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": 644,
"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": 449
},
{
"actor": "t",
"author": "t",
"lines": 15
},
{
"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": 11438,
"total_layers": 45,
"version": "14.0.2",
"warnings_out": []
}roam-code analysis | Commands: |
e4ce5f1 to
882e36a
Compare
|
Thanks! The upstream fixes look useful. This currently changes the version in Leaving this open for a coordinated update. The earlier red checks don't establish that pypdf 6.16.2 itself is broken, so I don't want to label it a regression without testing the matching locked environment. |
Bumps [pypdf](https://github.com/py-pdf/pypdf) from 6.16.1 to 6.16.2. - [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.16.1...6.16.2) --- updated-dependencies: - dependency-name: pypdf dependency-version: 6.16.1 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com>
882e36a to
1d8e546
Compare
|
Superseded by #115. |
Bumps pypdf from 6.16.1 to 6.16.2.
Release notes
Sourced from pypdf's releases.
Changelog
Sourced from pypdf's changelog.
Commits
1da0987REL: 6.16.2f6853ccBUG: Make remove_from_tree() work on outline items (#3939)c6d38afBUG: Type character widths as float (#3996)882b3b2STY: Type the XMP stream as StreamObject rather than ContentStream (#3995)4c8f707STY: Accept any sequence of fit arguments in Fit (#3990)2450321STY: Accept any sequence as the annotation border (#3991)2dcab8dMAINT: Skip test_appearance_stream_rtl when RTL support is unavailable (#3993)412975aBUG: Be more lenient about space width in layout mode text extraction (#3992)ddbfea9BUG: Interpolate the reader in the reset_translation error message (#3981)c646ef2ROB: Improve RC4 fallback when cryptography can't provide it (#3853)