# 23: 前端执行票 —— 地图快照分页 token 与 pointStatus 八桶契约对齐 ## 进度 开始处理:已完整读取正文、评论、标签与依赖。当前 ready-for-agent,未认领、无阻塞,无 needs-triage 前置闸门。先核对分页 token 与真实后端八桶支持现状,区分前端缺陷和后端契约缺口。 Type: task Status: claimed Assignee: codex Label: ready-for-agent Category: frontend-execution ## 来源 票 18 真实联调与浏览器取证(2026-10-10)。 ## 现象 1. **分页快照 token 丢失**:浏览器实测出现 `GET /map-snapshot?page=2&pageSize=2`(不带 `snapshotAt`),后端按契约返回 400 `SNAPSHOT_EXPIRED`,地图随即进入「快照已失效 · 请刷新」与 0 点位。首屏 `GET /map-snapshot?page=1&pageSize=2` 是正常签发 `snapshotAt` 的。 2. **状态筛选契约不一致**:真实 `map-snapshot` 响应**没有** `pointStatusDistribution`,`mapFilter.pointStatus` 也不回显;传 `pointStatus=ALARM` 与不传返回完全相同的 `total=13`(入参被忽略)。`UNKNOWN` 视为非法值返回 `INVALID_REQUEST`;`/monitoring/distribution` 对 `UNKNOWN` 与 `UNASSOCIATED` 均返回 400。非法值 `BOGUS` 在 `map-snapshot` 上返回 200 而不是 400(与前端白名单预期不一致)。 3. 界面表现(真人走查第 1 项):状态栏八个计数全部显示 `—`,分布面板提示「全局状态分布未取到(后端尚未发布八桶全局计数)」。 ## 范围 1. 前端分页:第 2 页起必须携带首屏锁定的 `snapshotAt`;快照失效按既有恢复纪律处理,不把整张图清空成 0 点位。 2. 与后端对齐八桶状态契约:六态 + `UNKNOWN` + `UNASSOCIATED`,多值逗号分隔、OR;`map-snapshot` 与 `/monitoring/distribution` 两端行为一致;非法值两侧一致拒绝。 3. 状态栏与分布面板在未取到全局计数时如实降级,取到后共用同一份数据(同源,决策 02 已冻结)。 ## 验收 浏览器实测:地图自动分批加载到完成且不出现快照失效;状态栏与分布面板显示真实八桶计数;多选状态筛选后地图点数随之变化;后端返回 `INVALID_REQUEST` 时前端不把脏值发出去。探针 `map-eight-status-buckets`、`status-*`、`invalid-*` 相关检查项全部通过。 ## 关联 发现于票 18;承接决策票 02 与规格 07。 ## 进度 Status: claimed Assignee: codex Type: task Blocked by: Labels: ready-for-agent, frontend-execution, wayfinder:task ## Comments ## Answer