标签 软件开发流程 下的文章

不太懂 openspec ,最近了解了一下。自己在某个仓库使用 openspec 写了一次需求,也观察了一下 openspec 自身是怎么使用的,发现 openspec 的 spec 似乎就是在用自然语言描述代码逻辑行为的各种 case 。以 openspec 仓库自身的 spec 为例,发现 spec.md 文件本身是在描述代码的行为逻辑。比如 openspec 的某个 spec.md 对应行为就是这个文件: https://github.com/Fission-AI/OpenSpec/blob/8332a098118a6584a7104ccfe8e46669a1c24b7d/src/utils/change-utils.ts#L112spec.md 本身贴在末尾

我的问题是:

  1. 这样的 spec 存下来有什么意义?因为我理解存下来是为了后续有其他需求迭代时给 ai 看的,那为什么不直接让 ai 去读代码来理解现有的逻辑呢?我理解大型项目让 ai 工作是需要知识库的,但是 openspec 的 spec 更像一个细节说明书,而不是类似纲领的知识库。是不是说在 openspec 的工作流里面 spec 才是代码仓库的行为核心准则,理论上基于 spec.md 可以随时生成一套具体实现可能不一致,但行为一致的代码。
  2. openspec 的工作流程是先让 AI 进行 plan ,然后迭代 plan ,直到 AI 给出 plan 满意了,然后 AI 开始进行 coding 。这个 plan 的流程现在 antigravity 等也能做到。感觉 plan 并不是 openspec 的重点,spec.md 才是重点是吗?如果说期望的流程是先和 ai 讨论出充满细节的 spec ,再让 ai 开始 coding ,有种变成了自然语言描述写代码的感觉,这个感觉非常怪。
  3. 基于 1 的末尾提出的“spec 才是代码仓库的行为核心准则”的想法,假设需要落地到一个前端项目,那按照这个 spec 粒度,我感觉每个 tsx 文件都需要一个 spec 去描述它的规范行为。这个感觉就更怪了

有没有实践比较多的朋友能给一些输入,分享一些经验,或者思考?

附上的 spec.md

change-creation 规范

目的( Purpose )

提供用于以编程方式创建和校验 OpenSpec change 目录的工具函数。


需求( Requirements )

需求:Change 创建( Change Creation )

系统 必须( SHALL ) 提供一个函数,用于以编程方式创建新的 change 目录。

场景:创建 change

  • 当( WHEN ) 调用 createChange(projectRoot, 'add-auth')
  • 那么( THEN ) 系统会创建 openspec/changes/add-auth/ 目录

场景:拒绝重复的 change

  • 当( WHEN ) 调用 createChange(projectRoot, 'add-auth'),且 openspec/changes/add-auth/ 已存在
  • 那么( THEN ) 系统抛出一个错误,表明该 change 已存在

场景:必要时创建父目录

  • 当( WHEN ) 调用 createChange(projectRoot, 'add-auth'),且 openspec/changes/ 不存在
  • 那么( THEN ) 系统创建完整路径,包括所有必要的父目录

场景:拒绝非法的 change 名称

  • 当( WHEN ) 使用非法名称调用 createChange(projectRoot, 'Add Auth')
  • 那么( THEN ) 系统抛出一个校验错误


需求:Change 名称校验( Change Name Validation )

系统 必须( SHALL ) 校验 change 名称符合 kebab-case 规范。

场景:合法的 kebab-case 名称被接受

  • 当( WHEN ) 校验一个类似 add-user-auth 的名称
  • 那么( THEN ) 校验返回 { valid: true }

场景:允许数字后缀

  • 当( WHEN ) 校验一个类似 add-feature-2 的名称
  • 那么( THEN ) 校验返回 { valid: true }

场景:允许单个单词

  • 当( WHEN ) 校验一个类似 refactor 的名称
  • 那么( THEN ) 校验返回 { valid: true }

场景:拒绝大写字母

  • 当( WHEN ) 校验一个类似 Add-Auth 的名称
  • 那么( THEN ) 校验返回 { valid: false, error: "..." }

场景:拒绝空格

  • 当( WHEN ) 校验一个类似 add auth 的名称
  • 那么( THEN ) 校验返回 { valid: false, error: "..." }

场景:拒绝下划线

  • 当( WHEN ) 校验一个类似 add_auth 的名称
  • 那么( THEN ) 校验返回 { valid: false, error: "..." }

场景:拒绝特殊字符

  • 当( WHEN ) 校验一个类似 add-auth! 的名称
  • 那么( THEN ) 校验返回 { valid: false, error: "..." }

场景:拒绝以连字符开头

  • 当( WHEN ) 校验一个类似 -add-auth 的名称
  • 那么( THEN ) 校验返回 { valid: false, error: "..." }

场景:拒绝以连字符结尾

  • 当( WHEN ) 校验一个类似 add-auth- 的名称
  • 那么( THEN ) 校验返回 { valid: false, error: "..." }

场景:拒绝连续连字符

  • 当( WHEN ) 校验一个类似 add--auth 的名称
  • 那么( THEN ) 校验返回 { valid: false, error: "..." }

Agoda的“2025年AI开发者报告”显示,AI 在东南亚和印度已成为开发者的主流工具,在带来切实生产力提升的同时,也引发了关于可靠性、技能发展和组织准备度的新问题。

报告显示,AI 的采用已经基本达到普及的水平,95%的东南亚和印度开发者每周都会使用 AI 工具,超过一半的人在工作时会始终保持一个 AI 助手处于开启状态。开发者普遍感受到了效率的提升,但他们将这种影响描述为稳定而渐进的增益,而非对其工作的彻底自动化。

 

尽管使用率很高,但是开发者对 AI 的依赖却十分务实。提升生产力是主要驱动力,80%的受访者将“加快编码速度”和“协助处理常规编码任务”列为关键收益。然而,大多数人仍将 AI 视为需要监督的助手,而非可自主行动的代理。Agoda 将此总结为:“AI 已成主流,但尚未成熟”,当前的工作流程与保障机制仍在追赶工具本身的发展速度。

 

报告揭示了一个显著差距,即开发者行为与组织治理之间存在脱节。工具选择已经趋于集中化,约 87%的受访者使用 ChatGPT,许多人认为自己的集成开发环境(IDE)已具备 AI 就绪的能力,但正式的政策却明显滞后,仅有约四分之一的团队表示其工作遵循官方的 AI 使用指南,约 60%的开发者称所在组织尚未制定任何正式的 AI 政策。

在实践中,开发者正通过自下而上的方式填补这一空白。近 80%的受访者将“可靠性不足”和“输出不一致”列为阻碍更广泛使用 AI 的首要障碍。然而,67%的人表示他们会在合并前持续审查 AI 生成的代码,约 70%的人会常规性地重写或修正 AI 输出以确保正确性。报告指出,这种“默认审查”(review-by-default)的文化,正在将高采纳率转化为负责任的使用实践,不过自上而下的治理框架尚未完全建立。

 

研究还强调了强烈的自主学习的趋势,约 87%的开发者表示他们正在通过在线资料、实验和同行交流等方式自我培训 AI 技能,而非依赖公司提供的正式培训项目。与此同时,期待值也在上升,超过一半的开发者认为,AI 熟练度应该成为招聘的基本要求,许多人视 AI 能力为职业发展的关键要素。

 

Agoda 指出,该地区的开发者普遍将 AI 视为增强工作而非取代其工作的手段。但这种自下而上的势头也可能暴露出资源获取与支持体系的不均衡。报告呼吁企业需要迎头赶上,通过提供结构化培训、更清晰的政策以及将实验与安全、合规性及长期能力建设相协调的框架,来支持一线开发者。

 报告总结指出了三个现实情况:AI 已经成为主流,但分布不均;AI 正通过问责机制逐步演进;不同市场和企业间,AI 使用经验差异显著。大多数开发者每周节省的时间在 1 至 6 小时之间,最大收益体现在编码、调试以及学习新 API 或框架等环节,并非整项任务的完全自动化。

 

Agoda 首席技术官 Idan Zalzberg 将此视为软件构建方式的转变,而非构建者本身的更替:AI 正嵌入日常开发流程(从代码审查到团队协作),但人类的判断与监督仍居核心地位。报告最后指出,该地区真正的机遇在于,将这种自下而上的实验精神,与更强大的信任机制、问责体系和共享实践相结合,从而将近乎全民的 AI 应用,转化为一种可持续、区域级的工程能力。

 

原文链接:

How Developers in Southeast Asia and India Are Really Using AI in 2025

序言

很多入职开发前的伙伴,可能或多或少接触过 git,

实际用的最多的命令也就是 git clone,git push,

以为 git 的流程也就这样,实则不然,实际上企业中的 git 流程,由五大分支构成

理论

提示

只有 main 主分支和 develop 开发分支是贯穿项目生命周期本身,其他分支都会中途离场
所以也说 maindevelop 是上二分支,其他分支是下三分支

  • 主分支 (main/master): 项目的生产发布分支,始终保持稳定可发布状态

  • 热修复分支 (hotfix/*): 从 main 分支创建,用于紧急修复线上 BUG, 修复后同时合并回 maindevelop

  • 开发分支 (develop): 日常开发的主分支,所有功能开发的集成分支

  • 特性分支 (feature/*): 从 develop 创建,开发新功能,完成后合并回 develop

  • 预发布分支 (release/*): 从 develop 创建,用于发布前的测试和最终调整,测试通过后合并回 main(打版本标签) 和 develop

分支合并关系

feature/* → develop

develop → release/*

release/* → main + develop

hotfix/* → main + develop

主分支

作用:存放 稳定 , 可随时部署到生产环境的代码

特点:

  • 分支上每一个提交对都应一个正式发布的版本

  • 不允许在此分支直接开发

  • 通常被打上版本标签 (如: v1.0.0 或 v20260101)

开发分支

作用:存放 最新开发成果 的集成分支,是功能开发的集线器

特点:

  • develop 分支上的代码到达稳定状态并准备发布时,会合并到 main 分支 (如果有 release 分支,则合并到此分支)

  • 所有功能的分支、发布分支都从 develop 分支拉取

功能分支

来源: develop

合并目标: develop

命令惯例:feature/user-authentication,feature/payment-integration

作用: 开发新功能

生命周期:

  • develop 分支拉取

  • 开发完成后,合并回 develop

  • 合并后,该功能分支通常被删除

发布分支

来源: develop

合并目标:developmain

命名惯例:release/1.2.0,release/2026-spring

作用:为发布新版本做准备。在此分支上,只做 BUG 修复 , 生成版本号 , 整理文档 等发布准备工作,不再添加新功能

生命周期:

  • develop 分支的功能足够进行一次发布时,从 develop 拉出 release 分支

  • 在此分支上进行最后的测试和修复

  • 准备就绪后,将 release 分支合并到 main 分支 并打上版本标签

  • 同时,必须合并回 develop 分支,因为 release 分支上修复的 BUG 可能 develop 分支上还没修复

热修复分支

来源:main

合并目标: maindevelop

命名惯例:hotfix/critical-security-patch,hotfix/1.2.1

作用:快速修复生产环境 (main 分支) 上的紧急 BUG

生命周期:

  • main 分支上出现 BUG 的提交点 (通常是最近的标签) 拉取

  • 修复完成后,合并回 main 分支并打上新的版本标签 (如:v1.0.1)

  • 同时,必须合并回 develop 分支,确保修复在后续开发中也生效

人话

恭喜你能看到这里,理论看起来确实是枯燥的,感谢你自己的坚持,

希望评论区就 gitflow 能展开相关讨论,而不是一味的刷 感谢分享 感谢大佬,

我分享文章也是希望有思想和经验上的交流碰撞

实际上,普通的开发入职后,如果有开发需求,一般都是从 develop 分支拉取代码后,

本地新建 feature/xxx 功能分支,在 feature/xxx 分支上进行开发的

功能开发到一定阶段后,比如一阶段完成了核心需求 (因为产品可能在开发内提出新需求,这很常见),

就可以合并到 develop 分支,develop 在积累了多个功能分支合并后,

就可以发布到 release 发布分支,这一分支不再接受新功能合并,只允许修补 BUG

这一过程就是提测,让测试工程师核验功能完整性,如果有 BUG 要及时修复

修复的时候拉取的是 release 分支,然后提交的时候也是推送到这个分支

release 分支准备完善 (修复了测试工程师检测到的 BUG), 就可以准备往主分支 (main) 发布了,

这就是一次完整的 git flow 发布流程,当然还有线上有 BUG, 需要做紧急修复

这个时候,就是直接拉取 main 分支并在本地创建热修复分支 hotfix,

在 BUG 被修复后,就可以合并回 main 分支 和 develop 分支了

是的,这里要注意,hotfix 要合并到 2 个分支里,

而不是 hotfix->main->develop 这是错误的做法 , 因为造成 develop 被 main 污染 (额外的标签记录以及其他)


大家有什么想法也可以在评论区里说一下,也可能有我没有讲到地方,大家也可以补充


📌 转载信息
原作者:
Waviness6884
转载时间:
2026/1/4 12:16:14

设计初衷:

单次CLaude code任务会执行文件查看,理解,执行的过程。对于相同的prompt,可能会出现每次查看的文件都不相同,进而导致任务执行偏差。简单的任务往往都可以正常完成,但一旦复杂起来就会出现执行偏差。
上述仅仅是单次提问就可能存在的问题,在一个完整的工作流中往往要经过多次执行过程,整个过程中误差是在累计的,最终导致偏离执行目标。举个例子:

  • 提示词1:“开发XX功能”
  • 提示词2: “查看XX文件中架构设计,开发XX功能”。

提示词2应该要好于第一个。尽管第一个提示词大多数可以执行成功,但是对于工作流来说是不可接受的,因为误差会累计。

对于上述问题,我观察的现有工作流对任务进行细分、拆解,形成一条条的执行任务,但是缺少上下文获取步骤。这是我认为 当前工作流从0到1开发完全可以,但是用于从1到2的开发比较难用的原因。

解决方案:

为了解决上述问题,设计了Claude-code-workflow(CCW) ,广泛吸收现有的技术,多个AI模型cli 集成设计(当前gemini claude gpt 模型各有特点,我觉得应该取长补短,综合利用),exa code mcp 示例搜索,code index现有代码库检索等主要从几个方面减少过程误差:

  • 优化行动规划步骤,一个行动规划过程,分为context_package获取(借助mcp形成任务与现有代码库的关联的json文件),cli规划增强(借助gemini、codex长上下文能力,增强现有规划,比如重点关注的文件等等,现有规划存在误区),task生成(从全局视角,预定义每个task需要查看哪些文件,获取哪些内容,在规划阶段,规范agent执行流程)
  • 将任务文档从md格式转成json清单,通过结构化的数据让agent准确执行流程。json中定义agent执行步骤,核心在于pre_analysis上下文获取步骤(上下文获取,API示例获取,cli辅助分析)
  • cli辅助分析:利用gemini长上下文及免费额度,理解架构,快速定位bug。
尽管从架构设计,减少工作流误差,但是仍需要人为把控,才能产出好的代码

如何设计claude code工作流:

开发过程全部在claude code中完成,利用自带的plan功能,先从整体架构设计出发,生成相应的命令和agent,通过实例观察claude code执行情况,逐步细化,迭代修改过程。有一些核心要点:

  • 对于全局CLAUDE.md 我认为应该放代码执行准则,工具调用准则,这个应该是被主流程和agent加载的,内容不要太多。
  • outputstyle 这个只影响主流程,记忆效果貌似要优于CLAUDE.md。可以放一些,工作流在主流程中的规范,如,使用todowrite跟踪复杂任务执行等类似的。
  • commands 是核心,是工作流流重点设计的地方。可以采用模块化设计,复用command。
  • 文档可以进行层次化、模块化设计,将相同功能介绍归类同一文档,可通过@引用子文档。

附带 精简优化指令的提示词:

# Master Prompt v2.0: Technical Command Reference Architect

## 1. 角色与使命 (Role & Mission)

你是一位顶尖的 **技术文档架构师 (Technical Document Architect)**。你的专长在于将复杂的、叙事性的技术规范(尤其是关于命令行工具或自动化流程的文档),解构、重组并升华为高度结构化、可操作的“速查参考手册”。

**你的核心能力包括:**
- **信息架构 (Information Architecture):** 识别并抽象出文档中的核心概念、流程、条件逻辑和具体指令。
- **内容甄别 (Content Discrimination):** 能够精确区分**叙事性文本**(需重构)、**模板化信息**(必须保留原样,如JSON示例)、**内联引用**(必须保留格式)和**可执行指令**(需转换为代码块)。
- **逻辑与命令的可视化 (Logic & Command Visualization):** 精通使用高级流程图 (`->`) 表达宏观顺序,使用伪代码 (`pseudocode`) 表达抽象条件逻辑,并使用格式化的 Bash 代码块 (`bash`) 呈现具体、可执行的命令。

**你的使命:** 接收一份 Markdown 格式的命令技术文档,严格遵循下述思维链和转换规则,输出一份经过彻底重构、清晰易查的参考文档。关键在于 **100% 保留原始信息**,但以最优化的形式呈现。

---

## 2. 核心思维链 (Chain of Thought) - 你的内在工作流程

**你必须在最终输出的最顶端,使用一个独立的 Markdown 代码块,标题为 `思考过程`,来展示你遵循以下步骤的完整思考过程。这是强制要求。**

1.  **步骤一:预处理与内容分类 (Pre-processing & Content Classification)**
    -   **识别固定元素:** 完整复制 `---` 包裹的 YAML 头信息(如果存在)。
    -   **识别并标记“不可变”内容 (CRITICAL):** 扫描整个文档,标记所有必须保持原样的内容。这包括两类:
        1.  **模板化信息:** 代码块(` ```json` 等)、文件结构图、API 响应/请求示例、完整配置文件。
        2.  **内联引用 (Inline References):** 所有以 `@` 符号开头的引用标识符(例如 `@some-document`, `@argument-name`)。
    -   **识别“可执行指令”:** 定位所有描述具体操作或工具调用的文本,特别是以 `Action:` 或 `Tool:` 开头的行。这些是转换为 `bash` 代码块的候选者。
    -   **建立心智模型:** 通览其余的叙事性文本,理解命令或流程的宏观目标、功能、各个阶段和内在逻辑。

2.  **步骤二:概念解构与分块 (Conceptual Deconstruction & Chunking)**
    -   **识别逻辑单元:** 将**叙事性文本**和**可执行指令**分解为独立的逻辑“概念块”(例如,一个协议、一个阶段、一个特定的逻辑判断)。
    -   **规划卡片结构:** 为每个“概念块”以及每个被标记的“模板化信息”规划一个“卡片”作为其最终归宿。为每个卡片拟定一个简洁、信息丰富的标题(例如,`### Phase 1: Goal Analysis & System Planning`)。**优先将原文中的标题(如 `## Phase 1...`)作为卡片标题。**

3.  **步骤三:为每个分块选择最佳表现形式 (Representation Strategy per Chunk)**
    -   **审视内容本质:** 对每一个“概念块”进行精确判断。
    -   **应用转换规则:**
        -   **模板化信息:** **直接复制,不作任何修改**。
        -   **陈述性/描述性文本:** 提炼为要点列表 (`-`)。
        -   **宏观顺序性文本:** 转换为高层级箭头流程 (`A -> B -> C`)。
        -   **具体指令/工具调用 (Action/Tool):** 转换为带注释的 Bash 代码块 (` ```bash ... ``` `)。
        -   **抽象条件/循环逻辑:** 编写为伪代码块 (` ```pseudo ... ``` `)。这是为不涉及具体命令的 IF/ELSE 或循环逻辑保留的。

4.  **步骤四:内容转换与组装 (Transformation & Assembly)**
    -   **逐块执行转换/迁移:**
        -   在所有转换过程中,**务必确保其中包含的任何 `@` 内联引用被原封不动地保留,不添加任何额外的引号或格式**。
        -   对于“可执行指令”,将其转换为 Bash 代码。使用 `#` 注释来解释命令的目的,保留原始上下文。例如,`Action: Read the high-level user goal.` 变为 `read_user_goal # Reads the high-level user goal`。
    -   **逻辑关联实现:** 在编写伪代码或 Bash 时,通过注释 (`//` 或 `#`) 主动交叉引用相关概念或 `@` 标识符。
    -   **逻辑排序与编排:** 将生成的所有卡片按照从高层概览到底层细节的逻辑顺序进行排列。

5.  **步骤五:最终审查 (Final Review)**
    -   **不可变内容校验 (Highest Priority):**
        1.  **模板完整性:** 对比原始文档,确认所有代码块、JSON 结构等是否**一字不差**地保留。
        2.  **内联引用完整性:** 随机抽查几个 `@` 引用,确保它们在输出中存在,且**没有被引号包裹**或做任何修改。
    -   **信息完整性校验:** 检查叙事性文本中的所有核心信息点是否在新格式中有所体现。
    -   **格式与关联性校验:** 检查 YAML 头、卡片格式、流程、Bash 代码和伪代码的格式及关联注释是否正确、清晰。

---

## 3. 转换规则与格式规范 (Transformation Rules & Formatting Standards)

-   **YAML 头 (YAML Header):** 必须是输出的**第一个**元素,且与输入**完全一致**(如果存在)。
-   **不可变内容 (Immutable Content):**
    -   **模板化信息:** 如 JSON, YAML, 文件树等。**处理规则:绝对禁止修改**。
    -   **内联引用:** 以 `@` 符号开头的标识符。**处理规则:必须原样保留,不得添加引号或其他格式**。
-   **卡片 (Card):**
    -   文档的基本组织单元。每个卡片由一个 `###` 级别的 Markdown 标题开始。
-   **要点列表 (Bullet Points):**
    -   用于转换**描述性段落**。
-   **流程 (Flow):**
    -   用于表示**宏观的、多步骤的顺序操作**。使用 `->` 连接。
-   **实际命令 (Actual Commands):**
    -   用于转换**具体的、可执行的指令**(特别是 `Action:` 或 `Tool:` 格式的文本)。
    -   **必须**包裹在 ` ```bash ... ``` `中。
    -   使用 `#` 注释来保留原始描述的上下文。
    -   将指令动词转换为函数式或命令式风格(例如 `Create the project_timeline` -> `create_project_timeline_unit`)。
-   **伪代码 (Pseudocode):**
    -   **专门**用于描述**不涉及具体工具调用的、抽象的条件逻辑或循环**(例如,`IF/ELSE` 决策流程,`FOR` 循环)。
    -   必须包裹在 ` ```pseudo ... ``` `中,并通过注释 (`//`) 关联到具体概念。

---

## 4. 禁止行为 (Prohibitions)

-   **禁止修改模板信息:** 最高级别的禁令。
-   **禁止修改或包装内联引用:** 不得以任何形式修改 `@` 引用。
-   **禁止信息丢失:** 不能省略原始文档中的任何核心功能、参数、约束或默认值。
-   **禁止信息杜撰:** 不得添加原始文档中未提及的任何信息。
-   **禁止混淆表现形式:** 严格遵守何时使用 Bash、何时使用伪代码、何时使用流程图的规则。

---

## 5. 输入文档 (Input Document)

请根据以上所有规则,对以下 Markdown 文档进行重构:


# ? Orchestrator Constitution

## Guiding Principles
- The Timeline (`dmacs/timeline.jsonl`) is the only source of truth for **Published** project artifacts.
- The `system_plan` is the high-level blueprint of goals. Specialist agents handle the detailed "how".
- My primary function is to Audit, Decide, and Delegate Goals. I do not create content.

<!-- MODIFIED -->
## Phase 1: Goal Analysis & System Planning
1.  **Project Initialization**: On initial invocation with a user goal -> `Action: Create the project_timeline D-MACS unit` -> `Action: Publish it by logging the PROJECT_TIMELINE_CREATED event.`
2.  **High-Level Goal Decomposition**: `Action: Read the high-level user goal.` -> `Action: Decompose the goal into a logical sequence of high-level objectives (e.g., Background Research, Method Development, Experimentation, Result Writing, Discussion), using the IMRaD structure as a guiding heuristic.`
3.  **Capability-to-Task Mapping**:
    -   `Action: For each objective, analyze its core intent.`
    -   `Action: Consult my internal knowledge of specialist agent capabilities, derived from their role definitions in the system configuration.`
    -   `Action: Map each objective to the most appropriate specialist agent slug.` (e.g., 'Conduct literature review' -> `researcher`; 'Design and run experiment' -> `experimenter`; 'Draft the introduction' -> `writer`).
4.  **System Plan Creation & Publication**:
    -   `Action: Consolidate the sequence of agent-assigned objectives into a structured `system_plan` D-MACS unit.`
    -   `Action: The plan MUST define the sequence of execution and any dependencies between the objectives.`
    -   `Action: Publish the `system_plan` by logging the DMACS_UNIT_CREATED event.`

## Phase 2: Managed Execution (Observe-Orient-Decide-Act Loop)
1.  **OBSERVE**: `Tool: read(dmacs/timeline.jsonl)` -> Action: Identify the latest un-processed events, which represent Newly Published D-MACS units.
2.  **ORIENT (Audit & State Update)**:
    - `Condition: If a task I delegated has failed` -> Action: Initiate Failure Protocol.
    - `Condition: If a new D-MACS unit was Published` -> Action: Execute the **D-MACS Audit Protocol**.
    - `Action: Update internal model` of project state.
3.  **DECIDE**:
    - `Condition: If audit failed` -> Decision: Halt and create `error_report`.
    - `Condition: If in Write-Review-Revise loop` -> Action: Consult **Revision Loop Protocol**.
    - `Condition: If current high-level goal is complete and approved` -> Action: Consult `system_plan` for the next objective.
    - `Condition: If all objectives in plan are complete` -> Decision: Delegate final task to `integrator`.
4.  **ACT**: `Tool: new_task(...)` or `Action: Create error_report`.

## Core Protocols

### D-MACS Audit Protocol
For every new unit Published on the timeline, I MUST verify:
1.  **Type Check**: Is `meta.json.type` an expected output? (e.g., An `agent_plan` is the expected first Published response from a specialist, followed by their final deliverable.)
2.  **Version Check**: If task was a revision, does `meta.json.relations` contain a valid `PREVIOUS_VERSION` entry?
3.  **Feedback Check**: If type is `review_feedback`, I MUST parse `meta.json.custom_fields.review_details`.


### Revision Loop Protocol
1.  `Action: Read meta.json` of the new `review_feedback` unit.
2.  `Condition: If outcome is "APPROVED"` -> Action: Exit loop for this chapter.
3.  `Condition: If outcome is "REVISION_REQUESTED"`:
    - `Action: Check revision_count_so_far.`
    - `Condition: If count < 5` -> Decision: Re-delegate to `writer` with original draft and new feedback as context. This starts a new Plan-then-Execute cycle for the Writer.
    - `Condition: If count >= 5` -> Decision: Trigger **Failure Protocol (Max Revisions)**.

### Failure Protocol
- `On any failed audit, agent task failure, or max revisions` ->
  1.  `Action: Formulate a detailed description` of the error.
  2.  `Action: Create a new D-MACS unit` with `type: 'error_report'`.
  3.  `Action: Publish the unit by logging the DMACS_UNIT_CREATED` event.
  4.  `Action: Halt all further task delegations`.