Files
SEONexus/doc/1270-SEONexus-Codex多版本协作交接总文档.md

649 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 1270-SEONexus Codex 多版本协作交接总文档
## 目的
这份文档用于让多个 Codex 在 `SEONexus` 新版与旧版本之间长期协作时,保持:
- 交接清楚
- 边界清楚
- 合并节奏清楚
- 不互相覆盖
- 不重复试错
适用场景:
- 你会在正式环境再安装一个或多个 Codex
- 一个 Codex 主要盯新版优化
- 另一个 Codex 主要盯旧版本蜘蛛抓取与优化
- 后续还可能出现第 3 个、第 4 个 Codex
---
## 核心原则
### 1. 同一时间只优化一份代码
这是最重要的规则。
任何时刻只允许:
- 新版在优化
- 旧版本在优化
不允许两个 Codex 同时分别改两份代码后再互相猜着合。
正确节奏是:
1. 先在一份代码上完成一轮优化
2. 验证通过
3. 合并/同步到另一份代码
4. 再开始另一份代码的分析与优化
---
### 2. 另一份代码在未同步最新前,只做“观察”,不做“改动”
如果旧版本还没合并新版最新修复,则旧版本 Codex
- 可以看日志
- 可以写分析
- 可以整理建议
- 不能先改一套自己的实现
否则后面很容易出现:
- 同一问题两边各修一版
- 路由/模板/观测逻辑走偏
- 合并时冲突越来越重
---
### 3. 新版是主验证场,旧版本是回灌场
除非明确说明某个问题只在旧版本存在,否则默认:
- 新版先验证
- 旧版本后回灌
这条规则适用于:
- 蜘蛛抓取分析
- 路由兼容
- 抓取入口修复
- sitemap / rss / robots 修复
- 前端站群 Nginx 动态回源策略
不适用于:
- 旧模板专属结构问题
- 旧模板专属页面 bug
- 旧模板专属样式/模板分支问题
---
## 版本边界
### 新版负责什么
新版主要承担:
- SEO 主线优化
- 蜘蛛抓取分析
- 新路由兼容策略验证
- 抓取入口修复
- 深页 `301/404/500` 治理
- RSS / sitemap / canonical 规范
- 新功能验证
### 旧版本负责什么
旧版本主要承担:
- 已验证能力的回灌
- 老模板抓取稳定性修复
- 老模板历史路由兼容
- 老模板蜘蛛行为观察
- 老模板入口层与规范层修复
### 不要让旧版本先承担的内容
这些优先在新版验证,不要先在旧版本自由发挥:
- Bootstrap 总控台整条链
- 站外 SEO 全量工作台
- 大型后台运营工作流
- 新模板展示层重构
- URL 主输出风格大改
---
## 多 Codex 协作角色建议
### Codex-A新版主线 Codex
职责:
- 新版 SEO 优化
- 蜘蛛日志分析
- 路由兼容修复
- 抓取入口修复
- 新功能验证
- 输出可回灌结论
### Codex-B旧版本回灌 Codex
职责:
- 等待旧版本合并最新版代码
- 分析旧版本蜘蛛抓取
- 验证回灌效果
- 只做老模板特有问题修复
- 不先发明与新版不同的实现
### Codex-C / Codex-D后续扩展 Codex
职责建议:
- 专项观察
- 文档整理
- 日志归纳
- 回归验收
不建议一上来让多个 Codex 同时改核心路由/模板。
---
## 每次开始工作前必须确认的事项
任何一个 Codex 开工前,先确认以下 6 条:
1. 当前自己负责的是:
- 新版
还是
- 旧版本
2. 另一份代码是否已经合并了最新修复
3. 当前轮次是:
- 观察
- 修复
- 回灌
- 验收
4. 这轮是否允许改代码
5. 是否已有上一个 Codex 的交接结论
6. 本轮修复目标是否只限定在一个主题
例如:
- 蜘蛛抓取概览
- 深页兼容
- RSS 修复
- 旧模板入口规范
不要一轮里又修蜘蛛、又修广告、又修 Bootstrap、又补后台工作台。
---
## 严格边界
### 1. 不自动跨版本做“顺手修复”
例如当前在旧版本分析蜘蛛问题时,不要顺手:
- 改新版模板
- 改新版站外 SEO 面板
- 改新版 Bootstrap
反过来也一样。
### 2. 不自动提交
除非用户明确要求,否则:
- 不自动 commit
- 不自动 push
先把改动留在工作区,等用户确认。
### 3. 不整包恢复历史提交
`22cc72ee` 这种历史提交,只能作为:
- 缺失源码来源
不能整包恢复。
因为这类提交往往还混着:
- 运行产物
- 测试数据
- storage 输出
- 临时样板文件
正确做法是:
- 定点恢复源码
- 然后继续冒烟验证
### 4. 不在两个版本上同时独立发明方案
例如:
- 新版把深页兼容做成 A
- 旧版本同时自己做成 B
这是最容易制造后续冲突的做法。
### 5. Git 推送只能使用 `www` 用户
这是当前机器的固定约束,不要忽略。
原因:
- `root` 用户可以排查问题、读日志、跑测试
-`root` 没有 `origin2` 的可用 SSH 私钥
- `www` 用户已经配置好可用私钥,且已验证可正常推送到 `origin2`
因此后续所有 Codex 都必须遵守:
- 可以用 `root` 做分析、读取、验证
- 一旦涉及 `git push`,只能切到 `www`
- 不要再直接用 `root` 执行 `git push origin2 dev`
标准推送命令:
```bash
su -s /bin/bash www -c 'git -C /www/wwwroot/diff-maccms/SEONexus push origin2 dev'
```
如果需要先查看状态,也建议保持同一口径:
```bash
su -s /bin/bash www -c 'git -C /www/wwwroot/diff-maccms/SEONexus status'
su -s /bin/bash www -c 'git -C /www/wwwroot/diff-maccms/SEONexus log --oneline -n 3'
```
已验证结论:
- `root` 推送会报 `Permission denied (publickey...)`
- `www` 推送 `origin2` 正常成功
所以这不是代码问题,也不是远端仓库问题,而是当前机器上的 Git 身份边界。
### 5.1 仓库 ownership 也必须保持 `www:www`
除了 `git push` 只能使用 `www`,当前机器上还要额外遵守一条:
- `SEONexus` 仓库目录本身也必须保持 `www:www`
尤其不能让下面这些路径长期混入 `root:root`
- `.git`
- `.git/index`
- `.git/objects/*`
- `docs/`
- 其它会被 `git pull` / `git checkout` 自动写入的目录
已经验证过的真实故障现象包括:
- `error: insufficient permission for adding an object to repository database .git/objects`
- `fatal: failed to write object`
- `fatal: unpack-objects failed`
- `error: unable to create file docs/...: Permission denied`
这类问题的根因不是远端仓库异常,而是:
- 前面曾用 `root` 对仓库做过 `commit`、写文件或目录创建
- 导致 `www` 后续执行 `pull` / `push` / `stash` 时权限链断掉
因此后续建议固定为:
- 与 Git 直接相关的操作优先都用 `www`
- `root` 只做日志排查、系统命令、权限修复
- 不要再用 `root` 在仓库里直接 `commit``pull``push`
如果已经出现 ownership 混乱,优先修复命令为:
```bash
chown -R www:www /www/wwwroot/diff-maccms/SEONexus
```
如果只是 `.git` 或仓库内同步文档目录出错,也至少要修:
```bash
chown -R www:www /www/wwwroot/diff-maccms/SEONexus/.git
chown -R www:www /www/wwwroot/diff-maccms/SEONexus/docs
```
这条规则和“只能 `www` 推送”应视为同一组约束,不能只做一半。
### 6. `SEONexus` 与 `SEONexusAdmin` 是同机双仓协作
当前机器上:
- `SEONexus`
- `SEONexusAdmin`
都位于同一台机器的 `/www/wwwroot/` 下。
这意味着:
- 它们适合联合排查
- 但仍然是两个独立仓库
- 不能因为同机就默认一起改
推荐理解方式:
- `SEONexus` 主要负责后端接口、路由、helper、model、日志、返回结构
- `SEONexusAdmin` 主要负责前端页面、接口调用、参数、token/header、错误展示
- Nginx / 域名 / 反代 / CORS / 登录态链路属于同机环境层
因此遇到后台报错时:
- 可以跨仓一起查
- 但修复时先判断主战场
- 一轮优先只改一个主仓
例如:
- 如果是接口 500、类缺失、helper 丢失、路由没挂,主战场通常是 `SEONexus`
- 如果是 axios 参数、header、token、前端展示层误报主战场通常是 `SEONexusAdmin`
- 如果是跨域、代理、cookie、header 丢失,主战场通常是 Nginx / 反代配置
这条规则的核心不是“分开”,而是:
- 同机便于联查
- 分仓便于控边界
### 7. 不建议现在把所有项目硬并成一个 Git 仓库
当前更适合的结构是:
- 多个独立 Git 仓库
- 通过仓库内 `doc/` 文档同步协作规则
- 通过明确边界控制多 Codex 并行协作
不建议现在把所有项目直接并成一个大仓,原因包括:
- `SEONexus``SEONexusAdmin`、node 工具链、蜘蛛代理脚本、历史参考目录,生命周期并不一致
- 不同项目的提交节奏不同,强行并仓后日志会很乱
- 后续回滚、比对、定向发布会更重
- 正式服未必需要开发机当前的总目录结构
- 现在真正需要同步的是规则和关键文档,不是把所有杂项目录绑成一个提交历史
当前阶段更推荐:
- 业务主仓继续独立维护
- 关键协作文档同步到主仓的 `doc/`
- 需要跨仓排查时,通过文档说明目录关系和排查顺序
只有在未来满足以下条件时,才考虑是否要做 monorepo
- 多个仓长期高度耦合
- 发布必须严格同版本号
- CI/CD 也准备统一
- 权限、分支策略、回滚策略都已经设计清楚
在当前阶段,最稳的结论是:
- 不要把所有项目硬归成一个 Git
- 先把“协作规则归一、文档入口归一、推送口径归一”做好
- 这样收益更大,风险更小
---
## 工作顺序标准流程
### 场景 A新版先优化旧版本后回灌
1. 新版 Codex 分析问题
2. 新版 Codex 实施修复
3. 新版验证通过
4. 文档记录“哪些能力适合回灌旧版本”
5. 旧版本合并最新代码
6. 旧版本 Codex 开始观察与回灌验证
7. 只补旧模板特有问题
### 场景 B旧版本先发现问题
1. 先判断该问题是不是旧模板专属
2. 如果不是旧模板专属,先回新版验证
3. 新版验证后再回灌旧版本
4. 如果是旧模板专属,再只在旧版本修
---
## 哪些优化适合回灌旧版本
### 适合
这些通常适合回灌:
- 蜘蛛抓取日志分析
- 抓取概览工作台
- `robots.txt` 修复
- `rss/baidu.xml` 修复
- `sitemap` 修复
- canonical 规范
- 历史 `detail/play/category` 路由兼容
- 深页 `404/301` 治理
- 前端站群 Nginx 统一动态回源策略
### 慎回灌
这些要单独评估:
- 坏链随机视频兜底
- 播放页 SEO 策略大改
- URL 主输出规则变更
- 复杂站外 SEO 面板
- 导入健康台全家桶
- Bootstrap 总控台整条链
---
## 多 Codex 的交接模板
每个 Codex 每轮结束时,至少留下以下内容:
### 1. 本轮工作对象
- 新版 / 旧版本
- 目录路径
- 当前分支
### 2. 本轮目标
例如:
- 修复百度深页 `301 -> 404`
- 验证旧模板蜘蛛抓取概览
- 补回 rebase 丢失 helper
### 3. 本轮已改动文件
必须列路径。
### 4. 本轮未提交改动
说明是否:
- 仅工作区修改
- 已暂存
- 已提交但未 push
### 5. 本轮验证结果
至少说明:
- 哪些通过
- 哪些没通过
- 哪些未验证
### 6. 下一位 Codex 的注意事项
必须写明:
- 不要碰哪些文件
- 先看哪个文档
- 下一个最值动作是什么
---
## 文档同步规则
每轮有效优化后,至少同步两类文档中的一种:
### 1. 主题执行文档
例如:
- [1269-SEONexus-老模板第一阶段回灌执行文档](/www/wwwroot/diff-maccms/docs/1269-SEONexus-老模板第一阶段回灌执行文档.md)
适合记录:
- 旧模板回灌目标
- 分阶段策略
- 验收口径
### 2. Codex 交接总文档
也就是当前这份文档,适合记录:
- 协作规则
- 边界
- 交接模板
- 多版本协作方法
如果后续发现某条规则经常踩坑,就更新本文件,不要只留在聊天记录里。
### 3. 项目本地持续分析文档
除了需要进入 Git 的正式文档外,每个项目还允许保留一套“只服务当前项目持续优化”的本地分析文档。
这类文档推荐放在项目自己的:
- `code/storage/_analysis/`
使用原因:
- 每个项目都有自己的蜘蛛日志来源、观察窗口和异常轨迹
- 这类分析如果完全不记录,后续优化容易断档
- 但如果全部提交进 Git又会把大量过程性观察和未确认判断写进正式历史
因此这类文档的定位是:
- 允许持续记录
- 默认不提交
- 以项目私有观察为主
- 适合记录尚在观察期的中间结论
推荐最少按两层组织:
- `code/storage/_analysis/sources/`
- `code/storage/_analysis/domains/`
例如:
- `code/storage/_analysis/sources/baiduspider.md`
- `code/storage/_analysis/sources/sogou.md`
- `code/storage/_analysis/domains/sjzyunyang.com.md`
- `code/storage/_analysis/domains/jingxifa.com.md`
边界规则:
- 可以在每个独立项目里持续写自己的分析文档
- 也允许每个独立项目优化“本项目私有层”
- 但不建议每个项目独立发明一套公共核心方案
也就是:
- 项目私有观察可以分散记录
- 公共核心方案仍应集中验证、集中沉淀、再回灌
---
## 特别注意事项
### 1. 前端 Nginx 不要继续按 URL 模板枚举
前端站群应坚持:
- 静态资源缓存
- 非静态请求 MISS 后统一回后端
不要每新增一种 URL family就去补前端 Nginx 前缀。
### 2. 旧版本不要轻易改主输出 URL 风格
旧版本更适合:
- 加兼容层
- 不推翻当前主输出
### 3. 观测和修复要分开记录
不要把:
- 日志观察
- 推测
- 已验证修复
写混。
### 4. 真实缺失源码与 CLI 冒烟假阳性要区分
像之前的:
- `Class not found`
- 路由没挂
- helper 丢失
这类是真缺失。
但像:
- `Undefined array key 9999`
在 CLI 直接调控制器时,可能只是 admin 配置上下文不完整,不一定是真缺源码。
---
## 推荐的交接口径
每个 Codex 对下一个 Codex 的交接,建议用这种结构:
1. 当前负责版本
2. 当前主题
3. 已完成
4. 未完成
5. 禁止动作
6. 下一步建议
例如:
1. 当前负责版本:旧版本
2. 当前主题:蜘蛛抓取概览与深页兼容验证
3. 已完成:日志分析、入口检查、深页 `404` 修复验证
4. 未完成:下一轮百度深抓效果观察
5. 禁止动作:不要先改新版,不要整包恢复历史提交,不要自动 commit
6. 下一步建议:先合并最新版后,再观察旧模板的 `detail/play` 抓取变化
---
## 最后的工作纪律
多个 Codex 长期协作时,最重要的不是“每个都很聪明”,而是:
- 同步节奏一致
- 边界清楚
- 不抢改
- 不乱回滚
- 不各自发明一套实现
只要坚持这几条,后面就算扩到 3 个、4 个 Codex也仍然能稳。