发布于

2026-第三十八周

作者

该周报主要为各个地方内容的汇总整理

技术

如何命名事物

命名是软件工程与知识工作的核心技能:清晰的语言几乎总意味着清晰的思考,而每次命名都是在与同事、未来的自己以及语言模型沟通。文章主张按事物本质而非即时需求来命名,把命名视为一种智力共情;坏名字往往暴露出模糊概念,甚至牵出真实缺陷。

  • 🧠 命名是基础能力:清晰语言体现清晰思考,含糊命名通常意味着内部理解不清。
  • 💬 每次命名都是沟通:变量、函数、字段、API、页面、数据库表和产品名都在传递语义。
  • 🤖 LLM 依赖代码库清晰度:术语被“slop-fried”后模型表现会退化;减少、澄清、打磨术语就是控制系统复杂度。
  • 🔍 DRY 是语义压缩而非位相同:相同值不一定是同一事实,应抽象事实,而非偶然相等的数字。
  • ⚖️ 警惕“一致性”崇拜:Clean Code、OOP、FP 等像带承诺的产品,诱人用规则逃避深入思考。
  • 🧩 要一致的是命名过程:综合考虑类型、用途、本质、对称性(如 src/dst)和读者,而非死守“缩写/长名”规则。
  • ❤️ 命名是智力共情:不要按“我为什么需要它”命名;如 to-pixels 本质只是浮点转整数,像素叙事应放在调用处。
  • 🗓️ 时间字段要看语义:created_at 常是默认,但 uploaded_at/issued_at 取决于行代表真实世界对象还是软件合成对象。
  • 📦 名称问题常是模型问题:如 fallbackConfig 是否为 Option[Map] 取决于缺失语义,名称与数据形状应一起审视。
  • 🗺️ 坏名会隐藏通用性:mergeTargetValuesIntoSourceTemplate 其实只是 Map 合并,应使用 template ++ values 等惯用法。
  • 🧵 坏名常牵出真 bug:documentDate 同时表示文件日期、记录日期和到达日期,导致陈旧规则判断错误,改名还需迁移与回填。
  • ✅ 好命名反向检验设计:设计未定型时难以命名是正常信号;好名字自然涌现则是高质量信号。
  • 🎯 结论:命名要深思熟虑、整体权衡、按本质而非需求、像在乎一样对待。

工具

fallow

Fallow 是面向 TypeScript 和 JavaScript 的代码库智能工具,提供免费的静态代码与样式分析,可检测未使用代码、重复、复杂度、架构漂移和设计系统一致性问题,并可选配运行时智能以了解生产环境中实际执行情况。

  • 🚀 快速上手:无需安装,直接运行 npx fallow 即可,首次使用无需配置
  • 🔍 静态分析能力:一次运行即可发现死代码、重复代码、复杂度和样式问题
  • 🗑️ 删除冷代码:放心移除未使用的文件、导出和依赖
  • ♻️ 减少重复:在重复逻辑扩散前将其找出
  • 🎯 优先重构:利用复杂度和健康度分析聚焦清理工作
  • 🧾 TypeScript 证据:确认具体符号使用、类契约、受影响文件和针对性测试
  • ⏱️ 运行时证据:查看热路径、冷路径以及基于运行时的删除依据
  • 💻 CLI 工作流:最佳起点,可在本地、CI 和代理循环中使用
  • 🧩 VS Code 集成:编辑器内实时诊断、Code Lens 和一键修复
  • 🤖 MCP 与代理:为 Claude Code、Cursor 等代理提供结构化工具调用
  • 🧠 双层模型:静态分析回答“什么和什么相连”,运行时智能回答“实际运行了什么”,二者在 fallow health 中交汇
  • 📚 常用页面:快速开始、配置、CI 集成、CLI 参考

GitHub - philipwalton/modern-web-types:适用于尚未加入 lib.dom 的新 Web 平台 API 的 TypeScript

本仓库 philipwalton/modern-web-types 旨在为已在至少一个稳定浏览器中可用、但尚未进入 TypeScript 官方内置类型定义的 Web 平台 API 提供 TypeScript 类型;它复用 TypeScript 官方生成管线,输出完整 lib,可作为官方 DOM/Worker 类型的替代或补充。

  • 📦 项目提供 modern-web-types,包含五个环境 lib:DOM、WebWorker、ServiceWorker、SharedWorker、AudioWorklet。
  • 🧩 类型由与 TypeScript 官方相同的生成器生成,质量与正确性一致,区别只在于收录 API 的数量。
  • 🎯 TypeScript 官方 lib.dom.d.ts 等只收录已在两个及以上浏览器引擎发布的特性,因此单引擎已可用且广泛使用的 API 会缺少官方类型。
  • ⚙️ 推荐安装方式:npm install --save-dev @typescript/lib-dom@npm:modern-web-types,用别名替换 TypeScript 解析的 DOM 库。
  • 🧷 TypeScript 6+ 需在 tsconfig.json 中启用 libReplacement: true;TypeScript 4.5–5.x 默认支持库替换。
  • 👷 对 Worker 等环境,需从 lib 移除对应库,并在 types 中引用入口,如 modern-web-types/webworker
  • 📚 入口映射包括:modern-web-types / modern-web-types/dom 替代 DOM;webworker 替代 WebWorker;serviceworkersharedworkeraudioworklet 对应相应 @types 包。
  • ⚠️ 若项目原本未设置 types,添加后 TypeScript 将只包含列出的 @types 包,不再自动包含 node_modules 中所有 @types/*
  • 🔄 更新机制:每周一 workflow 重新固定生成器和条目注册表到最新提交,重新生成全部五个 lib、运行测试,并自动开 PR。
  • 🛠️ 生成流程:固定并补丁生成器,使引擎阈值可配置;用同一数据快照构建两次,分别为两引擎 baseline 和一引擎 full;再用 TypeScript 编译器 API 做结构化 diff;最后按环境生成完整 lib。
  • 📝 report.md 列出官方类型与一引擎类型之间的差距,冒烟测试由当前 delta 自动生成;API 一旦升级到两引擎,就会移出 delta 和测试。
  • 🧪 开发命令:npm run update 执行 fetch-upstream → fetch-registry → build → diff → emit-lib → emit-test → emit-readme → report;npm test 对每个生成 lib 做类型检查并限制增量大小。
  • 🧰 同时安装 TypeScript 6 与 7:diff/emit 脚本用 TS 6,因为 TS 7 将编译器 API 移到 typescript/unstable/*;测试则在两个版本下检查生成输出。
  • 🚀 发布由 pkg/package.jsonversion 驱动:合并到 main 且版本变化会触发 publish workflow,发布 pkg/ 到 npm 并打 tag;版本不变则不发布。
  • 🧾 相关项目:lib.dom.d.ts / @types/web 是官方类型;@types/dom-* 是手写单特性补丁,本项目用生成的完整 lib 覆盖同类空白。
  • 📜 许可证为 Apache-2.0,生成输出源自 TypeScript-DOM-lib-generatorwebref 的 Web IDL。

更新

Playwright v1.63.0

Playwright v1.63.0 发布,重点带来测试锁、跨 frame 定位、可见元素定位、步骤参数与副标题、trace 的 Aria/屏幕快照等能力,并扩展 API、报告器、CLI 与浏览器支持;同时宣布部分实验组件包停止更新及 Ubuntu 20.04 不再支持。

  • 🔒 测试锁:访问共享资源的测试可声明命名锁,跨文件、worker、项目互不并发,其他测试仍并行;支持多个锁及 test.describe() 组级锁。
  • 🪟 跨 frame 定位:page.frameLocator()frame.frameLocator() 不传选择器时可在任意子 frame 中搜索,匹配多个 frame 会报错。
  • 👁️ 可见定位器:新增 locator.visible(),仅匹配可见元素,推荐替代 :visible CSS 伪类。
  • 🧾 步骤增强:Playwright API 步骤会报告目标定位器和调用参数;test.step() 支持 subtitleparams,报告器可读取并在 trace viewer/HTML 报告中展示。
  • 🖼️ Trace 快照:tracing.start()testOptions.tracesnapshots 可选择捕获 domariascreen;trace viewer 新增 Display Aria 模式,可并排查看并悬停高亮。
  • 🔐 认证扩展:httpCredentials 支持凭据数组,按请求 origin 匹配,无 origin 的条目可匹配任意请求。
  • 🗂️ 存储状态:新增 opfs 选项,将 origin private file system 纳入 storage state,便于持久化与恢复。
  • 🔔 新事件:page.on('dialogclosed')browserContext.on('dialogclosed') 在 JS 对话框被接受、关闭或用户关闭时触发。
  • 🧩 Aria API:新增 locator.ariaSnapshotJSON()page.ariaSnapshotJSON(),以 JSON 返回 Aria 快照,支持 modedepthboxes
  • 🌐 请求类型化:apiRequestContext.get() 等请求方法支持类型参数,使 response.json() 返回指定类型。
  • 🧪 测试选项:新增独立的 testOptions.reducedMotiontestOptions.forcedColorstestOptions.contrast
  • ➕ CLI 增强:--add-reporter 可追加报告器;npx playwright install --no-remove 保留其他 Playwright 安装的浏览器;codegen --http-credentials 支持录制 HTTP 认证页面。
  • 🏷️ 报告器标签:listlinedotgithubjunit 报告器新增 omitTags,可抑制自动附加到测试标题的标签。
  • 📈 报告与时间线:内置 perfetto 报告器输出 Trace Event Format 文件,可在 Perfetto UI 或 chrome://tracing 中查看;HTML 报告显示测试步骤时长瀑布。
  • ⚠️ 重要公告:实验性 @playwright/experimental-ct-reactct-react17ct-vue 不再更新,需迁移到 stories 模型;Ubuntu 20.04 不再支持;Linux arm64 改用 Chrome for Testing 构建的 Chromium。
  • 🌍 浏览器版本:Chromium 153.0.8010.12、Mozilla Firefox 155.0、WebKit 26.6;同时测试兼容 Google Chrome 153 和 Microsoft Edge 153。

设计

其他

良好的企业文化是提升生产力的最大秘诀,而不是人工智能。

良好文化才是最大生产力提升手段,AI 只是放大器;若文化、流程和架构不佳,AI 会加速错误。文章主张不要只追 AI 工具,而要先建立信任、自主、清晰和协作的组织环境。

  • 🏆 核心观点:良好文化比任何 AI 工具都更能提升生产力;AI 有用,但前提是文化正确。
  • ⚠️“有了 AI 就不需要那么多人”会降低心理安全感,让员工担心被替代,尤其高管这样说危害更大。
  • 🏗️ 引用康威定律:组织沟通结构会体现在产品设计中;文化差,产品差,文化好,产品通常也好。
  • 🩺 文化像健康,是一切的前提;没有健康,其他事很难做好。
  • 📉 CEO 因竞争对手“10x 生产力”报道而 FOMO、指责团队,会损害信任;许多 10x 声明背后是销售 AI 产品/合作,应先看激励。
  • 🚀 AI 放大已有文化:好文化 + 好架构让 AI 更有效;坏沟通/坏架构会被 AI 放大,团队只会更快走错方向。
  • ✅ 好文化自检:责任清晰、可自主决策、能安全挑战领导、团队互信、优先级清晰、建设性分歧、奖励成果、理解目标、从失败学习而非找替罪羊。
  • 📋 作者提供工程组织 checklist/audit,用于评估和建设优秀工程组织。
  • 🗣️ 正确传达 AI 采用:把 AI 当成另一种工具,鼓励学习使用来帮助团队和业务,绝不要提“替代”或“不再重要”。
  • 🔄 AI 采用只能自下而上,不能自上而下;变化太快,需要持续知识交流,强制会适得其反。
  • 🧭 AI 采用不是工具问题,而是领导力问题;目标不是提高 AI 使用率,而是业务成功与整体成果。
  • 👥 反对用 AI 替代工程师:AI 时代更应招聘更多工程师,前提是文化到位,更多人可指数级提升生产力。
  • ⏱️ 上市时间(TTM)关键:最快响应市场、提供最佳体验的公司会胜出;限制生产力和人才是长期负债。
  • ❓ 领导者该问的不是“如何让所有人用 AI”,而是“如何让优秀人才做出最佳工作,再用 AI 倍增他们”。