惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Apple Machine Learning Research
Apple Machine Learning Research
博客园 - 三生石上(FineUI控件)
雷峰网
雷峰网
WordPress大学
WordPress大学
S
SegmentFault 最新的问题
博客园 - 叶小钗
The Cloudflare Blog
T
Tailwind CSS Blog
Hugging Face - Blog
Hugging Face - Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
月光博客
月光博客
小众软件
小众软件
罗磊的独立博客
酷 壳 – CoolShell
酷 壳 – CoolShell
大猫的无限游戏
大猫的无限游戏
阮一峰的网络日志
阮一峰的网络日志
V
V2EX
美团技术团队
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 聂微东
量子位
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
宝玉的分享
宝玉的分享

V2EX

我用 AI 写代码,但终端管理反而成了累赘——于是我做了 codux [调研] 各位在公司都用什么 ide 和 agent 写代码? 老运维 share 一个运维平台 看到有公司考核 token 指标,很好奇大家上个月的 AI 账单是多少 GLM-Coding 调用持续报错: z.ai 的 Lite 套餐几乎无法使用,官方 Pro/Max 是否稳定? 现在还有什么渠道可以稳定安全地使用 Claude 吗? 上海漕河泾内推,本组有 2 个 hc,一个后端,一个前端,预算都是 20k 左右,不打卡,氛围好 如果 V2EX 上有一组不永久保存聊天记录(比如只保存 7 天或者 24 小时)的聊天室,那么会开启哪些有用或者有趣的可能? gemini cli 貌似挂了,一直返回 403 第一次在自媒体上赚到钱 收集了最近在使用的低价 GPT, Gemini,邮箱等 AI 会员的小店合集 讨论个大实话:现在企业还在说 AI 编程提效 20%, 30%的,真的太落后,没用懂 AI。因为包括很多前沿公司,已经狂奔到提效 200%-500%的情况 [招聘][远程][币安] 前端/后端/QA/iOS/Android 至少 3 年以上经验 目前有大量 HC 欢迎投递 Chatgpt Pro 用量用不完的可以开这些设置 面试的时候好像遇到钓鱼了,给各位避个坑 cursor 年续费 22 号到期, 自动续费是否还是老的计次套餐呢 被两件破事毁掉的一下午,琐碎的内耗消磨人的精力 使用 Planet 存储 Codex 的会话或者重要信息 如果业务部门领导不要你开发功能,而是要求你教会它用 claude code 开发功能,你会怎么做? 分享一个 MacOS 接绿联 CM818 USB 转 DP 转接器使用感受 我的 HR 朋友 10 年老 Java ,非全大专,大家帮忙看看简历 开源了一个 AI 口语练习工具,音素级发音评分,完全免费可自部署 V2EX 上有哪些你觉得很有趣、印象深刻的妹纸? 字节为啥不出个国内版 Vercel? 有在大马的朋友吗? 问个运营商问题 你们在有领导的公司大群发过的最大胆的消息是什么 公司裁员,目前没有工作。想试试摆摊,做一个移动鲜啤打酒车 我的硬盘 Memblaze Pblaze 5 Linux 下不识别,给 Linux 内核提交了补丁, AI 说有望被合并 只有我一个人觉得 codex 不好用?
请教一个 openspec 问题
yukinotech · 2026-01-20 · via V2EX

不太懂 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: "..." }