Migrate PR review to openrouter with pinned 0.11.0 action #19

Manually merged
marvin8 merged 4 commits from feat/issue-89-openrouter-review into main 2026-10-16 06:18:34 +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#89

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#89
🔧 migrate PR review to openrouter with pinned 0.11.0 action
Some checks failed
/ gitleaks (pull_request) Successful in 19s
/ pr-review (pull_request) Successful in 1m18s
/ checks (pull_request) Failing after 6m6s
/ publish (pull_request) Has been skipped
/ deploy-docs (pull_request) Has been skipped
1ffdc03c71
forgejo-actions left a comment

WuMing

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

## WuMing Found **3** 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 is pinned to a mutable version tag (@0.11.0) rather than an immutable digest, exposing supply chain risk if the tag is moved or forge instance is compromised. Pin to a specific commit SHA for integrity verification.

**security** [MEDIUM] A08: Action is pinned to a mutable version tag (@0.11.0) rather than an immutable digest, exposing supply chain risk if the tag is moved or forge instance is compromised. Pin to a specific commit SHA for integrity verification. <!-- wuming:sha256:ba7a0878901137dac4548a3ea9c5cf42c4e602fff1553bf97c699bea8e93efd9 -->
@ -15,3 +15,3 @@
- uses: https://forge.marvin8.zone/marvin8/wuming@main
- uses: https://forge.marvin8.zone/marvin8/wuming@0.11.0
with:
forgejo_token: ${{ forge.token }}

config [MEDIUM]

Uses non-standard secret context '${{ forge.token }}'. If this custom context is not globally defined on the runner, the workflow will fail authentication. Consider using a standard secret reference like '${{ secrets.forgjo_token }}'.

**config** [MEDIUM] Uses non-standard secret context '${{ forge.token }}'. If this custom context is not globally defined on the runner, the workflow will fail authentication. Consider using a standard secret reference like '${{ secrets.forgjo_token }}'. <!-- wuming:sha256:aae3b730af05947fd664df63fe3c29a20cced3b954a8b847ec385bf81404e14a -->
@ -19,1 +18,3 @@
agents: code:deepseek-v4-pro,config:deepseek-v4-flash,docs:deepseek-v4-flash,shell:deepseek-v4-flash,security:deepseek-v4-pro,tests:deepseek-v4-flash
openrouter_key: ${{ secrets.wuming_openrouter_key }}
backend: openrouter
agents: code:deepseek/deepseek-v4-pro,config:qwen/qwen3.7-flash,docs:qwen/qwen3.7-flash,shell:qwen/qwen3.7-flash,security:moonshotai/kimi-k2-thinking,tests:deepseek/deepseek-v4-pro

config [LOW]

The PR description specifies a fleet-standard mapping for 'code/tests/performance', but the 'performance' agent is omitted from the agents string. Add 'performance:deepseek/deepseek-v4-pro' to fully align with the documented mapping.

**config** [LOW] The PR description specifies a fleet-standard mapping for 'code/tests/performance', but the 'performance' agent is omitted from the agents string. Add 'performance:deepseek/deepseek-v4-pro' to fully align with the documented mapping. <!-- wuming:sha256:9b6885da7a657b6704bd75e644b15cfa04c04f9e9378c496cfb9efa7bf05edb1 -->
Author
Collaborator

#19 (comment)

🔴 Intentional — each repo's existing agent set is preserved; the fleet mapping defines which model each agent gets, not which agents every repo must run. rainlog did not have a performance agent before this migration, so none was added. The PR description's "code/tests/performance on deepseek-v4-pro" describes the tier assignment, conditional on the agent being present.

https://forge.marvin8.zone/marvin8/rainlog/pulls/19#issuecomment-5159 🔴 Intentional — each repo's existing agent set is preserved; the fleet mapping defines which model each agent gets, not which agents every repo must run. rainlog did not have a `performance` agent before this migration, so none was added. The PR description's "code/tests/performance on deepseek-v4-pro" describes the tier assignment, conditional on the agent being present.
Author
Collaborator

#19 (comment)

🔴 Declined (fleet-wide maintainer decision, same as the identical finding on arvak#27): tag pinning was chosen explicitly so a wuming release update stays a one-line change per repo across ~17 consumer repos. The force-push 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/rainlog/pulls/19#issuecomment-5160 🔴 Declined (fleet-wide maintainer decision, same as the identical finding on arvak#27): tag pinning was chosen explicitly so a wuming release update stays a one-line change per repo across ~17 consumer repos. The force-push 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.
Author
Collaborator

#19 (comment)

🔴 Pre-existing, untouched by this PR — the forge.token context is provided by the zhuiri runner on this forge (wuming's own ci.yml uses the identical reference), and rainlog's reviews have run successfully with it for months. This migration changed only the backend, key, agents, and pin — the forgejo_token line predates it.

https://forge.marvin8.zone/marvin8/rainlog/pulls/19#issuecomment-5158 🔴 Pre-existing, untouched by this PR — the `forge.token` context is provided by the zhuiri runner on this forge (wuming's own `ci.yml` uses the identical reference), and rainlog's reviews have run successfully with it for months. This migration changed only the backend, key, agents, and pin — the `forgejo_token` line predates it.
agent-pi force-pushed feat/issue-89-openrouter-review from 1ffdc03c71
Some checks failed
/ gitleaks (pull_request) Successful in 19s
/ pr-review (pull_request) Successful in 1m18s
/ checks (pull_request) Failing after 6m6s
/ publish (pull_request) Has been skipped
/ deploy-docs (pull_request) Has been skipped
to 226ecd3d48
Some checks failed
/ pr-review (pull_request) Successful in 45s
/ gitleaks (pull_request) Successful in 20s
/ checks (pull_request) Failing after 7m3s
/ publish (pull_request) Has been skipped
/ deploy-docs (pull_request) Has been skipped
2026-10-15 23:20:55 +00:00
Compare
⬆️ bump dependencies, align hooks, pin vulnerable transitives
Some checks failed
/ gitleaks (pull_request) Successful in 19s
/ pr-review (pull_request) Successful in 1m30s
/ checks (pull_request) Failing after 5m25s
/ publish (pull_request) Has been skipped
/ deploy-docs (pull_request) Has been skipped
16b165849c
forgejo-actions left a comment

WuMing

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

## WuMing Found **3** issue(s). See inline comments below.
@ -19,1 +18,3 @@
agents: code:deepseek-v4-pro,config:deepseek-v4-flash,docs:deepseek-v4-flash,shell:deepseek-v4-flash,security:deepseek-v4-pro,tests:deepseek-v4-flash
openrouter_key: ${{ secrets.wuming_openrouter_key }}
backend: openrouter
agents: code:deepseek/deepseek-v4-pro,config:qwen/qwen3.7-flash,docs:qwen/qwen3.7-flash,shell:qwen/qwen3.7-flash,security:moonshotai/kimi-k2-thinking,tests:deepseek/deepseek-v4-pro

config [MEDIUM]

The agents mapping successfully switched to OpenRouter-specific ID formats using '/' separators (e.g., deepseek/deepseek-v4-pro), which is required for the new backend. Ensure this matches your OpenRouter public API namespace; if you're using a private/custom model registry, adjust accordingly to avoid resolution failures.

**config** [MEDIUM] The agents mapping successfully switched to OpenRouter-specific ID formats using '/' separators (e.g., deepseek/deepseek-v4-pro), which is required for the new backend. Ensure this matches your OpenRouter public API namespace; if you're using a private/custom model registry, adjust accordingly to avoid resolution failures. <!-- wuming:sha256:e98af7e1a76bba8e58c14e1f9488c74aa158939040bbdd36800fdec9c42abe50 -->
pyproject.toml Outdated
@ -49,2 +44,2 @@
"urllib3>=2.7.0", # Addresses vulnerabilities GHSA-mf9v-mfxr-j63j and GHSA-qccp-gfcp-xxvc
"virtualenv>=20.36.1", # Addresses vulnerability GHSA-597g-3phw-6986
"anyio>=4.14.2",
"filelock>=3.20.3", # Addresses vulnerability GHSA-qmgc-5h2g-mvrw,

config [LOW]

Trailing commas inside inline comments are present on lines 45, 48-51. While technically ignored by TOML parsers, this is unconventional styling and often indicates leftover formatting from a CSV/JSON migration. Remove them for cleaner, maintainable config.

**config** [LOW] Trailing commas inside inline comments are present on lines 45, 48-51. While technically ignored by TOML parsers, this is unconventional styling and often indicates leftover formatting from a CSV/JSON migration. Remove them for cleaner, maintainable config. <!-- wuming:sha256:68f54c3d64aa6268d7e099e9dec93bc8f3731326603607028bc483a8c12ac06d -->
pyproject.toml Outdated
@ -50,1 +44,3 @@
"virtualenv>=20.36.1", # Addresses vulnerability GHSA-597g-3phw-6986
"anyio>=4.14.2",
"filelock>=3.20.3", # Addresses vulnerability GHSA-qmgc-5h2g-mvrw,
"httpcore2>=2.10.0",

config [LOW]

New constraint dependencies httpcore2 and httpx2 (lines 46-47) lack the vulnerability/CVE reference comments included on adjacent lines. Add explanatory comments for consistency and better audit trails.

**config** [LOW] New constraint dependencies httpcore2 and httpx2 (lines 46-47) lack the vulnerability/CVE reference comments included on adjacent lines. Add explanatory comments for consistency and better audit trails. <!-- wuming:sha256:890521154ba0fc8e1ce3c59962b9fdc5f36adab65f44c63b04b5643e339542d9 -->
🐛 suppress ty override warnings on textual BINDINGS; tidy constraint comments
All checks were successful
/ gitleaks (pull_request) Successful in 22s
/ pr-review (pull_request) Successful in 1m48s
/ checks (pull_request) Successful in 4m42s
/ publish (pull_request) Has been skipped
/ deploy-docs (pull_request) Has been skipped
0e9c824ef5
Author
Collaborator

#19 (comment)

🔴 No action needed — the mapping is exactly as intended and was verified end-to-end: this PR's own pr-review job executed through it successfully. The vendor/model slug format is required by the OpenRouter backend and will stay.

https://forge.marvin8.zone/marvin8/rainlog/pulls/19#issuecomment-5358 🔴 No action needed — the mapping is exactly as intended and was verified end-to-end: this PR's own `pr-review` job executed through it successfully. The `vendor/model` slug format is required by the OpenRouter backend and will stay.
Author
Collaborator

#19 (comment)

✅ Fixed in commit 0e9c824 — the stray commas that had migrated to comment-ends are removed; commas now sit directly after the version specs.

https://forge.marvin8.zone/marvin8/rainlog/pulls/19#issuecomment-5359 ✅ Fixed in commit `0e9c824` — the stray commas that had migrated to comment-ends are removed; commas now sit directly after the version specs.
Author
Collaborator

#19 (comment)

✅ Fixed in commit 0e9c824 — httpcore2>=2.10.0 now carries # PYSEC-2026-3844 (HIGH) and httpx2>=2.12.0 carries # PYSEC-2026-3846 (HIGH), matching the adjacent advisory-comment style.

https://forge.marvin8.zone/marvin8/rainlog/pulls/19#issuecomment-5360 ✅ Fixed in commit `0e9c824` — `httpcore2>=2.10.0` now carries `# PYSEC-2026-3844 (HIGH)` and `httpx2>=2.12.0` carries `# PYSEC-2026-3846 (HIGH)`, matching the adjacent advisory-comment style.
forgejo-actions left a comment

WuMing

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

## WuMing Found **4** issue(s). See inline comments below.
@ -14,3 +14,3 @@
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.16.5
rev: v0.17.1

config [LOW]

The ruff-pre-commit hook is pinned to v0.17.1, while the project's pyproject.toml constrains ruff to ~=0.16.10. Mismatched linter versions between CI and local/project environments can cause rule inconsistencies or unexpected autofix behavior. Align the hook revision with the project constraint or document why the divergence exists.

**config** [LOW] The `ruff-pre-commit` hook is pinned to `v0.17.1`, while the project's `pyproject.toml` constrains `ruff` to `~=0.16.10`. Mismatched linter versions between CI and local/project environments can cause rule inconsistencies or unexpected autofix behavior. Align the hook revision with the project constraint or document why the divergence exists. <!-- wuming:sha256:fb7f33683638a1fd91814aaa9f9a682fc95e48cc35c517ae49e544c252e349be -->
@ -105,3 +105,3 @@
"""
BINDINGS: ClassVar[list[Binding]] = [
BINDINGS: ClassVar[list[Binding]] = [ # ty: ignore[invalid-attribute-override]

code [MEDIUM]

Typo in type ignore comment: 'ty' should be 'type'. This will not suppress any type checker error, likely leading to an invalid-attribute-override error still being reported. Replace 'ty' with 'type'.

**code** [MEDIUM] Typo in type ignore comment: 'ty' should be 'type'. This will not suppress any type checker error, likely leading to an invalid-attribute-override error still being reported. Replace 'ty' with 'type'. <!-- wuming:sha256:7be4d5298f53c096eee3d4b1dec720f77e4c2ee8955cfc128f509ab398a2540a -->
@ -180,3 +180,3 @@
"""
BINDINGS: ClassVar[list[Binding]] = [
BINDINGS: ClassVar[list[Binding]] = [ # ty: ignore[invalid-attribute-override]

code [MEDIUM]

Same typo: 'ty' should be 'type'. This will not suppress the intended type checker error.

**code** [MEDIUM] Same typo: 'ty' should be 'type'. This will not suppress the intended type checker error. <!-- wuming:sha256:e42ceb77377f8efba45c69420c882f9bfb7ff68e0558889d2d45aeb68b1a2e7b -->
@ -708,3 +708,3 @@
"""Interactive TUI for browsing rain history."""
BINDINGS: ClassVar[list[Binding]] = [
BINDINGS: ClassVar[list[Binding]] = [ # ty: ignore[invalid-attribute-override]

code [MEDIUM]

Same typo: 'ty' should be 'type'. This will not suppress the intended type checker error.

**code** [MEDIUM] Same typo: 'ty' should be 'type'. This will not suppress the intended type checker error. <!-- wuming:sha256:61da7fd4187311ecc2c9b26657caecca2a8535e5d3a167b16ee30e3959fb7b34 -->
🐛 align ruff and ty hook revs with pyproject versions
All checks were successful
/ gitleaks (pull_request) Successful in 12s
/ pr-review (pull_request) Successful in 1m1s
/ checks (pull_request) Successful in 4m6s
/ publish (pull_request) Has been skipped
/ deploy-docs (pull_request) Has been skipped
565f8c2f40
Author
Collaborator

#19 (comment)

✅ Fixed in the latest push — the ruff and ty hook revs are aligned with the pyproject-chosen versions (v0.16.10, v0.0.85). Good catch: an earlier alignment script had crashed before writing its changes, leaving these two hooks at the prek-autoupdated revs.

https://forge.marvin8.zone/marvin8/rainlog/pulls/19#issuecomment-5386 ✅ Fixed in the latest push — the ruff and ty hook revs are aligned with the pyproject-chosen versions (`v0.16.10`, `v0.0.85`). Good catch: an earlier alignment script had crashed before writing its changes, leaving these two hooks at the prek-autoupdated revs.
Author
Collaborator

#19 (comment)

🔴 Not a typo — # ty: ignore[invalid-attribute-override] is the suppression syntax of the ty type checker (Astral), which this repo uses; it is a different tool from mypy, whose syntax is # type: ignore. Evidence: the ty-3.11 session fails without these comments and passes with them (verified on the current head).

https://forge.marvin8.zone/marvin8/rainlog/pulls/19#issuecomment-5383 🔴 Not a typo — `# ty: ignore[invalid-attribute-override]` is the suppression syntax of the `ty` type checker (Astral), which this repo uses; it is a different tool from mypy, whose syntax is `# type: ignore`. Evidence: the `ty-3.11` session fails without these comments and passes with them (verified on the current head).
Author
Collaborator

#19 (comment)

🔴 Not a typo — same as the sibling finding: # ty: ignore[...] is the ty checker's directive (this repo type-checks with Astral's ty, not mypy). The ty-3.11 session passes with these suppressions in place.

https://forge.marvin8.zone/marvin8/rainlog/pulls/19#issuecomment-5384 🔴 Not a typo — same as the sibling finding: `# ty: ignore[...]` is the `ty` checker's directive (this repo type-checks with Astral's `ty`, not mypy). The `ty-3.11` session passes with these suppressions in place.
Author
Collaborator

#19 (comment)

🔴 Not a typo — same as the sibling findings: # ty: ignore[...] is the ty checker's directive. The session passes with them in place and failed without.

https://forge.marvin8.zone/marvin8/rainlog/pulls/19#issuecomment-5385 🔴 Not a typo — same as the sibling findings: `# ty: ignore[...]` is the `ty` checker's directive. The session passes with them in place and failed without.
marvin8 approved these changes 2026-10-16 06:14:02 +00:00
marvin8 manually merged commit 3466b42731 into main 2026-10-16 06:18:34 +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/rainlog!19
No description provided.