# ai-customer-service 快照差异清单（2026-05-08）

## 背景

本清单用于比较以下两个目录，并给出后续合并策略：

- 主仓：`/home/long/project/ai-customer-service`
- 快照：`/home/long/project/ai-customer-service-lijiaoqiao-snapshot-2026-05-08`

目标不是整包回灌快照，而是只挑有明确工程价值的差异，避免把 `立交桥` 大仓里的分叉历史污染回主仓。

## 本轮已合并

这一组改动已回灌主仓，不再重复评估：

- [internal/service/platformevents/builder.go](/home/long/project/ai-customer-service/internal/service/platformevents/builder.go:34)
  - 事件时间从毫秒级顺延改为纳秒级顺延
  - `NextAttemptAt` 对齐到事件自身时间
- [internal/store/postgres/platform_event_store.go](/home/long/project/ai-customer-service/internal/store/postgres/platform_event_store.go:81)
  - `ListDue` 排序从 `next_attempt_at, created_at` 强化为
    `next_attempt_at, occurred_at, created_at, id`
- [internal/store/postgres/platform_event_store_test.go](/home/long/project/ai-customer-service/internal/store/postgres/platform_event_store_test.go:59)
  - 测试改为验证真实的顺序语义，而不是只比较插入次序

结论：这组改动有完整闭环，已经属于“已吸收差异”。

## 分类结果

## 逐项判定表

下表覆盖当前剩余差异的逐项处理结论，只使用两种状态：

- `保留主仓`：主仓内容继续作为唯一演进基线，不从快照回灌
- `仅归档`：快照内容只保留在快照目录中，供审计/回看，不进入主仓

| 路径 | 判定 | 备注 |
|------|------|------|
| `.git/` | `保留主仓` | 主仓独立 Git 仓库元数据 |
| `.gitea/` | `保留主仓` | 主仓仓库外壳配置 |
| `.github/` | `保留主仓` | 主仓 CI/模板配置 |
| `.tmp/` | `仅归档` | 快照运行期临时产物 |
| `CONTRIBUTING.md` | `保留主仓` | 主仓独有仓库文档 |
| `README.md` | `保留主仓` | 主仓独有仓库说明 |
| `docs/CODE_REVIEW_REPORT.md` | `保留主仓` | 已改为新路径口径 |
| `docs/MONITORING_ALERTING.md` | `保留主仓` | 已改为新路径口径 |
| `docs/PREPROD_VERIFICATION_RECORD.md` | `保留主仓` | 已改为新路径口径 |
| `docs/REVIEW_REPORT_2026-05-04.md` | `保留主仓` | 已改为新路径口径 |
| `docs/ROLLBACK_DRILL_RECORD.md` | `保留主仓` | 已改为新路径口径 |
| `docs/RUNBOOK.md` | `保留主仓` | 已改为新路径口径 |
| `docs/SHARED_PREPROD_ACCESS_HANDOFF_CHECKLIST.md` | `保留主仓` | 已改为新路径口径 |
| `docs/SNAPSHOT_DIFF_CHECKLIST_2026-05-08.md` | `保留主仓` | 主仓新增的差异收敛文档 |
| `docs/SUB2API_MINIMAL_WEBHOOK_MAPPING.md` | `保留主仓` | 已改为新路径口径 |
| `internal/domain/audit/audit.go` | `保留主仓` | 快照为更早版本，主要是格式/旧内容 |
| `internal/domain/audit/audit_test.go` | `保留主仓` | 快照未提供更强断言 |
| `internal/domain/error/cserrors/codes_test.go` | `保留主仓` | 主要是格式对齐差异 |
| `internal/domain/intent/intent.go` | `保留主仓` | 主要是常量对齐差异 |
| `internal/domain/session/session.go` | `保留主仓` | 主要是常量对齐差异 |
| `internal/domain/session/session_test.go` | `保留主仓` | 未发现新增行为覆盖 |
| `internal/domain/ticket/ticket.go` | `保留主仓` | 主要是 struct 对齐差异 |
| `internal/domain/ticket/ticket_test.go` | `保留主仓` | 未发现新增行为覆盖 |
| `internal/domain/ticketstats/stats.go` | `保留主仓` | 主要是格式差异 |
| `internal/http/handlers/health_handler_test.go` | `保留主仓` | 仅测试格式差异 |
| `internal/http/handlers/webhook_handler_test.go` | `保留主仓` | 仅末尾换行差异 |
| `internal/http/handlers/webhook_security_test.go` | `保留主仓` | 仅空行/格式差异 |
| `internal/platform/httpx/limits_test.go` | `保留主仓` | 未发现更强断言 |
| `internal/service/dialog/service_test.go` | `保留主仓` | 主要是格式差异 |
| `internal/service/reply/service_test.go` | `保留主仓` | 主要是格式差异 |
| `internal/store/postgres/platform_event_store_test.go` | `保留主仓` | 顺序语义部分已吸收，其余不再单独回灌 |
| `prd/GRAY_RELEASE_ROLLBACK_RUNBOOK.md` | `保留主仓` | 已改为新路径口径 |
| `test/QA_CHECKLIST.md` | `保留主仓` | 已改为新路径口径 |
| `test/e2e/sub2api_callback_flow_test.go` | `保留主仓` | 快照版放宽断言，不回灌 |
| `test/integration/dialog_service_test.go` | `保留主仓` | 主要是格式差异 |
| `test/integration/ticket_stats_handler_test.go` | `保留主仓` | 主要是格式差异 |

附加说明：

- 快照目录本身 `ai-customer-service-lijiaoqiao-snapshot-2026-05-08/` 的整体状态是 `仅归档`
- 已并入主仓的两份快照独有文档不再列为“剩余差异”：
  - [REMEDIATION_TASK_BOARD_2026-05-06.md](/home/long/project/ai-customer-service/docs/REMEDIATION_TASK_BOARD_2026-05-06.md:1)
  - [REVIEW_REPORT_2026-05-06.md](/home/long/project/ai-customer-service/docs/REVIEW_REPORT_2026-05-06.md:1)

### 1. 旧版本 / 不合并

这些差异要么明显更旧，要么只是格式变化，要么会削弱现有严格约束，不建议继续回灌。

#### 纯格式或对齐差异

- [internal/domain/intent/intent.go](/home/long/project/ai-customer-service/internal/domain/intent/intent.go:1)
- [internal/domain/session/session.go](/home/long/project/ai-customer-service/internal/domain/session/session.go:1)
- [internal/domain/ticket/ticket.go](/home/long/project/ai-customer-service/internal/domain/ticket/ticket.go:1)
- [internal/domain/audit/audit.go](/home/long/project/ai-customer-service/internal/domain/audit/audit.go:1)
- [test/integration/ticket_stats_handler_test.go](/home/long/project/ai-customer-service/test/integration/ticket_stats_handler_test.go:1)
- [internal/domain/error/cserrors/codes_test.go](/home/long/project/ai-customer-service/internal/domain/error/cserrors/codes_test.go:1)
- [internal/http/handlers/webhook_handler_test.go](/home/long/project/ai-customer-service/internal/http/handlers/webhook_handler_test.go:1)
- [internal/http/handlers/webhook_security_test.go](/home/long/project/ai-customer-service/internal/http/handlers/webhook_security_test.go:1)
- [internal/http/handlers/health_handler_test.go](/home/long/project/ai-customer-service/internal/http/handlers/health_handler_test.go:1)
- [internal/platform/httpx/limits_test.go](/home/long/project/ai-customer-service/internal/platform/httpx/limits_test.go:1)
- [internal/service/dialog/service_test.go](/home/long/project/ai-customer-service/internal/service/dialog/service_test.go:1)
- [internal/service/reply/service_test.go](/home/long/project/ai-customer-service/internal/service/reply/service_test.go:1)
- [internal/domain/audit/audit_test.go](/home/long/project/ai-customer-service/internal/domain/audit/audit_test.go:1)
- [internal/domain/session/session_test.go](/home/long/project/ai-customer-service/internal/domain/session/session_test.go:1)
- [internal/domain/ticket/ticket_test.go](/home/long/project/ai-customer-service/internal/domain/ticket/ticket_test.go:1)
- [internal/domain/ticketstats/stats.go](/home/long/project/ai-customer-service/internal/domain/ticketstats/stats.go:1)
- [test/integration/dialog_service_test.go](/home/long/project/ai-customer-service/test/integration/dialog_service_test.go:1)

判断依据：

- diff 主要表现为字段对齐、空行、表格对齐、末尾换行等
- 未发现新增业务分支、校验逻辑或更严格的断言
- 快照时间普遍更早，不构成“新逻辑来源”

#### 不应回灌的测试放宽

- [test/e2e/sub2api_callback_flow_test.go](/home/long/project/ai-customer-service/test/e2e/sub2api_callback_flow_test.go:1)

不回灌原因：

- 快照版删除了 `resetE2EPlatformDB`
- 快照版去掉了更严格的顺序断言，改成“事件集合存在即可”
- 快照版把 dead-letter 断言从精确数量收窄成 `> 0`

这会降低主仓对“顺序稳定”和“事件数量精确性”的要求，不适合直接合并。

#### 仓库外壳与临时文件

- `.tmp/`
- `.gitea/`
- `.github/`
- `README.md`
- `CONTRIBUTING.md`

处理建议：

- `.tmp/` 明显属于临时产物，不合并
- `.gitea/.github/README/CONTRIBUTING` 属于仓库外壳差异，和本轮业务逻辑 merge 无关，单独处理

### 2. 仅文档口径差异

这些文件主要是路径从旧目录切到新目录、审查范围说明、运行记录引用变化。它们不涉及业务逻辑。

- [docs/CODE_REVIEW_REPORT.md](/home/long/project/ai-customer-service/docs/CODE_REVIEW_REPORT.md:1)
- [docs/MONITORING_ALERTING.md](/home/long/project/ai-customer-service/docs/MONITORING_ALERTING.md:1)
- [docs/PREPROD_VERIFICATION_RECORD.md](/home/long/project/ai-customer-service/docs/PREPROD_VERIFICATION_RECORD.md:1)
- [docs/REVIEW_REPORT_2026-05-04.md](/home/long/project/ai-customer-service/docs/REVIEW_REPORT_2026-05-04.md:1)
- [docs/ROLLBACK_DRILL_RECORD.md](/home/long/project/ai-customer-service/docs/ROLLBACK_DRILL_RECORD.md:1)
- [docs/RUNBOOK.md](/home/long/project/ai-customer-service/docs/RUNBOOK.md:1)
- [docs/SHARED_PREPROD_ACCESS_HANDOFF_CHECKLIST.md](/home/long/project/ai-customer-service/docs/SHARED_PREPROD_ACCESS_HANDOFF_CHECKLIST.md:1)
- [docs/SUB2API_MINIMAL_WEBHOOK_MAPPING.md](/home/long/project/ai-customer-service/docs/SUB2API_MINIMAL_WEBHOOK_MAPPING.md:1)
- [prd/GRAY_RELEASE_ROLLBACK_RUNBOOK.md](/home/long/project/ai-customer-service/prd/GRAY_RELEASE_ROLLBACK_RUNBOOK.md:1)
- [test/QA_CHECKLIST.md](/home/long/project/ai-customer-service/test/QA_CHECKLIST.md:1)

说明：

- 这些文件里旧路径已经在主仓改到新位置
- 快照中的文档差异本质上不再构成 merge 任务
- 两份快照独有文档已另行并入主仓：
  - [REMEDIATION_TASK_BOARD_2026-05-06.md](/home/long/project/ai-customer-service/docs/REMEDIATION_TASK_BOARD_2026-05-06.md:1)
  - [REVIEW_REPORT_2026-05-06.md](/home/long/project/ai-customer-service/docs/REVIEW_REPORT_2026-05-06.md:1)

### 3. 值得继续 cherry-pick 的少量代码改动

本轮筛查后，剩余差异里没有发现第二组像“平台事件顺序稳定性”那样成体系、且明显优于主仓现状的代码改动。

当前结论：

- **已确认并合并的唯一高价值代码组**：平台事件顺序稳定性
- **剩余代码差异**：暂时归为旧版本/格式差异/测试放宽，不建议继续自动 cherry-pick

## 建议的后续动作

### 立即可做

1. 保留快照目录，不删除：
   `/home/long/project/ai-customer-service-lijiaoqiao-snapshot-2026-05-08`
2. 把本清单作为后续 merge 的唯一入口，避免重新做全量 diff

### 只有在出现明确需求时再做

1. 如果要恢复 `sub2api adapter` 方向的某一块能力，再按文件逐个重看快照中的：
   - `internal/store/postgres/platform_event_store_test.go`
   - `test/e2e/sub2api_callback_flow_test.go`
   - `internal/service/platformevents/builder.go`
2. 如果要统一仓库外壳，再单独比较：
   - `.gitea/`
   - `.github/`
   - `README.md`
   - `CONTRIBUTING.md`

## 当前结论

快照已经完成了它该做的事：

- 作为迁移前的完整保底副本
- 提供了一组已成功吸收的高价值顺序修复
- 其余差异不值得继续大范围回灌

因此，后续策略应当是：

- **主仓继续前进**
- **快照只保留作审计和按需检索**
- **不再做整包式合并**
