Skip to content

Complete and document the reliability fault-injection layer #65

Description

@ULookup

Target Version

3.0-dev。复核基于 origin/3.0-dev 提交 a75fc8721b99e5c0b4421d0c58b5618bbe71ff31(PR #57)。Reliability 已从保留概念变成 Redis 专项的可执行雏形,本 Issue 更新为补齐覆盖面、CI 可信度与文档治理。

Evidence

  • tests/Makefile:41-43 已提供 test-reliability,执行 go test -tags=reliability ./reliability/...
  • tests/reliability/redis_failover_test.go 已覆盖 Redis Cluster 停止/恢复、熔断快速失败、本地限流兜底以及 Push unacked 在 Redis 恢复后重投。
  • tests/pkg/chaos/redis.go 已提供 Redis Cluster stop/start/health 控制,但尚无 RabbitMQ、MySQL、服务进程或网络隔离控制器。
  • .github/workflows/ci.yml:162-190 已新增 Reliability job;PR feat(cache): harden Redis resilience and multilevel caching #57service-artifacts 因构建环境缺少 jsoncppConfig.cmake 失败,Reliability job 被跳过,没有形成已通过的合入证据。
  • 当前提交的所有全栈 jobs 都调用 ./scripts/wait_for_services.sh,但该文件不存在;即使 artifact build 恢复,Reliability 仍会在测试前中断。cold-start Compose/readiness 修复由 Make the clean-slate Compose stack and CI runtime gates executable #78 负责。
  • tests/Makefile 的 Reliability 目标尚未消费 TEST_RUN,不能按 Issue 契约精确选择并在零匹配时失败。
  • .agents/skills/chatnow-testing/references/framework.md:14.agents/skills/chatnow-orienting/references/technology-stack.md:61 仍声明“没有目录或 Make target”,与仓库可执行面冲突。
  • 本次复核中 Reliability tag 可编译,但动态 Reliability 未在当前提交的完整 Docker 栈中执行,因此不能宣称运行通过。

Problem or Goal

把现有 Redis 专项套件升级为仓库权威、可重复、可清理的分布式 Reliability 层,并确保 CI 真正运行。它应覆盖消息顺序、不重不漏、Outbox、ACK 与缓存收敛所依赖的主要故障域。

Scope

  • 保留并稳定 PR feat(cache): harden Redis resilience and multilevel caching #57 的 Redis 故障用例、纯 Go 测试入口和 Compose artifact 复用。
  • 增加 RabbitMQ、MySQL、服务进程与有界网络隔离控制器,统一 deadline、轮询、时间线和清理。
  • 支持 TEST_RUN=<regex> 精确选择;零测试匹配必须失败。
  • 首批补齐消息发布确认/重试/DLX、seq 恢复、Outbox、Push/ACK 与成员缓存 repair 用例。
  • Make the clean-slate Compose stack and CI runtime gates executable #78 提供可 cold-start 的完整栈和 readiness 之后,保证 Reliability job 实际执行并保留证据;本 Issue 不重复实现 Compose/DB/MinIO bootstrap。
  • 同步测试与 orienting Skills,消除“保留层”陈述。
  • 增加 CI contract,确保 Reliability job 引用的脚本/targets 存在,并且 job 失败不会被 skip、continue-on-error 或无匹配测试掩盖。

Non-goals

  • 不在本 Issue 中修复故障注入暴露出的全部生产缺陷。
  • 不以不可复现的随机 chaos 作为唯一证据。
  • 不要求每次本地提交运行完整套件。
  • 不把固定 sleep 或容器健康等同于业务收敛。
  • 不重复 Make the clean-slate Compose stack and CI runtime gates executable #78 的完整 Compose、MinIO、数据库 bootstrap 和通用 readiness 实现。

Acceptance Criteria

  • make -C tests test-reliability 是真实存在且可发现测试的命令。
  • Redis Cluster 停止/恢复控制器和至少一个业务收敛用例已存在。
  • TEST_RUN=<regex> 可精确选择用例,零匹配失败。
  • 支持 RabbitMQ、Redis、MySQL 和服务进程四类故障,并可靠恢复环境。
  • 用例使用有界 deadline 轮询业务状态,失败输出包含注入点、阶段和未收敛对象。
  • Make the clean-slate Compose stack and CI runtime gates executable #78 的 cold-start/readiness 门禁通过后,Reliability job 在当前提交上实际执行,失败不会被跳过或重试掩盖。
  • CI contract 能检测不存在的 helper/target、零测试匹配、continue-on-error 和无条件 skip。
  • 资源、容器、网络规则和测试数据具有唯一且幂等的清理责任。
  • Framework、technology stack、repository map 和 case catalog 与可执行面一致。

Test-first Plan

先在 tests/pkg/agentpolicy/tests/pkg/contracts 增加 TestReliabilityLayerContract,运行:

cd tests && go test ./pkg/agentpolicy ./pkg/contracts -run TestReliabilityLayerContract -v -count=1

预期 RED 是 Skills 仍声明 Reliability 不可执行、TEST_RUN 未生效、CI 引用不存在的 readiness helper 或非 Redis 控制器缺失。最小 GREEN 先修正文档契约、选择器和 job contract;#78 负责通用 cold-start stack。随后逐类加入可证明业务收敛的故障用例,最后运行完整 Reliability 与现有 BVT/Functional 回归。

Risk and Security

故障注入只允许隔离测试环境,必须校验 Docker endpoint、目标容器和网络 allowlist;拒绝生产/共享地址。日志不得输出 JWT、口令、消息正文或 secret,失败清理必须可重复。与 #78 的职责边界必须保持清晰,避免 Reliability 测试自行复制不一致的启动/等待脚本。

Architecture Impact

Yes。扩展独立测试层、故障控制边界和 CI gate,不改变生产服务所有权。

Core-flow Impact

No。该 Issue 建立验证能力;生产核心流程只被测试观测和故障注入,不改变业务语义。

Required Skill Updates

  • 更新 .agents/skills/chatnow-testing/SKILL.mdreferences/framework.md,把 Reliability 登记为可执行层。
  • 更新 .agents/skills/chatnow-testing/references/case-catalog.md,登记现有 Redis 与新增 RL-* 用例。
  • 更新 .agents/skills/chatnow-orienting/references/technology-stack.mdrepository-map.md,登记目录、命令、CI 和故障控制器。

Metadata

Metadata

Assignees

No one assigned

    Labels

    Severity/S1area/infra跨系统基础设施enhancementNew feature or requesttech-debt设计已规划但代码未对齐的实现差距

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions