fix: ci - harden link checks

This commit is contained in:
tukuaiai
2026-05-04 04:12:08 +08:00
parent da52264bb3
commit b56e5364cf
5 changed files with 35 additions and 12 deletions
+1 -1
View File
@@ -6,7 +6,7 @@
我们恳请您通过电子邮件向我们报告任何潜在的安全漏洞,而不是在公共 Issue 跟踪器中披露。这将使我们有机会在漏洞被公开利用之前进行修复。
请将详细信息发送至:tukuai.ai@gmail.com
请将详细信息发送至:[tukuai.ai@gmail.com](mailto:tukuai.ai@gmail.com)
请在报告中包含以下信息:
* 漏洞的详细描述。
+19 -1
View File
@@ -16,6 +16,8 @@ jobs:
steps:
- name: Checkout code
uses: actions/checkout@v6
with:
submodules: recursive
- name: Setup Node.js
uses: actions/setup-node@v6
with:
@@ -39,7 +41,23 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
with:
submodules: recursive
- name: Link Checker
uses: lycheeverse/lychee-action@v2.8.0
with:
args: --verbose --no-progress --exclude-path .history --exclude-path .github/wiki --exclude-path node_modules --exclude-path tools/external --exclude-path tools/chat-vault './**/*.md'
args: >-
--verbose
--no-progress
--exclude-path .history
--exclude-path .github/wiki
--exclude-path node_modules
--exclude-path tools/external
--exclude-path tools/chat-vault
--exclude-path tools/prompts-library
--exclude 'https://chatgpt.com.*'
--exclude 'https://claude.ai.*'
--exclude 'https://app.augmentcode.com.*'
--exclude 'https://platform.openai.com.*'
--exclude 'https://user-images.githubusercontent.com.*'
'./**/*.md'
+1 -1
View File
@@ -1277,7 +1277,7 @@ AI 特别适合生成:
### 延伸阅读
- [语言层要素](#concept-language-layers) - 看懂代码需要掌握的语言层级
- [胶水开发提示词(在线提示词库入口)](../../../prompts/README.md)
- [胶水开发提示词(在线提示词库入口)](../../prompts/README.md)
</details>
+8 -8
View File
@@ -174,8 +174,8 @@ AI 能安装依赖、执行命令、修复报错、提交 Git;你负责确认
|:---|:---|:---|:---|
| 零基础路线 | 不会编程或刚开始 | 跑通从想法到项目的最小闭环 | [问题求解](../concepts/README.md#concept-problem-solving) |
| 开发者路线 | 已会写代码 | 建立 AI 结对编程工作流 | [Vibe Coding 经验](#vibe-coding-experience) |
| Prompt 路线 | 想提升提问质量 | 把需求表达成可执行指令 | [提示词库](../../../prompts/README.md) |
| Skill 路线 | 想沉淀复用能力 | 把高频任务做成可重复调用的技能 | [Skills 技能大全](../../../skills/README.md) |
| Prompt 路线 | 想提升提问质量 | 把需求表达成可执行指令 | [提示词库](../../prompts/README.md) |
| Skill 路线 | 想沉淀复用能力 | 把高频任务做成可重复调用的技能 | [Skills 技能大全](../../skills/README.md) |
| 质量门禁路线 | 担心 AI 乱写代码 | 用测试、CI、schema、清单约束 AI 输出 | [工程实践](../references/README.md#reference-engineering-practice) |
| GEO/SEO 路线 | 想提升仓库被引用概率 | 建设 AI 可理解、可引用、可验证的内容资产 | [GEO / SEO 检查清单](../../assets/ai-citation/geo-seo-checklist.md) |
@@ -224,7 +224,7 @@ AI 能安装依赖、执行命令、修复报错、提交 Git;你负责确认
目标:把自然语言需求写成可执行、可检查、可复用的指令。
1. [提示词库入口](../../../prompts/README.md)
1. [提示词库入口](../../prompts/README.md)
2. [工程实践](../references/README.md#reference-engineering-practice)
3. [语言层要素](../concepts/README.md#concept-language-layers)
4. [问题求解](../concepts/README.md#concept-problem-solving)
@@ -239,9 +239,9 @@ AI 能安装依赖、执行命令、修复报错、提交 Git;你负责确认
目标:把高频工作沉淀成可重复使用的能力。
1. [Skills 技能大全](../../../skills/README.md)
2. [auto-skill](../../../skills/auto-skill/SKILL.md)
3. [Claude 官方 Skills](../../../skills/claude-official-skills/)
1. [Skills 技能大全](../../skills/README.md)
2. [auto-skill](../../skills/auto-skill/SKILL.md)
3. [Claude 官方 Skills](../../skills/claude-official-skills/)
完成标准:
@@ -256,7 +256,7 @@ AI 能安装依赖、执行命令、修复报错、提交 Git;你负责确认
优先阅读:
1. [AGENTS.md](../../../../AGENTS.md)
1. [AGENTS.md](../../AGENTS.md)
2. [工程实践](../references/README.md#reference-engineering-practice)
3. [GEO / SEO 检查清单](../../assets/ai-citation/geo-seo-checklist.md)
@@ -304,7 +304,7 @@ AI 能安装依赖、执行命令、修复报错、提交 Git;你负责确认
- 新手:回到 [学习地图](#learning-map),从第 0 步开始。
- 开发者:阅读 [Vibe Coding 经验](#vibe-coding-experience),再选择 Skill 或质量门禁路线。
- 团队:先统一 [AGENTS.md](../../../../AGENTS.md)、强前置条件和质量门禁。
- 团队:先统一 [AGENTS.md](../../AGENTS.md)、强前置条件和质量门禁。
</details>
+6 -1
View File
@@ -141,6 +141,7 @@ def main() -> int:
try:
destination.relative_to(ROOT)
except ValueError:
missing_links.append((markdown_file.relative_to(ROOT), raw, destination))
continue
if not destination.exists():
@@ -155,7 +156,11 @@ def main() -> int:
if missing_links or missing_anchors:
print("MISSING_LINKS")
for source, raw, resolved in missing_links:
print(f"{source} -> {raw} => {resolved.relative_to(ROOT)}")
try:
display_path = resolved.relative_to(ROOT)
except ValueError:
display_path = resolved
print(f"{source} -> {raw} => {display_path}")
print("MISSING_ANCHORS")
for source, raw, destination, anchor in missing_anchors:
print(f"{source} -> {raw} => {destination}#{anchor}")