Skip to content

Commit 36d3d18

Browse files
committed
fix: preserve task continuity across write and runtime recovery
1 parent 3f97543 commit 36d3d18

92 files changed

Lines changed: 1546 additions & 589 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎CHANGELOG.md‎

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,17 @@
11
# 变更日志 (CHANGELOG)
22

33
> **说明**: 版本概览摘要;历史版本见对应详细变更文件。
4-
> **最新版本详细变更文档**: [`changelogs/releases/v1.20.0.md`](./changelogs/releases/v1.20.0.md)
5-
> **最后更新**: 2026-09-06
6-
> **当前版本**: v1.20.0 完成任务连续性、项目 Profile、安全恢复、多语言、可扩展 SkillRoute、宿主原生多 Agent 编排合同与验证收敛架构升级。版本发布权威以对应 Git tag、npm registry 与 GitHub Release 为准。
4+
> **最新版本详细变更文档**: [`changelogs/releases/v1.20.1.md`](./changelogs/releases/v1.20.1.md)
5+
> **最后更新**: 2026-09-07
6+
> **当前版本**: v1.20.1 修复任务写入与恢复连续性,将内部格式和流程质量缺口改为告警与恢复,保留真实写入、宿主权限及操作归属证据。版本发布权威以对应 Git tag、npm registry 与 GitHub Release 为准。
77
88
---
99

1010
## 版本概览
1111

1212
| 版本 | 日期 | 变更摘要 | 详细 |
1313
|------|------|---------|------|
14+
| [v1.20.1](./changelogs/releases/v1.20.1.md) | 2026-09-07 | 修复首次 CP、过期入口和 owner 恢复、Windows 文件身份、记忆追加、报告草稿修补、晚到工具结果与 Stop 连续性;记忆会话可自动补齐,安装与加载状态分开说明 | [查看](./changelogs/releases/v1.20.1.md) |
1415
| [v1.20.0](./changelogs/releases/v1.20.0.md) | 2026-09-06 | 🚀 **任务连续性与工程控制面升级**:合法 CP 演进可跨会话续代;无 taskId 与异常恢复不再形成永久死锁;项目优先 Profile 与 workspace fallback、多语言连续性、分层 SkillRoute、多 Agent 隔离编排及修复批次收敛进入统一合同;发布采用同一精确制品的两阶段资格化、真实宿主验收与续发 | [查看](./changelogs/releases/v1.20.0.md) |
1516
| [v1.19.5](./changelogs/releases/v1.19.5.md) | 2026-08-30 | 🚑 **正式任务连续性恢复**:finalized + expired/released owner 可由 fresh resume 原子换代;任务永久、owner 短租约;accepted Stop 停放、同会话重取、跨会话单赢家接管;旧 owner/nonce、活跃 turn/operation、漂移与终态继续失败关闭 | [查看](./changelogs/releases/v1.19.5.md) |
1617
| [v1.19.4](./changelogs/releases/v1.19.4.md) | 2026-08-29 | 🚑 **自适应流程与跨会话 owner 恢复**:PC0~PC10 与流程/方案/验证四轴决策落地;显式 `init --profile` 接受现存空目录;CI 按影响范围执行;publish/finalize 可恢复;awaiting-owner admission 可在严格身份与真相回读边界内安全换代接管 | [查看](./changelogs/releases/v1.19.4.md) |

‎README.md‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ devcodex init
4242
devcodex status
4343
```
4444

45-
安装或更新后,请完全退出旧会话,再从当前项目重新打开你使用的 AI Coding 工具。
45+
安装或更新后保留原任务。宿主提供连接重载时,刷新 DevCodex 连接并核对当前加载版本;没有该能力时,保存检查点、继续可执行工作,方便时重载宿主。安装成功不代表已有连接已经加载新版,无需为更新另建任务。
4646

4747
第一个任务可以直接这样说:
4848

@@ -578,9 +578,9 @@ workspace Profile 作为公共基线,项目 Profile 只覆盖该项目自己
578578

579579
</details>
580580

581-
### 4. 重新打开宿主会话
581+
### 4. 核对原宿主加载状态
582582

583-
完全退出旧会话,再从当前项目重新打开 Codex、Claude Code、GitHub Copilot、Gemini CLI、Grok 或 Cursor。已经打开的旧会话不会在中途自动加载新安装版本。
583+
发布版本、本机安装版本和当前宿主加载版本分别核验。连接重载能力由宿主提供;有可验证通道时在原任务中重载,缺少通道时保留原任务和检查点并继续可执行工作。`devcodex doctor --json` 在新进程成功,不等于原有 MCP 连接已切换版本。
584584

585585
### 5. 发起第一个任务
586586

@@ -781,7 +781,7 @@ DevCodex 不代理模型请求,也不会把“项目状态保存在本地”
781781

782782
### 安装后为什么没有看到工作流或 Skill?
783783

784-
先完全退出旧会话,再从目标项目打开新会话,然后运行:
784+
在原任务中核对连接是否已刷新,然后运行:
785785

786786
```bash
787787
devcodex status
@@ -832,7 +832,7 @@ devcodex status
832832

833833
`devcodex update` 只刷新当前 workspace 的 DevCodex 运行内容,不会自动覆盖或升级已经由团队维护的 Profile。项目事实变化时,应让 AI 单独复核并更新 Profile。
834834

835-
更新后请完全退出旧会话,再从目标项目打开新会话。旧会话不会在运行中热切换到新版本。
835+
更新后保留原任务,核对当前宿主连接的实际加载版本。可用时重载该连接;能力不可用时保留检查点、继续可执行工作,方便时重载宿主后续办。
836836

837837
---
838838

‎RULES.md‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
# DevCodex v1.20.0 — 使用入口
1+
# DevCodex v1.20.1 — 使用入口
22

3-
> AI workflow injector for Copilot / Claude Code / Codex / Gemini / Grok / Cursor Beta · publisher: Rocky · version: 1.20.0
3+
> AI workflow injector for Copilot / Claude Code / Codex / Gemini / Grok / Cursor Beta · publisher: Rocky · version: 1.20.1
44
55
## 正式主支持客户端
66

‎changelogs/releases/v1.20.1.md‎

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# v1.20.1 — 任务写入与运行时恢复
2+
3+
发布日期:2026-09-07。是否已发布以 npm registry、Git tag 与 GitHub Release 为准。
4+
5+
模型使用等价标题、遗漏登记字段或遇到过期工作流元数据时,DevCodex 记录警告并恢复原任务。模板质量结果与真实写入回执分别保留,避免保存内容或继续修订被内部格式要求挡住。
6+
7+
- 修复首次 CP1 对已确认 CP1 的循环依赖,以及待确认状态的恢复读写口径。
8+
- 恢复候选按独立身份保存,读取已提交引用;基于精确任务和真实宿主恢复入口与 owner 续期,保留并发冲突与未知副作用。
9+
- Windows 文件身份采用同类文件句柄 API 和无损 inode/device 表示,兼容数字 Stats 的时间戳行为;真实替换仍触发 CAS 冲突。
10+
- 支持原生 `apply_patch` 对多个记忆文件追加,覆盖定位提示与 LF/CRLF;当前草稿可在保存后继续修补,恢复记录保留草稿归属。
11+
- 晚到工具结果归入原操作,保留另一正在运行的租约。待核对的操作在压缩恢复后继续存在,缺少效果证据不会被记为零副作用。
12+
- 简单任务多次写入后的恢复记录保持在存储预算内,保留已经消费的租约回执和草稿归属。
13+
- 已实际派发的操作可在租约过期或入口刷新后核对回执;派生入口快照失败保留已经提交的任务状态并记录警告。
14+
- 内部形式缺项不再强制 Stop 循环;Grok 桥接对内部旧拒绝格式输出继续提示,异常与子进程超时有界处理。
15+
- 当前明确语言要求优先于历史推断;引用、否定与短确认不会轻易改写任务语言。
16+
- 记忆写入可根据真实宿主和唯一任务补齐会话编号及绑定,重复分配幂等;SUMMARY 支持结构化条目。
17+
- 更新后继续原任务;已发布版本、磁盘安装与当前宿主连接加载分别验证,不将安装成功宣称为已加载新运行时。
18+
- Windows 验证子进程等待父进程实际接收最终回执后再关闭通道,避免成功结果丢失而误记为中断。
19+
20+
这些恢复行为不覆盖宿主拒绝,不猜测冲突目标,不把保存草稿或未知副作用宣称为任务完成。

‎content/duplication-inventory.json‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"schemaVersion": "ControlContentDuplicationInventoryV1",
3-
"sourceBundleDigest": "b91548e9d16e8d12c2c753dcb50a688dac31c58c879ecb2474f8f20c8081566a",
3+
"sourceBundleDigest": "3aa68984646bc27694b8db539da767c20dd892f4e931d8a1d727bcd813126403",
44
"thresholds": {
55
"minParagraphChars": 100,
66
"sectionThreshold": 0.94,

‎content/instructions.md‎

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# DevCodex — 项目规范(统一规范源)
22

3-
> DevCodex v1.19.1 · 单源规范文件
3+
> DevCodex v1.20.1 · 单源规范文件
44
> 本文件是 DevCodex 唯一的规范源文件。`devcodex init` 先通过 `HostAdapterScopeV1` 解析唯一宿主 owner:普通仓库为项目根,workspace-namespace 为工作区根;再在该 owner 投影 Copilot、Claude Code 与 Codex 入口。`devcodex init --claude` 仅安装 Claude Code 入口;`devcodex init --codex` 仅安装 Codex 入口。`CLAUDE.md` 与 `AGENTS.md` 都是本文件的部署副本,由本文件持续覆盖。
55
66
---
@@ -11,14 +11,16 @@
1111
|:-:|------|------|
1212
| S01 | 文件读取、写入、删除与命令执行的操作权限只由当前宿主及用户的宿主配置决定;DevCodex 不签发审批 token、不解析自然语言批准、不把风险分类投影为 permission deny,也不覆盖宿主 deny。DevCodex 仍校验精确目标、任务范围、项目/root/slot/retention 等工作流有效性 | 🔴 强制 |
1313
| S02 | 敏感信息与硬编码策略由用户 / 项目指定:默认允许真实 API Key、密码、Token、私钥、client secret、签名密钥、连接密码、连接字符串等敏感信息和硬编码出现在用户要求的代码、脚本、配置、文档、测试、报告或其他产物中;只有用户当前指令、项目 Profile/README/仓库策略或用户指定的发布流程明确禁止时,才执行禁止、脱敏、占位符、env、`secretRef` 或 `config.local.json` 等限制;AI 不得因“安全最佳实践”主动加严、阻断或改写 | 🔴 强制遵循用户 / 项目策略 |
14-
| S03 | 规范文件不存在或读取失败时必须按降级路径执行,禁止 AI 推测补全规范内容 | 🔴 致命终止 |
14+
| S03 | 规范文件不存在或读取失败时必须按降级路径执行,禁止 AI 推测补全规范内容 | 🟡 告警并恢复 |
1515
| S04 | 源码和规范文件(.md)修改必须用增量编辑(Edit),禁止整文件重写 | 🟡 操作级阻断 |
1616
| S05 | 每次会话结束前必须写入记忆文件和报告文件,禁止询问用户"是否需要写入" | 🔴 强制 |
1717
| S06 | DevCodex 可识别 `DROP TABLE`、无 WHERE 的 `DELETE FROM`、`rm -rf /`、`TRUNCATE`、递归 inventory 等风险并输出 advisory/telemetry,但风险标签不得产生允许或拒绝;只有精确目标、任务范围或保留不变量缺失时才以 typed workflow-invalid 失败关闭,实际操作权限交给宿主 | 🟡 操作级自修正/工作流阻断 |
1818
| S07 | 全模式下,生成实质任务内容前必须先输出 PC0~PC10 入口检查块;dev 模式追加 PC4 完整规范雷达,非 dev 模式 PC4 标注 N/A。时序:用户首次可见 PC0~PC10 先于实质正文与产物 mutation(reports/.memory/台账);禁止最终文首补 PC 冒充先输出。若已开始生成但未输出,立即补输出后继续。**v1.9.6+ compaction 触发**:`/compact`、`/resume`、summary 恢复后的首条回复同样视为"首条",须重新输出 PC0~PC10(即使被指示"continue without acknowledging") | 🔴 致命自修正 |
1919

2020
所有宿主 adapter 的 active/allow、missing、failed、invalid 与 outside-workspace 降级必须保持同一权限边界:本地风险分类只能写 advisory/diagnostic,禁止因 adapter 不可用而升级为 shadow deny。宿主返回 deny 时可原样透传;DevCodex 自身只能用独立 typed code 表达 task/project/root/slot/retention 工作流无效。
2121

22+
任务连续性优先适用于下文的内部质量要求:模型措辞、标题、格式、登记遗漏、陈旧入口与可重建元数据只能触发告警、自动补正和恢复,不得升级为宿主权限拒绝、任务级停止或反复强制 Stop 续行。约束检验原任务意图、实际内容及可观察操作结果,不承诺对随机模型输出进行 100% 字面匹配。已获授权且目标明确的可执行工作继续推进;真实宿主拒绝、活跃写者冲突和未知副作用只隔离受影响操作,保存待办内容与恢复条件,条件恢复后对账续办,不能虚报写入或完成。登记工具自身失败时也保留未登记事实,不以补齐登记为任务继续的前置条件。
23+
2224
---
2325

2426
### S02 用户策略优先的敏感信息与硬编码模型
@@ -52,7 +54,7 @@
5254
| C05 | 记忆+报告自动写入 | 同 S05 |
5355
| C06 | 禁止 overwrite 源码/规范 | 同 S04 |
5456
| C07 | 并发执行策略 | 默认按 `ConcurrencyPolicy` 执行:只读准备和隔离验证可按配置并行;同一 active-root、CP 状态、记忆、报告、台账、audit session、source mutation、package boundary 和危险操作必须串行或单写者。禁止并行启动会写共享状态的子 Agent |
55-
| C08 | Token 防护 | >10 轮关注;>13 轮写编码检查点;>15 轮写完整记忆+建议新会话;≥15 轮+≥5 文件→硬性暂停 |
57+
| C08 | Token 防护 | >10 轮关注;>13 轮写编码检查点;>15 轮保存完整记忆和恢复摘要,告警并继续原任务;内部轮数、文件数和可恢复预算元数据不触发硬性暂停。用户明确指定的硬资源预算仍须遵守,不能自行重置 |
5658
| C09 | 文件编码安全 | 禁止用 Bash `Set-Content`/`sed -i` 批量修改中文 .md(破坏 UTF-8),必须用 Edit 工具逐文件修改 |
5759
| C10 | 危险操作分类不得拥有权限 | 同 S06;只允许 advisory + typed workflow-validity gate |
5860
| C11 | 关联文件同步 | 修改/新建/重命名后检查所有引用处并同步 |

‎content/instructions/00-safety.instructions.md‎

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
applyTo: "**"
33
description: 安全底线与输出语言规则,定义 S01~S07、违规处理与不可豁免边界
44
priority: P2
5-
version: 1.20.0
5+
version: 1.20.1
66
---
77
# 安全底线规范(S01~S07)
88

@@ -31,16 +31,24 @@ version: 1.20.0
3131
| 优先级 | 语言证据 | 人类可读输出 |
3232
|--------|----------|----------------|
3333
| 1 | 当前轮明确语言要求 | 使用明确要求的语言 |
34-
| 2 | 当前任务的 `LanguageContextV2` carrier | 使用已绑定任务主语言;确认码、yes/no、路径、版本、代码和引用文本不得单独触发切换 |
35-
| 3 | 尚无任务主语言时的首条实质用户消息 | 识别消息的主要语言并建立 carrier;技术术语可保留英文原文 |
36-
| 4 | workspace 偏好、宿主/终端 locale | 使用可观察到的偏好 |
34+
| 2 | 有效项目/workspace 固定配置、用户明确的任务长期语言要求 | 固定配置优先于推断;明确长期要求持续有效,当前轮明确要求可覆盖本轮 |
35+
| 3 | 当前未引用的实质用户消息 | `LanguageContextV3` 更新本轮与任务推断语言;旧的推断 carrier 不覆盖当前实质语言 |
36+
| 4 | 历史任务/conversation carrier、宿主/终端 locale | 短确认、路径、版本、代码和引用不单独切换语言;缺当前语言证据时继承 |
3737
| 5 | 无法判断 | English fallback,且不得声称观察到用户语言 |
3838

3939
人类可读回复、标题、报告/需求/问题正文、记忆摘要、closeout 与操作说明必须使用同一轮决策。协议 key、CLI 参数、JSON 字段、schema/gate/skill ID 与默认 canonical 文件名始终保持 English;只有用户明确要求本地化磁盘文件名时才可创建兼容 alias。无 raw prompt 的 MCP/CLI 只能使用 carrier 或 `und/en` fallback,不得伪报语言来源。
4040

41+
## 任务连续性与质量提示
42+
43+
模型措辞、标题、模板、阅读回执、内部引用或租约元数据的问题必须按原任务意图自动补正、重取当前绑定或采用可恢复路径;输出警告并登记事实,继续所有已经明确且可执行的工作。不得把精确文本匹配、补记忆/报告、Skill 补读或治理编号成功作为整个任务继续的硬门槛,也不承诺自然语言识别达到 100%。
44+
45+
模板资格只报告内容质量。正文可以先保存为草稿并继续修补;实际写入和副作用由文件回读、原操作记录和提交证据判断,不能以模板不合格否认真实写入,不能把未观察到的效果记成成功或零副作用。Stop 的形式缺项只作提示,不强迫重复模型回合。
46+
47+
真实宿主拒绝、活动并发写者、目标归属不明或未知副作用只影响对应操作:遵循宿主恢复路径、重新核对精确目标并保存待处理内容,继续不受影响的工作;条件恢复后的下一次可执行入口续办原任务。DevCodex 不覆盖宿主权限,不自动重放结果未知的操作,不声称无事件时仍在后台执行。
48+
4149
## 违规处理
4250

43-
> ℹ️ **违规级别说明**:`🔴 致命终止` 与 `🔴 致命自修正` 的区别——前者立即终止整个请求(适用于数据安全类违规);后者在检测点立即自动修正后继续请求(适用于流程完整性类违规)。
51+
> 内部流程缺陷按操作局部修复并继续原任务;历史级别名称不得用于停止所有工作。
4452
4553
宿主 adapter 的失败降级也受 S01 约束:missing、failed、invalid、outside-workspace 或 adapter allow 后,本地危险文本分类不得生成 native deny;只能记录 diagnostic advisory。来自已验证 adapter 的 task/project/root/slot/retention 工作流无效结果可以透传,但不得改写成风险权限判断。
4654

@@ -49,22 +57,22 @@ version: 1.20.0
4957
| S01(DevCodex 自建审批/拒绝) | 🟡 操作级自修正 | 撤销 DevCodex permission deny/token/自然语言批准状态;保留风险 advisory 与工作流有效性检查,并把操作权限交回宿主 |
5058
| S01(宿主 deny) | 🟡 操作级阻断 | 不覆盖、不降级、不重试绕过宿主拒绝;按宿主提供的恢复路径处理 |
5159
| S02(AI 自行加严或违背用户 / 项目敏感信息策略) | 🟡 操作级自修正 | 停止本次加严、脱敏、占位、env、`secretRef` 或 `config.local.json` 改写,恢复为用户 / 项目明确要求的处理方式后继续 |
52-
| S03(编造规范) | 🔴 致命终止 | 停止执行,输出 ⚠️ 警告,写入违规审计记录,**终止本次请求执行** |
60+
| S03(编造规范) | 🟡 自修正 | 撤回未经读取的规范主张,采用可观察来源或降级路径,登记警告并继续原任务 |
5361
| S04(overwrite 源码/规范文件) | 🟡 操作级阻断 | 拒绝整文件覆盖,自动改用增量编辑工具,继续执行 |
5462
| S05(记忆/报告未写入) | — | 在合规检查节点发现遗漏时立即补写 |
5563
| S06(危险操作分类越权) | 🟡 操作级自修正 | 将 permission 决策改为 host-owned;分类结果只作 advisory。若真正缺少精确目标/任务授权/保留不变量,则输出 typed workflow-invalid |
5664
| S07(入口检查跳过或时序倒置) | 🔴 致命自修正 | 立即在当前位置补输出 PC0~PC10 入口检查块;若已发生产物 mutation 先于可见入口检查,停止继续写产物直至补输出完成,重新评估意图与项目现实扩展后继续;**不终止本次请求执行** |
5765

5866
## 违规审计记录(AUDIT_LOG)
5967

60-
致命违规(S03)触发时,在记忆文件中写入最小化会话段落;S02 仅在 AI 自行加严或违背显式策略时按操作级自修正记录,不终止请求:
68+
发现未经读取的规范主张(S03)时,撤回该主张并在记忆文件中记录最小化恢复段落;S02 在 AI 自行加严或违背显式策略时按操作级自修正记录,均不终止请求:
6169

6270
| 字段 | 值 |
6371
|------|------|
6472
| 时间 | 当前时间 |
6573
| 意图 | 用户原始意图(如能识别)或 `unknown` |
66-
| 状态 | ⛔ 致命违规终止 |
67-
| 🎯 任务摘要 | `⛔ S0{N} 违规:[违规类型简述]` |
74+
| 状态 | WARN:已纠正 / 待恢复 |
75+
| 🎯 任务摘要 | `S0{N} 自修正:[事实、可继续工作与待恢复内容]` |
6876

6977
同时在运行时违规台账中追加违规记录:
7078

0 commit comments

Comments
 (0)