Skip to content

docs: record 2026-11-11 issue, security and dead-code sweep - #448

Open
cursor[bot] wants to merge 2 commits into
mainfrom
cursor/bc-e5cdc92a-803c-4155-933c-db3b800c5fb8-d68a
Open

cursor[bot] wants to merge 2 commits into
mainfrom
cursor/bc-e5cdc92a-803c-4155-933c-db3b800c5fb8-d68a

Conversation

@cursor

@cursor cursor Bot commented Nov 11, 2026 •

Copy link
Copy Markdown
Contributor

Align reusable workflow pins and BUILD_PROMPT with gitlink 406938e3. Keep #436 and #440 open. Record that #447 is the already-locked zashboard v3.16.0 default, not a new panel. Reject BUILD_PROMPT and release.yml live-pin drift in check-recipes.py.

Local verification: test-check-recipes.py 6 passed, test-release-plan.py 37 passed, test-release.py 16 passed, check-recipes.py 8 packages / 62 Markdown, check-workflows.sh passed. Source workflows at 406938e3 are byte-identical to 9163064; product TUN/NAS work still needs magicnet-android.

Open in Web View Automation 

Sourcery 摘要

同步实时源代码固定版本和发布元数据,记录最新问题与审计发现,并为可复用工作流和构建说明强制执行一致性检查。

Bug 修复:

  • 将发布工作流和构建提示与当前的 magicnet-android 源代码 Git 链接保持一致。
  • 记录问题 申请适配 WebUI 面板:zashboard #447 的解决方案:使用现有的锁定版 zashboard 默认项,而非新增产品集成。

增强功能:

文档:

  • 扩充 recipe 验证和问题分类文档,纳入当前的源代码、发布、问题、安全性和代码扫描状态。

测试:

  • 添加回归测试,拒绝过时的 BUILD_PROMPT 和可复用工作流源代码固定版本。
Original summary in English

Sourcery 摘要

同步 MagicNet 的实时源代码引用和发行文档,记录审计结果,并确保构建与发行元数据中的版本固定信息保持一致。

错误修复:

  • 将仓库的源代码、发行元数据和可复用工作流的版本固定信息与维护中的 MagicNet 实现保持一致。
  • 明确说明,问题 申请适配 WebUI 面板:zashboard #447 已由现有锁定的 zashboard 默认配置解决,无需新增集成。

功能增强:

文档:

  • 将配方、验证、依赖项和 README 元数据同步至配方 0.3.21 和 Android 发行版 v1.8.6。

测试:

  • 扩展配方验证和发行计划回归测试,确保能拒绝过时的 BUILD_PROMPT 和可复用工作流源代码版本固定信息。
Original summary in English

Summary by Sourcery

Synchronize MagicNet’s live source references and release documentation, record audit outcomes, and enforce pin consistency across build and release metadata.

Bug Fixes:

  • Align the repository’s source, release metadata, and reusable workflow pins with the maintained MagicNet implementation.
  • Clarify that issue 申请适配 WebUI 面板:zashboard #447 is satisfied by the existing locked zashboard default rather than requiring a new integration.

Enhancements:

Documentation:

  • Synchronize recipe, verification, dependency, and README metadata with recipe 0.3.21 and Android release v1.8.6.

Tests:

  • Extend recipe validation and release-plan regression coverage to reject stale BUILD_PROMPT and reusable workflow source pins.

Align reusable workflow pins and BUILD_PROMPT with gitlink 406938e3.
Keep #436 and #440 open; record that #447 is the locked zashboard
default. Reject BUILD_PROMPT and release.yml live-pin drift.

Co-authored-by: lightjunction.me <lightjunction.me@gmail.com>
@sourcery-ai

sourcery-ai Bot commented Nov 11, 2026 •

Copy link
Copy Markdown

审查者指南

实现

扩展 live-pin 检查器,要求 BUILD_PROMPT.md 和两个可复用工作流都与当前源代码 gitlink 一致。

  • scripts/check-recipes.py L45-46, L51-58

配置

将发布工作流中可复用工作流的引用更新为新的源代码提交,以便 CI 使用固定版本的实现。

  • .github/workflows/release.yml L147, L160

文档

同步构建提示、依赖记录、验证索引,以及英文和俄文 README 中的源代码固定版本,使其与当前实现和发布版本一致。

  • README.en.md L7
  • README.md L30
  • README.ru.md L7
  • recipes/magicnet/BUILD_PROMPT.md L1, L10
  • recipes/magicnet/DEPENDENCIES.md L22
  • recipes/magicnet/VERIFICATION.md L9-13

记录问题状态、安全性和死代码审查,包括说明为何 #447 无需新的面板集成,以及为何 #436 和 #440 仍保持开放。

  • recipes/magicnet-module-delivery/EXTERNAL_ASSETS.md L12-13
  • recipes/magicnet/ISSUE_TRIAGE_2026-11-06.md L195-243

测试

添加回归测试,确保过时的 BUILD_PROMPT 和可复用工作流固定版本会被拒绝。

  • scripts/test-check-recipes.py L31-41, L51, L73-84
  • scripts/test-release-plan.py L157-170, L191-193, L573

锁定文件和 vendored 代码

将实现子模块的 gitlink 更新至更新后的固定版本和文档所引用的源代码提交。

  • generated/magicnet-android L1

提示和命令

与 Sourcery 交互

  • 触发新一轮审查: 在拉取请求中评论 @sourcery-ai review。
  • 继续讨论: 直接回复 Sourcery 的审查评论。
  • 根据审查评论创建 GitHub issue: 回复审查评论,请 Sourcery 根据该评论创建 issue。也可以回复审查评论并输入 @sourcery-ai issue,根据该评论创建 issue。
  • 生成拉取请求标题: 在拉取请求标题中的任意位置输入 @sourcery-ai,即可随时生成标题。也可以在拉取请求中评论 @sourcery-ai title,随时(重新)生成标题。
  • 生成拉取请求摘要: 在拉取请求正文中需要摘要出现的位置输入 @sourcery-ai summary,即可随时生成 PR 摘要。也可以在拉取请求中评论 @sourcery-ai summary,随时(重新)生成摘要。
  • 生成审查者指南: 在拉取请求中评论 @sourcery-ai guide,即可随时(重新)生成审查者指南。
  • 解决所有 Sourcery 评论: 在拉取请求中评论 @sourcery-ai resolve,即可解决所有 Sourcery 评论。如果你已处理完所有评论且不想再看到它们,此功能会很有用。
  • 忽略所有 Sourcery 审查: 在拉取请求中评论 @sourcery-ai dismiss,即可忽略所有现有的 Sourcery 审查。如果你想从头开始进行新一轮审查,这尤其有用——别忘了评论 @sourcery-ai review 以触发新一轮审查!

自定义使用体验

访问你的控制面板,即可:

  • 启用或停用审查功能,例如 Sourcery 生成的拉取请求摘要、审查者指南等。
  • 更改审查语言。
  • 添加、移除或编辑自定义审查说明。
  • 调整其他审查设置。

获取帮助

Original review guide in English

Reviewer's Guide

Implementation

Extend the live-pin checker to require BUILD_PROMPT.md and both reusable workflows to match the current source gitlink.

  • scripts/check-recipes.py L45-46, L51-58

Configuration

Update the release workflow’s reusable workflow references to the new source commit so CI uses the pinned implementation.

  • .github/workflows/release.yml L147, L160

Documentation

Synchronize the build prompt, dependency record, verification index, and English and Russian README source pins with the current implementation and release.

  • README.en.md L7
  • README.md L30
  • README.ru.md L7
  • recipes/magicnet/BUILD_PROMPT.md L1, L10
  • recipes/magicnet/DEPENDENCIES.md L22
  • recipes/magicnet/VERIFICATION.md L9-13

Record the issue-status, security, and dead-code review, including why #447 needs no new panel integration and #436 and #440 remain open.

  • recipes/magicnet-module-delivery/EXTERNAL_ASSETS.md L12-13
  • recipes/magicnet/ISSUE_TRIAGE_2026-11-06.md L195-243

Tests

Add regression coverage that rejects stale BUILD_PROMPT and reusable workflow pins.

  • scripts/test-check-recipes.py L31-41, L51, L73-84
  • scripts/test-release-plan.py L157-170, L191-193, L573

Lock files and vendored code

Advance the implementation submodule gitlink to the source commit referenced by the updated pins and documentation.

  • generated/magicnet-android L1

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

@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.

嘿——我发现了 2 个问题

Prompt for AI Agents
Please address the comments from this code review:

## Individual Comments

### Comment 1
<location path="scripts/check-recipes.py" line_range="51" />
<code_context>
         raise ValueError("DEPENDENCIES.md does not record the current source gitlink")
     if gitlink not in readme:
         raise ValueError("README.md does not record the current source gitlink")
+    if gitlink not in prompt:
+        raise ValueError("BUILD_PROMPT.md does not record the current source gitlink")
+    for workflow_name in ("exec.yml", "android-kernelsu-acceptance.yml"):
</code_context>
<issue_to_address>
**Stale pins pass validation**

When the live BUILD_PROMPT pin or reusable-workflow `uses` value is stale while the expected gitlink appears elsewhere in that file, `verify_live_pins` accepts the substring match, so `recipe-check` passes with stale build instructions or CI invoking an older reusable workflow.

Parse the authoritative BUILD_PROMPT field and validate each actual reusable-workflow `uses` value against the current gitlink.

Also at `scripts/check-recipes.py:54-57`.
</issue_to_address>

### Comment 2
<location path="scripts/test-check-recipes.py" line_range="81-82" />
<code_context>

+    def test_stale_build_prompt_gitlink_is_rejected(self):
+        path = self.root / "recipes" / "magicnet" / "BUILD_PROMPT.md"
+        path.write_text(path.read_text().replace(GITLINK, OTHER))
+        with self.assertRaisesRegex(ValueError, "BUILD_PROMPT.md"):
+            CHECK.verify_live_pins(self.root)
+
+    def test_stale_reusable_workflow_pin_is_rejected(self):
+        path = self.root / ".github" / "workflows" / "release.yml"
+        path.write_text(path.read_text().replace(GITLINK, OTHER))
+        with self.assertRaisesRegex(ValueError, "release.yml reusable exec.yml"):
+            CHECK.verify_live_pins(self.root)
+
</code_context>
<issue_to_address>
**Acceptance pin drift goes unnoticed**

When acceptance-workflow pin validation is removed or broken, `test_stale_reusable_workflow_pin_is_rejected` replaces both workflow SHAs at line 81, then only asserts the `exec.yml` error at line 82. If the checker stops validating the acceptance workflow pin, the stale `exec.yml` pin still raises first and the test passes.

Add a case that changes only the acceptance workflow pin and asserts that it is rejected.
</issue_to_address>

Sourcery 评估

等待批准。 请先处理 2 项发现。

阻塞性发现:scripts/check-recipes.py:51、scripts/test-check-recipes.py:82


Sourcery 对开源项目免费——如果您喜欢我们的评审,请考虑分享 ✨
Original comment in English

Hey - I've found 2 issues

Prompt for AI Agents
Please address the comments from this code review:

## Individual Comments

### Comment 1
<location path="scripts/check-recipes.py" line_range="51" />
<code_context>
         raise ValueError("DEPENDENCIES.md does not record the current source gitlink")
     if gitlink not in readme:
         raise ValueError("README.md does not record the current source gitlink")
+    if gitlink not in prompt:
+        raise ValueError("BUILD_PROMPT.md does not record the current source gitlink")
+    for workflow_name in ("exec.yml", "android-kernelsu-acceptance.yml"):
</code_context>
<issue_to_address>
**Stale pins pass validation**

When the live BUILD_PROMPT pin or reusable-workflow `uses` value is stale while the expected gitlink appears elsewhere in that file, `verify_live_pins` accepts the substring match, so `recipe-check` passes with stale build instructions or CI invoking an older reusable workflow.

Parse the authoritative BUILD_PROMPT field and validate each actual reusable-workflow `uses` value against the current gitlink.

Also at `scripts/check-recipes.py:54-57`.
</issue_to_address>

### Comment 2
<location path="scripts/test-check-recipes.py" line_range="81-82" />
<code_context>

+    def test_stale_build_prompt_gitlink_is_rejected(self):
+        path = self.root / "recipes" / "magicnet" / "BUILD_PROMPT.md"
+        path.write_text(path.read_text().replace(GITLINK, OTHER))
+        with self.assertRaisesRegex(ValueError, "BUILD_PROMPT.md"):
+            CHECK.verify_live_pins(self.root)
+
+    def test_stale_reusable_workflow_pin_is_rejected(self):
+        path = self.root / ".github" / "workflows" / "release.yml"
+        path.write_text(path.read_text().replace(GITLINK, OTHER))
+        with self.assertRaisesRegex(ValueError, "release.yml reusable exec.yml"):
+            CHECK.verify_live_pins(self.root)
+
</code_context>
<issue_to_address>
**Acceptance pin drift goes unnoticed**

When acceptance-workflow pin validation is removed or broken, `test_stale_reusable_workflow_pin_is_rejected` replaces both workflow SHAs at line 81, then only asserts the `exec.yml` error at line 82. If the checker stops validating the acceptance workflow pin, the stale `exec.yml` pin still raises first and the test passes.

Add a case that changes only the acceptance workflow pin and asserts that it is rejected.
</issue_to_address>

Sourcery assessment

Approval pending. 2 findings to address first.

Blocking findings: scripts/check-recipes.py:51, scripts/test-check-recipes.py:82


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

Comment thread scripts/check-recipes.py
raise ValueError("DEPENDENCIES.md does not record the current source gitlink")
if gitlink not in readme:
raise ValueError("README.md does not record the current source gitlink")
if gitlink not in prompt:

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🟡 Medium · 过期的固定版本仍能通过验证

如果当前的 BUILD_PROMPT 固定版本或可复用工作流的 uses 值已过期,但预期的 gitlink 出现在该文件的其他位置,verify_live_pins 就会接受子字符串匹配,因此 recipe-check 会在构建说明已过期或 CI 调用旧版可复用工作流的情况下通过。

解析权威的 BUILD_PROMPT 字段,并根据当前 gitlink 验证每个实际的可复用工作流 uses 值。

另请检查 scripts/check-recipes.py:54-57。

给 AI 代理的提示
在 `scripts/check-recipes.py` 第 51 行:

**过期的固定版本仍能通过验证**

如果当前的 BUILD_PROMPT 固定版本或可复用工作流的 `uses` 值已过期,但预期的 gitlink 出现在该文件的其他位置,`verify_live_pins` 就会接受子字符串匹配,因此 `recipe-check` 会在构建说明已过期或 CI 调用旧版可复用工作流的情况下通过。

解析权威的 BUILD_PROMPT 字段,并根据当前 gitlink 验证每个实际的可复用工作流 `uses` 值。

另请检查 `scripts/check-recipes.py:54-57`。
Original comment in English

🟡 Medium · Stale pins pass validation

When the live BUILD_PROMPT pin or reusable-workflow uses value is stale while the expected gitlink appears elsewhere in that file, verify_live_pins accepts the substring match, so recipe-check passes with stale build instructions or CI invoking an older reusable workflow.

Parse the authoritative BUILD_PROMPT field and validate each actual reusable-workflow uses value against the current gitlink.

Also at scripts/check-recipes.py:54-57.

Prompt for AI agents
In `scripts/check-recipes.py` at line 51:

**Stale pins pass validation**

When the live BUILD_PROMPT pin or reusable-workflow `uses` value is stale while the expected gitlink appears elsewhere in that file, `verify_live_pins` accepts the substring match, so `recipe-check` passes with stale build instructions or CI invoking an older reusable workflow.

Parse the authoritative BUILD_PROMPT field and validate each actual reusable-workflow `uses` value against the current gitlink.

Also at `scripts/check-recipes.py:54-57`.

Comment on lines +81 to +82
path.write_text(path.read_text().replace(GITLINK, OTHER))
with self.assertRaisesRegex(ValueError, "release.yml reusable exec.yml"):

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🟡 Medium · 验收工作流固定版本偏移未被发现

如果验收工作流固定版本的验证被移除或遭到破坏,test_stale_reusable_workflow_pin_is_rejected 会在第 81 行替换两个工作流 SHA,然后只在第 82 行断言 exec.yml 错误。如果检查器不再验证验收工作流固定版本,过期的 exec.yml 固定版本仍会先触发错误,导致测试通过。

添加一个仅更改验收工作流固定版本并断言其会被拒绝的测试用例。

给 AI 代理的提示
在 `scripts/test-check-recipes.py` 第 81-82 行:

**验收工作流固定版本偏移未被发现**

如果验收工作流固定版本的验证被移除或遭到破坏,`test_stale_reusable_workflow_pin_is_rejected` 会在第 81 行替换两个工作流 SHA,然后只在第 82 行断言 `exec.yml` 错误。如果检查器不再验证验收工作流固定版本,过期的 `exec.yml` 固定版本仍会先触发错误,导致测试通过。

添加一个仅更改验收工作流固定版本并断言其会被拒绝的测试用例。
Original comment in English

🟡 Medium · Acceptance pin drift goes unnoticed

When acceptance-workflow pin validation is removed or broken, test_stale_reusable_workflow_pin_is_rejected replaces both workflow SHAs at line 81, then only asserts the exec.yml error at line 82. If the checker stops validating the acceptance workflow pin, the stale exec.yml pin still raises first and the test passes.

Add a case that changes only the acceptance workflow pin and asserts that it is rejected.

Prompt for AI agents
In `scripts/test-check-recipes.py` at lines 81-82:

**Acceptance pin drift goes unnoticed**

When acceptance-workflow pin validation is removed or broken, `test_stale_reusable_workflow_pin_is_rejected` replaces both workflow SHAs at line 81, then only asserts the `exec.yml` error at line 82. If the checker stops validating the acceptance workflow pin, the stale `exec.yml` pin still raises first and the test passes.

Add a case that changes only the acceptance workflow pin and asserts that it is rejected.

@cursor cursor Bot left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

不要合并

本 PR 已与 main 冲突(mergeable=false)。v1.8.7 已把 gitlink 与可复用工作流推进到 dc4433d1cfbeade114d51f3f3c429378d3d7b68d。若合并本分支,会把发布固定点回退到旧 SHA。

有用部分已重新接入当前 main:

  • BUILD_PROMPT.md 配方标题 0.3.21
  • check-recipes.py 拒绝 BUILD_PROMPT / release.yml 与 gitlink 漂移
  • 2026-11-12 的 Issue/安全/死代码记录

#436、#440、#447 仍应保持开放;#449 是与 #447 相同的重复申请。

Open in Web View Automation 

Sent by Cursor Automation: LIght’s Automation

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