Migrate PR review to openrouter with pinned 0.11.0 action #150

Manually merged
marvin8 merged 6 commits from feat/issue-86-openrouter-review into main 2026-10-16 03:05:58 +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#86

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#86
🔧 migrate PR review to openrouter with pinned 0.11.0 action
Some checks failed
/ gitleaks (pull_request) Successful in 18s
/ checks (pull_request) Failing after 1m1s
/ pr-review (pull_request) Successful in 1m2s
/ publish (pull_request) Has been skipped
/ deploy-docs (pull_request) Has been skipped
/ publish-container (pull_request) Has been skipped
50516a9054
agent-pi force-pushed feat/issue-86-openrouter-review from 50516a9054
Some checks failed
/ gitleaks (pull_request) Successful in 18s
/ checks (pull_request) Failing after 1m1s
/ pr-review (pull_request) Successful in 1m2s
/ publish (pull_request) Has been skipped
/ deploy-docs (pull_request) Has been skipped
/ publish-container (pull_request) Has been skipped
to 9cfcdb452f
Some checks failed
/ gitleaks (pull_request) Successful in 25s
/ pr-review (pull_request) Successful in 1m30s
/ checks (pull_request) Failing after 22m46s
/ publish (pull_request) Has been skipped
/ deploy-docs (pull_request) Has been skipped
/ publish-container (pull_request) Has been skipped
2026-10-15 23:20:52 +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 [HIGH]

A08: Software and Data Integrity Failures: Action is pinned to a mutable version tag (@0.11.0) instead of an immutable commit SHA. A compromised repository could retag a malicious commit, breaking supply chain integrity. Pin to a specific commit SHA and verify via checksum if possible.

**security** [HIGH] A08: Software and Data Integrity Failures: Action is pinned to a mutable version tag (@0.11.0) instead of an immutable commit SHA. A compromised repository could retag a malicious commit, breaking supply chain integrity. Pin to a specific commit SHA and verify via checksum if possible. <!-- wuming:sha256:9083ebe710e5e27d08d2e23fa7fdfa6f4b86a20af2bb5a763905935372fe8902 -->
Author
Collaborator

#150 (comment)

🔴 Declined (fleet-wide maintainer decision, same as the identical findings across this migration — arvak, rainlog, zaojun, kokopelli, 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/cang/pulls/150#issuecomment-5236 🔴 Declined (fleet-wide maintainer decision, same as the identical findings across this migration — arvak, rainlog, zaojun, kokopelli, 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.
🐛 adapt db typing to bumped dependencies
Some checks failed
/ gitleaks (pull_request) Successful in 13s
/ checks (pull_request) Failing after 1m1s
/ publish (pull_request) Has been skipped
/ deploy-docs (pull_request) Has been skipped
/ publish-container (pull_request) Has been skipped
/ pr-review (pull_request) Successful in 1m49s
a0155c4ef1
forgejo-actions left a comment

WuMing

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

## WuMing Found **5** 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: Workflow uses external action from custom forge (forge.marvin8.zone) pinned only by tag @0.11.0. Without SHA256 hash pinning, this introduces supply chain integrity risk. Pin to a specific commit hash to prevent tag tampering.

**security** [MEDIUM] A08: Workflow uses external action from custom forge (forge.marvin8.zone) pinned only by tag @0.11.0. Without SHA256 hash pinning, this introduces supply chain integrity risk. Pin to a specific commit hash to prevent tag tampering. <!-- wuming:sha256:2b80f7fb8236dada699d6ea4045246e3b5775bb7afe1a6ab3243cdb309988089 -->
@ -4,62 +4,10 @@ visibility: public
cang 2026.9.7.1

docs [MEDIUM]

Missing heading markup. As a version entry, it should be formatted as a heading (e.g., '##') to establish proper document hierarchy, improve scanability, and support screen readers.

**docs** [MEDIUM] Missing heading markup. As a version entry, it should be formatted as a heading (e.g., '##') to establish proper document hierarchy, improve scanability, and support screen readers. <!-- wuming:sha256:20bf6a73c33d79bcb46ecdeeff476bbcfa110247f6167d9361ea4586d433c3c2 -->
@ -8,4 +7,1 @@
- Journey view: a movement across several cameras now appears as one event with a stitched cross-camera player
- Keep flag: protect events or single frames from retention cleanup with a button in the scrubber and day view
#NVR #Python #Container #OpenSource

docs [LOW]

Inline hashtag-style tags can render unpredictably across different markdown processors. Consider moving them to YAML frontmatter, wrapping in backticks, or using a standardized metadata key format for consistency.

**docs** [LOW] Inline hashtag-style tags can render unpredictably across different markdown processors. Consider moving them to YAML frontmatter, wrapping in backticks, or using a standardized metadata key format for consistency. <!-- wuming:sha256:a2755a5192849e57efdca349afafa648c6574b29f61d1ba6939a7e4007f59e23 -->
@ -679,2 +819,4 @@
wheels = [{ url = "https://files.pythonhosted.org/packages/3c/26/1062c7ec1b053db9e499b4d2d5bc231743201b74051c973dadeac80a8f43/questionary-2.1.1-py3-none-any.whl", upload-time = 2025-08-28T19:00:19Z, size = 36753, hashes = { sha256 = "a51af13f345f1cdea62347589fbb6df3b290306ab8930713bfae4d475a7d4a59" } }]
[[packages]]
name = "requests"

security [LOW]

A06: New dependency 'requests' v2.34.2 added. Verify this version isn't affected by known CVEs. Requests has historical security issues (e.g., CVE-2024-35195); confirm version is patched and necessary, as it's not in pyproject.toml.

**security** [LOW] A06: New dependency 'requests' v2.34.2 added. Verify this version isn't affected by known CVEs. Requests has historical security issues (e.g., CVE-2024-35195); confirm version is patched and necessary, as it's not in pyproject.toml. <!-- wuming:sha256:e908096bc84704a2092d8a84cfc9e391b4b7fb079d0cb2bf6b6509a00dd1b992 -->
@ -2,3 +2,3 @@
"""Database layer — schema migration, snapshot CRUD, retention."""
from collections.abc import AsyncIterator
from collections.abc import AsyncGenerator

tests [LOW]

Source file modified (import and type annotation change from AsyncIterator to AsyncGenerator) without any test file changes in the diff. Consider adding or updating a test for the open_db function to cover the more specific generator type.

**tests** [LOW] Source file modified (import and type annotation change from AsyncIterator to AsyncGenerator) without any test file changes in the diff. Consider adding or updating a test for the open_db function to cover the more specific generator type. <!-- wuming:sha256:d399beda309e231d320397b39e0751ac7a481cc113b3c87fda63fd60dd42d022 -->
🐛 pin CI python to 3.14 for uv jobs
Some checks failed
/ gitleaks (pull_request) Successful in 20s
/ checks (pull_request) Failing after 1m46s
/ publish (pull_request) Has been skipped
/ deploy-docs (pull_request) Has been skipped
/ publish-container (pull_request) Has been skipped
/ pr-review (pull_request) Successful in 2m11s
19383cb5db
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 +21,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 PR description specifies a two-tier mapping that includes 'performance' on deepseek-v4-pro, but the 'agents' configuration omits the 'performance' key. If performance reviews are expected to run, this mapping will be missing. Consider adding 'performance:deepseek/deepseek-v4-pro'.

**config** [MEDIUM] The PR description specifies a two-tier mapping that includes 'performance' on deepseek-v4-pro, but the 'agents' configuration omits the 'performance' key. If performance reviews are expected to run, this mapping will be missing. Consider adding 'performance:deepseek/deepseek-v4-pro'. <!-- wuming:sha256:b51c2240c6cb831e2167ca24f2d7842a60ba08b6bdb2fbfab1a0797aee54e1b8 -->
@ -25,3 +25,3 @@
- repo: https://github.com/astral-sh/uv-pre-commit
rev: 0.12.10
rev: "0.13.1"

config [LOW]

Inconsistent quoting for the 'rev' value. Align with the unquoted string style used for other revisions in this file to maintain consistency.

**config** [LOW] Inconsistent quoting for the 'rev' value. Align with the unquoted string style used for other revisions in this file to maintain consistency. <!-- wuming:sha256:702a0c64f8e7b65113ce7cf2041e5c5eac70bd1e13ffc60c6854f1209bec0ed6 -->
@ -43,3 +43,3 @@
- repo: https://forge.marvin8.zone/marvin8/zaojun
rev: 1.7.5
rev: "1.8.2"

config [LOW]

Inconsistent quoting for the 'rev' value. Align with the unquoted string style used for other revisions in this file to maintain consistency.

**config** [LOW] Inconsistent quoting for the 'rev' value. Align with the unquoted string style used for other revisions in this file to maintain consistency. <!-- wuming:sha256:864ed758d49d7f392cb117a5a388bc080651ece0840fab05507453adae0977de -->
Author
Collaborator

#150 (comment)

🔴 This file is a taibai thread, not ordinary markdown: its exact structure (version line, plain bullets, hashtag tags, --- post separators) is consumed and rewritten by the repo's just release and just fediverse-post recipes. Adding heading markup or moving the hashtags would break the release tooling. The format is mandated by the tooling and intentionally left as-is.

https://forge.marvin8.zone/marvin8/cang/pulls/150#issuecomment-5308 🔴 This file is a taibai thread, not ordinary markdown: its exact structure (version line, plain bullets, hashtag tags, `---` post separators) is consumed and rewritten by the repo's `just release` and `just fediverse-post` recipes. Adding heading markup or moving the hashtags would break the release tooling. The format is mandated by the tooling and intentionally left as-is.
Author
Collaborator

#150 (comment)

🔴 This file is a taibai thread, not ordinary markdown: its exact structure (version line, plain bullets, hashtag tags, --- post separators) is consumed and rewritten by the repo's just release and just fediverse-post recipes. Adding heading markup or moving the hashtags would break the release tooling. The format is mandated by the tooling and intentionally left as-is.

https://forge.marvin8.zone/marvin8/cang/pulls/150#issuecomment-5309 🔴 This file is a taibai thread, not ordinary markdown: its exact structure (version line, plain bullets, hashtag tags, `---` post separators) is consumed and rewritten by the repo's `just release` and `just fediverse-post` recipes. Adding heading markup or moving the hashtags would break the release tooling. The format is mandated by the tooling and intentionally left as-is.
Author
Collaborator

#150 (comment)

🔴 Declined (fleet-wide maintainer decision, consistent with the identical findings across this migration): tag pinning keeps wuming release updates a one-line change per consumer repo. The repointed-tag threat requires write access to the wuming repo itself — a single-maintainer repo on this forge.

https://forge.marvin8.zone/marvin8/cang/pulls/150#issuecomment-5310 🔴 Declined (fleet-wide maintainer decision, consistent with the identical findings across this migration): tag pinning keeps wuming release updates a one-line change per consumer repo. The repointed-tag threat requires write access to the wuming repo itself — a single-maintainer repo on this forge.
Author
Collaborator

#150 (comment)

🔴 Verified in CI on this very commit: the pysentry session scanned 111 packages and flagged advisories only on httpcore2, httpx2, urllib3, and virtualenv — requests 2.34.2 has no known-advisory findings. pysentry runs on every PR, so any future advisory on it will be caught automatically.

https://forge.marvin8.zone/marvin8/cang/pulls/150#issuecomment-5311 🔴 Verified in CI on this very commit: the `pysentry` session scanned 111 packages and flagged advisories only on httpcore2, httpx2, urllib3, and virtualenv — `requests` 2.34.2 has no known-advisory findings. pysentry runs on every PR, so any future advisory on it will be caught automatically.
Author
Collaborator

#150 (comment)

🔴 Annotation-only change: AsyncGenerator[T, None] is the identical runtime contract @asynccontextmanager always produced. The ty session and the tryke suite (3.12/3.13/3.14) pass in CI — a signature-only typing adaptation does not warrant a new test.

https://forge.marvin8.zone/marvin8/cang/pulls/150#issuecomment-5312 🔴 Annotation-only change: `AsyncGenerator[T, None]` is the identical runtime contract `@asynccontextmanager` always produced. The `ty` session and the tryke suite (3.12/3.13/3.14) pass in CI — a signature-only typing adaptation does not warrant a new test.
🐛 pin vulnerable transitive dependency versions
All checks were successful
/ gitleaks (pull_request) Successful in 13s
/ checks (pull_request) Successful in 2m4s
/ publish (pull_request) Has been skipped
/ deploy-docs (pull_request) Has been skipped
/ publish-container (pull_request) Has been skipped
/ pr-review (pull_request) Successful in 2m7s
67aa5239fd
forgejo-actions left a comment

WuMing

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

## WuMing Found **1** issue(s). See inline comments below.
@ -62,4 +11,3 @@
Install / upgrade:
pip install cang

docs [LOW]

The installation command contains unintended leading whitespace. Inline CLI instructions should not be indented unless enclosed in a fenced code block, as this may cause copy-paste errors or confuse automated parsers.

**docs** [LOW] The installation command contains unintended leading whitespace. Inline CLI instructions should not be indented unless enclosed in a fenced code block, as this may cause copy-paste errors or confuse automated parsers. <!-- wuming:sha256:028da75820474489f9591384bb85fcb582aa3d4d64b80e9868917aa7cd16d482 -->
📝 align pre-commit rev quoting with file style
All checks were successful
/ gitleaks (pull_request) Successful in 12s
/ pr-review (pull_request) Successful in 1m16s
/ checks (pull_request) Successful in 2m2s
/ publish (pull_request) Has been skipped
/ deploy-docs (pull_request) Has been skipped
/ publish-container (pull_request) Has been skipped
2ac69228a7
Author
Collaborator

#150 (comment)

🔴 Intentional — cang did not run a performance agent before this migration, and each repo's existing agent set is preserved. The fleet mapping assigns a model to whichever agents a repo runs; it does not add agents. No performance review ran before this change and none runs after.

https://forge.marvin8.zone/marvin8/cang/pulls/150#issuecomment-5315 🔴 Intentional — cang did not run a `performance` agent before this migration, and each repo's existing agent set is preserved. The fleet mapping assigns a model to whichever agents a repo runs; it does not add agents. No performance review ran before this change and none runs after.
Author
Collaborator

#150 (comment)

✅ Fixed in commit 2ac6922 — the bumped hook revisions are now unquoted (rev: 0.13.1, rev: 1.8.2), matching the unquoted style of every other rev in the file.

https://forge.marvin8.zone/marvin8/cang/pulls/150#issuecomment-5316 ✅ Fixed in commit `2ac6922` — the bumped hook revisions are now unquoted (`rev: 0.13.1`, `rev: 1.8.2`), matching the unquoted style of every other `rev` in the file.
Author
Collaborator

#150 (comment)

✅ Fixed in commit 2ac6922 — same as the sibling finding: unquoted for consistency.

https://forge.marvin8.zone/marvin8/cang/pulls/150#issuecomment-5317 ✅ Fixed in commit `2ac6922` — same as the sibling finding: unquoted for consistency.
Author
Collaborator

#150 (comment)

🔴 Intentional — the indented install block is part of the taibai thread footer format that the repo's just release / just fediverse-post tooling writes and consumes; the indentation renders as a code block in the Fediverse post. Same tooling-mandated format as the version line and hashtags.

https://forge.marvin8.zone/marvin8/cang/pulls/150#issuecomment-5325 🔴 Intentional — the indented install block is part of the taibai thread footer format that the repo's `just release` / `just fediverse-post` tooling writes and consumes; the indentation renders as a code block in the Fediverse post. Same tooling-mandated format as the version line and hashtags.
forgejo-actions left a comment

WuMing

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

## WuMing Found **2** issue(s). See inline comments below.
@ -8,2 +8,4 @@
workflow_dispatch:
env:
UV_PYTHON: "3.14"

security [MEDIUM]

A05: Security Misconfiguration - UV_PYTHON set to "3.14", a non-existent Python version that may cause build failures or fallback to unexpected Python versions with potential security implications.

**security** [MEDIUM] A05: Security Misconfiguration - UV_PYTHON set to "3.14", a non-existent Python version that may cause build failures or fallback to unexpected Python versions with potential security implications. <!-- wuming:sha256:d660df68941f45501eaf0023a3a4be9a4dcb500e3aad03efb4acdbca04447510 -->
@ -15,3 +18,3 @@
- uses: https://forge.marvin8.zone/marvin8/wuming@main
- uses: https://forge.marvin8.zone/marvin8/wuming@0.11.0
with:
forgejo_token: ${{ forge.token }}

security [HIGH]

A05: Security Misconfiguration - forgejo_token uses incorrect syntax ${{ forge.token }}. Should use ${{ secrets.FORGEJO_TOKEN }} to ensure secrets are properly handled and not exposed in logs.

**security** [HIGH] A05: Security Misconfiguration - forgejo_token uses incorrect syntax ${{ forge.token }}. Should use ${{ secrets.FORGEJO_TOKEN }} to ensure secrets are properly handled and not exposed in logs. <!-- wuming:sha256:15671e4a3a36694c7e15597e0e1cac4d787c6cd378dd33e82922cd737550607e -->
Author
Collaborator

#150 (comment)

🔴 Factually incorrect — CPython 3.14.8 exists and is exactly what the previous CI run on this configuration resolved (run 999: "Using CPython 3.14.8", all sessions green, wheels present on PyPI for every dependency in the stack). The pin exists precisely because 3.15.0 — the unpinned resolution — has no ecosystem wheels and fails PyO3's supported-version check.

https://forge.marvin8.zone/marvin8/cang/pulls/150#issuecomment-5332 🔴 Factually incorrect — CPython 3.14.8 exists and is exactly what the previous CI run on this configuration resolved (run 999: "Using CPython 3.14.8", all sessions green, wheels present on PyPI for every dependency in the stack). The pin exists precisely because 3.15.0 — the unpinned resolution — has no ecosystem wheels and fails PyO3's supported-version check.
Author
Collaborator

#150 (comment)

🔴 Pre-existing, untouched by this PR — forge.token is the token context provided by the zhuiri runner on forge.marvin8.zone (wuming's own ci.yml uses the identical reference), and cang's reviews have run successfully with it for months — including this one. secrets.FORGEJO_TOKEN does not exist in this repo's configuration.

https://forge.marvin8.zone/marvin8/cang/pulls/150#issuecomment-5333 🔴 Pre-existing, untouched by this PR — `forge.token` is the token context provided by the zhuiri runner on forge.marvin8.zone (wuming's own `ci.yml` uses the identical reference), and cang's reviews have run successfully with it for months — including this one. `secrets.FORGEJO_TOKEN` does not exist in this repo's configuration.
marvin8 approved these changes 2026-10-16 03:05:07 +00:00
marvin8 manually merged commit 25cfe6fffe into main 2026-10-16 03:05:58 +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.

Dependencies

No dependencies set

Reference
marvin8/cang!150
No description provided.