Imported from mitnick11/BidStream (
AGENTS.md). Install upstream withnpx skills add mitnick11/BidStream. Copyright stays with the author.
BidStream 开发约束
本文件适用于仓库根目录及其全部子目录。所有参与者和自动化代理都必须遵守。
轮次与范围
- 每一轮只完成该轮明确指定的任务,不顺手实现后续阶段。
- 开始工作前必须依次阅读
docs/00_CODEX_HANDOFF.md、docs/project_status.md、docs/architecture.md、docs/domain_rules.md、docs/protocol.md、docs/database.md和docs/decision_log.md。 - 不允许擅自修改已经冻结的状态机、并发模型、事务边界、顺序语义、幂等语义、背压原则或 AI 边界。
- 如确需修改冻结设计,必须先在
docs/decision_log.md新增提案,写清动机、备选方案、影响、迁移与回滚方式;提案获得项目负责人确认后才能修改实现或其他规范文档。 - 每轮结束必须更新
docs/project_status.md,并保持docs/00_CODEX_HANDOFF.md与实际状态一致。
正确性红线
- 不允许删除、跳过、放宽或改写失败测试来掩盖缺陷。
- 不允许用
sleep、轮询延时或扩大超时来“解决”并发正确性问题;测试必须使用屏障、条件变量、latch、promise/future、可控时钟或可注入执行器建立确定性同步。 - 不允许硬编码中标人、成交价、事件顺序、测试夹具 ID 等核心业务结果。
- 金额只使用
int64_t分值,禁止业务路径使用浮点金额。 - 服务端时间是竞拍判定的唯一权威时间,禁止信任客户端时间决定是否接受出价或结算。
- 数据库事务成功前不得更新正式内存状态、确认成功或广播成功事件。
- AI 输出不得回写或影响出价、当前价、截止时间、结算状态或成交结果。
并发与 I/O
- 不允许在 Asio I/O 线程、
AuctionRoomStrand 或SessionStrand 上执行阻塞 SQLite/LLM 调用。 - 同一
AuctionRoom同时最多有一条业务命令处于处理中;数据库完成回调返回房间 Strand 后才能结束该命令并启动下一条。 - 禁止使用全局业务锁串行化所有房间。注册表级短临界区只能保护注册表本身,不能覆盖房间命令或数据库等待。
- 每个 WebSocket 连接必须使用独立顺序发送队列;同一连接严禁同时发起两个
async_write。 - 广播只能向会话队列投递,不能等待单个客户端完成写入;慢客户端必须由有界队列和明确的断开/重同步策略隔离。
完成标准
- 每轮完成后必须运行与改动相称的配置、编译和测试命令,并在
docs/project_status.md记录命令与结果。 - 新增业务规则必须有单元测试;新增持久化行为必须有事务/恢复测试;新增并发行为必须有确定性并发测试。
- 编译警告、测试失败、消毒器报告、数据迁移失败都必须如实记录,不得宣称已完成。
- 提交前核对代码、协议、数据库、测试和文档中的字段名与语义一致。