Skip to content

Hotfix/v2.0.4 - #1955

Merged
mhaya merged 3 commits into
develop_v2.0.5from
hotfix/v2.0.4
Oct 30, 2026
Merged

mhaya merged 3 commits into
develop_v2.0.5from
hotfix/v2.0.4

Conversation

@mhaya

@mhaya mhaya commented Oct 30, 2026 •

Copy link
Copy Markdown
Contributor

概要 (Summary)

  • Hotfix/v2.0.4 #1954 のマージ以降に hotfix/v2.0.4 へ追加したコミットを develop_v2.0.5 に取り込む
    • e670844 ゲスト用トークンの発行・受付の既定値を無効にする
    • 6548cc7 weko-deposit の REST エンドポイント設定の修正
    • 4e061e8 weko-deposit のテスト修正
  • 動作確認: invenio-deposit/tests/test_views_rest.py、weko-deposit/tests/test_weko_deposit.py、weko-deposit/tests/test_rest.py::test_put がパスすることを確認

関連Issue / チケット (Related Issues)

  • close #

変更タイプ (Type of Change)

  • 🚀 新機能追加 (Feature)
  • 🐛 バグ修正 (Bug Fix)
  • 🔒 セキュリティ修正 (Security Fix)
  • 🚫 機能のクローズ・非公開化・削除 (Feature Deprecation/Disable)
  • ⚠️ 破壊的変更・データ移行を伴う修正 (Breaking Change / Migration)
  • 📚 仕様書・マニュアル・APIリストの更新 (Documentation)

🤖 0. CI 自動チェック (API Inventory Drift)

PR ごとに WEKO3 コンテナを起動し、url_map のダンプ・台帳との突き合わせ・変更行の
到達可否測定を自動実行する。結果は PR コメントと Actions の artifact
(api-inventory-summary) に出る。

このリポジトリは public のため、台帳もベースラインも同梱していない。
実データはプライベートリポジトリ RCOSDP/weko-secret にあり、CI は Secret 経由で取得する。
以降この文書では、そこを単にプライベートリポジトリと呼ぶ。

台帳はブランチごとに内容が違うため、CI は weko 側と同名のブランチを
プライベートリポジトリから探して使う(head → base → 既定ブランチ の順)。
採用されたブランチ名は PR コメントの冒頭に出るので、件数を読む前にそこを見ること。
対応ブランチが無い場合は既定ブランチと比較され、コメント冒頭に警告が出る。
その件数は当てにならないので、PASS でも「確認済み」と読まないこと。
詳細: tools/api-inventory/ci/README.md §3a

  • CI が PASS している、または FAIL の各項目に対処済み
    Secret (API_INVENTORY_REPO / API_INVENTORY_SSH_KEY) が未設定のリポジトリ、
    および fork からの PR では、このジョブは何もせずスキップされる。

API を追加・変更した場合(必須)

  • プライベートリポジトリ側の作業ブランチを、この PR のブランチと同名で切った
    この PR が fix/issue62569 → develop_v2.0.4 なら、プライベート側も
    fix/issue62569 → develop_v2.0.4。同名にしておけば台帳 PR が未マージでも
    CI がそれを見るので、2つの PR のマージ順を気にしなくてよい。
  • プライベートリポジトリの api_snapshot.json を更新し、対応する PR を出した
    bash export WEKO_API_INVENTORY_DIR=/path/to/weko-secret ./install.sh python3 tools/api-inventory/scripts/snapshot.py --out "$WEKO_API_INVENTORY_DIR/api_snapshot.json"
    更新しないと CI が落ちる。公開リポジトリのコード変更とは別の PRになる。
  • プライベートリポジトリの weko3_api_list_full.tsv に行を追加・更新し、
    build_checklist.py で 24 列版を再生成した(未収載だと reconcile が FAIL する)
  • 台帳・スナップショット・実測結果をこの公開リポジトリにコミットしていない
    (git status に *.tsv / api_snapshot.json が出ていないこと)

FAIL したときの対処(要約)

まず PR コメント冒頭の台帳ブランチを見る。警告が出ていれば、件数を追う前に
プライベートリポジトリ側の対応ブランチを用意すること(比較相手が違うので件数に意味がない)。

ジョブが落ちる条件は 3 つある。PR コメントのどのセクションに件数が出ているかで切り分ける。

落ちた場所 落ちる条件
ベースラインとの差分 (drift.md) G1〜G7 のいずれかに該当
台帳との突き合わせ (reconcile.md) A + B + C + D + E の合計が 1 件以上
変更行の到達可否測定 (probe) G8 / G9 に該当(結果は artifact に含めないので Actions のログで件数を見る)
検出 意味 対処
G1 / G2 新規経路に認証系デコレータが無い / 認証系デコレータが削除された 実装を直す。意図的な公開なら台帳に根拠を書いてベースライン更新
G3 認証・認可デコレータのコメントアウトが増えた 原則やり直し。残す場合は理由をコード中のコメントに明記する
G4 *_PERMISSION_FACTORY / CSRF 保護 等が危険側の値に変わった 原則やり直し
G5 ModelView の can_delete / can_export が False → True 意図的なら台帳の data_op を更新
G6 静的解析で属性が取れない経路が追加された 台帳に行を追加してレビューする(外部ライブラリ由来など)
G7 依存パッケージの更新で経路が増減した 増えた経路は台帳に追加。消えた経路は行を削除するか allow に登録
G8 台帳で data_op が作成/更新/削除の経路に、未認証で到達した 原則やり直し。意図的な公開なら台帳の根拠を更新。data_op の記載誤りなら台帳を直す
G9 台帳では遮断なのに実測で到達(認可の回帰) 原則やり直し
reconcile A / E 実機にあるが台帳に無い(A: URI 単位 / E: 同一 URI の endpoint 単位) 台帳に行を追加する
reconcile B 台帳にあるが実機の url_map に無い 理由を確認し、正当なら allow に登録する
reconcile C / D メソッド・app 列の記載誤り 台帳を実機に合わせる

reconcile B のうち、実機に存在しないことが正当な行(プラグイン未登録・config で無効等)は
プライベートリポジトリの reconcile_allow.json に理由付きで登録する。理由なしの登録は不可。
登録済みの行は B'(既知・許容)として集計され、E'(endpoint が実機に無い)と併せてゲート対象外になる。

W1〜W6 は WARN でゲートは通るが、レビューでは見ること
(ModelView の追加 / 実装本体の変化 / HTTP メソッド・URL の変化 / 監視対象 config の変化 /
依存パッケージの版の変化)。特に W6(依存の版)は、ベースラインを CI と異なる環境で作ると
毎回出続けて形骸化するため、ベースラインは install.sh で作った環境から生成する。

CI の出力は件数のみ。該当した経路名は Actions には出ないので、プライベートリポジトリ側の
完全版レポート(--summary-only なしで再実行したもの)で確認すること
(このリポジトリは public で、ログ・artifact・PR コメントは誰でも読めるため)。


🔒 1. セキュリティ & API アクセス制御チェック (必須)

認証・認可 (Authentication & Authorization)

  • 新規/変更された Blueprint・View・REST リソースに適切なデコレータ / Permission を設定している
    • 例: @login_required, @pass_record, need(...), Invenio Access Action
    • /api/* では Permission.require(http_exception=403) を使うこと。
      @login_required は API アプリに security.login が無いため 401 ではなく 500 になる
    • CI: G1 / G2 が自動検出(デコレータの有無・削除)
  • 状態変更・破壊的メソッド (POST / PUT / PATCH / DELETE) の権限が正しく制限されている
    • CI: G8 が変更行を未認証で実測(使い捨て環境なので --allow-writes 付きで
      GET / HEAD 以外も叩く)
  • 未ログイン(Anonymous)状態でアクセスした際、意図しないデータ取得・変更が拒絶される
    • CI: G8 / G9 が変更行を実測。ただし測定対象は変更行のみ、かつ既定プロファイルで
      起動した経路のみ。ワークフロー系など未解決プレースホルダの行は skip される
  • 認可を config の permission factory に委ねている場合、None で無効化していない
    • CI: G4 が *_PERMISSION_FACTORY 等を監視

機能クローズ・非公開化の場合 (Feature Disable)

  • UI(画面・ボタン)の非表示だけでなく、バックエンド API(ルーティング・View)も完全に遮断されている
  • 無効化状態で直接 API を叩いた場合、404 Not Found または 403 Forbidden が返ることを確認した

🧪 2. テストコード観点チェック (pytest / Invenio Test Suite)

権限・異常系テスト (Negative & Authorization Tests)

  • 未認証アクセス (Anonymous): トークン/セッションなしのリクエストで 401 Unauthorized または 403 Forbidden / 404 Not Found が返ることを検証するテストがある
  • 権限不足ユーザー (Forbidden): 閲覧権限のみのユーザーが更新/削除 API を叩いた際に 403 になるテストがある
  • 無効化/非公開機能の遮断テスト: 対象機能が無効化されている場合、エンドポイントが 404 / 403 を返すテストがある

境界値・入力バリデーションテスト (Boundary & Validation)

  • 不正なパラメータ(巨大ファイル、異常な MIME タイプ、無効な JSON/XML スキーマ、SQLi/XSS ペイロード等)で適切に 400 Bad Request / バリデーションエラーが返るテストがある

データ整合性・トランザクションテスト (Integrity & Rollback)

  • ファイルストレージ(S3/ローカル)書き込み失敗時や DB エラー時に、中途半端なレコードやゴミファイルが残らずロールバックされるテストがある

🛡️ 3. データ保護 & 破壊的変更防止チェック (Data Safety)

  • 物理削除・上書きの安全性:
    • ファイル・アイテム・メタデータの完全削除/置換処理に、意図しない一括削除や別レコードへの誤適用リスクがない
    • 論理削除、バージョン管理、バックアップ等のロールバック機構が考慮されている
  • トランザクション整合性:
    • DB 更新とストレージ操作がアトミックに管理されている

⚙️ 4. マイグレーション & システム影響チェック (Invenio / WEKO3 Stack)

データベース (DB / Alembic)

  • invenio alembic upgrade(適用)および downgrade(ロールバック)スクリプトを作成・検証した
  • 既存データに対する破壊的変更(カラム削除、型変更、NOT NULL 制約追加等)の移行スクリプト/データパッチを用意した

検索インデックス (Elasticsearch / OpenSearch)

  • マッピング定義変更の有無を確認した
  • インデックス再作成(Reindex)やエイリアス切り替え手順を準備・検証した

設定 & 非同期処理 (Config / Celery / Cache)

  • invenio.cfg / 環境変数のデフォルト値を設定した
  • Celery タスクのシグネチャ変更によるキュー滞留・不整合が発生しない
  • キャッシュ(Redis/Memcached)のパージが必要か確認した

📚 5. ドキュメント・仕様書更新チェック (weko-document)

  • API インベントリ: ツールは本リポジトリの tools/api-inventory/、
    台帳・調査記録はプライベートリポジトリ(public リポジトリには置かない)。
    §0 のチェック項目で対応済みなら、ここは確認のみ。
    • エンドポイントの追加・変更・廃止、メソッド、認証・認可要件、リクエスト/レスポンス仕様を更新した
    • 調査記録(weko3_api_auth_findings.md)もプライベートリポジトリに置く。台帳は二重管理しない
  • WEKO3 機能仕様書:
    • 対象機能の仕様追加・変更・クローズ(非公開化)内容を反映した
  • 各種マニュアル (管理者 / 利用者マニュアル):
    • 画面導線・操作手順・権限仕様の変更を反映した
  • 更新不要な場合(理由):

📋 6. 動作検証エビデンス (Verification Evidence)

テスト実行結果

cd modules/<対象モジュール> && pytest
# -> PASS

CI の成果物 (artifact: api-inventory-summary)

ファイル 内容
drift.md ベースラインとの差分(件数のみ)
reconcile.md 台帳と実機の突き合わせ(件数のみ)

明細(該当した経路名・実測結果)は公開できないため artifact に含めていない。
プライベートリポジトリ側で同じコマンドを --summary-only なしで実行して確認する。

手動で確認したこと

🤖 Generated with Claude Code

Summary by Sourcery

Harden deposit REST access control and disable guest activity tokens by default.

Bug Fixes:

  • Protect deposit action endpoints with the same item-edit authorization used for updates.
  • Correct the expected unauthenticated response for deposit updates to return 401.

Enhancements:

  • Add configurable decorators for deposit action routes and apply them to WEKO deposit endpoints.
  • Disable guest activity token issuance and acceptance by default.

Tests:

  • Extend REST route and endpoint configuration tests to cover action authorization and updated unauthenticated behavior.

mhaya and others added 3 commits October 30, 2026 03:45
- scripts/instance.cfg の WEKO_WORKFLOW_GUEST_TOKEN_ISSUE_ENABLED /
  WEKO_WORKFLOW_GUEST_TOKEN_ACCEPT_ENABLED を False に変更

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- invenio-deposit の create_blueprint に action_decorators オプションを追加し、
  actions ルートの POST にデコレータを指定できるようにする
- weko-deposit で actions ルートに require_item_edit_permission を指定し、
  未認証では 401、編集権限が無ければ 403 を返す

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ログイン後の更新の流れは test_rest.py::test_put で確認している。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@sourcery-ai

sourcery-ai Bot commented Oct 30, 2026 •

Copy link
Copy Markdown
Reviewer's guide (collapsed on small PRs)

Reviewer's Guide

This hotfix imports the v2.0.4 changes into the target development branch by protecting deposit action POST endpoints with the item-edit permission, disabling guest activity token issuance and acceptance by default, and updating tests to validate the resulting authorization and endpoint configuration behavior.

Sequence diagram for protected deposit action POST requests

sequenceDiagram
    actor Client
    participant DepositAPI
    participant Permission

    Client->>DepositAPI: POST /deposits/{pid}/actions/{action}
    DepositAPI->>Permission: require_item_edit_permission
    alt permission granted
        Permission-->>DepositAPI: allow
        DepositAPI-->>Client: action response
    else permission denied
        Permission-->>DepositAPI: deny
        DepositAPI-->>Client: 403 Forbidden
    end
Loading

File-Level Changes

Change Details Files
Adds configurable authorization decorators for deposit action endpoints and applies item-edit permission checks to WEKO deposit actions.
  • Introduces an action_decorators endpoint option for POST action routes.
  • Applies configured decorators to edit, discard, and publish actions.
  • Configures the same edit permission used for item updates and verifies protected access behavior.
modules/invenio-deposit/invenio_deposit/views/rest.py
modules/weko-deposit/weko_deposit/config.py
modules/invenio-deposit/tests/test_views_rest.py
modules/weko-deposit/tests/test_weko_deposit.py
Disables guest activity token issuance and acceptance by default.
  • Changes both guest token feature flags from enabled to disabled in the instance configuration.
scripts/instance.cfg
Updates REST endpoint tests to reflect the authorization behavior introduced by the hotfix.
  • Expects anonymous PUT access to return 401.
  • Adds endpoint configuration assertions for action decorators.
  • Separately covers authenticated update behavior through the existing REST test.
modules/weko-deposit/tests/test_weko_deposit.py

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

@coderabbitai

coderabbitai Bot commented Oct 30, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: acc0a2a4-44ea-4c84-8b51-ee4b0c867c73

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@github-actions

github-actions Bot commented Oct 30, 2026 •

Copy link
Copy Markdown

🔍 Claude によるレビュー

指摘 2 件 — 🔴 高 0 / 🟠 中 2 / 🟡 低 0 / 🔎 未確認 7 件


🟠 [中] 認可の強化とは無関係なゲストトークン機能の無効化が混入している

scripts/instance.cfg:768 (1/3 パス)

WEKO_WORKFLOW_GUEST_TOKEN_ISSUE_ENABLED と WEKO_WORKFLOW_GUEST_TOKEN_ACCEPT_ENABLED が True から False に変わっている。この PR の目的は deposit の actions への編集権限チェックだが、この設定は別機能の既定値変更である。この設定で配備される環境では、ゲスト向けのトークン発行と受理が止まる。意図的でなければ誤混入の可能性がある。意図的ならこの PR から分けて目的を説明すべきである。

提案

意図しない変更なら instance.cfg の変更を取り除く。意図的なら別 PR に分けるか、PR 説明に理由を書く。

根拠
-WEKO_WORKFLOW_GUEST_TOKEN_ISSUE_ENABLED = True
+WEKO_WORKFLOW_GUEST_TOKEN_ISSUE_ENABLED = False
-WEKO_WORKFLOW_GUEST_TOKEN_ACCEPT_ENABLED = True
+WEKO_WORKFLOW_GUEST_TOKEN_ACCEPT_ENABLED = False

確認: scripts/instance.cfg:768-770 を確認した。weko_workflow/utils.py:3561-3574 を読み、この 2 つの設定が getattr(..., False) 相当で参照されていることを確認した。weko_workflow/config.py:480-483 では既定値が False である。したがって instance.cfg が True を上書きしていた状態から既定値に戻る変更になる。ただし PR 本文を確認できず、意図の有無は分からない。


🟠 [中] 認可と無関係なゲストトークン設定の無効化が混入している

scripts/instance.cfg:768 (1/3 パス)

WEKO_WORKFLOW_GUEST_TOKEN_ISSUE_ENABLED と WEKO_WORKFLOW_GUEST_TOKEN_ACCEPT_ENABLED が True から False に変わっている。この instance.cfg を使うデプロイでは、ゲスト向けトークンの発行と受理が止まる。PR の趣旨は deposit の actions への編集権限チェック追加で、この変更はその説明に含まれていない。

提案

意図したセキュリティ強化なら別 PR に分けて理由を書く。意図していなければこの 2 行を元に戻す。

根拠
-WEKO_WORKFLOW_GUEST_TOKEN_ISSUE_ENABLED = True / +WEKO_WORKFLOW_GUEST_TOKEN_ISSUE_ENABLED = False / -WEKO_WORKFLOW_GUEST_TOKEN_ACCEPT_ENABLED = True / +WEKO_WORKFLOW_GUEST_TOKEN_ACCEPT_ENABLED = False

確認: scripts/instance.cfg:765-770 で False になっていることを確認した。weko-workflow/weko_workflow/utils.py:3561-3574 では、この 2 つのフラグを get(..., False) で読み、機能の有効可否に使っていた。weko-workflow/weko_workflow/config.py:480-483 の既定値は False。weko-workflow、weko-records-ui、weko-workspace、weko-admin の tests/conftest.py は True を前提にしている。意図的な変更かどうかはコードからは判断できない。


🔎 未確認 — 裏が取れなかったもの 7 件
  • ゲストトークンの発行・受理が無効化される(この PR の主題と無関係) scripts/instance.cfg:768 (1/3 パス)
    • WEKO_WORKFLOW_GUEST_TOKEN_ISSUE_ENABLED と WEKO_WORKFLOW_GUEST_TOKEN_ACCEPT_ENABLED が True から False に変わっている。認可としては安全側への変更である。ただし、ゲスト向けワークフロー(ゲストによる投稿や承認)を運用している環境では機能が止まる可能性がある。weko_workflow/utils.py:3561-3574 と config.py:480-483 を確認した。コード側の既定値はどちらも False で、フラグはこの設定値だけで切り替わる。deposit の actions への認可追加という PR の目的とは関係のない変更である。
    • 確認できなかった理由: この設定値に依存するゲスト運用が実環境にあるかどうか、変更が意図的かどうかはコードから判断できなかった。PR 説明が無く、PR の範囲外の変更でもある。意図の確認が必要。
  • actions に付けた編集権限チェックが publish/edit/discard の既存の呼び出し経路を塞がないか未確認 modules/weko-deposit/weko_deposit/config.py:133 (1/3 パス)
    • action_decorators に require_item_edit_permission を指定したことで、POST /deposits//actions/{publish,edit,discard} は編集権限のないユーザーに対し 401/403/404 を返すようになった。デコレータは depid の値を recid として引き直し、edit_permission_factory で判定する。modules 配下(tests を除く)に、このエンドポイントを直接呼ぶ箇所は grep で見つからなかった。ただし JS/テンプレートやモジュール外のクライアントが URL を動的に組み立てている場合は、grep では追えない。
    • 確認できなかった理由: フロントエンドが URL を動的に組み立てているかもしれない。depid と recid の値が常に一致するかも、実データでは確認できなかった。
  • actions 以外の変更系ルートに認可デコレータが付いていない modules/weko-deposit/weko_deposit/config.py:133 (1/3 パス)
    • action_decorators は actions ルートの POST にだけ適用される。invenio-deposit の create_blueprint では、DepositFilesResource (GET/POST/PUT)、DepositFileResource (GET/PUT/DELETE)、rdc_route、pub_route に今回のデコレータが付かない。ファイルの追加・上書き・削除が編集権限チェックなしで通る可能性がある。今回の差分で入った欠陥ではなく以前からの状態の可能性が高いが、同じ種類の認可の穴である。
    • 確認できなかった理由: 各リソースが別の permission_factory で保護されているかどうかを、この調査では追いきれなかった。ctx に update_permission_factory_imp があり、need_record_permission が効く可能性がある。ただし DEPOSIT_REST_ENDPOINTS の factory が deny_all か allow_all かまでは未確認である。rdc_route と pub_route のビュー側の認可も未確認。
  • actions ルートの pid_value が depid か recid かで判定結果が変わる可能性 modules/weko-deposit/weko_deposit/rest.py:74 (1/3 パス)
    • デコレータは pid_value を recid として引き直す。put/publish では recid 系の値が渡るが、actions ルートの item_route は depid コンバータで解決される。depid と recid の値が一致しない環境では、404 が誤って返るか、別レコードの権限で判定される可能性がある。
    • 確認できなかった理由: depid の pid_value と recid の pid_value が WEKO で常に同一になるかを、コードから確定できなかった。item_route の PID コンバータの定義と PID の作成箇所を追っていない。
  • 未認証 PUT が 200 から 401 に変わる挙動変更の呼び出し側影響 modules/weko-deposit/tests/test_weko_deposit.py:86 (1/3 パス)
    • 既存テストの期待値が 200 から 401 に書き換えられている。意図された強化だが、未認証の PUT や actions を前提にしている内部クライアント(UI の JS、ワークフロー、他モジュールの呼び出し)があれば壊れる。また actions の edit/discard/publish は編集権限のないロールには 403 になる。
    • 確認できなかった理由: /deposits//actions/ を呼ぶ JS やワークフロー側の呼び出し元を grep で網羅しておらず、権限のないユーザーが正当に使う経路があるかは未確認。
  • actions エンドポイントの既存呼び出し元が編集権限で 403 になる可能性 modules/weko-deposit/weko_deposit/rest.py:69 (1/3 パス)
    • action_decorators により、POST /api/deposits/items//actions/{edit,discard,publish} は edit_permission_factory を通らないと 401/403 になる。ワークフローや items-ui のフロントエンドが、編集権限を持たないユーザーでこの URL を呼んでいれば、機能が後退する。
    • 確認できなかった理由: リポジトリ内の非テストコードを grep したところ、呼び出し箇所は見つからなかった。ヒットしたのは tavern のレスポンスデータとリンク生成だけ。JS やテンプレートで URL が動的に組み立てられていると grep では追えず、実利用を確認しきれなかった。
  • depid の pid_value を recid として引き直す前提 modules/weko-deposit/weko_deposit/rest.py:74 (1/3 パス)
    • デコレータは URL の depid の値を recid の pid_value として検索する。weko_deposit_minter は depid を recid と同じ値で作るので、通常は一致する。ただし recid を指定して作った例外的なデータや、移行データで値がずれていれば、404 になる。
    • 確認できなかった理由: pidstore.py:46-53 で同値作成であることは確認した。既存の全データがその前提を満たすかは、コードからは確認できない。

モデル sonnet / 3 回実行して和集合 / コスト $0.3668。同じ差分でも結果が揺れるため複数回まわし、一部のパスでしか挙がらなかったものには回数を添えています

差分のみを対象にした自動レビューです。誤りが含まれることがあります。

@github-actions

Copy link
Copy Markdown

API インベントリ差分(件数のみ)

⚠️ プライベートリポジトリに対応ブランチが無いため、既定ブランチの台帳と比較しています。
ブランチ間の経路差がそのまま差分として出るので、以下の件数は当てになりません。
この PR のブランチと同名のブランチをプライベートリポジトリに作ってください。

明細は公開できないため件数のみ表示しています。該当箇所はプライベートリポジトリ側の台帳・レポートで確認してください。

ベースラインとの差分

(生成されませんでした)

台帳との突き合わせ

(生成されませんでした)

1 similar comment
@github-actions

Copy link
Copy Markdown

API インベントリ差分(件数のみ)

⚠️ プライベートリポジトリに対応ブランチが無いため、既定ブランチの台帳と比較しています。
ブランチ間の経路差がそのまま差分として出るので、以下の件数は当てになりません。
この PR のブランチと同名のブランチをプライベートリポジトリに作ってください。

明細は公開できないため件数のみ表示しています。該当箇所はプライベートリポジトリ側の台帳・レポートで確認してください。

ベースラインとの差分

(生成されませんでした)

台帳との突き合わせ

(生成されませんでした)

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Hey - I've reviewed your changes and they look great!

Sourcery assessment

Approved.


Sourcery is free for open source - if you like our reviews please consider sharing them ✨

@github-actions

Copy link
Copy Markdown

API インベントリ差分(件数のみ)

⚠️ プライベートリポジトリに対応ブランチが無いため、既定ブランチの台帳と比較しています。
ブランチ間の経路差がそのまま差分として出るので、以下の件数は当てになりません。
この PR のブランチと同名のブランチをプライベートリポジトリに作ってください。

明細は公開できないため件数のみ表示しています。該当箇所はプライベートリポジトリ側の台帳・レポートで確認してください。

ベースラインとの差分

API インベントリ差分レポート

  • 旧: 5f4bef44c v2.0.4 (profile=default) endpoints=928 (外部ライブラリ由来 359)
  • 新: 02a4c6756 v2.0.4-9-g02a4c6756 (profile=default) endpoints=928 (外部ライブラリ由来 359)

判定: ✅ PASS (FAIL 0 / WARN 2)

サマリ

分類 件数
ADDED 0
REMOVED 0
RULE_CHANGED 0
METHODS_CHANGED 0
AUTH_CHANGED 2
IMPL_CHANGED 0
ATTRS_UNKNOWN_NEW 0
ModelView 追加 0
ModelView 削除 0
ModelView フラグ変化 1
config 変化 1
コメントアウト認証の増加 0
依存パッケージの版変化 6

[WARN] W6 依存パッケージの版が変化した — 6件

  • distlib — 0.4.3 -> 0.4.4
  • frozendict — 2.4.7 -> 2.5.0
  • pbr — 7.0.3 -> 7.1.3
  • pyld — 3.1.0 -> 3.3.0
  • orjson — 3.6.1 -> (削除)
  • weko-redis — 0.1.0.dev20170000 -> (削除)

[WARN] W5 監視対象 config が変化した — 1件

件数のみ。該当の経路名はプライベートリポジトリ側の完全版レポートを参照。


台帳との突き合わせ

スナップショット ↔ インベントリ 突き合わせ

  • リビジョン: 02a4c6756 v2.0.4-9-g02a4c6756 経路URI=908
  • 台帳: 行=1048 URI=919

件数のみ。詳細はプライベートリポジトリ側の完全版レポートを参照。

判定: ✅ 一致 (0件)

検出 件数
A. インベントリ未収載(抽出漏れ) 0
B. 実機に無い(未説明) 0
B'. 実機に無い(既知・許容) 11
C. メソッド不一致 0
D. app列の不一致 0
E. endpoint 未収載 0
E'. endpoint が実機に無い(参考) 1

@mhaya
mhaya merged commit 96f87e1 into develop_v2.0.5 Oct 30, 2026
38 of 196 checks passed
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.

1 participant