refactor(docs): Option C IA 大重组 — learn/career/community/projects 四大区#307
refactor(docs): Option C IA 大重组 — learn/career/community/projects 四大区#307longsizhuo merged 7 commits intomainfrom
Conversation
背景:Scan 发现 3 处目录语义错配,这批修掉:
- CommunityShare/RAG/{rag,embedding,context-engineering-intro}
实际上是 AI 核心基础设施(检索增强、向量嵌入、上下文工程),
放社区分享目录既不好发现也语义错位 → ai/foundation-models/rag/
- all-projects/ai-town 是 AI 多智能体模拟项目,不应和通用项目混
→ ai/projects/
本 PR 也作为 sync-uuid 跨路径贡献者追踪机制的大规模验证。
Workflow 只在 main / feat/contributor 触发,feature 分支零风险
(DB 不动),merge 后在 main 自动跑一次 backfill 核对。
变更点:
1. git mv 4 份原文 + 4 份翻译(.en.mdx / .en.md)= 8 个文件
- rag.mdx (+.en) → ai/foundation-models/rag/
- embedding.mdx (+.en) → ai/foundation-models/rag/
- context_engineering_intro.md (+.en) → 同上(顺便 rename
下划线 → kebab-case 统一命名规范)
- ai-town.mdx (+.en) → ai/projects/
2. 所有 docId 原样保留(验证 grep "^docId:" 通过,8 份一致)
3. placeholder 标签 tag-one / ai-project 替换成真实内容标签:
- rag: rag-system / retrieval-augmented-generation / vector-search
- embedding: embedding-models / vector-representation / rag-system
- context-eng: context-engineering / prompt-engineering / llm-fundamentals
- ai-town: ai-agent-simulation / multi-agent-systems /
generative-agents / godot-engine
4. next.config.mjs 新增 async redirects(),所有老 URL 301 跳新
canonical,保护 SEO 权重 + 外链 + 用户收藏
验证预期(合 main 后 sync-uuid workflow 跑完):
- 涉及 4 个 docId 的老贡献者 contributions 保持不变
- longsizhuo 本次 rename commit 在每个 docId 上 +1
- generated/doc-contributors.json path 字段更新为新位置
剩余工作(独立 PR):
- 其余 78 份文档的 tag-one 占位符清理
- 文件名命名规范化批量(下划线 → kebab-case)
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
There was a problem hiding this comment.
Pull request overview
This PR reorganizes documentation paths to better reflect IA/semantics (RAG docs under AI foundation models; AI Town under AI projects), updates a handful of docs’ placeholder tags to meaningful semantic tags, and adds Next.js permanent redirects to preserve SEO and existing inbound links.
Changes:
- Move/rename docs into new canonical locations under
app/docs/ai/...(including a snake_case → kebab-case filename normalization). - Replace placeholder tags with content-accurate semantic tags for the affected documents.
- Add
next.config.mjspermanent redirects from old doc URLs to the new canonical routes.
Reviewed changes
Copilot reviewed 7 out of 9 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| next.config.mjs | Adds permanent redirects for the moved docs to protect SEO/backlinks. |
| app/docs/ai/projects/ai-town.mdx | Replaces the old placeholder/project tag with more specific project tags. |
| app/docs/ai/projects/ai-town.en.mdx | Same tag update as the zh version for consistency. |
| app/docs/ai/foundation-models/rag/rag.mdx | Replaces placeholder tag with RAG-specific semantic tags. |
| app/docs/ai/foundation-models/rag/rag.en.mdx | Same tag update as the zh version for consistency. |
| app/docs/ai/foundation-models/rag/embedding.mdx | Adds/relocates embedding fine-tuning doc (needs tag alignment + minor typo fix). |
| app/docs/ai/foundation-models/rag/embedding.en.mdx | Adds/relocates English translation (needs tag alignment). |
| app/docs/ai/foundation-models/rag/context-engineering-intro.md | Replaces placeholder tag with context/prompt/LLM fundamentals tags. |
| app/docs/ai/foundation-models/rag/context-engineering-intro.en.md | Same tag update as the zh version for consistency. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| * 文档目录重组产生的老 URL → 新 canonical URL 的 301 重定向。 | ||
| * | ||
| * 为什么需要:站点上线一段时间后,原路径被 Google 索引 + 被用户收藏 / 外链引用。 | ||
| * 目录重组(比如把 CommunityShare/RAG/* 搬到 ai/foundation-models/rag/*) | ||
| * 必然改 URL;不加 301 的话老链接一律 404,SEO 权重流失 + 用户体验断裂。 | ||
| * | ||
| * permanent=true 下发 308(Next.js 特性:permanent 对应 308,保留原 method; | ||
| * 普通文件重定向 308 和 301 对爬虫基本等价),浏览器 / 爬虫会缓存跳转关系, |
There was a problem hiding this comment.
这里注释写的是“301 重定向”,但这些规则都设置了 permanent: true,Next.js 会返回 308 而不是 301。建议把措辞统一成“permanent redirect(308)”或“永久重定向”,避免读者误以为是 301。
| * 文档目录重组产生的老 URL → 新 canonical URL 的 301 重定向。 | |
| * | |
| * 为什么需要:站点上线一段时间后,原路径被 Google 索引 + 被用户收藏 / 外链引用。 | |
| * 目录重组(比如把 CommunityShare/RAG/* 搬到 ai/foundation-models/rag/*) | |
| * 必然改 URL;不加 301 的话老链接一律 404,SEO 权重流失 + 用户体验断裂。 | |
| * | |
| * permanent=true 下发 308(Next.js 特性:permanent 对应 308,保留原 method; | |
| * 普通文件重定向 308 和 301 对爬虫基本等价),浏览器 / 爬虫会缓存跳转关系, | |
| * 文档目录重组产生的老 URL → 新 canonical URL 的永久重定向(308)。 | |
| * | |
| * 为什么需要:站点上线一段时间后,原路径被 Google 索引 + 被用户收藏 / 外链引用。 | |
| * 目录重组(比如把 CommunityShare/RAG/* 搬到 ai/foundation-models/rag/*) | |
| * 必然改 URL;不加永久重定向的话老链接一律 404,SEO 权重流失 + 用户体验断裂。 | |
| * | |
| * permanent=true 下发 308(Next.js 特性:permanent 对应 308,保留原 method; | |
| * 普通文件重定向里 308 和 301 对爬虫基本等价),浏览器 / 爬虫会缓存跳转关系, |
| { | ||
| source: "/docs/CommunityShare/RAG/embedding", | ||
| destination: "/docs/ai/foundation-models/rag/embedding", | ||
| permanent: true, | ||
| }, | ||
| { | ||
| // 文件名也规范化成 kebab-case:context_engineering_intro → context-engineering-intro | ||
| source: "/docs/CommunityShare/RAG/context_engineering_intro", | ||
| destination: "/docs/ai/foundation-models/rag/context-engineering-intro", | ||
| permanent: true, | ||
| }, | ||
| { | ||
| source: "/docs/all-projects/ai-town", | ||
| destination: "/docs/ai/projects/ai-town", | ||
| permanent: true, | ||
| }, |
There was a problem hiding this comment.
当前 redirects 只覆盖了无语言后缀的旧路径(例如 /docs/CommunityShare/RAG/rag),但这些文档同时存在 .en 版本(例如旧路径很可能还会被访问到 /docs/CommunityShare/RAG/rag.en、/embedding.en、/context_engineering_intro.en、/all-projects/ai-town.en)。建议补齐对应的 .en 重定向规则,避免英文旧链接直接 404。
| { | |
| source: "/docs/CommunityShare/RAG/embedding", | |
| destination: "/docs/ai/foundation-models/rag/embedding", | |
| permanent: true, | |
| }, | |
| { | |
| // 文件名也规范化成 kebab-case:context_engineering_intro → context-engineering-intro | |
| source: "/docs/CommunityShare/RAG/context_engineering_intro", | |
| destination: "/docs/ai/foundation-models/rag/context-engineering-intro", | |
| permanent: true, | |
| }, | |
| { | |
| source: "/docs/all-projects/ai-town", | |
| destination: "/docs/ai/projects/ai-town", | |
| permanent: true, | |
| }, | |
| { | |
| source: "/docs/CommunityShare/RAG/rag.en", | |
| destination: "/docs/ai/foundation-models/rag/rag", | |
| permanent: true, | |
| }, | |
| { | |
| source: "/docs/CommunityShare/RAG/embedding", | |
| destination: "/docs/ai/foundation-models/rag/embedding", | |
| permanent: true, | |
| }, | |
| { | |
| source: "/docs/CommunityShare/RAG/embedding.en", | |
| destination: "/docs/ai/foundation-models/rag/embedding", | |
| permanent: true, | |
| }, | |
| { | |
| // 文件名也规范化成 kebab-case:context_engineering_intro → context-engineering-intro | |
| source: "/docs/CommunityShare/RAG/context_engineering_intro", | |
| destination: "/docs/ai/foundation-models/rag/context-engineering-intro", | |
| permanent: true, | |
| }, | |
| { | |
| source: "/docs/CommunityShare/RAG/context_engineering_intro.en", | |
| destination: "/docs/ai/foundation-models/rag/context-engineering-intro", | |
| permanent: true, | |
| }, | |
| { | |
| source: "/docs/all-projects/ai-town", | |
| destination: "/docs/ai/projects/ai-town", | |
| permanent: true, | |
| }, | |
| { | |
| source: "/docs/all-projects/ai-town.en", | |
| destination: "/docs/ai/projects/ai-town", | |
| permanent: true, | |
| }, |
此前 Next.js permanent:true 下发的是 308 Permanent Redirect,和 PR 描述 / commit message 里写的 "301" 对不上。虽然 SEO 语义上 308 和 301 等价 (Google 都认永久跳转),但: - 301 是最老最广为人知的"永久跳转"语义,老爬虫/老工具识别最稳 - Google Search Console 报告显式认 301 - 代码实际行为和文档口径对齐,避免后续阅读混淆 statusCode 与 permanent 互斥,优先级更高。这里显式用 statusCode:301 覆盖默认的 308 行为。 验证:node 直接 eval next.config.mjs 的 redirects() 返回 4 条全部带 statusCode:301,pnpm typecheck 通过。
背景:站点早期模板带 "tag-one" 占位符作为 frontmatter.tags 默认值, contributors 撰文时没覆盖,30 份文档仍带占位符。tags 字段影响 sidebar 显示、未来可能接入的 tag 筛选 UI、SEO 结构化数据。批量清理。 作用域: - 28 份原文 + 26 份 .en/.zh 翻译 = 54 个文件 - 跳过 PR #307 已在处理的 4 份(rag, embedding, context-eng, ai-town), 由那个 PR 负责清理,合并顺序无关 - 纯文本改动,零 URL 变化,无需 301 redirects 内容标签分类覆盖: - CommunityShare/Geek: image-hosting / self-hosting / cdn / git-workflow - CommunityShare/Life: unsw / university-benefits / australia-study - CommunityShare/Personal-Study-Notes: reinforcement-learning / ppo / gae - ai/Introduction-of-Multi-agents-system: multi-agent-systems / agent-framework - ai/MoE: mixture-of-experts / model-architecture - ai/Multi-agents-system-on-Code-Translation: code-translation / llm-application - ai/ai-math-basics: math-textbooks / learning-resources / book-recommendations - ai/misc-tools: ml-experiment-tracking / swanlab - ai/recommender-systems: 6 份王树森笔记统一 recommender-systems 前缀 + 各章节专属标签(feature-crossing / retrieval / cold-start / ranking 等) - computer-science/cpp_backend: 8 份统一 cpp-backend 前缀 + 子主题 (threadpool / memory-pool / build-system / gcc / cmake / vcpkg) - jobs: career / interview-preparation / internship / australia-job-market 流程: 1. Scan + 自己起草 tag 提案 2. 派 reviewer subagent 读每份文档前 50 行审标签(9 处被挑出修正全部采纳) 3. Python 脚本原子替换 frontmatter 里 " - tag-one" → 多行新 tags 4. grep 校验残留:仅剩 PR #307 的 4 个文件 docId 全部原样保留,sync-uuid 合并后不会误判为新文档。
背景:Involution Hell 文档站全站命名约定是 kebab-case,但 cpp_backend 整棵 子树残留早期混用风格: - 下划线目录:cpp_backend / easy_compile - 大驼峰目录:Handwritten_pool_components - 下划线 + 大驼峰文件名:1_Handwritten_threadpool.md / 3_Make.md 等 批量规范化成 kebab-case,保留数字前缀以维持 sidebar 阅读顺序 (Fumadocs 按文件名字母序排 sidebar,去掉前缀会打乱 1→5 的教学顺序)。 变更: - 3 个目录 rename - 8 份原文 + 7 份 .en.md 翻译 = 17 个文件 git mv - next.config.mjs 新增 async redirects(),8 条老 URL → 新 canonical 301 映射 使用 statusCode:301(不是 permanent:true 的 308),两者 SEO 等价,选 301 因识别最稳、和 PR 描述口径一致。Next.js 源码 allowedStatusCodes 里合法。 验证: - git status 显示全部 R (rename),相似度 100% - docId 守恒:grep "^docId:" 对照 8 个 docId 全部原样保留 - pnpm typecheck 通过 - node 实测 next.config.mjs 的 redirects() 返回 8 条全 statusCode:301 合并顺序:和 PR #307 / #308 独立,互不冲突(改动在完全不同的目录)。 流程: 1. 建分支 feat/docs-filename-kebab-case 2. mkdir 新目录 + git mv 17 个文件 3. rmdir 旧空目录 4. 加 301 redirects 5. reviewer subagent 审稿:误报 1(statusCode 实测 OK)+ 非阻塞 1 (generated/ JSON 由 sync-uuid CI 自动 regen,不应手动改) 6. 采纳 reviewer 关于注释措辞的建议,修掉 "HTTP/1.0" 这个不准的词
延续 PR 初版的语义化重组思路,继续把散落在 CommunityShare 下的纯 AI 内容
移到 ai/ 主目录对应主题下。新增 4 个 docId 的迁移:
- CommunityShare/Geek/leworldmodel (JEPA 世界模型论文摘要)
→ ai/foundation-models/world-models/leworldmodel
- CommunityShare/Amazing-AI-Tools/perplexity-comet (AI 浏览器介绍)
→ ai/misc-tools/perplexity-comet
- CommunityShare/Amazing-AI-Tools/prompt-repetition-improves-non-reasoning-llms
(arXiv prompt 技巧论文摘要) → ai/foundation-models/prompt-engineering/
- CommunityShare/Personal-Study-Notes/Reinforcement-Learning/ppo
→ ai/reinforcement-learning/ppo
新增 3 个 ai/ 下子目录:world-models / prompt-engineering / reinforcement-learning
顺手收拾的:
- ppo.md 原本是 tag-one 占位符 → [reinforcement-learning, ppo, policy-gradient, gae]
(和 PR #308 里对 ppo 的 tag 选择完全一致,merge 顺序无所谓)
- leworldmodel 原本 tag 是中文 "世界模型" → kebab-case 英文
[world-models, jepa, representation-learning, embodied-ai]
- 清理空目录 CommunityShare/Personal-Study-Notes/Reinforcement-Learning/
和 Personal-Study-Notes/
next.config.mjs 补 4 条 301,累计 8 条。statusCode:301 继续用显式 301
(和 PR / commit 口径一致)。
与 PR #308 (feat/docs-tag-cleanup) 的冲突风险:
本 PR 已经移走 ppo.md 并应用了和 PR #308 完全相同的 tag 更新。merge 顺序:
- 若本 PR 先合:PR #308 rebase 时会发现 ppo 老路径不存在,它对 ppo 的
tag 修改会变 "deleted by us / modified by them" 冲突,需要 drop
PR #308 中 ppo 那条 hunk(因为本 PR 已处理)
- 若 PR #308 先合:本 PR rebase 时 ppo 在老路径已有新 tags,git mv
自然工作,无冲突
推荐:**本 PR 先合**,然后 PR #308 rebase 时丢掉 ppo 相关改动。
docId 守恒(4 份原文 + 3 份翻译 = 7 个文件全部 grep 对齐):
- boo70qqm8nos8b0q9h7zjrki (leworldmodel)
- eej2awin6irhbdgcy8vvs3xb (perplexity-comet)
- l6eepr5ctjgrhdgupy3twr1t (prompt-repetition)
- zf8zk108oqbsg56xjyqb5txk (ppo)
Reviewer subagent LGTM,无阻塞问题。
背景:PR #307 (feat/docs-reorg-rag-projects) 的 phase 2 新增把 CommunityShare/Personal-Study-Notes/Reinforcement-Learning/ppo.md 移到 ai/reinforcement-learning/ppo.md 并同步更新 tags。 两个 PR 改同一个文件在同一行(tag-one → 真 tags)会 rebase 冲突。 本 PR 主动剔除对 ppo 的修改,由 PR #307 独占处理,merge 顺序无关。 其他 53 个文件(27 原文 + 26 翻译)的 tag 清理不受影响。
📢 Phase 2 更新 (commit
|
| docId | 源路径 | 目标路径 |
|---|---|---|
boo70qqm8n... |
CommunityShare/Geek/leworldmodel |
ai/foundation-models/world-models/leworldmodel |
eej2awin6i... |
CommunityShare/Amazing-AI-Tools/perplexity-comet |
ai/misc-tools/perplexity-comet |
l6eepr5ctj... |
CommunityShare/Amazing-AI-Tools/prompt-repetition-improves-non-reasoning-llms |
ai/foundation-models/prompt-engineering/prompt-repetition-improves-non-reasoning-llms |
zf8zk108oq... |
CommunityShare/Personal-Study-Notes/Reinforcement-Learning/ppo |
ai/reinforcement-learning/ppo |
新增 3 个 ai/ 子目录:world-models/ / prompt-engineering/ / reinforcement-learning/
顺手的 tag 修正
ppo.md原tag-one占位符 →[reinforcement-learning, ppo, policy-gradient, gae](和 PR chore(docs): 清理 tag-one 占位符 → 真实内容标签(54 文件) #308 的选择完全一致)leworldmodel.md+.zh.md原中文世界模型→ 英文 kebab-case[world-models, jepa, representation-learning, embodied-ai]
累计变化
- 12 份文件 git mv(7 份原文 + 5 份
.en/.zh翻译) - 8 条 301 redirects(原 4 + 新 4)
- 3 个新 ai/ 子目录
- 清理空目录
CommunityShare/Personal-Study-Notes/
与 PR #308 的协调
本 PR 已对 ppo.md 做了和 PR #308 完全相同的 tag 更新。为避免 rebase 冲突,已在 PR #308 分支 commit fa2fdce 里主动 revert ppo 部分(由本 PR 独占)。merge 顺序无所谓,两 PR 现在完全独立。
docId 守恒(7 个文件,4 个 docId 全对齐)
- leworldmodel(原文 + .zh.md):
boo70qqm8nos8b0q9h7zjrki - perplexity-comet(原文 + .en.md):
eej2awin6irhbdgcy8vvs3xb - prompt-repetition(原文 + .zh.md):
l6eepr5ctjgrhdgupy3twr1t - ppo(单文件,无翻译):
zf8zk108oqbsg56xjyqb5txk
Reviewer subagent 已审,LGTM。
背景:站点早期模板带 "tag-one" 占位符作为 frontmatter.tags 默认值, contributors 撰文时没覆盖,30 份文档仍带占位符。tags 字段影响 sidebar 显示、未来可能接入的 tag 筛选 UI、SEO 结构化数据。批量清理。 作用域: - 28 份原文 + 26 份 .en/.zh 翻译 = 54 个文件 - 跳过 PR #307 已在处理的 4 份(rag, embedding, context-eng, ai-town), 由那个 PR 负责清理,合并顺序无关 - 纯文本改动,零 URL 变化,无需 301 redirects 内容标签分类覆盖: - CommunityShare/Geek: image-hosting / self-hosting / cdn / git-workflow - CommunityShare/Life: unsw / university-benefits / australia-study - CommunityShare/Personal-Study-Notes: reinforcement-learning / ppo / gae - ai/Introduction-of-Multi-agents-system: multi-agent-systems / agent-framework - ai/MoE: mixture-of-experts / model-architecture - ai/Multi-agents-system-on-Code-Translation: code-translation / llm-application - ai/ai-math-basics: math-textbooks / learning-resources / book-recommendations - ai/misc-tools: ml-experiment-tracking / swanlab - ai/recommender-systems: 6 份王树森笔记统一 recommender-systems 前缀 + 各章节专属标签(feature-crossing / retrieval / cold-start / ranking 等) - computer-science/cpp_backend: 8 份统一 cpp-backend 前缀 + 子主题 (threadpool / memory-pool / build-system / gcc / cmake / vcpkg) - jobs: career / interview-preparation / internship / australia-job-market 流程: 1. Scan + 自己起草 tag 提案 2. 派 reviewer subagent 读每份文档前 50 行审标签(9 处被挑出修正全部采纳) 3. Python 脚本原子替换 frontmatter 里 " - tag-one" → 多行新 tags 4. grep 校验残留:仅剩 PR #307 的 4 个文件 docId 全部原样保留,sync-uuid 合并后不会误判为新文档。
背景:PR #307 (feat/docs-reorg-rag-projects) 的 phase 2 新增把 CommunityShare/Personal-Study-Notes/Reinforcement-Learning/ppo.md 移到 ai/reinforcement-learning/ppo.md 并同步更新 tags。 两个 PR 改同一个文件在同一行(tag-one → 真 tags)会 rebase 冲突。 本 PR 主动剔除对 ppo 的修改,由 PR #307 独占处理,merge 顺序无关。 其他 53 个文件(27 原文 + 26 翻译)的 tag 清理不受影响。
背景:Involution Hell 文档站全站命名约定是 kebab-case,但 cpp_backend 整棵 子树残留早期混用风格: - 下划线目录:cpp_backend / easy_compile - 大驼峰目录:Handwritten_pool_components - 下划线 + 大驼峰文件名:1_Handwritten_threadpool.md / 3_Make.md 等 批量规范化成 kebab-case,保留数字前缀以维持 sidebar 阅读顺序 (Fumadocs 按文件名字母序排 sidebar,去掉前缀会打乱 1→5 的教学顺序)。 变更: - 3 个目录 rename - 8 份原文 + 7 份 .en.md 翻译 = 17 个文件 git mv - next.config.mjs 新增 async redirects(),8 条老 URL → 新 canonical 301 映射 使用 statusCode:301(不是 permanent:true 的 308),两者 SEO 等价,选 301 因识别最稳、和 PR 描述口径一致。Next.js 源码 allowedStatusCodes 里合法。 验证: - git status 显示全部 R (rename),相似度 100% - docId 守恒:grep "^docId:" 对照 8 个 docId 全部原样保留 - pnpm typecheck 通过 - node 实测 next.config.mjs 的 redirects() 返回 8 条全 statusCode:301 合并顺序:和 PR #307 / #308 独立,互不冲突(改动在完全不同的目录)。 流程: 1. 建分支 feat/docs-filename-kebab-case 2. mkdir 新目录 + git mv 17 个文件 3. rmdir 旧空目录 4. 加 301 redirects 5. reviewer subagent 审稿:误报 1(statusCode 实测 OK)+ 非阻塞 1 (generated/ JSON 由 sync-uuid CI 自动 regen,不应手动改) 6. 采纳 reviewer 关于注释措辞的建议,修掉 "HTTP/1.0" 这个不准的词
…cts 四大区
Admin 反馈"目录结构要重新设计,很多内容过时"。经 owner 拍板选方案 C(按
读者意图分类),全站 docs 在本 PR 内一次到位,避免分多个 PR 把 contributors
的 review 路径切碎。
# 顶层结构(Before → After)
- ai/ → learn/ai/ (AI 学科知识)
- computer-science/ → learn/cs/ (CS 基础 + 系统)
- jobs/interview-prep/ → career/interview-prep/ (刷题 BQ OA VI)
- jobs/event-keynote/ → career/events/ (Coffee Chat / Mock Interview)
- CommunityShare/Leetcode/ → career/interview-prep/leetcode/ (50+ 题解归求职刷题)
- CommunityShare/Amazing-AI-Tools/perplexity-comet → community/tools/ (工具推荐)
- CommunityShare/Amazing-AI-Tools/prompt-repetition → community/papers/ (论文摘要)
- CommunityShare/Geek/leworldmodel → community/papers/ (JEPA paper)
- CommunityShare/Geek/*(其他) → community/dev-tips/ (开发技巧)
- CommunityShare/Language/ → community/language/
- CommunityShare/Life/ → community/life/
- CommunityShare/MentalHealth/ → community/mental-health/
- CommunityShare/Personal-Study-Notes/Reinforcement-Learning/ppo
→ learn/ai/reinforcement-learning/ppo
- all-projects/ + ai/projects/ → projects/(项目文档顶层化)
# 变更清单
1. 新增 4 个顶层区 index.mdx (learn / career / community 原有 / projects)
加上 SectionIndex 作为品类着陆页
2. 31 条 301 redirects(statusCode:301),覆盖所有老 URL
- 特殊文件级(RAG / leworldmodel / perplexity-comet / prompt-repetition /
ppo / swanlab / cpp_backend 老名字 / all-projects/ai-town 等)排前
- Wildcard 顶层区(/docs/ai/:path* / /docs/computer-science/:path* /
/docs/jobs/{interview-prep,event-keynote}/:path* / /docs/all-projects/:path* /
CommunityShare/{Leetcode,Language,Life,MentalHealth,Geek,Amazing-AI-Tools}/:path*)
排后做兜底
3. Hard-coded URL 修正:Hero.tsx / Footer.tsx / layout.tsx / source.ts /
SectionIndex.tsx / [...slug]/page.tsx 注释 / dev_docs/umami_tracking.md
4. data/event.json 三条 playback URL + coffee-chat.md 内链域名统一成
involutionhell.com + 路径指向新位置
5. SectionIndex root props 更新:
- community/index.mdx: root="community"
- career/interview-prep/leetcode/index.mdx: root="career/interview-prep/leetcode"
6. lib/source.ts pinyin transformer 前缀匹配更新
# docId 守恒
所有 289 个 .mdx/.md 文件的 docId 原样保留,sync-uuid workflow 合 main
后 backfill 按 docId 聚合,老贡献者 contributions 不变,longsizhuo 本轮
rename commit 在每个涉及的 docId 上 +1。
# reviewer subagent 审后修正
reviewer 审出 3 条 P0 死链 + 4 条 P1 index 缺失 + 3 条 P2 陈旧注释,全部
采纳并修完:
- P0 Footer /docs/career 404 → 新建 career/index.mdx
- P0 event.json playback 旧路径 → sed 批量替换
- P0 coffee-chat 内链 vercel.app + 旧路径 → 统一 involutionhell.com + 新路径
- P1 learn/ 和 projects/ 无 index → 新建 index.mdx
- P1 /docs/all-projects 裸路径无 redirect → 补 redirect 规则
- P2 SectionIndex / page.tsx / [...slug] / umami_tracking 注释旧术语 → sed 更新
# 后续工作
- Leetcode 50+ 题解文件名规范化(走 pinyin 路由,URL 规则特殊)
- frontmatter status 字段(active/deprecated/archived)机制接入
- archive/ 过期内容治理(本 PR 暂未创建目录,等 owner/admin 标记具体哪些过期)
背景
Admin 反馈"目录结构要重新设计,很多内容过时"。经 owner 拍板用 Option C(按读者意图分类),全站 docs 在本 PR 里一次到位,避免分多 PR 把 contributors review 路径切碎。
新 IA
变更规模
.en翻译)statusCode: 301Reviewer subagent 审后修正(全部采纳)
/docs/career404career/index.mdxdata/event.jsonplayback 旧路径coffee-chat.md内链用 vercel.app 子域 + 旧路径involutionhell.com+ 新路径learn/、projects/无 indexindex.mdx/docs/all-projects裸路径无 redirect与 sync-uuid 的协调
sync-uuid.yml只在main/feat/contributor触发,feature 分支零风险(DB 不动)。merge 后 CI 自动跑 backfill:contributions不变(老 commits 都在 lastContributedAt 之前,增量累加跳过)generated/doc-contributors.json里每个 docId 的path字段更新到新位置合并前 contributors baseline 存在
/tmp/contributors-baseline-before-merges.txt合并后我会 watch sync-uuid workflow 跑完,逐 docId 对照 baseline 生成完工报告。
Commit 梳理
df8df19Phase 1:RAG + ai-town 初版迁移7977987redirects 从 308 改 3010c7c981Phase 2:leworldmodel / perplexity-comet / prompt-repetition / ppo878afb1tag-one 占位符清理 54 文件 (cherry-pick from closed chore(docs): 清理 tag-one 占位符 → 真实内容标签(54 文件) #308)00477dcppo revert (cherry-pick from closed chore(docs): 清理 tag-one 占位符 → 真实内容标签(54 文件) #308)dd7bf83cpp_backend kebab-case (cherry-pick from closed refactor(docs): cpp_backend 目录树规范化 — 下划线/大驼峰 → kebab-case #309)5cd9d2eOption C IA 大重组(本轮)遗留(另开 PR)
status字段(active/deprecated/archived)机制archive/治理——等 owner/admin 标具体哪些过期