Skip to content

build(deps): consolidate account-unification dependency updates - #33

Merged
seonghobae merged 8 commits into
mainfrom
claude/contextualwisdomlab-audit-ci-se85n8
Aug 3, 2026
Merged

build(deps): consolidate account-unification dependency updates#33
seonghobae merged 8 commits into
mainfrom
claude/contextualwisdomlab-audit-ci-se85n8

Conversation

@seonghobae

@seonghobae seonghobae commented Jul 29, 2026

Copy link
Copy Markdown
Contributor

Summary

Consolidates the account-unification dependency updates into one lock-consistent change. Merging the original Dependabot PRs independently would leave pyproject.toml, uv.lock, and the hash-pinned requirements-dev.txt out of sync.

Package From To Source PR
fastapi 0.139.0 0.140.13 #28
uvicorn 0.51.0 0.52.0 #27
ruff 0.15.21 0.16.0 #31
annotated-doc 0.0.4 0.0.5 #29
annotated-types 0.7.0 0.8.0 #30
anyio 4.14.1 4.14.2 #17
certifi 2026.6.17 2026.7.22 #20

Stable Ruff policy

Ruff 0.16 expands its implicit default rules. This PR makes the established repository policy explicit with select = ["E4", "E7", "E9", "F"], avoiding an unrelated lint-policy migration in a dependency-only update.

Verification required

  • uv sync --locked --extra dev
  • uv run ruff check app tests tools
  • uv run interrogate . at 100%
  • uv run pytest -q
  • hash-pinned review-sandbox dependency installation
  • Semgrep, CodeQL, security scan, and central coverage evidence

Supersedes #17, #20, #27, #28, #29, #30, and #31.

Summary by CodeRabbit

  • 개선 사항
    • 서비스 실행 환경과 개발 품질 검사를 최신 기준에 맞게 정비했습니다.
    • 코드 검증 규칙을 명확히 하여 향후 업데이트의 안정성과 일관성을 높였습니다.
    • 이번 변경으로 사용자가 직접 체감하는 기능 변화는 없습니다.

…in ruff rule set

Dependabot opened five PRs (#27-#31) bumping account_unification dependencies,
but each only edited pyproject.toml (or targeted a transitive package) without
regenerating uv.lock, so every one fails `uv sync --locked` on the
account-unification-tests gate ("The lockfile at uv.lock needs to be updated").

Apply all five bumps in one lock-consistent change:

- fastapi 0.139.0 -> 0.140.13 (pulls starlette 1.3.1)
- uvicorn 0.51.0 -> 0.52.0
- ruff 0.15.21 -> 0.16.0 (dev)
- annotated-doc 0.0.4 -> 0.0.5 (transitive)
- annotated-types 0.7.0 -> 0.8.0 (transitive)

ruff 0.16.0 widened its implicit default rule set (adding flake8-bugbear,
pyupgrade, flake8-pyi, flake8-blind-except, RUF100, isort), which surfaced 21
lints on code that previously passed. Pin the classic default select
(["E4","E7","E9","F"]) so the established lint policy stays explicit and stable
across ruff upgrades instead of silently changing on a version bump.

Verified in services/account_unification: `uv sync --locked --extra dev`,
`ruff check app tests tools` (All checks passed), `interrogate .` (100%),
`pytest -q` (52 passed).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AqtiEQFfuYFsS75Aku9tPT
@coderabbitai

coderabbitai Bot commented Jul 29, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

account_unification 서비스의 FastAPI, Uvicorn, Ruff 버전을 업데이트했습니다. Ruff 린트 설정에 E4, E7, E9, F 규칙 선택을 추가했습니다.

Changes

패키지 및 린트 설정 업데이트

Layer / File(s) Summary
의존성 및 Ruff 설정
services/account_unification/pyproject.toml
FastAPI를 0.140.13, Uvicorn을 0.52.0, Ruff를 0.16.0으로 업데이트했습니다. Ruff 린트 규칙 선택에 E4, E7, E9, F를 추가했습니다.

Estimated code review effort: 1 (Trivial) | ~3 minutes

Possibly related PRs

Suggested labels: dependencies, python

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed 제목은 account-unification의 의존성 업데이트를 통합한다는 주요 변경 사항을 정확하고 간결하게 설명합니다.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch claude/contextualwisdomlab-audit-ci-se85n8

Comment @coderabbitai help to get the list of available commands.

Copy link
Copy Markdown
Contributor Author

Status on this dependency consolidation:


Generated by Claude Code

@opencode-agent opencode-agent Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

OpenCode could not approve from deterministic current-head evidence because GitHub Checks have failed.

Findings

1. HIGH Current-head GitHub Checks - Fix failed required checks before approval

  • Problem: Failed same-head checks remain for 5c7e1dd820d887e862bafa6b187c429c4176db53.
  • Root cause: The model-unavailable evidence fallback is allowed only when peer GitHub Checks are complete and clean.
  • Fix: Read and fix the failed check logs below, then rerun the current-head checks.
  • Regression test: Keep the model-unavailable fallback gated on an empty failed-check rollup.

Failed checks:

Changed-File Evidence Map

flowchart LR
  PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
  Evidence --> S1["Changed file (2 files)"]
  S1 --> I1["repository behavior"]
  I1 --> R1["Review risk: Changed file (2 files)"]
  R1 --> V1["required checks"]
Loading

@opencode-agent

opencode-agent Bot commented Jul 29, 2026

Copy link
Copy Markdown
Contributor

OpenCode Review Overview

  • Head SHA: 3e033462e719dc19d36e70a764d62379bafba056
  • Workflow run: 30482870472
  • Workflow attempt: 1
  • Gate result: REQUEST_CHANGES (approval step)

Pull request overview

OpenCode cannot approve yet because required coverage evidence did not pass.

Review outcome

1. HIGH .github/workflows/opencode-review.yml:1 - Coverage evidence did not prove required test/docstring evidence

  • Problem: The required coverage-evidence job result was failure, so OpenCode cannot establish approval sufficiency for this head.

  • Root cause: Automated approval is only valid when the same-head coverage-evidence job proves supported repository test suites passed and configured docstring gates passed or were advisory, or reports not applicable because no supported source files or package manifests exist. Missing, failed, skipped, unavailable, or unsupported-tooling test evidence is a blocker.

  • Fix: Install or configure the repository test/docstring evidence tooling when source files or package manifests exist, rerun the current-head coverage-evidence job, and approve only after it reports success with required evidence or explicit no-source not-applicable evidence.

  • Regression test: Keep the approval branch checking needs.coverage-evidence.result == success before posting APPROVE, and publish REQUEST_CHANGES when coverage-evidence blocker states such as cancelled, skipped, failed, unsupported-tooling, or below-100 evidence are present.

  • Result: REQUEST_CHANGES

  • Reason: coverage-evidence result was failure, so required test/docstring evidence was not proven for current head 3e033462e719dc19d36e70a764d62379bafba056.

  • Head SHA: 3e033462e719dc19d36e70a764d62379bafba056

  • Workflow run: 30482870472

  • Workflow attempt: 1

Coverage evidence

Coverage Decision

  • Result: FAIL
  • Test evidence: not proven passing
  • Docstring evidence: not proven passing when configured
  • Failure count: 1

Changed-File Evidence Map

flowchart LR
  PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
  Evidence --> S1["Changed file (3 files)"]
  S1 --> I1["repository behavior"]
  I1 --> R1["Review risk: Changed file (3 files)"]
  R1 --> V1["required checks"]
  Evidence --> S2["Test: test_healthcheck.py"]
  S2 --> I2["regression suite"]
  I2 --> R2["Review risk: Test: test_healthcheck.py"]
  R2 --> V2["targeted test run"]
Loading

…llib finding

The org-central "Semgrep (multi-language SAST)" gate reports a real Medium
(WARNING) finding on every keyverse PR, blocking OpenCode approval:

  python.lang.security.audit.dynamic-urllib-use-detected
  services/account_unification/app/healthcheck.py:18 — dynamic value passed to
  urllib.request.urlopen (urllib honours file://, so a caller-controlled URL
  could read arbitrary files).

Mitigate the actual risk by rejecting any non-http(s) scheme before opening the
URL (closes the file:// vector), then annotate the audited call with a narrow,
documented `# nosemgrep` for that single rule. Add a regression test for the
rejected-scheme path. Fixed at base so all open keyverse PRs inherit a clean
SAST gate.

Verified in services/account_unification: `ruff check app tests tools`,
`interrogate .` (100%), `pytest -q`.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AqtiEQFfuYFsS75Aku9tPT

Copy link
Copy Markdown
Contributor Author

Correction to my earlier comment: I mis-read the Semgrep (multi-language SAST) failure. The log tail I first looked at was only the post-job StepSecurity harden-runner monitoring dump (audit mode, ENFORCE_*=false), not the actual step output. The real cause is a genuine Medium (WARNING) SAST finding, pre-existing on main and failing every keyverse PR:

python.lang.security.audit.dynamic-urllib-use-detected
services/account_unification/app/healthcheck.py:18
Detected a dynamic value being used with urllib (urllib honours file://, so a
caller-controlled URL could read arbitrary files).

Fixed at base in 3e03346: reject any non-http(s) scheme before opening the URL (closes the file:// vector), annotate the audited call with a narrow, documented # nosemgrep for that single rule, and add a regression test for the rejected-scheme path. Once this merges, all open keyverse PRs inherit a clean SAST gate. Apologies for the earlier incorrect "nothing to fix" call.


Generated by Claude Code

@opencode-agent opencode-agent Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

OpenCode cannot approve yet because required coverage evidence did not pass.

Review outcome

1. HIGH .github/workflows/opencode-review.yml:1 - Coverage evidence did not prove required test/docstring evidence

  • Problem: The required coverage-evidence job result was failure, so OpenCode cannot establish approval sufficiency for this head.

  • Root cause: Automated approval is only valid when the same-head coverage-evidence job proves supported repository test suites passed and configured docstring gates passed or were advisory, or reports not applicable because no supported source files or package manifests exist. Missing, failed, skipped, unavailable, or unsupported-tooling test evidence is a blocker.

  • Fix: Install or configure the repository test/docstring evidence tooling when source files or package manifests exist, rerun the current-head coverage-evidence job, and approve only after it reports success with required evidence or explicit no-source not-applicable evidence.

  • Regression test: Keep the approval branch checking needs.coverage-evidence.result == success before posting APPROVE, and publish REQUEST_CHANGES when coverage-evidence blocker states such as cancelled, skipped, failed, unsupported-tooling, or below-100 evidence are present.

  • Result: REQUEST_CHANGES

  • Reason: coverage-evidence result was failure, so required test/docstring evidence was not proven for current head 3e033462e719dc19d36e70a764d62379bafba056.

  • Head SHA: 3e033462e719dc19d36e70a764d62379bafba056

  • Workflow run: 30482870472

  • Workflow attempt: 1

Coverage evidence

Coverage Decision

  • Result: FAIL
  • Test evidence: not proven passing
  • Docstring evidence: not proven passing when configured
  • Failure count: 1

Changed-File Evidence Map

flowchart LR
  PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
  Evidence --> S1["Changed file (3 files)"]
  S1 --> I1["repository behavior"]
  I1 --> R1["Review risk: Changed file (3 files)"]
  R1 --> V1["required checks"]
  Evidence --> S2["Test: test_healthcheck.py"]
  S2 --> I2["regression suite"]
  I2 --> R2["Review risk: Test: test_healthcheck.py"]
  R2 --> V2["targeted test run"]
Loading

Copy link
Copy Markdown
Contributor Author

Blocker triage for the coverage-evidence REQUEST_CHANGES at 3e03346:

  • The earlier Semgrep dynamic-urllib-use-detected finding is resolved by 3e03346 (scheme allowlist + # nosemgrep), and the current-head check rollup is green (Semgrep, Trivy, osv-scanner, CodeQL, noema-review, opencode-review all success).
  • The remaining coverage-evidence failure is not a defect in this PR. Locally, from services/account_unification/, all repo gates pass: uv sync --locked ✓, ruff check app tests tools ✓, interrogate . → 100% ✓, pytest -q → all pass ✓.
  • Root cause is central-harness, not repo-side: the trusted offline coverage sandbox runs python3 -m coverage run -m pytest tests for this subdirectory service without its runtime deps, so collection fails at ModuleNotFoundError: No module named 'pydantic' (.github run 30482870472, job coverage-evidence). Root-level services (e.g. newsdom-api#456) pass the same job because their deps sit at the repo root.
  • This is exactly the gap tracked by ContextualWisdomLab/.github#612 (fix/offline-coverage-naruon-keyverse-deps). Re-running 30482870472 reproduces the same pydantic import error deterministically, so I'm not churning commits here; this PR is green-able once #612 lands the service deps into the offline sandbox.

Generated by Claude Code

opencode-agent Bot and others added 4 commits August 3, 2026 01:53
Integrate the validated AnyIO lockfile refresh into the consolidated account-unification dependency branch.
Integrate the validated certificate bundle lockfile refresh into the consolidated account-unification dependency branch.
@seonghobae seonghobae changed the title build(deps): consolidate account-unification dependency updates and pin ruff rule set build(deps): consolidate account-unification dependency updates Aug 3, 2026
@seonghobae
seonghobae dismissed stale reviews from opencode-agent[bot] and opencode-agent[bot] August 3, 2026 02:36

Dismissed as stale: it evaluated an earlier head with a Semgrep failure. The dependency branch has since been rebuilt with lock-consistent updates and is undergoing fresh current-head checks.

@seonghobae
seonghobae enabled auto-merge (squash) August 3, 2026 02:37
@seonghobae
seonghobae merged commit 5bab73e into main Aug 3, 2026
29 checks passed
@seonghobae
seonghobae deleted the claude/contextualwisdomlab-audit-ci-se85n8 branch August 3, 2026 03:54
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.

2 participants