把人工经验转成脚本需求时,例外情况不能写成“其他情况另行处理”,而要写成带触发条件、可观察信号和兜底动作的独立分支。对旧内容、旧系统或旧合作关系做退出处理时,先判断退出对象是内容本身还是承载它的流程:前者适合逐条标注后批量执行,后者适合先冻结入口再逐项迁移。两种条件的选择依据不同,脚本需求的写法也不同。
当退出对象是旧内容而不是旧流程时,保留主体、调整呈现方式通常比整页删除更合适。此时脚本需求的重点不是“删什么”,而是“改到什么程度算完成”。例如一批旧文章标题仍能带来点击,但摘要停留在三年前的业务口径,人工经验往往是“看着不对就改”,脚本无法执行这种判断。
可落地的写法是把例外拆成三层:触发条件(如摘要中出现已停用术语)、判定证据(术语表命中且正文仍在引用该术语)、动作(替换为当前口径并标记待复核)。三层都写清楚,脚本才能在遇到边界样本时交回人工,而不是静默跳过。
假设某批旧页面共两百条,其中约一成同时命中“停用术语”和“正文仍引用”两个条件。脚本应先输出这批待复核清单,再对其余条目执行自动替换。动作结果决定下一步:如果待复核比例明显高于预期,说明术语表本身需要先收敛,此时暂停批量替换比继续跑更稳妥。
当退出对象是旧系统或旧合作关系时,内容往往还留在原处,但入口、权限或结算方式已经不可用。这种情况下脚本需求要优先保证“可追溯”,而不是追求一次清空。人工经验里的“这个页面没用了”缺少证据链,脚本需要把它翻译成可验证的状态。
具体做法是先冻结入口,再逐项迁移。冻结指停止从导航、内链或投放中继续导流;迁移指把仍有价值的部分复制到新位置并保留来源标记。脚本需求中要写明例外:哪些页面即使入口已停也必须保留,例如仍被外部引用、仍在合同期内或承载历史数据查询。这些例外不能靠脚本推断,必须由人工在需求阶段列出白名单。
实施后要观察两类信号:一是目标页面的点击来源是否发生结构性变化,二是原入口的访问是否自然衰减。需要注意,访问量归零不能单独证明处理正确,它也可能来自统计口径切换、采集延迟或季节性需求回落。因此比较改动前后数据时,至少要拉一个不受本次改动影响的对照页面组,避免把外部波动算成脚本的功劳。
判断该走哪条路,可以问一个具体问题:退出对象能否在不影响其他页面的前提下被替换?能,就按条件一处理,逐条标注、批量执行、保留人工复核出口;不能,就按条件二处理,先冻结入口、再迁移、最后处理残留。
这个分界也决定了脚本需求的粒度。条件一下的例外是“单条内容的判定歧义”,需求里要写清命中规则和回退路径;条件二下的例外是“整批流程的依赖关系”,需求里要写清冻结顺序、迁移顺序和白名单来源。把两种例外混在同一段需求里,脚本执行时最容易出现的情况是:该停的没停,该留的被删。
无论走哪条路,例外描述都可以用同一组字段组织,避免遗漏:
把“交接”和“复查”写进需求,是人工经验转脚本时最容易被省略、也最影响后续判断的两项。缺少交接,例外会堆积成无人处理的队列;缺少复查,一次改动前后比较就容易被季节或需求变化干扰,得出错误结论。
假设某站点要清理一批旧活动页,其中一部分仍在被外部文章引用。人工经验是“没报名的就下掉”,但脚本无法判断“报名”状态。按条件二处理时,需求可以写成:入口冻结后,若页面存在外部引用记录,则保留页面并标记为历史存档,不参与后续导航;若不存在外部引用且内容与现行活动无重叠,则迁移到归档路径。执行后先看被标记页面的引用来源是否仍在增长,再决定是否扩大清理范围。如果引用来源本身也在衰减,说明可以继续推进;如果引用来源稳定,则维持存档状态比强行下线更合理。
这个例子的关键不是具体数字,而是把“有没有用”拆成可观察的引用记录和内容重叠度,让脚本能执行、让人工能复核。例外情况写得越具体,退出旧内容时的取舍就越少依赖临场判断。