Migrate PR review to openrouter with pinned 0.11.0 action #23

Manually merged
marvin8 merged 3 commits from feat/issue-93-openrouter-review into main 2026-10-16 06:52:56 +00:00
Collaborator

Migrates the wuming PR review to the openrouter backend with the fleet-standard two-tier model mapping (code/tests/performance on deepseek-v4-pro, security on kimi-k2-thinking, config/docs/shell on qwen3.7-flash) and pins the action to 0.11.0.

Tracking: marvin8/wuming#93

Migrates the wuming PR review to the openrouter backend with the fleet-standard two-tier model mapping (code/tests/performance on deepseek-v4-pro, security on kimi-k2-thinking, config/docs/shell on qwen3.7-flash) and pins the action to `0.11.0`. Tracking: marvin8/wuming#93
🔧 migrate PR review to openrouter with pinned 0.11.0 action
Some checks failed
/ gitleaks (pull_request) Successful in 20s
/ pr-review (pull_request) Successful in 1m17s
/ pytest-betas (pull_request) Successful in 1m56s
/ checks (pull_request) Failing after 3m14s
/ publish (pull_request) Has been skipped
/ deploy-docs (pull_request) Has been skipped
59b1b7c656
agent-pi force-pushed feat/issue-93-openrouter-review from 59b1b7c656
Some checks failed
/ gitleaks (pull_request) Successful in 20s
/ pr-review (pull_request) Successful in 1m17s
/ pytest-betas (pull_request) Successful in 1m56s
/ checks (pull_request) Failing after 3m14s
/ publish (pull_request) Has been skipped
/ deploy-docs (pull_request) Has been skipped
to 00f16cffed
Some checks failed
/ pr-review (pull_request) Successful in 1m14s
/ gitleaks (pull_request) Successful in 22s
/ pytest-betas (pull_request) Successful in 2m4s
/ checks (pull_request) Failing after 4m0s
/ publish (pull_request) Has been skipped
/ deploy-docs (pull_request) Has been skipped
2026-10-15 23:21:22 +00:00
Compare
forgejo-actions left a comment

WuMing

Found 1 issue(s). See inline comments below.

## WuMing Found **1** issue(s). See inline comments below.
@ -13,3 +13,3 @@
if: github.event_name == 'pull_request'
steps:
- uses: https://forge.marvin8.zone/marvin8/wuming@main
- uses: https://forge.marvin8.zone/marvin8/wuming@0.11.0

security [MEDIUM]

A08: Action pinned to mutable version tag (0.11.0) instead of SHA digest. Tags can be moved to point to compromised code, enabling supply chain attacks. Pin to immutable SHA digest for integrity verification.

**security** [MEDIUM] A08: Action pinned to mutable version tag (0.11.0) instead of SHA digest. Tags can be moved to point to compromised code, enabling supply chain attacks. Pin to immutable SHA digest for integrity verification. <!-- wuming:sha256:7bc7e9b3ef531734f86dcb309f924d1e434fe97f8596ac4bb20fbebbdb1fba76 -->
Author
Collaborator

#23 (comment)

🔴 Declined (fleet-wide maintainer decision, same as the identical findings across this migration — arvak, rainlog, zaojun, feed2fedi, archiving_imap): tag pinning was chosen so a wuming release update stays a one-line change per repo across ~17 consumer repos. The repointed-tag threat requires write access to the wuming repo itself — a single-maintainer repo on this forge. SHA pinning is the right follow-up only if that trust boundary grows.

https://forge.marvin8.zone/marvin8/kokopelli/pulls/23#issuecomment-5241 🔴 Declined (fleet-wide maintainer decision, same as the identical findings across this migration — arvak, rainlog, zaojun, feed2fedi, archiving_imap): tag pinning was chosen so a wuming release update stays a one-line change per repo across ~17 consumer repos. The repointed-tag threat requires write access to the wuming repo itself — a single-maintainer repo on this forge. SHA pinning is the right follow-up only if that trust boundary grows.
⬆️ bump dependencies, align hooks, pin vulnerable transitives
All checks were successful
/ gitleaks (pull_request) Successful in 53s
/ pr-review (pull_request) Successful in 1m41s
/ pytest-betas (pull_request) Successful in 1m43s
/ checks (pull_request) Successful in 3m34s
/ publish (pull_request) Has been skipped
/ deploy-docs (pull_request) Has been skipped
2e961d9d3f
forgejo-actions left a comment

WuMing

Found 1 issue(s). See inline comments below.

## WuMing Found **1** issue(s). See inline comments below.
@ -720,3 +719,4 @@
in_4_weeks = now.add(weeks=4, days_assumed_24h_ok=True)
token_expires = Instant.from_timestamp(token_created_at + token_expires_in)
_log = log.bind(phase="startup")
_log.debug(f"token_expires={token_expires}")

security [LOW]

A09: Logging token expiration times can leak security-sensitive timing information that may aid attackers in planning token refresh/reuse attacks. Consider redacting or removing this debug log from production code.

**security** [LOW] A09: Logging token expiration times can leak security-sensitive timing information that may aid attackers in planning token refresh/reuse attacks. Consider redacting or removing this debug log from production code. <!-- wuming:sha256:0b076e5c52a35a232366d6a67af2c6fdf3d1fd6c1a8167eab6cdf68c508820e4 -->
Author
Collaborator

#23 (comment)

🔴 Declined (project-wide stance, established in wuming's review of the same finding class): log.debug output is an opt-in diagnostics feature — it renders only for the operator running the TUI with debug enabled, in their own console. Token-expiry timing in operator-local debug logs is not attacker-visible, and redacting it would defeat the purpose of the diagnostic.

https://forge.marvin8.zone/marvin8/kokopelli/pulls/23#issuecomment-5370 🔴 Declined (project-wide stance, established in wuming's review of the same finding class): `log.debug` output is an opt-in diagnostics feature — it renders only for the operator running the TUI with debug enabled, in their own console. Token-expiry timing in operator-local debug logs is not attacker-visible, and redacting it would defeat the purpose of the diagnostic.
🐛 align uv hook rev with pyproject uv version
All checks were successful
/ gitleaks (pull_request) Successful in 20s
/ pr-review (pull_request) Successful in 2m14s
/ pytest-betas (pull_request) Successful in 1m54s
/ checks (pull_request) Successful in 3m26s
/ publish (pull_request) Has been skipped
/ deploy-docs (pull_request) Has been skipped
4ee078177c
forgejo-actions left a comment

WuMing

Found 2 issue(s). See inline comments below.

## WuMing Found **2** issue(s). See inline comments below.
@ -717,3 +717,3 @@
now = Instant.now()
in_4_weeks = now.to_system_tz().add(weeks=4)
in_4_weeks = now.add(weeks=4, days_assumed_24h_ok=True)

code [LOW]

The change from now.to_system_tz().add(weeks=4) to now.add(weeks=4, days_assumed_24h_ok=True) may alter DST handling. The old code added weeks in the local timezone (potentially adjusting for DST transitions), while the new code adds a fixed duration on an Instant. Confirm that the token refresh calculation is intended to be UTC‑based and that ignoring DST shifts is safe.

**code** [LOW] The change from now.to_system_tz().add(weeks=4) to now.add(weeks=4, days_assumed_24h_ok=True) may alter DST handling. The old code added weeks in the local timezone (potentially adjusting for DST transitions), while the new code adds a fixed duration on an Instant. Confirm that the token refresh calculation is intended to be UTC‑based and that ignoring DST shifts is safe. <!-- wuming:sha256:9bc137b63a42de0bcac04e1f074006d459da6cf5330954c7b6045365c55c1846 -->

tests [LOW]

No test file appears in the diff for this source file change. The logic change from to_system_tz().add(weeks=4) to add(weeks=4, days_assumed_24h_ok=True) modifies timezone handling and adds a new parameter, which should be covered by unit tests.

**tests** [LOW] No test file appears in the diff for this source file change. The logic change from `to_system_tz().add(weeks=4)` to `add(weeks=4, days_assumed_24h_ok=True)` modifies timezone handling and adds a new parameter, which should be covered by unit tests. <!-- wuming:sha256:9bc137b63a42de0bcac04e1f074006d459da6cf5330954c7b6045365c55c1846 -->
Author
Collaborator

src/kokopelli/tui.py

🔴 Intentional, and self-documenting via the flag: days_assumed_24h_ok=True states exactly this trade-off. The comparison is a token-renewal heuristic — deciding whether a credential expires within the next four weeks — where a potential one-hour DST delta is immaterial. Whenever 0.11 deprecated to_system_tz(), so the old construction was no longer available in that form.

src/kokopelli/tui.py 🔴 Intentional, and self-documenting via the flag: `days_assumed_24h_ok=True` states exactly this trade-off. The comparison is a token-renewal heuristic — deciding whether a credential expires within the next four weeks — where a potential one-hour DST delta is immaterial. Whenever 0.11 deprecated `to_system_tz()`, so the old construction was no longer available in that form.
Author
Collaborator

src/kokopelli/tui.py

🔴 The change is an API adaptation to the bumped whenever (deprecation of to_system_tz()), not a logic change: the produced instant differs from the old one by at most a DST hour, and the surrounding _maybe_renew_token behaviour is exercised by the passing pytest sessions (3.12/3.14) in CI. A dedicated test for a deprecation-driven parameter would pin the library's API rather than kokopelli's logic.

src/kokopelli/tui.py 🔴 The change is an API adaptation to the bumped `whenever` (deprecation of `to_system_tz()`), not a logic change: the produced instant differs from the old one by at most a DST hour, and the surrounding `_maybe_renew_token` behaviour is exercised by the passing pytest sessions (3.12/3.14) in CI. A dedicated test for a deprecation-driven parameter would pin the library's API rather than kokopelli's logic.
marvin8 approved these changes 2026-10-16 06:51:08 +00:00
marvin8 manually merged commit 1753b89fe2 into main 2026-10-16 06:52:56 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No assignees
3 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Reference
marvin8/kokopelli!23
No description provided.