Agent Skills
› MimicHunterZ/PocketMind
› note-resource-catalog-reliability
note-resource-catalog-reliability
GitHub指导后端资源记录与上下文目录的一致性改造,涵盖Outbox投影、检索降级及事务约束。
Trigger Scenarios
resource_records与context_catalog一致性讨论
Outbox/Projector重试与幂等机制
SessionCommit长事务或transcript重复同步问题
相关回归测试执行
Install
npx skills add MimicHunterZ/PocketMind --skill note-resource-catalog-reliability -g -y
SKILL.md
Frontmatter
{
"name": "note-resource-catalog-reliability",
"metadata": {
"tags": [
"spring-boot",
"mybatis-plus",
"postgresql",
"outbox",
"projector",
"retrieval",
"consistency"
],
"updated": "2026-03-28",
"version": "1.0.0"
},
"description": "PocketMind 后端 notes->resource_records->context_catalog 一致性改造专项 Skill。当用户讨论 resource_records 真相层、context_catalog 索引层、Outbox\/Projector、检索 fallback、SessionCommit 长事务、transcript 重复同步或相关回归测试时必须触发。"
}
Note-Resource-Catalog 可靠性改造 Skill
1. 目标与边界
本技能用于指导 PocketMind 后端上下文链路的一致性实现,核心目标:
resource_records是唯一真相层(Source of Truth)。context_catalog是可重建索引层(Rebuildable Index)。- 主写链路不被 catalog 写失败阻塞。
- 异步投影可重试、可观测、可回放。
2. 触发条件
出现以下任一关键词或问题时必须触发本 Skill:
resource_records/context_catalog一致性。- Outbox + Projector 方案、重试机制、幂等。
- “数据在库但 AI 检索不到” 的延迟收敛问题。
- SessionCommit 长事务、事务内调用 LLM。
- SSE done 与 commit 双触发导致 transcript 重复同步。
- 相关测试:
ResourceCatalogProjectorTest、NoteResourceCatalogPipelineIT、RetrievalOrchestratorTest。
3. 当前实现基线(必须遵守)
3.1 分层职责
resource_records:业务真相层,承载可检索材料。resource_index_outbox:事件缓冲层,承接主写与索引投影。context_catalog:检索索引层,通过 projector 异步收敛。
3.2 主写链路约束
- 写资源时同时追加 outbox 事件(同事务)。
- 不允许在主写服务里直接强耦合 catalog 同步成功。
- 删除/更新操作码必须使用常量,不允许硬编码字符串。
3.3 检索链路约束
- 优先走 catalog 检索。
- catalog miss 时可降级到
resource_records关键字检索。 - fallback 必须可配置开关控制。
4. 关键代码锚点
4.1 一致性策略与配置
backend/pocketmind-server/src/main/java/com/doublez/pocketmindserver/resource/application/ResourceSyncConsistencyPolicy.javabackend/pocketmind-server/src/main/java/com/doublez/pocketmindserver/resource/application/ResourceCatalogRuntimeProperties.java
4.2 Outbox 与投影
backend/pocketmind-server/src/main/java/com/doublez/pocketmindserver/resource/domain/ResourceIndexOutboxConstants.javabackend/pocketmind-server/src/main/java/com/doublez/pocketmindserver/resource/domain/ResourceIndexOutboxRepository.javabackend/pocketmind-server/src/main/java/com/doublez/pocketmindserver/resource/application/ResourceCatalogProjector.javabackend/pocketmind-server/src/main/resources/schema-pg.sql
4.3 检索降级
backend/pocketmind-server/src/main/java/com/doublez/pocketmindserver/ai/application/retrieval/RetrievalOrchestrator.javabackend/pocketmind-server/src/main/java/com/doublez/pocketmindserver/ai/application/retrieval/ResourceRetrievalFallbackService.java
4.4 事务边界与去重触发
backend/pocketmind-server/src/main/java/com/doublez/pocketmindserver/context/application/SessionCommitServiceImpl.javabackend/pocketmind-server/src/main/java/com/doublez/pocketmindserver/context/application/SessionSummaryGenerator.javabackend/pocketmind-server/src/main/java/com/doublez/pocketmindserver/ai/application/stream/SseReplyService.java
4.5 可观测性与文档
backend/pocketmind-server/src/main/java/com/doublez/pocketmindserver/resource/application/ResourceCatalogMetrics.javabackend/pocketmind-server/src/main/resources/application-template.ymldocs/architecture/note-resource-catalog-consistency.md
5. 变更执行清单
涉及本链路改造时,按如下顺序执行:
- 先补测试,再改实现(TDD)。
- 验证主写路径是否仍依赖 catalog 同步成功。
- 验证 outbox 事件是否正确落库(
UPSERT/DELETE)。 - 验证 projector 对失败是否写回重试信息。
- 验证 retrieval fallback 是否受配置开关控制。
- 验证事务边界中无 LLM 调用。
- 跑回归测试集并记录结果。
6. 必跑测试
最小回归集:
cd backend
./mvnw -pl pocketmind-server -Dtest=ResourceSyncConsistencyPolicyTest,ResourceIndexOutboxRepositoryTest,ResourceCatalogProjectorTest,ResourceCatalogOutboxRetryTest,RetrievalOrchestratorTest,SessionCommitServiceTest,SseReplyServiceTest,NoteResourceCatalogPipelineIT test
可观测性新增后建议补跑:
cd backend
./mvnw -pl pocketmind-server -Dtest=ResourceCatalogRuntimePropertiesTest,ResourceCatalogMetricsTest test
7. 禁令
- 禁止把
context_catalog当真相层。 - 禁止在 Service 里硬编码 outbox 操作码(如
"UPSERT"、"DELETE")。 - 禁止恢复 transcript 双入口同步(SSE done + commit 同时触发)。
- 禁止在长事务内调用 LLM。
- 禁止跳过失败恢复与并发幂等测试。
8. 运维排障速查
- 检索 miss 但资源存在:先查 fallback 开关,再查 outbox backlog。
- 投影延迟高:看
pocketmind.resource.catalog.outbox.backlog与projector.latency。 - 重试堆积:看
projector.failed与 outboxlast_error。 - 会话摘要异常:确认
SessionSummaryGenerator是否事务外执行。
Version History
- c1dc382 Current 2026-08-20 13:18


