只留一种对象
WinLoop 三个星期 113 个提交,从团队优先,到资源成为项目里唯一的对象,再到旧入口下线
· 5 min read
4 月 6 号那天,WinLoop 的 main 上有 19 个提交,其中 9 个的标题里带着「收口」两个字。我把那天的提交一个个点开看了一遍。
看完发现,这九个其实是九件不同的小事,只是标题都写了收口。有加权限检查的(+269 -15),有改路由路径的(+164 -163,增删几乎一样多),有解析飞书回调地址的(+17 -5)。最大的一个是协作用的富文本编辑器,+669 -172,新建了一个 352 行的组件,标题里也写着收口。
收口在这里大概就是把散在各处的边角收到一处,让每样东西只剩一种走法。这几个提交的正文都是空的,我是对着改动量猜的。
下午 1 点 04 分
中午 12 点 54 分有个加 smoke 守卫测试的提交,十分钟后,下午 1 点 04 分,是「下线 workspace 旧入口」。这个提交只有 3 个文件,+12 -116。旧页面的文件没有删,里面的内容换成了一句 404:旧的 /workspace 入口已下线,请改用 /team。原来 /workspace 的首页是个 103 行的跳转页,现在 7 行。
三分钟后和五分钟后又各有一个补缺的提交,一个补邀请的接受和撤销接口,一个补 smoke 测试的依赖和共享类型。
3 月
WinLoop 是给竞赛团队用的项目工作台,第一个提交是 3 月 18 号的。24 号有个提交把整个项目改成了团队优先,179 个文件,加了两万一千多行,删了五千八百多行。为什么这么改,提交记录里没写。
28 号晚上 7 点多,三个提交连着来,7 点 15、7 点 23、7 点 24。中间那个叫 hard-cut workspace api,33 个文件,+298 -1,067,旧的每个 workspaces 接口文件都缩成了三行,全去调同一个叫 teamFirstApiRemoved 的函数。从名字看,是告诉调用的人这个接口没了。
同样的办法,9 天后又用在了页面上:文件留着,里面换成一句话,意思是这个入口没了,请去新的那边。我猜这样老链接打开的人至少能收到一句话。
再往后,29 号下午 2 点 59 分到 3 点半,七个 fix(ci) 连在一起,大半是 pnpm 的安装和缓存。main 上一共 113 个提交,二十多个是 CI 和部署的,差不多五分之一。
一个对象
README 现在把模型写成四个词,工作区、项目、资源、协作。文件、协作文档、画布都算资源,资源是项目里唯一的一等资料对象;大纲不单独存,是从项目设置和资料内容里聚合出来的一个视图。
4 月 4 号晚上 10 点 58 分到 59 分,两分钟里连着四个提交:第一个把协作资源的模型收到一起(+194 -17),第二个把流程画布接到资源视图上(+1,122 -480),后面一个测试一个文档。流程画布这件事 README 讲得很细:左边「流程」入口永远只打开项目里那一块流程画布,资源列表里对应的那条 workflow 资源和它指向同一个底层对象,也就是同一个东西,不是两份。自由画布另算,菜单里还能新建。
我自己觉得整件事的顺序有点意思:3 月 28 号先砍后端的接口,4 月 4 号收模型,4 月 6 号才关页面入口。我觉得模型光在文档里写成「唯一」是不够的,旧入口还开着,就还是两种走法。
没做的
README 最后一节写得很老实:文件类的资源现在支持上传、转换、预览,只有 markdown 和画布能实时协作。在线 Office 编辑要等以后,选型写成了一份文档,没有落地。所以「一种对象」统一的是存放和展示,按 README 的说法,一个像 Word 这样的文件放进去,现在还只能看。
README 里还把 /workspace/:workspaceId/project/:projectId 写成「别名入口」。我看了一下,这个页面从 4 月 6 号起就是 404,大概是改的时候没顾到这一行。
这 113 个提交的最后一天是 4 月 7 号,一共 21 个提交,9 个是飞书同步的,7 个是 CI 和部署的,剩下 5 个里有合并 PR 的那一个。那是这个仓库的第一个 PR,从 dev 合进 main;后来的 PR 编号排到了 8。
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.