<!-- title: 只存artifact：自动化的用完即逝与持久 -->

# 只存 artifact：用完即逝、Resumable 与文件契约——工作流自动化的状态光谱

## 概述

## 一、选题逻辑：工位拆完了，剩下了「住处」

先交代这个维度为什么现在才浮出来。此前各期拆的都是**动作**：怎么上去（部署）、怎么修（CI）、怎么盯（监控）、怎么协作（多 Agent）、怎么停（门）、怎么撤（回滚审计——结论是没人管撤）。动作全拆完之后，本源包里冒出一个把「动作之后的去处」写进门面的新架仓：byJoey/warp-masque-actions，近 7 天新建，首印 358 星，描述一句话：「GitHub Actions 自动生成 Cloudflare WARP (MASQUE) 密钥与 mihomo 配置，产物只存 artifact」。这句话里最有信息量的不是 WARP 也不是 mihomo，是最后五个字——**产物只存 artifact**：干完活的全部产出只落在 CI 的 artifact 里，不设服务器、不建常驻存储、跑完即散。这与同期小而美榜上两个重度状态派形成了罕见的三方对照：nahrek/polyledger 把「Resumable」（可续跑）直接写进名字；diudiu-tech/delivery-harness 给即时配送业务做全状态机的参考实现。一个把状态扔掉，一个把状态续上，一个把状态焊死在业务流程里——**自动化生态第一次在同一天的快照里摆出三种状态哲学**，而「状态」这个字眼此前在本栏十篇自动化存档里从未当过主题。

## 二、评测对比表

权重沿用本栏口径：功能 25%、设计 25%、实战 20%、上手 15%（越高越容易）、社区 15%。存档件照例印存档分、本期不复议；新架三件为描述层估分°；状态姿态为本期新增口径。

| 标本 | 层 | 状态姿态 | 状态住处 | 评分 | 证据级 |
|---|---|---|---|:---:|---|
| CronCreate 族 | 运行时 | 开关型（默认即逝） | 会话 / `.claude/scheduled_tasks.json` | **4.45**（编排沉底存档） | 一手描述 |
| 后台任务 | 运行时 | 即逝执行＋产物回报 | 输出文件 | **4.15**（编排沉底存档） | 一手描述 |
| EnterWorktree | 运行时 | 即逝隔离（零改动自动回收） | `.claude/worktrees/` | **3.55**（编排沉底存档） | 一手描述 |
| delivery-harness | 市场 | 全生命周期状态机 | 业务订单状态 | **3.4°** | 快照描述 |
| polyledger | 市场 | Resumable 检查点 | 单文件 DuckDB | **3.2°** | 快照描述 |
| gstack canary | Skill | 持久证据链 | `.gstack/canary-reports/` | **3.7**（08-29 存档） | 正文引文 |
| superpowers 计划件 | Skill | 跨会话文件契约 | `docs/plans/` | **4.4**（superpowers 期存档） | 正文引文 |
| baoyu-infographic | Skill | 备份即持久 | `*-backup-YYYYMMDD-HHMMSS` | **4.4**（防呆期存档） | 正文引文 |
| warp-masque-actions | 市场 | 纯即逝（产物即遗物） | Actions artifact | **2.95°** | 快照描述 |
| azure 流水线 | Skill | 文件契约接力 | `deployment-plan.md` | —（09-01 存档） | 存档引文 |

## 三、市场端对账：三种状态哲学同日上架

先看三期快照的星轨对账（GitHub Search API 印值，「—」为当期未入榜）：

| 仓库 | 09-05 | 09-06 | 09-07 | 单印表现 |
|---|---|---|---|---|
| nahrek/polyledger | 586 | 620 | 620 | +5.8% 后走平 |
| diudiu-tech/delivery-harness | — | 1850 | 1950 | 首印后 +5.4% |
| ApodexAI/FrontierAgent | — | 1832 | 1881 | +2.7% |
| byJoey/warp-masque-actions | — | — | 358 | 新星榜首印 |

### 3.1 warp-masque-actions：CI 当一次性计算机用（358 星，新星榜首印）

按本栏惯例先声明形态：它不是 SKILL.md 件，是 GitHub Actions 工作流仓——与此前 codenotch（钉用量上限的 macOS 应用）一样属于「非 Skill 件上榜」，卖点不在 Skill 形态而在架构姿态。描述里那句「产物只存 artifact」至少押了三重注：**注一，算力即弃**——Actions 的 runner 本来就是临时容器，它顺水推舟把整条生成流水线的生命周期压缩进一次 run，推断°流程为触发→生成→上传 artifact→runner 销毁；**注二，无服务面**——没有常驻后端就没有可被打的持久端点，攻击面缩到 CI 平台自身的边界内；**注三，隐私即架构**——WARP 密钥这类敏感产出不落第三方存储，artifact 的访问边界就是分发边界，谁能在仓库里取件、谁取不到，权限系统说了算。它与 09-04 期回滚真空的判词恰成一组镜像：回滚真空lament的是「没有件负责往回退」，而这件走得更极端——**压根不留下可以回退的现场**。代价也明摆着：artifact 有保留期，过期即失，取件链路多一步，断网环境下不可复现——省掉的状态迟早要以外挂形式补回来。设计分给四星、总分压到 2.95° 的原因即在此：姿态漂亮，工程闭环没在描述里看见下文。

### 3.2 polyledger：把「可续跑」写成名字（620 星，走平）

描述原文：「Resumable Polymarket indexer: CLOB market metadata plus on-chain trades from Polygon, in one DuckDB」。三个状态词全在句子里：**Resumable**（中断后从断点续跑）、**in one DuckDB**（全部状态收进单文件数据库）。链上索引是天然的长跑任务——Polygon 的历史交易追不完，进程随时可能死，于是「能不能续」直接决定产品成色。有意思的是它的星轨：+5.8% 之后单印走平（620→620），与 warp-masque 的首印脉冲形成两种节奏——续跑派卖的是耐用品叙事，本就不靠首印爆量。还要替它划清一条界线：**可续跑不是可回退**。检查点保证的是「死了能从断点往前接着跑」，不保证「跑错了能退回断点之前」——回滚真空一期量出的那个空位（全链路零回滚件认领），本期两个新架标本依然没有填。

### 3.3 delivery-harness：状态最重的业务件（1950 星，+5.4%）

小而美榜（近 45 天）在册，描述一句话：「AI harness reference implementation for on-demand delivery workflows」（即时配送业务流的 AI harness 参考实现）。配送业务的本质是状态机：接单、取货、在途、送达、异常、退款，每一个状态转移都不可丢、不可乱序。它与 commerce-agents 同形态——官方与准官方都在以「参考实现」卖业务流的**骨**。放在本期的光谱上看，它的意义是标出了重量的上限：当 Agent 接管的是有真实世界后果的业务流，状态就不是工程细节而是业务本体，任何「用完即逝」的姿态在这里都是事故。门原语一期把 delivery-harness 列为「自主叙事」的市场对照件，本期补一句：它同时也是**状态最重叙事**的对照件——门管的是「做不做」，状态管的是「做到哪了」，两件事协作半径越大越是分不开。

## 四、运行时端：即逝是缺省，持久要签字

市场端的三种姿态，运行时端早已给出了自己的裁决。本会话系统层一手文本里，三个原语的状态语义值得逐条念。

**CronCreate 族：一座带开关的坝。** 描述原文写得毫不含糊：「By default (durable: false) the job lives only in this Claude session — nothing is written to disk... the job is gone when Claude exits」——定时任务默认活在会话里，会话死则任务死，磁盘上一个字节都不写；要跨会话存活，必须显式传 `durable: true`，落盘到 `.claude/scheduled_tasks.json`，且描述把使用条件钉死为「仅在用户明确要求持久化时」才允许开启。配套三条款：周期任务 7 天自动过期（烧最后一班后自删，给会话寿命封顶）；错过的持久化一次性任务在下次启动时补班提示。这套设计的立场翻译过来就是：**遗忘是缺省，记住是特权，而特权的发放要用户亲口签字**。这与门原语一期「授权粒度与信息披露量挂钩」的经济学同源——运行时不敢替用户决定记住什么，就像门不敢替用户决定放行什么。

**EnterWorktree：零改动即清算。** 隔离原语给每个并行 Agent 一份仓库副本，而描述里最狠的一句藏在括号里：「auto-cleaned if unchanged」——改动为零的 worktree 自动回收。它把「清算」做成了空间隔离的缺省语义：干活的痕迹要么值得保留（有改动，可合并），要么不配占用磁盘（无改动，即销毁）。对照市场端 useagent 那类「给 Agent 一台云电脑」的叙事，worktree 是同一需求的目录级版本——云电脑的账单按小时计，worktree 的账单按「你是否真的干了活」计。

**后台任务：即逝执行，产物立碑。** 长构建、dev server 转 detached 运行，进程跨轮次存活、退出时自动回报，产物落输出文件。它的状态姿态是混合的：执行体即逝（进程结束即无），产物持久（文件在盘）。而编排沉底一期记录的那条废弃声明恰好补上阴暗面——后台代理的输出文件可能是完整对话记录的符号链接，直接读会撑爆上下文。**即逝与持久的边界处最容易藏事故**：进程没了，文件还在，文件指向的东西比文件本身重几个量级。

## 五、Skill 层：文件是最穷也最通用的持久介质

把视线收回 Skill 层，持久派的四件标本共享同一个介质：**文件**。

**azure 流水线的文件契约**。prepare/validate/deploy 三段之间靠一份 `deployment-plan.md` 焊接——上一段的产出就是下一段的唯一输入，四个单兵期称之为「文件契约」。它不依赖任何外部存储，却做到了跨段、跨会话的一致性：契约在盘上，谁接手谁读盘。

**superpowers 的失忆工程师条款**。writing-plans 对计划文件的定位是本栏引过最多次的设计之一——「计划不是给用户看的，是给一个未来失忆的工程师看的」：执行计划的可能是全新会话，对本次对话一无所知，唯一依赖就是 `docs/plans/` 下那份文件。这和 planning-with-files（09-04 期首拆）是同一哲学的两个尺度：**把状态写进文件，而不是指望会话记忆**。跨会话的工程交接靠它，单会话内的任务清单也靠它。

**canary 的证据链落盘**。gstack 那台重装监控的立场是一句已经进本栏金句库的话：「Screenshots are evidence. Every alert includes a screenshot path. No exceptions.」每条告警必附截图路径，报告落盘 `.gstack/canary-reports/{日期}-canary.md` + `.json`——监控的价值一半在告警那一瞬，另一半在事后审计，前者是即逝的，后者必须持久。

**baoyu 的备份改名**。防呆期记下的军规：「任何要覆盖的文件先改名 `*-backup-YYYYMMDD-HHMMSS`」。在回滚件生态为零的世界里，这一行改名规则就是用户唯一的后悔药——它把持久性从「系统能力」降格为「一行文本纪律」，却恰恰因此成了任何 Skill 都抄得起的形态。

四件连读，一条规律浮出来：Skill 世界没有数据库、没有消息队列、没有持久化框架，**文件是唯一人人可用的持久介质**——而文件的好处恰好在它的穷：可读、可 diff、可 git、可手工补救。

## 六、状态光谱全景

```mermaid
flowchart LR
    ROOT["自动化状态住哪"] --> G1
    ROOT --> G2
    ROOT --> G3
    subgraph G1["纯即逝派"]
        WMA["warp-masque-actions<br/>产物只存 artifact"]
        EWT["EnterWorktree<br/>零改动自动回收"]
    end
    subgraph G2["开关派"]
        CRON["CronCreate<br/>durable 显式签字"]
        BG["后台任务<br/>执行即逝产物落盘"]
    end
    subgraph G3["持久派"]
        AZ["azure<br/>deployment-plan 契约"]
        SUP["superpowers<br/>docs-plans 计划文件"]
        CAN["gstack canary<br/>证据链落盘"]
        BA["baoyu<br/>备份改名军规"]
        POLY["polyledger<br/>Resumable 检查点"]
        DH["delivery-harness<br/>业务状态机"]
    end
```

```mermaid
flowchart LR
    T["run 触发°"] --> R["Actions 临时 runner°"]
    R --> G["生成 WARP 密钥与配置°"]
    G --> A["上传 artifact°"]
    A --> D["runner 销毁°"]
    A --> F["用户按权限取件°"]
```

第二张图为按快照描述与 Actions 公开机制的推断流程°，非仓库原文。

## 七、三条设计规律与安装命令

**规律一：状态住多久，就是信任边界画在哪。** 「产物只存 artifact」画的是隐私边界（不落第三方存储），「durable: true」画的是承诺边界（跨会话兑现需要签字），「全生命周期状态机」画的是责任边界（真实世界后果不可丢）。写自动化类 Skill 的第一步不是选工具，是回答「我的产出该活多久」——答案不同，架构整个不同。

**规律二：把即逝做成缺省，把持久做成显式。** 运行时给出的范式值得所有自动化件抄：默认不留痕，留痕必须声明，且声明权在用户手里。反过来做（默认全持久、隐私靠事后承诺）的件，等不出事故是运气。

**规律三：交接靠文件，不要靠记忆。** deployment-plan.md、docs/plans、canary 报告、备份改名——四个持久标本没有一件依赖会话记忆或常驻服务。上下文会腐烂（superpowers 立项的原始动机之一），进程会死（polyledger 立项的原始动机之一），只有盘上的文件对两者都免疫。

```bash
# 市场端三件（正文均未核验，以仓库 README 为准）
git clone --depth 1 https://github.com/byJoey/warp-masque-actions   # CI 即弃件：生成的密钥与配置在 Actions artifact 页取
git clone --depth 1 https://github.com/nahrek/polyledger            # Resumable 索引器：状态收在单文件 DuckDB
git clone --depth 1 https://github.com/diudiu-tech/delivery-harness # 配送业务流参考实现

# 运行时原语：零安装，随宿主分发
#   定时任务：默认随会话消亡；要求持久时用户明说，才落 .claude/scheduled_tasks.json（7 天自动过期）
#   并行隔离：worktree 改动为零即自动清算
#   长任务：后台运行，退出自动回报，产物读文件不读对话记录
```

## 八、推荐排行榜

- **姿态之最：warp-masque-actions**（2.95°，分最低但概念最锋利）——「产物只存 artifact」五个字把无服务、隐私边界、算力即弃三件事一次说完；工程闭环未验，姿态先立住了。
- **机制之最：CronCreate 族**（4.45）——把「遗忘是缺省、记住要签字」做成了协议级开关，全生态最完整的状态哲学落地。
- **命名之最：polyledger**（3.2°）——把差异化直接写进名字第一个词，Resumable 三音节省掉了整段 README。
- **最值得抄的一行：baoyu 备份改名**——回滚件为零的世界里，一行文本纪律就是全部后悔药。
- **最重的状态：delivery-harness**（3.4°）——提醒所有自动化作者：状态机的重量跟着业务后果走，不是跟着技术品味走。
- **本期方法论遗产**：工位拆完之后拆「住处」。动作层（做不做、怎么修、怎么停）之上还有一层介质层（做完的东西住哪、住多久）——评测一个自动化件，先问状态，再问功能。

## 参考来源

> [!tip] 51学通信知识星球
> **星主：爱卫生**（微信：gprshome201101）——公众号「51学通信」创办者，19 年通信行业运维与讲师经验，著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书（各大电商平台有售）。
> **星球定位**：深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域，主打运维岗位与信令分析。
> **当前规模**：5200 篇主题 / 990 个回答，198 元/年。
> **加入福利**：加入星球后请加爱卫生微信，拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题，另有群内分享。
> **AI 加持**：51学通信知识星球已作为 skill 接入 WorkBuddy，使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例，做总结、找文档和 PPT 等场景全覆盖。

![51学通信知识星球海报-扫码加入](https://wiki.500nian.com/images/zhixingqiu_qrcode.png)
