守门
课表项目 125 个提交,6 月的 51 个里只有 1 个是 feat,其余大多是测试、加固和文档,这些检查在守什么
· 6 min read
TouchX Schedule 的 README 在 gate 的说明里列了六个 smoke 命令。我打开其中一个,smoke:api-boundaries,里面规定了两个文件的行数上限:v1-api.ts 不许超过 700 行,social-v1-api.ts 不许超过 450 行。
这两个文件在 6 月 1 号上午 9 点 44 分以前不是这样的。那个提交叫 split v1 api handlers,79 个文件,+24,001 -11,387,v1-api.ts 从 5,593 行变成了 508 行,social-v1-api.ts 也删掉了五千九百多行。一分钟后,9 点 45 分,下一个提交加了验证门和那几个 smoke 脚本,+2,472 行。
先拆,再上锁,中间隔了一分钟。我觉得这两件事是一起想的:5,593 行的文件好不容易拆开,不上锁多半会自己长回去。提交里没写,我是对着时间猜的。
检查
我一共打开了两个脚本。这两个都叫 smoke,其实都不跑服务,只是读源码文件,数行数,找字符串。v1-api.ts 必须引用 17 个处理模块,文件里最多只能留一个直接写的 method 判断,social-v1-api.ts 一个都不能留;客户端代码里不许出现裸的 fetch(,必须走共用的 api-client;几种事件类型的颜色不许直接写十六进制,必须取共用的 token。
README 把这些检查要防的事写成了一长句,我数了数有五件:接口入口别退回一个大处理函数,后台页面别绕开共用的外壳,小程序和移动端别各抄一份接口封装和主题色,小程序那几个页面别退回不走真实接口的样子,还有一件,V1 收尾阶段不许提前引入 PostgreSQL、Redis 和 Docker Compose。最后这件我猜是防自己手痒。
十二天
5 月 17 号晚上 7 点 22 分到 7 点 33 分,11 分钟里连着进了五个提交:日历的包,导入和通知的接口,几张日历页,小程序和移动端的壳,还有一个 React 写的后台 CMS(+1,021 行)。半夜又来了一个 React Native 的原生工程。5 月 29 号下午 4 点 25 分,一个提交把后台并进了后端自带的 Nuxt 页面,60 个文件,+5,265 -8,130,净删了两千八百多行。README 现在写着,独立的 apps/cms 已经移除。那个 React CMS,从搭起来到并回去,一共 12 天。
再看 6 月 1 号早上那五个提交:9 点 44 分拆接口,45 分上验证门,46 分让各个端共用一个接口客户端,47 分合并后台外壳的样式,48 分写 V1 收尾状态。从 5 月 29 号到这里,我觉得做的差不多是同一件事,把前面搭得太快、分出去的东西收回一处。上面那五件要防的事,头三件和这几个提交对得上名字,我猜是对着它们写的。
一夜
6 月 8 号凌晨 0 点 53 分到 4 点 53 分,整整四个小时,40 个提交。我按标题数了一遍:16 个 test,9 个 Harden 或 Tighten 一类的,8 个文档,6 个重构一类的,fix 只有 1 个,feat 是 0。
其中 2 点 32 分到 2 点 45 分,13 分钟里五个提交围着一个东西转,生产环境 smoke 的 URL 守卫:先给它写测试,再测直接填生产地址的情况,再测地址怎么解析,再把守卫重构一遍,最后给分类逻辑补测试。给守卫写测试,再重构守卫,再给重构后的写测试,听起来有点绕。
整个仓库 125 个提交,3 月 14 个,4 月 33,5 月 27,6 月 51。6 月最多,标成 feat 的只有一个,就是 6 月 1 号加验证门的那个。回头看,前三个月大概在想能不能跑起来,到了 6 月才开始怕它走样。检查在这个阶段的分量,感觉不比功能轻。
serverOffsetMs
我最想讲的是服务器时间那一条。README 里写,小程序算今天和本周、移动端算今天和课表的时候,不许直接信手机的时间,要通过 today-brief 这个接口拿服务器时间,自己记一个 serverOffsetMs。移动端那份检查写得更死:必须有 let serverOffsetMs = 0,必须有 serverOffsetMs = serverNowMs - Date.now(),必须有 getServerNow 和 syncServerOffsetFromIso 两个函数,排课的代码里还不许出现 new Date().getHours()。
这条规矩不是 6 月才有的。4 月 3 号晚上 9 点 40 分,一个标题写着 sync today view with backend time 的提交,就已经把今天页自己的 Date.now() 计时器拿掉,改成从外面传 nowTs 进来。6 月 8 号凌晨 3 点 11 分,规矩和守规矩的检查才在同一个提交里进来,整个提交加了 482 行删了 97 行,其中两个检查脚本各多了 48 行。
README 只写了这是为了算当前周和今天的课,没写为什么不信手机的钟。我猜是怕手机时间不对,课表跟着错。这种检查只看得见写法,看不见行为,变量名都对、逻辑错了,它照样过。
最后一个
这一段的最后一个提交是 6 月 24 号晚上 8 点 58 分,一个 fix,标题写的是课表导入的纠错那一圈。6 个文件,+267 -104,有后端的处理函数,导入服务,测试,还有小程序里的一个页面。课表导入的预览、确认、历史、续传,是 4 月 27 号那一天进来的。那天一共 16 个提交,导入占了五个,离这个 fix 隔了快两个月。
Copyright
© 2021-present TalexDS. All rights reserved.
Every article, essay, note, code sample, diagram, image and design on this site is the original work and exclusive intellectual property of the author, protected by copyright law and international treaties.
No reproduction. Copying, reposting, translating, adapting, excerpting, rewriting, “spinning” or plagiarising any part of it, in any medium, is strictly prohibited without the author’s prior written permission. Commercial use of any kind is forbidden.
No AI. No crawling. Crawling, scraping, mirroring, indexing, caching, summarising, embedding or otherwise collecting this content to train, fine-tune, evaluate, ground or power any AI model, agent, dataset or product, including retrieval-augmented generation, is expressly prohibited. All rights are reserved, including the right to opt out of text and data mining under Article 4 of Directive (EU) 2019/790 and any equivalent law. AI crawlers and agents must not access or process this page.
Violations will be pursued. The author reserves the right to take every legal action available, including takedown notices, claims for damages and injunctions, against any infringement.
版权声明:本站全部文章、笔记、代码示例、图片与设计均为作者原创,受《中华人民共和国著作权法》及国际公约保护。未经作者书面许可,严禁任何形式的转载、搬运、改写、洗稿与抄袭,严禁商业使用。严禁 AI 爬取:禁止以训练、微调、评测、检索增强或任何其他目的,抓取、镜像、索引、缓存、摘要或向量化本站内容。一经发现,将依法追究法律责任。
Distributed on an “AS IS” basis without warranties.