从 Spec-Driven Development 到 Attractor-Guided Engineering
nop-chaos-flux是一个基于 React 19、Zustand 5 和 Vite 8 构建的低代码运行时框架。它受百度 AMIS 启发但基于创新的设计原理从零开始独立实现包含 JSON Schema 编译器和 runtime也有报表设计器和 Flow Designer 等设计工具。这个项目由单个程序员在2个月的时间内完成初步版本完全使用 AI自动化开发。与一般AI辅助开发不同的是在不断增加功能实现的过程中项目并没有出现质量劣化反而模块边界越来越清楚文档分类越来越稳定测试和审计越来越能抓住真实问题代码质量在不断改进。我最近在公司内部做了一些内部分享把这套实践命名为 Attractor-Guided Engineering吸引子引导工程简称 AGE。后来在代码评审中发现很多人并没真正理解。一些人的操作方式接近随意的 vibe coding另一些人则采用类似 OpenSpec 的 spec driven 开发方式整体偏向任务驱动、逐特性开发。随着工作量累积代码中的不一致性在稳步累积偏离架构设计的情况成为常态。本文剖析 AGE 与 spec driven 开发的区别以及普通业务项目能从nop-chaos-flux的大规模 AI 工程实践中学到什么。核心层级AGE 的核心是如下概念层级状态空间 → 吸引子 → 轨迹 → 控制状态空间系统在当前约束下所有可能演化到的实现状态吸引子系统在长期演化中反复被拉回的稳定结构轨迹每一轮生成、验证、纠偏之后真实留下来的演化路径控制通过局部信号持续影响轨迹的各种机制仓库在现有约束下可能演变出的所有代码、文档和测试组合构成了状态空间人、AI、review、CI 以及文档更新等持续作用构成了演化规则二者叠加形成的 live repo 历史就是轨迹而 attractor则是系统在长期迭代中反复被拉回的那个稳定结构。AI 大规模开发本质是一个动力系统的受控收敛问题。AI 展开状态空间的速度极快关键不是到处增加 guardrail而是要先想清楚系统长期应该被拉回到什么结构。吸引子不是被完整写出的终点不是路线图也不是允许活动的范围。它是少量高阶约束隐式定义出的结构局部实现可以变整体会被这些关系拉回同一类形态。在nop-chaos-flux中最先定义 attractor 的不是 plan、lint、test、audit也不是某个 spec 文件而是docs/architecture/下带 precedence 的 architecture docs。下文中这种带 owner 和 precedence 的 architecture docs 就叫 owner docs。docs/architecture/README.md中明确写明docs/architecture/是当前 final-state architecture baselineflux-design-principles.md是 governing-principles anchorfrontend-programming-model.md拥有顶层 primitive 和 core-boundary precedence其他 normative docs 在各自主题内拥有 local precedence。这些文档不枚举所有正确实现。它们像方程一样定义一个稳定结构有哪些原语哪些依赖方向合法哪些 owner 边界不能破哪些旧模式已经不属于正确状态空间。它们先定义了可持续存在的状态簇后面的实现、测试、计划和审计才有参照。Plan、verification、audit、logs、bugs、testing 都在后面。它们不是 attractor 本身而是让系统轨迹持续贴近 attractor 的 harness。Flux/AGE 不是以 spec 演化为中心而是以 attractor 定义和轨迹收敛为中心。真实研发历史架构文档定义吸引子乍听起来还是像一般的文档治理但是如果仔细查看docs/logs/里的实际研发记录就能看出区别。比如说docs/plans/371-deep-audit-2026-05-19-owner-routing-plan.md是个典型入口。它不直接改代码而是把2026-05-19deep audit 的64个 retained findings 收敛成一份 owner-routing baseline。每条 finding 都有唯一 owner bucket、优先级、successor plan 和 owner-doc obligation。没有 ownerless、没有 multiply-owned、没有静默降级成 vague follow-up。它的作用是先冻结一轮偏离该怎样收口后续的执行计划再把局部轨迹闭合到具体结果面。docs/plans/382-deep-audit-2026-05-19-table-and-crud-owner-state-and-event-contract-plan.md收口 table/CRUD owner state 和 event payloadCurrent Baseline声明显式空数组 owner state 与 event payload 的 live 状态执行项修复 empty-array fallbackfocused tests 证明结果docs/components/table/design.md和docs/components/crud/design.md同步 owner contract最后 repo-wide 的pnpm typecheck、pnpm build、pnpm lint、pnpm test全过独立 closure auditses_1bd9ed593ffeVpkho4lb4wPR6p记录Verdict: acceptable。docs/plans/388-deep-audit-2026-05-19-form-tree-widget-accessibility-plan.md展示了另一种 closureinput-tree 和 tree-select 的可见节点 roving focus、ArrowUp/ArrowDown/Home/End导航、loadingaria-busy/aria-describedby都有 focused proof但计划明确裁定No owner-doc update required。说明 plan 不只是做事清单也负责判断本次变化是否改动了 owner-doc baseline。docs/plans/400-deep-audit-2026-05-19-test-harness-reliability-plan.md和docs/bugs/62-e2e-shared-websocket-error-suppression-fix.md展示了 memory harness 的作用。问题不是某个业务功能失败而是 E2E shared fixture 过滤范围太宽把真实的 transport/runtime failures 也过滤掉了。修复不单改代码还新增tests/e2e/fixtures-hard-gate.spec.ts证明现在会失败并用 bug note 记录规则如果未来测试确实预期 WebSocket failure必须用 per-test allowance不能恢复 fixture-wide suppression。docs/logs/2026/05-19.md和docs/logs/2026/05-20.md不是流水账。它们记录每个 closure slice 的 focused proof、owner-doc 裁定、repo-wide gates、independent audit 和 full-green baseline。这些材料形成一条真实链路owner docs 定义长期结构audit 发现偏离plan 路由并冻结 ownerfocused proof 证明局部结果owner-doc 裁定是否更新logs/bugs/testing 保存跨 session 记忆closure audit 从 live repo 重新判定完成状态。这就是 AGE 里的 harness。目标不是让每次任务显得更完整而是让系统轨迹持续回到 attractor 附近。OpenSpec 的结构强在哪里OpenSpec 是一个有代表性的 spec driven 开发框架它把一类工作结构化了openspec/specs/保存当前能力的行为规格。openspec/changes/保存拟议变更包含proposal.md为什么改、改什么、影响什么、design.md必要时记录技术设计、tasks.md实施 checklist。changes/name/specs/用ADDED/MODIFIED/REMOVED/RENAMED记录规格 delta。archive 通过固定规则把 delta 应用回 main specs。这套机制降低了规格更新成本。OpenSpec 不需要每次让 AI 自由理解整份需求再随意改文档而是用固定 section、requirement header matching、delta application把结构化变更合并回主规格。这种做法很适合行为规格明确、需要可解析、可归档、可回写的场景。OpenSpec 的限制在哪里OpenSpec 的 spec 格式Requirement、Scenario、SHALL/MUST、delta sections对工具解析友好但作为通用项目知识组织方式不够灵活。很多仓库知识不天然长成 requirement/scenario架构层级和 precedence。术语误读历史。外部研究材料PPT、讨论记录。某次源码审计的分析结论。人工测试发现的现象。复杂 bug 的排除路径。一次 plan 为什么不能关闭。如果都要先翻译成 spec/change 才能获得正式位置转换成本很大也会损失原始语境。外部文档、讨论记录、分析报告、bug 复盘本来可以直接成为仓库记忆。强行转成 requirement/scenario反而容易把信息压扁。执行验证方面两者反映了不同的工具哲学。OpenSpec 的tasks.md是 checklist/opsx:verify是可选的 agent 验证技能需手动启用 expanded workflows。archive会检查 task 状态并提示风险但用户确认后仍可继续——严格 closure 留给团队自行约定。Flux plan 则把独立 closure audit 内置为必经环节必须从当前基线开始写清Goals、Non-Goals、执行项每项标注Fix/Decision/Proof、Closure Gates标记completed前必须有独立子 agent 或独立 reviewer 回到 live repo 做 closure audit。docs/plans/361-slot-contract-host-manifest-and-owner-doc-closure-plan.md把当前基线、finding 所有权矩阵、执行阶段、closure gates、被裁定的 deferred 项、独立审查证据放在一起。这不是 checklist而是严格定义了关闭条件并要求独立审计的执行合同。它强调的不是做了什么而是做到什么程度才算真的落地。为什么 spec-driven 容易变成任务导向Spec-driven 的默认结构很容易把人和 AI 的注意力拉回这次 change 怎么完成。一次 change 通常有 proposal、design、tasks、delta specs。这比口头需求好得多但天然围绕一次变更组织为什么改、改什么、怎么做、做完哪些 checklist。时间一长spec-driven 容易变成一种更正式的任务派发系统。这种任务导向有一个隐蔽风险spec 更新了tasks 勾了archive 做了AI 和人都会获得强烈的完成感。但系统是否真的更接近长期结构不是由这次 change 自己证明的。它要回到架构文档、live repo、测试、日志和独立审计里看。如果试图把 spec 长期维护到 Flux 这种精度成本通常更高。Flux 维护的不是单一规格树而是一组职责不同的仓库记忆架构文档定义 attractorplans 定义局部轨迹收口logs 记录演化bugs 保存复杂缺陷诊断testing 保存人工发现analysis 保存研究判断audit 负责回看 live repo。全部压进 spec/change 结构会产生持续转换成本。Spec-driven 可以作为 AGE 的一个局部 harness用来管理行为规格演化。但它不应该替代架构文档也不应该替代 plan closure、logs、bugs、testing 和 audit 这些各自独立的仓库记忆。单独要看 owner doc 怎么办这能看出两种方法的根本差别。如果在 Flux 里只是要查 renderer runtime 的当前 owner contract可以直接从docs/index.md路由到docs/architecture/renderer-runtime.md和相关 reference。你不需要创建一个 change不需要 proposal不需要 tasks也不需要把问题改写成 spec delta。如果只是一次研究可能写入docs/analysis/。如果只是人工测试发现先进入docs/testing/。如果是复杂 bug进入docs/bugs/。如果是一次执行收口才写 plan。稳定基线变化才回到 owner doc。Flux 的文档组织是自由的但不是随意的。自由指的是它不强迫所有知识先进入同一套 artifact workflow。约束指的是每类材料都有明确职责不能乱抢事实地位。OpenSpec 的组织更结构化。它适合把拟议行为变更放进 change package再把规格 delta 回写到 main specs。但通用仓库知识路由不是它默认主线要解决的问题。Tasks 不是 PlanOpenSpec 的tasks.md不对应 Flux 的plans。tasks.md最多对应 Flux plan 里的执行清单片段或者当前会话的 todo。它能帮助 AI 不漏步骤但不回答这些问题当前 live repo 基线是什么本次明确不做什么哪些证据能证明真的完成哪些缺陷不能降级成 follow-up谁独立复核完成状态Flux plan 的价值不在于任务更多而在于它是一份局部轨迹的关闭合同。所以 tasks 对 AI 有必要但 tasks 不是事实源。- [x]只说明执行者声称某项完成了。真正的证明要回到当前代码、tests、owner docs 和独立审查。变化来源不止 spec changeOpenSpec 的路径很清晰围绕 specs 和 changes 组织行为规格演化。Flux 的变化来源更广用户提出的新需求。阅读源码发现的架构漂移。audit 发现的 owner boundary 问题。testing issue 暴露的交互问题。bug note 记录的历史回归风险。外部 research 或 analysis 得出的设计判断。plan closure audit 推翻了此前已完成的判断。这些来源不一定都应该先变成 spec delta。可以先进入 analysis、testing、bugs、logs、plans或者直接更新架构文档。是否需要最终变成行为 contract取决于它是不是长期基线的一部分。这就是 Flux 文档组织自由度的意义。不同来源的信息先停在不同位置而不是全部塞进一个规格演化通道。文件进文件出为什么重要我在分享中多次强调过AI驱动开发的一个最佳实践是文件进、文件出。这不只是文档洁癖——attractor 和 harness 需要承载物。文件进输入不要只留在聊天窗口里。哪怕内容散乱也先写到需求文件、分析文件或计划文件里再在 OpenCode 中这个文件。文件出输出不要只打印在窗口里就结束。重要结论、分析、计划、测试记录、bug 诊断、架构约束都写入docs/按职责分类保存架构规则 →docs/architecture/变更收口 →docs/plans/执行轨迹 →docs/logs/人工测试发现 →docs/testing/复杂缺陷诊断 →docs/bugs/研究判断 →docs/analysis/重点不是多写文档。输出一旦分类落盘就进入了仓库记忆。聊天窗口是临时上下文文件才是仓库记忆。代码是当前实现事实不是唯一事实代码是当前实现的事实源。类型和测试保护当前行为。带 precedence 的 architecture owner docs 定义 attractor——系统长期应该收敛到的结构。Logs、bugs、analysis、testing 记录轨迹和外部化记忆。这些并不冲突。冲突发生在两种情况下文档开始复述易腐烂的实现细节。文档的完成状态被当成代码已经正确的证明。OpenSpec 的 behavior-first boundary 其实也在避免第一个问题behavior spec 应该写可验证行为不写内部实现细节。Flux 进一步强调第二个问题即使文档写的是正确行为也不能替代当前仓库验证。真正关闭时必须回到代码、测试、owner docs、logs 和审计证据。真正的差别OpenSpec 解决的是如何用结构化 specs/changes/delta/archive 组织行为规格的更新关注的是规格的演化流AGE 解决的是AI 高速展开状态空间时系统如何先定义 attractor再通过 plan、verification、audit、logs、bugs、analysis、testing 等 harness让轨迹持续收敛。两个工具解决的问题层级不同。OpenSpec 的强项是结构化规格工作流。Flux/AGE 的强项是以带 precedence 的 architecture owner docs 定义吸引子再用自由但有职责边界的文档路由和严格 closure harness 让仓库长期收敛。从 spec-driven development 到 Attractor-Guided Engineering不是从写 spec走回不写 spec而是从把变更组织成规格更新走向定义系统应向哪里长期收敛并让每一轮 AI 生成都被这个结构持续拉回。普通项目能直接用哪几条不需要照搬 Flux 的完整治理。第一条文件进文件出。输入先写到文件再给 AI输出写入docs/不要只留在聊天窗口。这一步花不了几分钟但它让 AI 不再依赖上下文记忆而是有了可回溯的仓库记忆。第二条给核心业务写一份架构文档定义业务吸引子。不写代码导游只写事实来源、状态转换、所有权边界和常见误解。第三条复杂变更写轻量 plan。包含当前基线、目标、不做什么、执行清单、证明项和关闭条件。完成前由独立会话或独立 reviewer 复核。第四条把反复出现的问题变成仓库记忆。人工问题进 testing复杂 bug 进 bugs研究结论进 analysis高频错误进审计脚本。规格更新是必要的一层。系统收敛还需要 attractor。nop-chaos-flux 已开源GitHub: https://github.com/entropy-cloud/nop-chaos-fluxGitee: https://gitee.com/canonical-entropy/nop-chaos-flux

相关新闻

pytest使用教程

pytest使用教程

pytest使用教程 一、pytest框架 1.1 pytest简介 pytest是Python生态中最强大、最流行的自动化测试框架,具有以下特点: 简洁语法:使用原生assert语句,无需记忆复杂的断言方法自动发现:自动识别测试文件和测试函数强大的…

2026/10/18 1:53:47 阅读更多 →
视频实时翻译软件各国视频声音翻译生成字幕神器音视频转文字字幕小工具效果测试支持100多种语言

视频实时翻译软件各国视频声音翻译生成字幕神器音视频转文字字幕小工具效果测试支持100多种语言

大家好,我是大飞哥。看外语视频的时候,你是不是也经常因为没有字幕而看得一头雾水?想给自己拍的口播视频加字幕,又得一句一句听写,一段几分钟的视频能折腾一两个小时。市面上的在线转文字工具不是收费就是限制时长&…

2026/10/17 21:48:03 阅读更多 →
视频处理器 v1.2功能强大的导入视频蒙版文件视频横屏转竖屏处理工具

视频处理器 v1.2功能强大的导入视频蒙版文件视频横屏转竖屏处理工具

大家好,我是大飞哥。做短视频的朋友都知道,现在的短视频平台基本都是竖屏(9:16)的天下,但很多高质量的素材——电影片段、课程录像、游戏画面、老视频素材——偏偏都是横屏(16:9)的。直接拉伸吧…

2026/10/20 6:49:20 阅读更多 →

最新新闻

Python+MySQL学生管理系统:可视化界面落地与避坑指南

Python+MySQL学生管理系统:可视化界面落地与避坑指南

简介:这是一套面向Python与数据库初学者的学生管理系统实战项目,采用Python编写客户端逻辑、MySQL负责数据存储,适合正在学习桌面应用开发或需要完成课程设计的学生参考。压缩包共2个文件,包含1个py主程序与1个sql数据库脚本&…

2026/10/20 17:19:49 阅读更多 →
MySQL反斜杠转义全解析:从字符串插入到LIKE查询的避坑指南

MySQL反斜杠转义全解析:从字符串插入到LIKE查询的避坑指南

先交代一个真实翻车现场。有天业务方发来一张截图,某张配置表里的 Windows 路径字段,原本应该是C:\Users\某应用目录\data\config.ini,结果库里存成了C:Users某应用目录dataconfig.ini,所有反斜杠集体失踪。我一开始以为是应用层写…

2026/10/20 17:19:49 阅读更多 →
电商评论情感分析实战:从数据清洗到BERT蒸馏部署全记录

电商评论情感分析实战:从数据清洗到BERT蒸馏部署全记录

这个项目标题一看就是从实战里踩出来的,数据坑、部署、硬核笔记,说明作者真刀真枪跑过完整链路,不是拿公开数据集跑个demo就完事。文本分类和情感分析在NLP里属于入门必练但做好极难的方向,难就难在数据永远是脏的、标签永远是偏的…

2026/10/20 17:19:49 阅读更多 →
TensorFlow工业级AI工程实践:从计算图到TFX流水线

TensorFlow工业级AI工程实践:从计算图到TFX流水线

1. 这不是“学个框架”那么简单:TensorFlow到底在解决什么问题?很多人第一次听说TensorFlow,是在某次技术分享会上听到“谷歌开源的深度学习框架”,或者在招聘JD里看到“熟悉TensorFlow者优先”。但如果你真去翻它的GitHub仓库、读…

2026/10/20 17:19:49 阅读更多 →
双线性插值原理与C语言实现:图像缩放算法详解

双线性插值原理与C语言实现:图像缩放算法详解

简介:这份资源围绕双线性插值方法及实现展开,面向图像处理、计算机图形学与数值计算方向的学习者,尤其适合希望用C语言理解插值数学原理并动手实现的开发者。包内共31个文件,以h头文件、cpp源文件、obj目标文件为主,辅…

2026/10/20 17:19:49 阅读更多 →
Prescan+Simulink+CarSim联仿:多工况自动驾驶避障模型搭建与标定实战

Prescan+Simulink+CarSim联仿:多工况自动驾驶避障模型搭建与标定实战

做自动驾驶避障仿真的人,迟早会跟三个名字绑在一起:Prescan、Simulink、CarSim。标题里那套“不同工况避障模型”,说白了就是让一辆装有虚拟传感器的车,在模拟道路环境里遇到静止车、前车急减速、旁边车道突然切进来、行人横穿这些…

2026/10/20 17:18:48 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →