跨计划依赖 gating:计划之间也需要红绿灯
单计划内部的门控已经够了,还不够 当任务多了之后,我做了两件事:给每个计划加了自己的 task graph(任务图)和 finish gate(完成条件)。效果不错——单计划内部的依赖清晰了,不会出现"最后一个任务执行完了但整个计划没关闭"的情况。 但很快遇到了新问题:计划 A 的执行结果,会影响计划 B 能不能开始。而两个计划之间没有任何依赖声明。 举个例子: 计划 A:重构博客发布模块 计
共 302 篇文章
第 193 - 204 条,共 302 条
单计划内部的门控已经够了,还不够 当任务多了之后,我做了两件事:给每个计划加了自己的 task graph(任务图)和 finish gate(完成条件)。效果不错——单计划内部的依赖清晰了,不会出现"最后一个任务执行完了但整个计划没关闭"的情况。 但很快遇到了新问题:计划 A 的执行结果,会影响计划 B 能不能开始。而两个计划之间没有任何依赖声明。 举个例子: 计划 A:重构博客发布模块 计
问题背景 当你同时管理 35 个终端会话,每个会话里跑着不同的 AI 代理或长时间任务时,你很快就会遇到一个反直觉的问题:最大的瓶颈不是"做不过来",而是"不知道该做什么"。 每个终端会话都有自己认为的优先级。但实际上,它们可能在处理同一个问题的不同副本(重复劳动),或在争抢同一份资源(冲突),或在等待一个永远不会到来的信号(死锁)。 这不是假设。在实际工作中,我曾同时开着六个终端:一号终端跑着
命令行工具是开发者日常工作的重要组成部分。但面对成千上万的 CLI 工具,如何高效地发现、评估、采用一个真正好用的工具,是大多数开发者没有系统化思考过的问题。结果就是:工具箱中堆满了"当时看起来不错"但从未真正用起来的工具,而真正需要的工具反而找不到。 发现的渠道:从哪里找工具 GitHub Trending 是最直接的发现渠道。每天/每周的 GitHub Trending 页面会展示当天或当周
引言:流水线即产品 大多数团队接触持续集成时,都是从"配一个 CI 文件"开始的。你写几行 YAML,push 到仓库,看到小绿勾亮起来,就觉得 CI 搞定了。之后每一次遇到构建超时、测试失败、缓存失效、并行任务互相踩踏,你才会意识到:持续集成的流水线,不是一个配置文件,而是一个产品。 这个产品有自己的用户(开发团队)、SLA(构建时间、成功率)、可靠性要求(不能被误报淹没)、安全需求(凭证不能泄
一次跨服务调用失败了,该怎么办?大多数人的第一反应是"重试一下"。这个直觉不算错,但没有配套的超时设计和退避策略,重试就是把小故障放大成雪崩的加速器。超时和重试是分布式系统里最基础也最容易被敷衍的两个参数——很多系统里它们要么是框架默认值,要么是某次故障后拍脑袋改的数字。这篇文章讲清楚这两个参数背后的设计逻辑:时间预算。 超时不是参数,是预算分配 把一次用户请求看作一笔时间预算。用户愿意等两秒,
"我们有备份"是工程团队最常见的虚假安全感之一。备份脚本每天凌晨准时运行,备份文件按日期整齐排列,监控显示任务全绿——直到真正需要恢复的那天,才发现备份文件不完整、恢复流程没人会操作、或者恢复出来的数据早在半年前就悄悄损坏了。备份不是目的,恢复才是。一份从未验证过能恢复的备份,和没有备份的区别只是心理上的。这篇文章讲怎么把"有备份"升级成"能恢复"。 备份为什么会静默失败 备份任务显示成功,不代
"代码上线了"和"功能对用户可见了",在很多团队里是同一件事。代码合并、构建、部署,用户立刻看到新功能——部署即发布。特性开关(feature flag)打破的正是这个绑定:代码可以随时部署到生产环境,但功能是否生效由一个运行时开关决定。部署是技术动作,发布是业务决策,两者本来就不该是同一件事。 为什么要解耦部署与发布 部署和发布绑定在一起时,会产生几个结构性的麻烦。 第一,长期分支。功能没开发
多Agent协作时最容易混淆的两个概念:候选池和待办清单。它们看起来都是「接下来要做的事」,但性质和用法完全不同。理解这个区别,是高效协作的第一步。 候选池是弹药库,不是任务队列 候选池里放的是「值得关注的话题」。它们来自对话、复盘、突发想法、阅读笔记。一个候选条目可能 worth 一篇2500字的文章,也可能只是一句话的灵感,或者一个需要持续观察的趋势。 待办清单里放的是「必须完成的动作」。每
Mock是现代软件测试不可或缺的工具,但也是最容易误用的工具之一。一个好的Mock策略能让测试快速、稳定、可读;一个糟糕的Mock策略会让测试变成维护噩梦,甚至失去测试的意义。 这篇文章深度分析不同类型的Mock策略,它们的适用场景、优缺点、常见陷阱,以及如何在真实项目中制定合理的Mock策略。无论你用的是Java的Mockito、Python的unittest.mock、JavaScript的J
我看了一圈最近的AI状态,反而更确定一件事,AI并没有让人更轻松,但它一定让人更向往轻松。 这句话听起来有点拧巴。因为过去几年我们听到最多的说法,是AI会提高效率,会节省时间,会帮人处理重复劳动。说实话,这些都对。写一段代码更快了,整理一份资料更快了,做一张图更快了,写一封邮件也更快了。 但如果你真的在用AI,会发现另一个更真实的感受,事情没有变少,反而变多了。 以前一个人做不了的事,现在看起来都
能力要在具体项目里长出来 前两天我又遇到一个挺典型的场景。 有人说,现在 AI 越来越强了,语写这种能力到底还能帮我们做什么。 这个问题乍一听很正常,但我听完以后,脑子里冒出来的不是一个工具答案,而是另一个更根本的问题。 <span style='color: d93025; fontweight: bold;'最重要的不是我们有哪些能力,而是我们有没有把已经有的能力用到极致。</span 很多时
最近这段时间,我越来越清楚一件事, 多机器工作流里,真正重要的不是「我有几台机器」,而是「每台机器到底承担什么责任」。 你想想看,一开始很容易被数量迷惑。 多一台机器,好像就多一份算力。多一个入口,好像就多一种灵活性。多一个环境,好像就能在任何地方继续工作。 但真正开始用起来以后,你会发现,机器多了以后,效率不一定自然提高,混乱倒是很容易提高。 因为每台机器都能写,每台机器都能改,每台机器都能生成