diff --git a/.ua/backlog.json b/.ua/backlog.json index 0f97523..caad8e3 100644 --- a/.ua/backlog.json +++ b/.ua/backlog.json @@ -3518,6 +3518,15 @@ "acceptance": "① ua iter done 先取当前分支,不是 qa/probe 就退出码 2 并说明后果;② 保留 --force 给人工绕过;③ ITERATION.md 留痕步骤写明这条护栏;④ 负向自检:在 qa/stable 上执行即被拒、在 probe 上照常通过;⑤ npm run check 全绿。", "status": "done", "notes": "" + }, + { + "id": "g348", + "domain": "tune", + "title": "label 与控件真关联:点「用户名」不聚焦,读屏也报不出字段名", + "motivation": "formItem 把 label 与控件放在同一个 div 里,但 label 既没有 for、也没有任何 aria 关联,两者在无障碍树上是陌生人:鼠标点标签不会聚焦输入框(表单最常见的肌肉记忆失效),读屏念到输入框只说「编辑框」,说不清是用户名还是邮箱。自绘控件(下拉 / 单选组)连原生 labelable 元素都没有,更需要 aria-labelledby 兜住。", + "acceptance": "① 恰好一个原生控件时给控件补派生 id 并把 label 的 for 指过去(组件自带 id 不覆盖);② 无单一原生控件(自绘下拉 / 单选组)改在容器或首个可聚焦元素上写 aria-labelledby 指向 label id;③ label 自带 id 供关联;④ ua verify 新增 checkFormLabel 三条断言;⑤ demo 文案点出关联效果;⑥ npm run check 全绿。", + "status": "done", + "notes": "" } ] } diff --git a/.ua/iterations.log b/.ua/iterations.log index 52a9aec..a1947f0 100644 --- a/.ua/iterations.log +++ b/.ua/iterations.log @@ -392,3 +392,4 @@ {"ts":"2026-10-27T02:28:56+08:00","id":"g345","result":"done","commit":"911ff29","summary":"提交按钮接 signal loading(busy true/false),删掉手写 submitBtn.disabled 只留 loading 一条路,verify 补 checkFormBusy 三条断言并刷新成功文案"} {"ts":"2026-10-27T02:30:18+08:00","id":"g346","result":"done","commit":"1f292e1","summary":"ITERATION.md 新增 form 五条抽查(边框/焦点环/过渡/暗色/阴影),verify 的 REQUIRED 加 form 并把段数下限抬到 57 条,AGENTS 文案同步十九段"} {"ts":"2026-10-27T02:31:56+08:00","id":"g347","result":"done","commit":"9172287","summary":"ua iter done 先取当前分支,非 qa/probe 直接退出码 2 并说明后果(--force 可绕过),ITERATION.md 留痕步骤写明护栏;负向自检在 stable 上被拒"} +{"ts":"2026-10-27T02:33:03+08:00","id":"g348","result":"done","commit":"3a46b24","summary":"只有一个原生控件时补派生 id 并让 label.for 指过去,自绘下拉与单选组改在容器/首个可聚焦元素写 aria-labelledby 指向 label id,verify 补 checkFormLabel 三条断言"}