在 /src 中使用 Markdown —— 将 Markdown 视为源代码
TL;DR
- Markdown 正从文档转向源代码。
- 将 Markdown 与代码一起存放在
/src/md文件夹中。 - 从该 Markdown 生成代码和测试,而不是依赖临时的提示会话。
Why Markdown Should Be Treated as Source Code
Markdown 满足传统源文件的核心属性:它是纯文本、可对比、可搜索,并且在拉取请求中易于审查。大型语言模型(LLMs)可以原生读写 Markdown,而人类也可以无需专用工具进行编辑。因此,Markdown 可以充当驱动代码生成的 意图 层,就像编译器的高级规范驱动机器码一样。
The Problem with Ephemeral Prompting
当前的代理工作流通常通过一系列临时提示生成代码。生成的代码成为事实上的真实状态,而提示本身则散落在 Slack、Linear 或私人笔记中。这种“提示腐化”导致:
- 未来开发者和代理失去上下文。
- 无法对原始规格进行版本控制。
- 代理必须重建缺失意图时,增加 token 使用量。
Benefits of a /src/md Directory
Locality of Intent
将 Markdown 紧邻其描述的代码存放,消除了“远距离规格”的问题。开发人员无需离开源代码树即可查看模块的合理性,代理也能无需额外查找即可获取相同上下文。
Human‑Agent Symmetry
人类和 LLM 都可以消费相同的 Markdown 文件,确保意图、架构决策和数据模型的单一真相来源。
Version Control and Review
Markdown 文件参与与代码相同的 Git 工作流:它们可以被对比、lint 检查,并在拉取请求评论中讨论。这使得意图变更可审计且可审查。
How Markdown Complements Tests
测试对于自动化正确性验证仍然至关重要,但它们是低层级的,常常掩盖了功能存在的 原因。通过将意图存储在 /src/md 并从该意图生成测试,团队可以实现清晰的分工:
- Markdown – 行为、架构和数据的规格化描述。
- Tests – 生成代码是否符合规格的具体验证。
Proposed /src/md Layout
具体的文件夹结构有助于保持 Markdown 的组织性和可发现性:
src/
md/
README.md # 代理和人类的入口点
TODO.md # 模块的待办任务
OVERVIEW.md # 模块的技术概览
features/
FEATURE_1.md # 功能特定的描述
data/
DATAMODEL_1.md # 数据模型定义
api/
API_1.md # API 合同和用法
infrastructure/
INFRA_1.md # 基础设施依赖
子文件夹是可选的;它们允许团队按逻辑维度(功能、数据、API、基础设施)分离关注点。
Community Feedback Highlights
- Prompt rot concerns – @aDyslecticCrow 警告称,存储过时的提示可能会使仓库杂乱并增加 token 使用量。共识是保持 Markdown 精简、及时更新,并将其视为 意图 而非每次提示的完整记录。
- Clutter vs. Value – @benrutter 认为过多的 Markdown 可能会膨胀仓库并难以维护。他建议主要在审查或回归分析时使用 Markdown,而非永久保存每次提示的副本。
- Tooling support – @xg15 询问关于 Markdown 的语法高亮和导航支持。现有的 IDE 扩展已提供丰富的 Markdown 支持,而 Varar 或 Cucumber 风格的 linter 工具可强制一致性。
- Alternative placement – @ktpsns 和 @maxk42 更倾向于将文档保留在
/docs或单独的 README 文件中。关键区别在于 局部性:将意图紧邻代码放置(在/src/md中)可减少实现与理由之间的心理距离。 - Literate programming inspiration – @sroerick 将该方法类比为一种松散编译的 DSL 或文学编程,强调需要“规格匹配代码”的工作流。
- Standardization suggestions – @divbzero 建议在每个子目录中使用
README.md而非中央索引,以符合常见的仓库惯例。
Practical Workflow
- 创建或更新
/src/md中的 Markdown 文件,描述新功能、数据模型或 API。 - 运行 LLM,以 Markdown 作为提示来生成或更新代码。
- 自动从同一 Markdown 生成测试(例如使用自定义生成器或
mdtest等工具)。 - 在单个拉取请求中审查 Markdown 和生成的代码。
- 将任何手动编辑同步回 Markdown,以保持意图与实现的一致性。
Potential Pitfalls and Mitigations
- Stale Markdown – 建立 lint 步骤,标记未被最近提交引用的 Markdown 文件。
- Token cost – 保持 Markdown 精炼;将其视为高层级规格,而非每次提示的逐字记录。
- Non‑deterministic generation – 接受 LLM 输出可能变化;依靠测试捕捉回归,而非精确的生成代码。
Conclusion
随着 AI 使代码生成变得廉价,最有价值的资产变成了代码背后的 意图。将该意图以 Markdown 形式存储在 /src/md 目录中,提供了局部性、版本控制以及人类与代理共享的媒介。尽管具体布局会演进,但核心理念——将 Markdown 视为源代码而非外围文档——为代理式开发工作流提供了一条务实的前进路径。
Sources
相关
- 项目
- 项目
- Dispatch
- 项目
- 项目