← 返回周目标完成情况

AIC-1754 首次走查修正验收报告

任务日期:2026-09-18。验收收口时间:2026-09-18(UTC)/2026-09-19(本机 Asia/Shanghai);日志保留各自原始时区。

当前结论:主要实现已完成,核心回归已有完整通过记录;按白晨“回归差不多就可以”的最新指令停止扩展验证,提交本报告。整卡尚不满足全部关闭条件。 本轮覆盖第一组 T01—T20,T11「收益与账户四项统计」按白晨明确裁决暂缓。逐项结果为:15 项行为自动验证通过;T01、T02、T13、T18 仍有现场复现或真实环境验收边界;T11 不计作漏做。逐行分层覆盖门禁仍不通过,因此 AIC-1754 保持 in_progress,不标 in_review 或 done,不宣称完整 make check 全绿。

交付位置:/Users/chen/.codex/worktrees/venture-os-aic-1754;分支:codex/aic-1754-first-review;起点:9eff381。所有改动留在该独立工作树,未提交、未合并、未推送、未部署。原工作区 /Users/chen/venture-os 的既有四份 wiki 改动保留。

一、范围及实际结果

认证只表示用户针对要求提交截图并登记资格。没有新增人工审核、有效期、撤销或旧资格迁移。官方认证可含多个学习链接;自定义认证只属于发布它的任务,同名也不能跨任务复用。新作品默认隐藏;交付完成、预付/尾款记录与作品公开互相独立。第二组积分合码/环境联调、第三组视觉润色未在本轮执行。

系统未上线、旧数据可清空的裁决用于简化新模型,不等于已清空真实业务环境。本轮自动清理仅针对有双重库名校验的 venture_os_e2e 专用测试库;真实 CS 探针只创建并删除自己的临时对象。

“自动验证通过”表示该项行为在下列测试边界内通过,不能替代整卡的工程门禁、真实 UC 验收或产品视觉确认。

编号 交付结果 实际证据与状态
T01 认证截图故障 图片缓存按文件与身份隔离;区分换取地址失败与图片加载失败;一次自动刷新及手动重试;切账号不沿用旧签名 部分验证。 跨账号旧签名缺陷先复现后修复;假 UC/CS 下认证页提交后、刷新后截图均可解码,随后可返回任务;失败恢复另有回归。真实 CS 两种 attachment 参数都能解码。0918 原现场故障没有原样本和真 UC 会话可复现,根因未确认,不认定原故障已关闭。
T02 首页尺度与溢出 放大首页阅读尺度,调整局部网格、组件文字和响应式 部分验证。 macOS Chromium 的 1440/820/390 视口、组件多尺寸布局和滚动检查通过;完整业务回归含 AC-107 的 160 种组件尺寸组合。Windows 原生 100% 显示未验,产品主观尺度评价待验。
T03 任务清单命名 “近期任务”统一改为“任务清单”,保留详情入口 自动验证通过。 组件标题、目录和实际入口回归。
T04 今日行动真实任务 读取本人全部有效承接,按截止时间排序,展示真实任务链接与计数,区分空态和错误 自动验证通过。 通过真实 HTTP 创建并承接 101 条任务,最早截止任务落在第二页;首页实际读取第二页,计数 101、排序和链接正确。没有把下月任务一律过滤,也未扩展 AI 推荐。
T05 缩放图标 图标向左旋转 90°,保留原尺寸操作 自动验证通过。 样式和既有组件拖动/缩放业务场景。
T06 移除通知 顶栏去掉通知按钮,其他未开放入口保持原范围 自动验证通过。 导航组件与浏览器角色/窄屏回归。
T07 后台入口 管理后台移入头像菜单、退出登录上方 自动验证通过。 管理员可进、普通用户无入口、服务端独立鉴权、退出行为均覆盖。
T08 能力/资源禁用 置灰、禁止点击和禁止光标 自动验证通过。 鼠标/键盘不可误入;任务与作品仍可用。
T09 头像一致 共用 IdentityAvatar;加载失败占位,换账号复位 自动验证通过。 身份订阅和头像失败/换账号测试;浏览器另外验证个人页不残留上一用户姓名、动态和账户页码。首页“我的记录”的猫图是既有工作台装饰资源,不属于 T09 的个人页头像;个人页和顶栏在假登录模式占位一致,真 UC 头像网络加载仍未实测。
T10 统一个人动态 承接与认证合并;全部/任务/认证;服务端全库搜索;稳定游标;无限滚动和可访问加载按钮 自动验证通过。 22 条认证跨页自然滚动、历史搜索、分类、时间并列、身份切换、无效游标 422 与错误恢复;记录不只在前 20 条内过滤。
T11 四项收益统计 按裁决暂缓,不新增“余额/已到账/待结算/实际支出”整组公式 暂缓。 保留既有内部积分及流水能力;不把未知外部支出写成已经核实的 0。
T12 流水分页与收益卡 积分流水可分页,桌面收益区停留、列表限高滚动,窄屏不遮挡动态 自动验证通过。 大于一页、切页、账号切换重置;独立 1440/820/390 浏览器样式与滚动检查。
T13 OpenQ 首页入口 改为配置 VITE_OPENQ_HOME_URL,仅允许无凭据 HTTPS;未配置显示待配置 外部待验。 不再使用旧课程区锚点;配置合法/非法分支有单元测试。真实 OpenQ 首页 URL 尚未取得,真实跳转及登录往返未验。
T14 后台流水查人 用户按姓名、UC 标识或 UUID 全库搜索;选定后接口按 user_id 过滤;切用户重置页码 自动验证通过。 真实 API 和浏览器筛选;核对所有结果属于所选用户,目标任务恰好预付 120、尾款 180,尾款来源准确。
T15 认证归用户管理 用户详情展示该用户认证、截图和角色操作;作品页独立 自动验证通过。 本人数据归属、角色操作、普通用户后台拒绝和错误恢复。
T16 新作品默认隐藏 创建作品为 hidden,后台手动发布/隐藏,不改变原交付与结算事务 自动验证通过。 提交后公开列表不出现;发布后出现,隐藏后撤回;预付/尾款和唯一作品约束保持。
T17 作品进入任务 前后台入口均带关联 task_id 进入任务完成态;新增公开/私有成果读取 自动验证通过。 匿名/作者/他人/管理员可见范围;隐藏作品禁止越权;未知作品三种读取入口均 404,视频跳转 302 且 no-store。
T18 自动视频封面 浏览器取帧,最长 8 秒、最长边 1280、生成图不超过 4 MiB;封面随幂等请求冻结;离开页面取消取帧;失败默认封面;横屏主体完整显示、背景虚化 部分验证。 原生正常 MP4 取帧/坏媒体降级提交、受控跨域来源与无 CORS 降级通过;取消与防止迟到写入已有单元验证;后加的慢媒体离开浏览器场景时序已修正但尚未复跑,不列入最终通过项;当前取帧实现+真实 CS 私有视频成功。实际 Story 用户外链的真 UC 完整交付未验;原生媒体能力和部分时序防御仍有分层缺口。
T19 官方认证管理 独立定义,可创建/编辑、多学习链接;发布任务选择官方认证 自动验证通过。 真实页面创建、编辑、删除/添加链接,503 保留草稿并重试;服务端拒绝编辑任务专属定义为官方认证。
T20 任务专属证明 发布时支持自定义要求,名称/说明贯穿发布、详情、截图与承接判断 自动验证通过。 仅自定义认证的任务也可完成截图登记→刷新→显式承接→预付及草稿;同名跨任务不能复用;两类要求均空发布 422;后台任务读接口总数、当前页 ID 序列不变,拒绝的任务标题未出现。

二、验证结果与环境边界

检查 实际结果 证据(工作树内)
API 全量单元 1029 passed;3559 行、608 分支,100% reports/aic-1754/unit-closure.log
Web 全量单元 1039 passed,112 文件;语句 2351、分支 2579、函数 863、行 2182,均 100% 同上
真实数据库集成 439 passed、7 deselected;真实 PostgreSQL testcontainers,ASGI 调用,外部 CS 为测试替身 reports/aic-1754/integration-closure.log
最近完整通过的浏览器回归 215 passed;真实 Chromium、实际前后端和专用 PostgreSQL,UC/CS 使用测试服务;此后产品逻辑未变 reports/aic-1754/e2e-tenth.log
后续追加场景的最后一次运行 213 passed、1 failed、2 did not run(共216);失败为新增慢媒体测试的导航时序断言。脚本已修正,类型检查及独立原生媒体探针通过,按用户指令未再复跑业务场景或整套 reports/aic-1754/e2e-twelfth.log
OpenAPI 与契约 188 passed;OpenAPI、Apifox 用例与代码一致 reports/aic-1754/contract-final.log
工具测试 177 passed;工具行/分支覆盖 100% reports/aic-1754/tools-final.log
Python 静态检查 Ruff/格式/mypy 通过;应用 mypy 222 源文件;20 条跨域依赖规则通过;tools 同样检查 reports/aic-1754/lint-api-final.log
Web 静态检查 ESLint、应用/构建/E2E TypeScript、knip 通过;knip 提示 CSS 扩展由既有配置排除 reports/aic-1754/lint-web-final.log
UC 默认模式压缩构建 构建成功,包含最终动态页 CSS;不代表已登录真 UC reports/aic-1754/build-web-closure.log
契约生成确定性 重新生成 OpenAPI/SDK/MSW 后逐文件 SHA-256 不变;Apifox 用例重生成成功 reports/aic-1754/generated-determinism.json
Spectral 接口文档校验 无 warning 或 error reports/aic-1754/spectral-final.log
阈值守卫 --check 通过;未修改阈值基线,未降低门禁 reports/aic-1754/threshold-guard.log
验收矩阵与用户隔离 矩阵仍有3项缺口:1失败、2未运行;已按最后一轮重生成;30个feature文件的用户隔离检查通过 docs/standards/验收矩阵.md、reports/aic-1754/matrix-final.log
最近完整回归后的逐行分层覆盖 未通过:112 行缺口,13 行属于相对 HEAD 新增/修改行,99 行未修改。后续扩展停止后未重算 reports/coverage/merged.json、reports/aic-1754/coverage-gap-attribution.json

完整 E2E 的测试服务能证明业务接口、持久化、权限和浏览器交互,不证明公司 UC、真实 Story 或外部积分都已联通。集成测试的 7 个 deselected 为该测试命令明确选择范围外的用例,不写成通过。

上述全量单元与集成验证后未再修改产品的 TypeScript/Python 逻辑;最终 CSS 已由 UC 模式构建检查。后续补充集中在 E2E 断言、专用测试管理员名单和验收文档;这些结果保留各自原始日志,不把重复执行次数当验证价值。矩阵是生成产物:未提交工作树与 HEAD 有差异属于正常改动,make matrix 的 Git 一致性环节不能据此被写成全绿。

验证收口纠偏

核心回归215项完整通过后,我继续扩大覆盖专项、追加边界场景并重复整套E2E,超过了本轮功能交付所需的合理范围。新增测试又暴露全局计数并发和导航尚未卸载就释放慢媒体两个脚本问题,进一步拉长耗时。全局计数已移入既有串行项目;慢媒体场景现先等待发现页渲染与旧交付区消失,在网络仍暂停时断言取消,最后放行媒体。产品逻辑未为这些测试修改。

按白晨最新指令,停止追加覆盖场景和重复全量回归,保留未通过/未复跑证据,不降低门禁,不删测试制造全绿。今后同类任务采用“改动相关单元与集成→关键链路定向浏览器→一次全量收口”;失败先定向复现、修复,仅在产品逻辑或公共基础设施变化时再扩大回归。逐行覆盖专项独立安排,不无限延长功能交付。这是本次方法纠正,不修改长期配置或工程阈值。

变异测试:断言能否识别错误逻辑

后端选定本轮 10 个业务模块完整执行:2745 个变异体,2621 killed、124 survived、0 timeout/unfinished/unknown,95.5%;各文件均达到 80% 门槛。该范围不是全仓所有模块。清单记录源码哈希及 AST 复核;后续测试类型修正与纯注释调整已注明,没有冒充重新执行变异。证据:reports/aic-1754/mutation-api-report.md、mutation-api-summary.json、mutation-api-manifest.json。

前端选定 6 个业务逻辑文件首轮完整执行 443 个变异体,89.84%;其中视频封面逐文件得分 75.93%,没有直接放行。补强边界和真实 multipart 断言后,封面全文件及其余已定位区间共 80 个变异体重跑,80/80 killed。两轮源码逐字节相同,按文件、位置、变异类型和替换文本精确合并,最终 98.19%(426 killed、9 timeout、8 survived),六个完整文件均达到门槛。这是同源码两轮证据合并,不是第三次全量执行,也不是全仓 98.19%。9 个超时属于工作台布局循环变异,超时配置未缩短。证据:reports/aic-1754/mutation-web-report.md、mutation-web-manifest.json。

分层覆盖仍未通过

现行检查按后端单元/集成/E2E 三层,前端单元/E2E 两层逐行核对。本轮没有更改该口径,未新增豁免来凑通过。共 5327 个可比较行;前端两种插桩的既有口径对齐排除 764 行,该数字单列而不隐去。

最近215项完整通过后计算的 API 单元与集成均 100%;API E2E 原始 91.51%,按既有豁免后的要求范围 98.67%。Web 单元 100%;Web E2E 对齐后原始 92.02%,按既有豁免后的要求范围 95.93%。这些数字都不能替代逐行门禁。

本轮 13 个改动行缺口集中在:已提交交付却缺少作品的事务防御;视频编解码能力/零尺寸/Canvas 失败;取帧取消和身份/版本变化的窄时序;封面输入防御;OpenQ 构建期合法/非法配置分支。完整列表见 coverage-gap-attribution.json。99 行未修改只表示相对 9eff381 的差异归因,不能因此断言这 99 行都已证明是旧基线问题。

处理方向:对真实可操作的用户路径补业务场景;对需要不同编解码运行时、构建配置或时序控制的分支,保留单元断言、记录缺层,独立设计对应运行环境。不得伪造浏览器覆盖数据,不为触发防御破坏业务库,也不把“已有单元测试”写成完整分层验收。

三、独立审查发现及修复

  1. 非字符串 UUID 等结构的动态游标最初抛 500,现服务端校验结构并统一返回 422,已补真实接口回归。
  2. 跨标签换账号后,顶栏更新而个人页姓名残留;现个人页订阅同一身份源。账户页码也按用户重置,避免 A 的第 2 页落到只有 1 条数据的 B 后无返回入口。
  3. 认证统计失败原先缺少恢复入口,现独立显示错误与重试;明确匿名才跳登录,网络错误不会误送登录。
  4. 任务专属认证允许同名后,旧 E2E 降级还原碰到旧课程名称唯一约束。测试重置在双重 venture_os_e2e 库名保护下先清测试关联数据,再完整 downgrade/upgrade;产品迁移未改成自动清业务数据。重置回归保留先失败后成功证据。
  5. 101 条跨页承接场景使两处旧 E2E 的第一页假设失效。后台流水改用真实用户搜索/筛选;后台任务按接口返回的 page/size/total 逐页查找。没有删断言或靠重试第一页混过,反而增加精确金额、承接时间和收入来源断言。
  6. 动态页 CSS 使用未定义变量,搜索边框和选中态颜色失效。替换为项目既有变量后,三个视口共 18 项检查通过,0 pageerror;六张前后图与窄屏末列图已检查。
  7. 新旧 feature 复用 UC 测试身份会污染并行数据,已改为独立身份,并通过仓库现有用户隔离检查。无认证发布的“全局任务总数不变”校验曾与并发创建任务冲突,按既有全局计数隔离机制移入串行阶段;保留原精确断言,不靠重试忽略失败。

上述回归固化在仓库测试及可重复探针中;没有把这次发现只留在口头说明。

四、真实服务与视觉证据

真实 CS 图片:创建自己的临时私有图片,3172 字节;attachment=true 与 false 都返回 200、image/png、字节完全一致;Chromium 两者均解码为 32×32。探针对象已删除。此结果不支持“attachment 参数必然导致现场图片失败”的猜测,也不构成真 UC 认证流程验收。证据:reports/aic-1754/real-cs-result.json。

真实 CS 视频:上传自己的 9882 字节 MP4;Range 返回 206、video/mp4、允许跨域;执行当前 src/lib/video-frame.ts 后生成 640×360、11869 字节 JPEG。对象已删除。证据:reports/aic-1754/real-cs-video-result.json、real-cs-video-frame.png。该样本不是 Story 用户的实际素材。

页面与响应式:真实 Chromium 查看 1440/820/390;首页、账号切换、活动列表、账户滚动和异常恢复有独立截图与 JSON。独立 UI 探针使用固定 HTTP 响应,业务 E2E 另走真实应用服务,两类证据分开。截图入口:

本轮没有 Windows 系统实例和有效真 UC 人工会话。作品隐藏会阻止平台新的匿名读取与媒体地址签发,但不能撤回已签发尚未过期的地址,也不能撤销作者原本公开的外部视频 URL。没有改写真实用户认证记录来制造“走通”结果;没有授予真实账号角色;没有验证真实外部积分到账;没有发布当前代码到任何环境。

五、仍需闭环的项目及执行方式

项目 当前缺口 后续验证方式
整卡逐行分层门禁 最近完整回归后112行未达到要求,其中13行与本轮改动有关 按最新指令停止本轮覆盖专项,清单保留作独立后续;不降低门槛。
后加慢媒体浏览器场景 时序已修正但未复跑 下次确需验证时先定向运行该场景;本轮不继续扩展或重跑整套。
T01 原现场图片故障 缺原失败文件/请求及有效真 UC 会话,不能确认唯一根因 获有效会话或可复现样本后,代理采集地址接口、媒体请求和图片解码结果,完成上传→返回→刷新原路径,归档证据。
T02 Windows 与产品尺度 只有 macOS Chromium 证据 在 Windows 原生 100% 下运行同套浏览器流程并截图,核对文字与组件边界;产品确认尺度。
T13 OpenQ 首页 真实地址未提供,登录往返未知 从第 2 组 T21 获取明确首页 URL 后配置,代理验证点击、目标可达与登录往返。
T18 实际 Story 外链 真实 CS 及受控外链通过,实际 Story 素材未完整走查 使用授权素材及真 UC 会话重放选成片→取帧→确认提交→任务成果;若来源不可跨域读取,核对默认封面和交付不受阻。

这些边界已提供可执行的后续方法,不推定用户必须手工运行命令。第 2/3 组继续按各自 issue 跟踪;当前代码尚未发布,现有 4420 或其他旧预览不代表本轮分支。

六、代码、复跑与交付边界

关键实现定位:apps/api/app/activity/service.py:54(稳定动态查询);apps/api/app/courses/service.py:126(截图登记)、:359(官方定义)、:393(任务专属定义);apps/api/app/works/service.py:45(提交作品)、:212(可见权限);apps/web/src/components/SignedImage.tsx:15(身份隔离与恢复);apps/web/src/features/workbench/useWorkbenchData.ts:27(全部承接分页);apps/web/src/features/activity/ActivitySection.tsx:12(动态页);apps/web/src/features/claims/AccountSection.tsx:13(账户分页);apps/web/src/lib/env.ts:41(OpenQ 配置校验)。

规格:首次走查第一轮修正设计。计划:首次走查第一轮修正实施计划。业务验收矩阵:验收矩阵。全量日志和探针在本工作树 reports/aic-1754/,该目录为本地产物,不随 Git 自动上传;看板附件报告中的本地路径不会变成可公网访问的日志。

在本工作树根复跑常用命令:

make lint-api lint-web
make unit contract tools-test
make integration
COMPOSE_PROJECT_NAME=venture-os make e2e
make coverage
uv run --project apps/api python -m tools.acceptance.users
uv run --project apps/api python -m tools.acceptance.matrix --out docs/standards/验收矩阵.md
uv run --project apps/api python -m tools.ci.guard_thresholds --check

make e2e 会清空专用 E2E 库,不应并行启动第二套共用该库的测试。变异复跑命令及精确范围见各自专项报告。make coverage 最近完整回归后的结果未达标,不能被复跑命令清单表述为已通过。后续原始覆盖文件来自不同运行,不能直接混合成新的全量结论;本报告保留215项完整通过后的合并结果和来源。

仓库依赖和锁文件未变。前端变异首次沙箱调试中,npx vitest 曾意外临时下载 Vitest 5.0.1;已核对并仅删除本次产生的缓存目录,既有 Vitest 5.0.0 未动,后续使用已有依赖的绝对路径。回执:reports/aic-1754/mutation-web-dependency-cleanup.json。不能表述为“全程未下载依赖”。

交付自查:源资料、归档、公司初始化 CI 文件和 .lfsconfig 保持只读;不改工程阈值;没有 Git 提交、推送、合并或部署。应用回归、验收场景、生成契约、缺口归因和复跑证据均已形成资产。交付的是可审查的实现与真实验收记录,整卡完成状态仍保留上述明确缺口。