Merge entry overflow rules into the existing 480px breakpoint, restore picker focus without scrolling, and sync composer and entry contracts without changing page logic. Add AST generation-state guard and both picker close-path regressions. Validation: targeted 33/33; Chrome isolated components 145 checks; tsc and lint zero errors. Node22 full suite 3706 tests, no lost names or new failures; three target failures fixed, 88 baseline environment/contract failures unchanged. Windows build remains blocked by symlink EPERM. Changed-file privacy check: 11 files, no findings, not a full-repository pass. BUG-1011 remains separate. Co-Authored-By: Claude Code <noreply@anthropic.com>
5.5 KiB
PROGRESS-staging-gate-red-20260923
基线与授权
- 用户要求执行已推到 staging 的修复单;范围为 H1~H5,包含推送后读取 Gitea 门禁,不包含 BUG-1011 修复、workflow、DNS 或 main。
- fetch 后实际基线
93cd01dbf9631557d747ea04966c963e3a1fc2dc;独立工作树.worktrees/staging-gate-red-20260923,分支codex/staging-gate-red-20260923。 - 开工核对最大 Bug 编号为 BUG-1011,本单使用预留的 BUG-1012~1014。
- 基线全量测试在既有干净
a12f2c0d工作树运行:已核对到本轮基线的差异仅为五个文档文件,没有产品或测试代码差异。Node 22.23.2。新树独立复制同一锁文件依赖,不安装或升级依赖,不使用链接依赖。 - 不读受保护 pending packets,不运行跨库 quick/隐私扫描,不清理其他会话 Docker 网络,不借用登录账号。此次是纯前端与测试修复,沿用已读预检台账及本轮 fetch/远端验证,不把未运行的综合预检写成通过。
修复前真实门禁证据
使用用户已配置并授权的 Gitea token,仅在请求头内使用,不输出或落盘。实际 API:a12f2c0d 对应 run 2856(run_number 1451)、validate job 6345,不是任务书所写 run 6294。publish job 6346 为 skipped。
| 项 | Linux 门禁实测 |
|---|---|
| Node 测试 | 3,760 tests / 3,756 pass / 4 fail |
| 失败 1 | generating does not disable the textarea; Enter queues instead of dropping(H3) |
| 失败 2 | the guard covers every component that renders inside the panel today(H2) |
| 失败 3 | personal report sections enforce owner-read RLS and service-owned durable transitions(BUG-1011,另单) |
| 失败 4 | CSS width breakpoints stay on the published allowlist(H1) |
B 类工具相关测试不能依据诊断机推断:已实际读取该 job 日志,其余测试均通过,包括 health deployment、工作流、身份集成、管理数据库和其他数据库测试;仅上述四条失败。修复后的新 run 须另验,旧 run 不能充当本轮成功证据。
实现与断言三栏
H1~H3 已定稿。page.tsx 业务、断点白名单、scroll guard 豁免、postgres-fixture 和 workflow 均未修改。
| 原值 | 新值 | 原因 |
|---|---|---|
| `inputDisabled={sessionMessagesLoading | rectificationSurfaceOpen | |
picker 焦点合同匹配 triggerRef.current?.focus() |
匹配 focus({ preventScroll: true }) |
仍回到同一按钮,只禁止浏览器连带滚动 |
| starter-entry-soften 合同要求防溢出规则在375px媒体块 | 同一规则要求在480px媒体块 | H1明确合并断点,首次全量发现遗漏的相关源码合同;不删测试、不改按钮/悬停/3px焦点等其他断言 |
新增两个测试名称:picker 两条关闭路径的焦点恢复;所有 ChatComposer inputDisabled 表达式不含 isLoading/cancellationPending。后者使用 TypeScript AST 读取完整 JSX 表达式,不受变量顺序、换行或嵌套花括号影响。原测试名和其他断言保留。
执行代理隔离变异:正常表达式通过;isLoading/cancellationPending 前缀及换行、嵌套对象后变量等五种变异均被新断言拒绝。没有改共享 page.tsx,其 SHA256 前后不变。
本轮验证
| 检查 | 状态 |
|---|---|
| 同机全量基线 | Node22:3,704 tests / 3,613 pass / 91 fail;Windows 环境,不冒充 Linux 门禁 |
| H1~H3 定向 / 变异 | 主会话最终独立33/33通过(含Home增长、首屏与starter-entry-soften合同);执行代理最终五文件26/26,五种隔离变异均变红 |
| 五宽度真实组件 Chrome / 焦点 | Chrome153 共145项通过、0运行异常;360/375/390/414/480,两种入口模式共10场景无溢出;390/414/480共6对基线几何与整页PNG字节完全相同。Escape/换人/重选/外点四条路径均返回触发按钮,对话滚动420→420,panel/document/window均0→0。仅隔离组件,不是登录E2E |
| TypeScript / lint / build | tsc0错,lint0error/119既有warning;webpack与构建内tsc通过,页面数据阶段因 Windows SKILL.md symlink EPERM 退出1,Static/gzip未完成,不能记构建通过 |
| 修复版首次全量名称对比 | 3,706 tests / 3,617 pass / 89 fail;名称消失0、新增2均通过。原三项转绿,88项旧失败完整诊断归一后逐项一致;新增1失败为 starter-entry-soften 仍要求375px,属于H1漏同步合同,待补修复验 |
| 修复版最终全量名称对比 | 3,706 tests / 3,618 pass / 88 fail;相对基线名称消失0、增加2均通过,原三项转绿、新失败0,88项完整失败诊断归一后逐项一致。相对首次候选仅starter-entry-soften转绿,其余不变;cancelled/skipped/todo均0 |
| 提交 / staging / 新 Gitea run | 本轮代码与记录将按修复单授权一并提交并快进推送,随后记录新run真实结果,不预写绿灯 |
本轮失败、环境缺口和部署状态将按实际证据更新,不预写门禁全绿。
隐私检查限定本轮11个变更文件,调用既有仓库 marker 规则,0命中;未加载可选本地规则,没有读取保护目录,也不是全库隐私门通过。完整门以 Gitea 新 run 为准。
浏览器证据位于忽略目录 scratch/browser-h1-h2-20260923-acceptance/,含可复跑 verify.mjs、browser-evidence.json、24张截图;不提交浏览器 profile 或临时资产。