MINESWEEPER 系统设计
原型文档 · 非正式发布返回游戏 ↗
工程契约设计 v0.8.1

本版规则验收矩阵 v0.8.1#

2026-09-13 · 对应规则1.5。本版替代旧D/L/P编号矩阵;删除对战验收,不再声称覆盖旧87项。下列 70项产品/协议场景尚未运行,用于实现后的端到端测试。现有Python检查参考DDL与Redis原语,不代表地图、同步算法、HTTP/WSS或真人体验已验证。

所有预期是发布判定:重复入账、错账号归属、未验证入榜、跨日补榜、越权看今天答案、个人录像出现在云请求中均阻断发布。性能、时间参数与玩家提示需根据实测调整,不能用测试环境小样本宣称反作弊绝对有效。

1. 成长与同步(X01–X10)#

ID输入/故障预期
X01云1000,A离线新局+50、B离线新局+200,各顺序同步最终1250,两条独立奖励,不合并两份总额
X02云1500,A+50、B+200最终1750,第3档;当前局不加血,下局2格
X03同op重传;换op但同run同终局原回执/业务重复,无额外经验
X04A/B同run复制续局得到不同终局首个已提交合法终局结算一次,冲突保留两份本地存档
X05同日同档两设备均首通一份首通权益,不双倍
X06每日已领失败6,再首通144,再重试失败/首通仅补138,之后0
X07push成功响应丢失,再pull新summary,再重发不在新summary上重复加delta;本地预测按已覆盖run移除
X08同步中账号切换、会话到期、队列积压队列绑定原档案,离线可玩,不上传到新账号
X09旧两份聚合XP含重叠每日奖励,无完整来源按预览保守max/日权益去重,不重复叠加已覆盖事件
X10bootstrap过期/日志清理/备份恢复轮换epoch重新基线,保留outbox,取业务回执再重算预测

2. 服务器每日(D01–D10)#

ID输入/故障预期
D01多设备相同UTC日期/档次申请同puzzle/map/rules,客户端不重新出题
D02生成图雷数错/数字错/开口不符/无猜校验不通过不发布,重试预算耗尽则不可用,不静默降标准
D038/18/28日与其他日期,各三档初级始终无猜,中高级按日期策略验图
D04把本机日期改为未来/过去服务器UTC日期不变,未来题无法下载/领奖
D05获取catalog、快照、失败状态、导出、日志不泄露今天私有seed/完整雷阵
D06服务器离线、题未生成、网断后离线点击今天每日不可本地替代;普通单人继续;离线点击不补入正式局
D07历史题下载后离线首次完成/重复完成私人补差领奖,永不上历史榜
D08有2/3生命,踩雷后通关进度/解锁有效;该次无伤资格永远失效
D09直接请求中/高档;伪造本地通关资格服务端验证前置,不能靠客户端状态跳过
D10两设备正式开局/旧epoch继续输入/接管同账号一个正式占用;显式接管不重置时间,旧输入拒绝

3. 成绩预选与压缩录像(U01–U12)#

ID输入/故障预期
U01综合三段不齐、单项缺对应段、有伤/日期或owner不匹配不授予上传,不拿缺段0秒比较
U02完整成绩排第11,或合法完整成绩且榜未满10前者不上传,后者发候选授权,均不直接入榜
U03客户端伪造total=0、复用别人更快attempt从本人服务器终局重算/拒绝,不操纵阈值
U04大量候选不上传不占Top10,一个账号同日期每榜仅一个pending组合,别人可继续提交
U05无授权/跨账号/不在组合的attempt上传拒绝,私人blobs不能代替授权
U06压缩1MiB/展开8MiB边界及超1字节、20,000事件及超1条、伪造长度、拼接gzip、慢连接、CPU耗尽合法边界继续验证,超限流式中止且无部分录像入Redis/DB;429/413/422区分,不撤已确认经验
U07文件hash正确但动作被改、少事件、改时间/地图版本重演或服务器chain/root不匹配,拒绝入榜
U08只改善一档,另两档已有合法官方段复用两段,只上传缺失段,最终三段完全对应新总分
U09双hash、换设备/id重试、同段并发、同原文不同gzip、伪造hash、元数据在而正文丢失首次服务端重算;有效文件上传前复用,进行中复用原任务并拒并发正文;清单冲突409、实际hash不符422;缺文件仅授权日内补传,不跨账号去重或续TTL
U10预选第10,上传时别人更快发布再比较;可能outpaced,不能承诺名额
U11本地草稿满盘/录制断裂/接管缺前缀成长保留,明确无法提交完整回放,不伪造缺段
U12进程在验证后/发榜事务中崩溃DB只见旧完整或新完整generation;Redis成功而DB未提交的对象按TTL回收,DB提交后正文故障按R07处理

4. 截止与观看(W01–W12)#

ID输入/故障预期
W01所有步骤在截止前完成可以发布,按完整排序键比较
W02截止瞬间完成;截止前报分但之后才传完/验完全部不补榜;前者旧局只能普通结算
W03freeze定时器延迟、服务重启、旧验证任务恢复时间护栏生效;旧日期立即只读,不等待worker才关入口
W04日切后请求刷新best/改分/递补/重开榜拒绝;同一最后generation永久保存排序
W05历史作弊复核、撤公开、删账号注记/匿名化/撤播放,原名次占位,不升第11名
W06未完成今天三档请求今天公榜录像只给元信息,不泄露棋盘/坐标/封面
W07未玩过历史题的游客观看历史Top10保留期内允许,无通关检查,不锁今天
W08用历史路由/改date/旧watch读取今天或未来由资源实际日期/映射判断,越权拒绝
W09仅列表/prepare取消/未释放内容就加载失败不锁当日榜,不产生已观看事实
W10release后正常ACK;release后崩溃/不ACK前者锁原日期,后者uncertain阻止新名次,不靠超时洗锁
W11跨日时保留昨日观看会话/屏障切历史权限,不把昨日锁套在今天
W12到期/被移除/跨用户盗watch/退出账号停发内容并正确显示原因,不给完整文件永久直链

5. 本期移除范围#

直播大厅、占位、开播、连续场次、实时旁观和相关超时均移出本版,不继续执行旧L01–L10验收。A03同时检查直播与PVP没有公开入口/handler/专用表;公榜录像观看验收继续保留。

6. 范围、隐私与防作弊(A01–A06)#

ID输入/故障预期
A01私人snapshot/import/export藏replays/replayDraft/录制历史白名单过滤/拒绝,个人录像正文和元数据不落云
A02清本机录像/换设备登录/游客云合并不下载不存在的云录像;明确仅本机,不暗中上传
A03请求直播入口/实时旁观/场次,以及PVP房间/邀请/治疗/战绩/消息类型本版无入口、无handler、无专用表;延期不算验收遗漏
A04伪造新离线run、极快合法输入、同IP/无障碍玩家自报成长不宣称可信;风险信号供复核,不凭单一信号封号
A05改客户端总XP/时间/服务器已锚定的录像内容无直接XP接口;正式计时与hash重演检查不受客户端字段支配
A06删除账号后恢复旧备份外部删除清单重放,身份/录像不复活,历史榜不递补

7. 四榜扩展(B01–B10)#

ID输入/故障预期
B01只有初级有效无伤段,中高未打初级可入榜,综合incomplete;未解锁中级/高级仍不能跳关
B02三档都不在各自Top10,但总用时足够快综合独立预选,三段证据齐后可入榜,不被单项名次过滤
B03同一账号满足四榜每榜最多一行,可同时四榜;同rank跨榜不冲突,同榜不可重复
B04只改善中级且核验通过中级/综合各自重算,初级/高级数值不变,四榜同generation原子可见
B05中级单项证据齐,综合缺初级文件单项先发布,综合等待,不把等待候选当名次
B06初级段同时被单项/综合引用,掉出初级榜正文只存一份;固定public_until不变,即使之后无榜引用也由原TTL回收
B07各设备分别完成三档,部分已登记/已上传,部分未上线已验证段复用;登记清单可跨设备引用,缺清单返回SOURCE_MANIFEST_REQUIRED,缺正文等待原设备,截止未齐不补榜
B08四榜发布中事务失败/前端读到不同generation原子回滚保留旧四榜;前端固定代次刷新,不展示新单项与旧综合混合
B09日切四榜冻结后复核同一作弊段所有受影响榜加注记、撤该段播放;不递补,不能通过另一榜绕过撤回
B10单项入榜后请求当天其他难度录像、反复刷新四榜、容量核算入榜不代替三档观看资格,四榜仍共用日期锁/账号配额;经验不重复,公开最多40席/60段但总磁盘另计

8. Redis存储与故障(R01–R10)#

ID输入/故障预期
R01DB发榜已提交,缓存写入失败、miss或Redis不可达榜单按DB固定generation回源;不回滚名次、不重复奖励
R02旧代回填与新代发布竞争,历史缓存过期只写各自代次key,同一响应四榜不混代;历史回填不重新排名
R03上传gzip/播放块,或将录像base64藏入JSON、导入包、日志三张录像表只落key/hash/尺寸/期限等元数据;所有绕道正文拒绝,不进入SQLite
R04首次写正文时断连、同内容重试、不同内容复用keySET与绝对TTL原子生效;同内容幂等不滑动到期,不同内容拒绝;不出现无TTL正文
R05暂存授权到期、未公开候补日切、关闭过期通知自动不可读并由Redis回收;不运行录像清理job,不要求DB同步改expired
R06候选首次公开、跨榜复用、反复提升或日切后验证完成首次提升到原题日固定public_until;复用不续命,跨日不得补榜
R07Redis已写或提升但DB回滚;DB提交后Redis故障/正文丢失前者孤儿到原TTL回收;后者保留名次并显示暂不可用/缺失,不声称跨库原子、不自动递补
R08逻辑过期、Redis失联、健康实例缺正文、只有播放块miss分别返回410过期、503不可用、410缺失;仅body仍在才重建播放块,块不超原正文截止
R09noeviction内存满、AOF确认超时、响应丢失后重试新上传/发布不给成功;既有录像不因容量淘汰;确认超时按结果不确定幂等处理,榜单仍可回源
R10一天反复刷榜、跨榜共用、撤公开/删账号后恢复备份按曾提升TTL的全部不同正文核算容量;共用不复制/续期;DB撤权即时生效,已知key业务删除,恢复不复活权限

9. 现有检查记录#

2026-09-13:SQLite 3.40.1,python3 docs/account-system/verify_schema.py 50项SQLite约束检查通过,使用临时库;截止SQL测试使用确定性测试时钟。覆盖奖励唯一、上传归属、不可变终局/四榜、日切护栏、跨设备引用、移除直播/PVP,以及三张录像表无正文BLOB且Redis元数据有效。Redis 8.0.3,python3 docs/account-system/verify_redis.py 8项Redis原语检查通过;使用独立临时实例,覆盖二进制、原子TTL、幂等、固定公开截止、缺失/过期拒绝、WAITAOF本地确认与noeviction配置,结束后关闭并清理。

这些检查不是上面70项端到端测试的通过声明。待实现后需实际运行并发时序、地图独立验证、gzip解析/重演、UI首帧、UTC真实日切/时钟漂移、跨库故障、AOF故障恢复、队列负载与删除恢复。观察和解释分开记,所有失败必须对应具体字段、规则或提示修改。

10. 版本记录#

版本日期变化
0.8.12026-09-13收紧录像大小/事件上限;双hash上传前去重;补流式拒收、配额、慢连接及验证资源保护
0.8.02026-09-13Redis限每日榜单缓存与官方录像TTL存储;录像正文移出SQLite,不设录像到期清理job;补跨库故障与持久化边界
0.7.02026-09-13移除直播入口/协议/三张专用表;观看仅限每日公榜录像,保留四榜与私人同步;整理审阅范围
0.6.02026-09-13初中高与综合四榜独立;单项1段/综合3段,录像共享、统一冻结、跨端分段提交;48项DDL检查通过
0.5.02026-09-13重建60项现行验收:多端成长、服务器每日、条件证据、冻结/历史观看、直播与范围;移除PVP验收
0.4.02026-09-13旧多人规则1.1的87项映射及5项个人录像边界,已被本版替代