多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

EcoPaste 项目 Trellis 编码规格(Spec)写作实战:面向 Agent 的源码驱动编码指南编写规范

EcoPaste 项目 Trellis 编码规格(Spec)写作实战:面向 Agent 的源码驱动编码指南编写规范 桌面应用开发工具【免费下载链接】EcoPaste跨平台的剪贴板管理工具 | Cross-platform clipboard management tool项目地址https://gitcode.com/gh_mirrors/ec/EcoPaste点击查看免费下载导读Trellis 规格spec是写给未来编码 Agent 的项目级编程指引它们应该解释如何在这个仓库里工作而不是泛泛解释一个通用项目应该怎么组织。本文以 .cursor/skills/trellis-spec-bootstrap/references/spec-writing.md 为骨架结合 EcoPaste 仓库中真实存在的.trellis/spec/规格树、Trellis 系列 skill 与 AGENTS.md 中的工程约定系统讲解一条从收集证据 → 划分文件结构 → 撰写内容 → 最终校验的完整规格编写流水线。读完你将掌握如何为每一条规则找到可验证的源码/测试依据如何让规格目录结构与项目模块对齐如何写出无占位符、可执行、能通过 grep 校验的高信号规格文档。一、Trellis Spec 的本质仓库本地编码指南而非通用最佳实践.trellis/spec/是项目的本地工程规格库。Trellis 的理念不是让 AI 死记硬背通用惯例而是在合适的时机注入相关规格、或要求 AI 先读规格再动手见 .cursor/skills/trellis-meta/references/local-architecture/spec-system.md。在 EcoPaste 仓库中这套体系已经完整落地.trellis/spec/规格树按backend/、frontend/、guides/分层组织每层都配有index.md作为导航入口见 .trellis/spec/index.md仓库根目录的 AGENTS.md 被声明为 AI 编码工具的单一真相源并在文件末尾嵌入了 Trellis 指令块指引 Agent 到.trellis/下读取workflow.md、spec/、workspace/、tasks/规格与思考清单guide严格区分规格回答代码该怎么写guide 回答动手前该想什么见 .cursor/skills/trellis-update-spec/SKILL.md。编写规格的起点是 spec-writing.md 给出的核心定位Trellis specs are coding guidance for future agents——它们服务于未来的 Agent 与开发者这个唯一读者因此每条规则都必须能落实到当前仓库的真实代码上而不是停留在理论层面。二、Write From Evidence每条重要规则都必须有证据背书规格最容易犯的错误是凭感觉写规范。spec-writing.md 给出的第一条硬性原则就是从证据出发Write From EvidenceEach important rule should be backed by one of these...任何一条重要规则至少要有以下四类证据之一支撑证据类型含义仓库中的实例源码文件Source file展示项目偏好的写法模式src-tauri/src/clipboard/watcher.rs、ingest.rs展示剪贴板摄取链路测试文件Test file展示期望行为clipboard/read.rs、write.rs、watcher.rs中标注#[ignore]的系统剪贴板往返测试项目文档Project document定义约定AGENTS.md 中的 Rust-First 原则、目录约定、命令与事件命名规范跨文件重复模式Repeated pattern多文件一致的写法#[tauri::command]ResultT, AppError的异步命令模式在src-tauri/src/commands/各文件中反复出现片段与链接的取舍spec-writing.md 明确要求Use short snippets only when they make the rule clearer. Prefer linking to the file path and naming the symbol or behavior.即优先链接文件路径并点名符号symbol或行为只有当短代码片段能让规则更清晰时才插入。这是因为规格文档的价值在于可追溯——读者Agent需要能顺着路径打开源码验证规则而不是在文档里读一段可能已经过时的拷贝。EcoPaste 的.trellis/spec/是这一原则的范本。例如 .trellis/spec/backend/clipboard-pipeline.md 在描述剪贴板摄取主流程后直接列出 6 个参考文件路径src-tauri/src/clipboard/watcher.rssrc-tauri/src/clipboard/read.rssrc-tauri/src/clipboard/payload.rssrc-tauri/src/clipboard/ingest.rssrc-tauri/src/db/items.rssrc-tauri/src/commands/clipboard.rs同时点名关键行为read_with_retryreturns immediately for bothOk(Some(payload))andOk(None). OnlyErris retried——读者无需猜测直接去源码验证即可。收集证据的工具链规格编写前需要先做仓库分析对应 .cursor/skills/trellis-spec-bootstrap/references/repository-analysis.md与 MCP 工具配置对应 .cursor/skills/trellis-spec-bootstrap/references/mcp-setup.mdGitNexus构建仓库知识图谱用于模块边界、执行流、依赖关系与影响半径分析。安装与建索引在仓库根目录运行npx gitnexus analyze检查状态用npx gitnexus status代码变更后重新npx gitnexus analyze保持索引新鲜MCP 服务命令为npx -y gitnexus mcp。常用工具包括gitnexus_query按概念找执行流、gitnexus_context查看符号的调用者/被调用者/引用、gitnexus_impact变更影响半径、gitnexus_cypher直接跑图查询。ABCoder把代码解析为 UniAST用于精确签名、类型形状、类边界与实现引用。安装go install github.com/cloudwego/abcoderlatest解析仓库abcoder parse /absolute/path/to/package --lang typescript --name package-name --output ~/abcoder-astsMCP 服务命令abcoder mcp ~/abcoder-asts。其工具分层为list_repos→get_repo_structure→get_package_structure/get_file_structure→get_ast_node。注意GitNexus / ABCoder 只是工具选项不是平台要求。spec-writing.md 与仓库分析文档都强调——图谱输出不能作为最终权威必须回看相应源码文件核实Do not quote graph output as the final authority until you have checked the relevant source files。同时凡是工具指令只在一个 Agent 宿主上有效的内容属于规格文档要避免的禁区见下文内容标准。三、File Structure规格树必须与项目对齐spec-writing.md 的第二个章节处理规格目录的组织方式核心思想是让规格树跟随项目结构而不是让项目迁就模板index.md作为规格目录的导航文件每个分层目录都必须有 index列出该层包含的主题与适用场景。EcoPaste 的 .trellis/spec/backend/index.md 用一张Guide / Read When表格列出 Architecture、Commands and Events、Clipboard Pipeline、Database and Storage、Settings/Window/Platform 五份文档及其适用时机并附 Layer Map 表说明每个模块的职责边界。开发者会独立查找的主题就拆分例如剪贴板管线数据库与存储命令与事件在 EcoPaste 被拆成三个独立文件见 .trellis/spec/backend/因为 Agent 处理不同任务时只会读其中一份。多个文件重复同一规则就合并如果两个主题会写同一条规则应合并为一份避免维护两份漂移的副本。不适用的模板文件要删除模板只是起点而非契约Treat templates as starting points, not contracts见 .cursor/skills/trellis-spec-bootstrap/SKILL.md模板没有覆盖的重要本地模式则新建文件。在 EcoPaste 中规格树同时包含编码规格层与思考指南层两类内容.trellis/spec/ ├── backend/ # 每层含 index.md 主题文档 ├── frontend/ # 组件、hooks、状态管理、类型安全、质量规范 └── guides/ # 思考清单code-reuse / cross-layer thinkingguides/与backend/、frontend/的职责划分在 .cursor/skills/trellis-update-spec/SKILL.md 中被强调为关键区分类型位置目的内容风格Code-Speclayer/*.md告诉 AI如何安全实现签名、契约、矩阵、用例、测试点Guideguides/*.md帮助 AI动手前想什么清单、问题、指向规格的指针判断规则一句话这是代码怎么写→ 放进 spec 分层目录这是写之前要考虑什么→ 放进guides/。Guide 应该是指向规格的短清单而不是重复规格里的详细规则。四、Content Standards规格段落的内容标准与禁区好段落应包含五要素spec-writing.md 规定一份合格的规格段落应当覆盖规则适用的时机When the rule applies——避免永远/绝不式的绝对化表述要遵循的本地模式The local pattern to follow——给出本项目的具体写法证明该模式的源码或测试文件The source or test files that prove the pattern常见错误或反模式Common mistakes or anti-patterns——让后来的 Agent 知道踩坑路径具体且可靠的验证命令Verification commands or checks——例如cargo clippy -- -D warnings、cargo test。以 .trellis/spec/backend/clipboard-pipeline.md 的瞬态剪贴板读取失败段落为例它完整体现了五要素适用时机Windows 上剪贴板变更通知到达时可能另一个监听者正短暂持有剪贴板本地模式watcher 必须把一次Err视为瞬态在有限窗口内重试当前策略为一次初始读取 15ms/35ms/75ms 延迟共 4 次尝试、最多 125ms 总延迟证据文件src-tauri/src/clipboard/watcher.rs、read.rs测试要求单元测试必须断言立即成功 / 瞬态恢复 / 空内容 / 重试耗尽四种场景的尝试次数单元测试用零延迟原生剪贴板竞争只在被忽略的桌面会话测试中验证验证命令对应cargo test以及桌面会话中手动开启另一个剪贴板监听者进行 Windows 验证。五类必须回避的内容spec-writing.md 给出了明确的 Avoid 清单每一条都是实际编写中高发的失误占位符散文Placeholder prose如TODO: fillTo be filled之类未完成内容——这正是最终校验阶段要用 grep 抓出来的目标通用框架建议Generic framework advice不针对本仓库、任何项目都适用的套话违背解释如何在这个仓库里工作的定位只在一个 Agent 宿主上有效的工具指令Tool instructions that only work in one agent host规格必须保持宿主无关SKILL.md 的 Operating Rules 同样强调Do not write platform-specific instructions大段拷贝的代码块Long copied code blocks与优先链接文件路径的原则相悖代码应以短片段出现且仅用于澄清规则基于单一偶然实现细节的规则Rules based on a single accidental implementation detail某次实现碰巧这么写了、但并非刻意约定不应升格为规则。Trellis 的另一个 skill 补充了内容更新的维度当一次调试、实现或讨论产生了值得沉淀的经验时应分类为设计决策Design Decision、项目约定Convention、新模式Pattern、禁止模式Forbidden Pattern、常见错误Common Mistake或坑Gotcha再按对应模板写入相关规格见 .cursor/skills/trellis-update-spec/SKILL.md。这意味着规格是活文档每一次 bug 修复、每一个原来如此的时刻都是把实现契约写得更清晰的机会。五、Example Shape规格段落的参考骨架spec-writing.md 给出了一个可直接套用的段落骨架全文引用如下## Command Handlers Command handlers should keep argument parsing, validation, and side effects separate. The local pattern is: - Parse CLI flags at the command boundary. - Convert raw inputs into typed task options before invoking core logic. - Keep filesystem writes in the command or service layer, not in template helpers. Reference files: - packages/cli/src/commands/example.ts - packages/cli/test/commands/example.test.ts Avoid passing raw process.argv or unvalidated config objects into shared helpers.拆解这个骨架可以发现它的设计意图主题句第一段直接陈述规则 方向一句话说清为什么要这么写本地模式以无序列表列出具体步骤颗粒度细到可以直接照着实现Reference files给出一份实现文件与一份测试文件——正好对应从证据出发的要求Avoid 句收尾给出反模式且反模式与正模式是同一主题的两个对立面不要把原始process.argv或未校验的 config 对象传入共享 helper。同样的骨架在 EcoPaste 中可以看到真实对应物。比如 .trellis/spec/backend/index.md 的Default Rule段落When adding a feature that needs persisted data, content classification, or OS interaction, design the Rust contract first, then expose a compact command or event for React to render.这正是一条主题句 模式方向式的规则其证据链分散在src-tauri/src/commands/薄命令层与src/constants/命令名/事件名集中维护等文件之中。更进一步跨层契约需要更严格的模板当规格涉及命令/API 签名、跨层请求-响应契约、数据库 schema 迁移或基础设施集成时.cursor/skills/trellis-update-spec/SKILL.md 要求使用 7 段式强制模板Mandatory OutputScope / Trigger范围与触发条件Signatures命令/API/DB 签名Contracts请求/响应/环境变量字段与约束Validation Error Matrix条件 → 错误 的矩阵Good/Base/Bad Cases好/基础/坏用例Tests Required测试与断言点Wrong vs Correct至少一组正反对照EcoPaste 的跨层契约约定也印证了这种严格性AGENTS.md 规定事件名统一用domain://action形式如clipboard://updated、settings://updated、window://visibility、keyboard://nav且命令名、事件名、channel/storage key 等跨端字面量必须集中维护在 Rust 模块常量与src/constants/两处同步更新——这类契约一旦写入规格就必须用 7 段模板完整记录。六、Final Pass收尾校验是规格质量的最后防线spec-writing.md 的最后一个章节是发布前的最终校验Final Pass核心命令为grep -R To be filled\|TODO: fill\|placeholder .trellis/spec该命令在 EcoPaste 仓库中可直接运行用于扫描整个规格树中残留的占位符文本。除 grep 占位符之外Final Pass 还要完成三项人工检查检查链接links规格中的文件路径引用必须真实存在不能指向模板里的虚构文件检查 index 文件index.md必须与实际规格文件集一致——新增/删除了主题文档就要同步更新对应层级的 index.trellis/spec/backend/index.md 与 .trellis/spec/frontend/index.md 的表格应始终能对照真实文件验证检查是否仍有规格在描述模板而非本仓库一条规则如果放到任何开源项目里都成立、却拿不出本仓库的证据它就应该被改写或删除。与 Bootstrap 流程的整体衔接规格编写不是孤立的写作行为它是 .cursor/skills/trellis-spec-bootstrap/SKILL.md 所描述的五步工作流中的一环确认 Trellis 已初始化并检查当前.trellis/spec/树用最合适的工具分析仓库架构GitNexus、ABCoder、语言工具链、直接读源码仅当确实反映真实代码结构时才按包/层拆分规格工作拆分决策参考 .cursor/skills/trellis-spec-bootstrap/references/spec-task-planning.md一个包一份、同一包内按层拆分、跨层模式写横切指南用项目中的真实模式、文件路径、示例与反模式填充或重塑规格文件验证最终规格内部一致、无模板占位符。其 Done Criteria完成标准可作为规格编写是否到位的验收清单.trellis/spec/描述的是当前状态的项目每个相关包/层都有带真实示例的实用编码指引不适用的模板章节已删除index.md与最终规格文件集一致任何所需的 setup 或分析前提已在相关规格/任务笔记中记录。七、把规格写活证据、结构与验证的闭环综合来看spec-writing.md 全文五节Write From Evidence、File Structure、Content Standards、Example Shape、Final Pass构成了一个完整的写作闭环可以总结为一条可执行的编写清单阶段核心动作验收信号证据每条规则关联源码文件/测试文件/项目文档/跨文件重复模式规则能顺着文件路径被验证结构index.md导航、按需拆分/合并/删除/新建目录结构与项目模块对齐内容覆盖适用时机、本地模式、证据、反模式、验证命令无占位符、无通用建议、无宿主绑定指令示例主题句 本地模式 Reference files Avoid 句正反模式成对出现、可照做校验grep -R占位符 检查链接/index/模板残留规格描述的是当前仓库而非模板这套方法的工程价值在于它把AI 协作开发中的隐性知识显性化为可追溯、可执行、可验证的仓库资产。EcoPaste 的实践表明无论是 Rust 后端的剪贴板摄取链路、commands/薄层约定还是前端的 Valtio 状态镜像与虚拟滚动规则都能以规则 证据路径的形式沉淀进.trellis/spec/让未来的 Agent 和开发者在同一个基线上下手。如果你需要在 EcoPaste 或任何 Trellis 管理的仓库中新建或刷新规格可直接以 spec-writing.md 为方法论对照本仓库的 .trellis/spec/backend/clipboard-pipeline.md 与 .trellis/spec/backend/index.md 作为格式范本最后用grep命令做一次无占位符收尾校验即可交付。赞分享桌面应用开发工具【免费下载链接】EcoPaste跨平台的剪贴板管理工具 | Cross-platform clipboard management tool项目地址https://gitcode.com/gh_mirrors/ec/EcoPaste点击查看免费下载相关推荐EcoPaste 的 Trellis Spec 编写指南面向 AI Agent 的基于证据的编码规范实践EcoPaste 的 Trellis Spec 编写指南面向 AI Agent 的基于证据的编码规范实践 本文讲解 EcoPaste 仓库中 Trellis桌面应用为未来 Agent 撰写有据可查的编码规格EcoPaste Trellis Spec 写作实践指南为未来 Agent 撰写有据可查的编码规格EcoPaste Trellis Spec 写作实践指南 本文以 EcoPaste 仓库中 Trellis 规格引导桌面应用EcoPaste 规范写作指南基于证据编写项目专属 Trellis SpecEcoPaste 规范写作指南基于证据编写项目专属 Trellis Spec 本文围绕 EcoPaste 仓库中 Trellis Spec 写作参考 http桌面应用上一篇Homepage 接入 QNAP NASQNAP 监控 Widget 配置详解与实现原理下一篇javascript-obfuscator字符串数组阈值字符串提取策略创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表