89d37b6506
Diagnosis was unblocked by temporarily installing babel-plugin-react-compiler and reading its logger events, which the Rust port swallows. Every failure in Home comes from the compiler, not from this repository's code: 24 errors under the stable 1.0.0, all prefixed Todo: (the compiler's own marker for unimplemented syntax) -- 13 for try/finally, 9 for throw inside try/catch, 2 for a non-reorderable MemberExpression. All 13 finally blocks do real cleanup (clearing a timeout, releasing in-flight guards, resetting loading flags), so deleting them to please the compiler would trade correctness for speculative memoization. Two paths are now closed by measurement rather than assumption. Newer compiler builds fix the try/finally gap but Home then hits two consecutive internal Invariant panics, which are compiler bugs. And project-wide the version makes no difference at all: across 373 files both versions compile exactly 134 functions, with the same 21 files failing, so switching implementations buys nothing. The diagnostic dependency is therefore removed and the lockfile restored via npm ci. Deliverable is unchanged: config still rolled back, frontend/src untouched. Co-authored-by: Cursor <cursoragent@cursor.com>
6.3 KiB
6.3 KiB
BLOCKED
- 真实收信端到端验收:执行环境没有可识别的 staging 测试邮箱/收件箱变量,仓库只记录发信配置而未提供受控测试邮箱。按任务硬规则不使用他人邮箱;代码、测试和部署继续,部署后的注册、验证码登录与忘记密码真实收信步骤待具备受控邮箱后补验。
- PostgreSQL 事务反向测试:当前执行环境没有
docker、postgres、initdb、psql、Podman/Colima/Lima。frontend/tests/admin-database.test.ts已实现审计触发器故意失败并断言兑换码行数仍为 0 的红灯证据,但本地执行在启动 fixture 前以spawnSync docker ENOENT阻塞;交由 exact-SHA staging quality gate 的 Docker 环境运行。全量npm test因同一缺失 Docker 共阻塞 11 项数据库/部署测试,另有 1 项既有真实 DOM 测试因缺 Playwright headless Chromium 阻塞;其余 1031 项通过,skipped/todo=0。 - staging 两角色浏览器冒烟:已确认受控 admin 测试账号存在且是
user,admin,但当前执行环境没有其密码或已登录会话;也未提供受控 viewer 账号。不得读取/猜测凭据或使用他人账号。已完成匿名 shell、5 个资源 401、写请求 401 的服务端冒烟;admin/viewer 登录后浏览器冒烟待授权人员提供受控会话后补验。
React Compiler 接管 page.tsx(2026-08-17,分支 codex/react-compiler-20260817)
已解除并已定位(2026-08-17,用户授权新增依赖后完成)。 结论:Home的编译失败原因无法定位Home的失败全部来自上游编译器未实现的语法与内部断言失败,没有一条是本仓库代码写错。稳定版babel-plugin-react-compiler@1.0.0报 24 条错误、三类全带Todo:(编译器标记「尚未实现」):13 条try/finally、9 条try/catch内的throw、2 条MemberExpression cannot be safely reordered。更新的 experimental 版已修好前两类,Home随即撞上两个连续的编译器内部断言失败(Invariant:,即编译器 bug):page.tsx:2666的catch (error)绑定被闭包捕获,以及page.tsx:1837的提升函数refreshAccount。诊断用的依赖已卸载、锁文件已用npm ci权威还原、git diff为空,不进交付——因为它买不到任何东西,见下一条。- 换编译器版本或换 Babel 版实现,对本仓库零增益(已量化,这条路可以关掉了)。 对
frontend/src全部 373 个文件跑批量诊断:稳定版 1.0.0 与 experimental 版编译成功的函数数完全相同,都是 134 个,失败文件都是同样 21 个,仅报错事件从 74 降到 48。原因是被上游修掉的错误类别,所在函数都还有别的拦路错误,于是一个函数都没多编译出来。所以别再指望「升个编译器版本就好了」。 Home要真正受益很可能得拆组件,属业务代码重构,本轮明令禁止。 诊断结果进一步说明这条路该怎么走:为迎合编译器去改Home(删finally、重排 6 个被声明前引用的函数、逐个绕内部断言)是被编译器 bug 牵着走的打地鼠,每步都拿确定的正确性换不确定的收益;值得做的是按职责把Home拆小。 证据是同一文件里两个小组件(原始行 760、815)被正常编译、全项目另有 44 个函数被编译,唯独这个 2730 行、24 个useState、18 个useEffect的函数被拒。任务书要求「哪处代码挡住了编译器就写进 BLOCKED.md,不要自行改写」,故frontend/src/**一行业务代码未动(仅反向验证时临时加删一行"use no memo",已还原,git diff为空)。待决策已决策(2026-08-17):维持回滚,不为那 44 个组件保留reactCompiler: true;若要翻案,前置条件是先测出那 44 个的渲染基准。 本轮按任务 2 止损条款已回滚该配置。数据是:构建耗时无可测量变化(噪声内),/首屏 JS gzip +12031 B / +2.50 %,换来 44 个函数自动记忆化,其中app-sidebar(112 槽)、sidebar-session-row(73 槽)、birth-date-picker(58 槽)与三个引导 hook 都在/上渲染。这 44 个的实际运行时收益本轮未测量(无渲染基准),所以不替决策者拍板。重新开启只需在frontend/next.config.ts顶层加reactCompiler: true、experimental里加turbopackRustReactCompiler: true。compilationMode: "all"不可用,会破坏构建。 它会编译模块作用域的普通回调,frontend/src/components/birth-time-intake.tsx:22的Array.from({ length: 24 }, (_, index) => ...)被插入useMemoCache,预渲染/时抛TypeError: Cannot read properties of null (reading 'useMemoCache')。这是该模式本身的性质(官方标注为不安全),不是本仓库代码的缺陷,未做任何改动。- 顺手活一律未做,登记在此: 其一,
frontend/src/lib/skill-package-registry.ts:523的readFileSync(currentRegistryPath, "utf8")触发 Turbopack 构建警告「Dynamic filesystem access causes tracing of the whole project」,会把整个项目(含public/)打进 server 产物,影响部署体积;升级前后都存在,与本轮无关,未改。其二,npx eslint有 4 个既有no-unused-varswarning,分别在birth-time-candidate-result.tsx:143、birth-time-candidate-completion.ts:10,11、tests/identity-auth-factory.test.ts:48,未改。其三,eslint-config-next仍是 16.2.10、与 next 16.3.1 版本号不同步,但 eslint 实测 0 error,按「不许顺手升别的依赖」未动。 - 测试环境噪声(非阻塞,已自行消化):
frontend/tests/rectification-v9-database.test.ts的「v9 migration applies on a fresh database and re-applies idempotently」在全量并发下偶发失败(database migration failed,1 !== 0),单独重跑 7/7 通过、全量重跑 1592/1592 通过。靠 Docker 起临时 Postgres,判定为资源争用型 flake,与 Next 版本无关。未改任何测试文件。 - 文件名偏离: 任务书要求新建
PROGRESS.md,但根目录已有受版本控制的progress.md(1025 行)且本机文件系统大小写不敏感,写PROGRESS.md等于覆盖清单外的文件,故进度记录落在PROGRESS-react-compiler-20260817.md。