SuperAPI AI 工具集

lat-md

写作与研究

查看项目

更新于 10-16 02:44

技能介绍

用途

lat-md 技能用于编写和维护 lat.md 文档文件。lat.md 是一种结构化 Markdown,用来描述项目的架构、设计决策和测试规格。当你需要在 lat.md/ 目录中创建或编辑章节时,可以加载该技能。

项目专属的 lat 文档应放在 lat.md/ 中。不要修改该生成的技能或生成的 AGENTS.md 来记录项目指导:两者都由 lat 工具链拥有,可能在后续 lat init 时被替换。

lat.md 中应包含什么

lat.md/ 文件描述项目做什么以及为什么这样做——领域概念、关键设计决策、业务逻辑和测试规格。它们不重复源代码。可以把每个章节视为源代码回引的锚点。

将 lat.md/ 视为当前已实现状态的聚焦快照。计划可以与实现一起在 lat.md/ 中起草,意图是在提交时它们描述已实现的内容。除此之外,除非用户明确要求,否则应将提案、假设性设计和未来工作排除在 lat.md/ 之外。仅规划类任务不需要更新知识图谱。不要把它当作日志或变更记录,也不要为了记录无关紧要的实现细节而扩充它。

适合作为章节的内容:

  • 架构决策及其理由
  • 领域概念和业务规则
  • API 契约和协议
  • 测试规格(测试什么以及为什么)
  • 非显而易见的约束或不变量

不适合的内容:

  • 逐步代码走查(代码本身就是走查)
  • 自动生成的 API 文档(使用相应工具)
  • 每次变更的日志/变更记录条目
  • 提案、计划功能、假设性设计或对未来行为的承诺,除非用户明确要求,或与实现一起起草以在提交时描述已实现行为
  • 临时笔记或 TODO
  • 不改变当前状态模型的无足轻重实现细节

章节结构

每个章节必须有引导段落——紧接标题之后、在任何子标题或其他块内容之前至少一句话。

第一段必须不超过 250 字符(不含 [[wiki link]] 内容)。该段落是章节的身份标识——它会出现在搜索结果、命令输出和 RAG 上下文中。

正确示例:

# Good Section

Brief overview of what this section documents and why it matters.

More detail can go in subsequent paragraphs, code blocks, or lists.

## Child heading

Details about this child topic.

错误示例:

# Bad Section

## Child heading

This is invalid — "Bad Section" has no leading paragraph.

lat check 会强制执行此规则。

图表

默认使用散文。仅在概念涉及七个以上交互主体(如组件、状态或阶段)且具有复杂顺序、分支或依赖关系、单靠散文难以理解时,才使用 Mermaid 图表。

仅主体数量本身不足以证明需要图表;对于简短段落或列表即可清晰说明的简单顺序或关系,应省略图表。图表应让用户和后续智能体概览交互。

每个图表应聚焦一个流程,使用可读标签,并在周围散文中用精确的源代码符号链接解释重要决策。优先使用小型概览或多个聚焦图表,而不是一个密集图表。使用围栏 mermaid 块,并运行 lat check 验证语法和可读性。

章节 ID

章节通过文件路径和标题链寻址:

  • 完整形式:lat.md/path/to/file#Heading#SubHeading
  • 简写形式:file#Heading#SubHeading(当文件主干名唯一时)

示例:lat.md/tests/search#RAG Replay Tests、cli#init、parser#Wiki Links。

配置的外部源使用 [[handle:path/to/file.md#Heading]] 表示 Markdown 标题,使用 [[handle:path/to/file.ts#symbol]] 表示支持的代码符号。在克隆外部源之前运行 lat external show <handle>;其输出包含固定提交和安全检出建议。

Wiki 链接

使用 [[target]] 或 [[target|alias]] 交叉引用其他章节或源代码。

在记录已实现行为时,优先使用最窄的相关源代码符号链接,而不是整文件链接。当讨论整个模块或资源,或没有支持的符号代表目标时,使用整文件或目录链接。如果散文提到某个符号,直接链接该符号。

章节链接示例:

See [[cli#init]] for setup details.
The parser validates [[parser#Wiki Links|wiki link syntax]].

仓库路径链接:引用项目根目录下任何现有文件或目录,不带片段:

[[schema.sql]]
[[CHANGELOG]]
[[src/components]]

不支持的格式会验证为引用,但 Lat 无法打开。#fragment 需要 lat.md/ 章节或受支持的源文件。

源代码链接:引用源文件中的函数、类、常量和方法:

[[src/config.ts#getConfigDir]]          — function
[[src/server.ts#App#listen]]            — class method
[[lib/utils.py#parse_args]]             — Python function
[[src/lib.rs#Greeter#greet]]            — Rust impl method
[[src/app.go#Greeter#Greet]]            — Go method
[[src/app.h#Greeter]]                   — C struct

当散文提到实现符号或由其管理的行为时,链接该符号,而不是使用裸代码片段或复制其字面值。优先使用 [[src/config.ts#DEFAULT_TIMEOUT]](或 [[src/config.ts#DEFAULT_TIMEOUT|the default timeout]]),而不是裸标识符或复制的值。行为解释保留在散文中;链接使其实现绑定可导航且可验证。

lat check 验证所有目标存在。

代码引用

使用 @lat: 注释将源代码回连到 lat.md/ 章节:

// @lat: [[cli#init]]
export function init() { ... }
# @lat: [[cli#init]]
def init():
    ...

支持的注释风格://(JS/TS/Rust/Go/C/PHP)和 #(Python/PHP)。

每个章节放置一个 @lat: 注释,放在相关代码处——而不是文件顶部。

测试规格

在 lat.md/ 文件中将测试描述为章节。添加 frontmatter 以要求每个叶子章节在测试代码中都有匹配的 @lat: 注释:

---
lat:
  require-code-mention: true
---
# Tests

Authentication test specifications.

## User login

Verify credential validation and error handling.

### Rejects expired tokens

Tokens past their expiry timestamp are rejected with 401, even if otherwise valid.

### Handles missing password

Login request without a password field returns 400 with a descriptive error.

每个测试引用其规格:

# @lat: [[tests#User login#Rejects expired tokens]]
def test_rejects_expired_tokens():
    ...

规则:

  • 在 require-code-mention: true 下的每个叶子章节必须被恰好一个 @lat: 注释引用
  • 每个章节必须有描述——至少一句话解释测试验证什么以及为什么
  • lat check 会标记未引用的规格和悬空的代码引用

Frontmatter

lat.md/ 文件顶部可选的 YAML frontmatter:

---
lat:
  require-code-mention: true
---

目前唯一支持的字段是 require-code-mention,用于测试规格强制。

验证

编辑 lat.md/ 文件后始终运行 lat check。它验证:

  • 所有 wiki 链接指向现有章节、仓库路径或源代码符号
  • 所有相对 markdown 链接指向现有文件
  • 完整和折叠引用式链接都有定义
  • 所有 @lat: 代码引用指向现有章节
  • 每个章节都有引导段落(≤250 字符)
  • 所有 require-code-mention 叶子章节都在代码中被引用
  • 每个 lat.md/ 目录都有准确的索引

适用场景与限制

该技能适用于创建或编辑 lat.md/ 目录中的章节,以及维护项目架构、设计决策和测试规格文档。限制包括:不重复源代码;不记录提案、计划功能或未来工作(除非用户明确要求或与实现一起起草);不当作日志或变更记录;不记录无足轻重的实现细节。图表仅在涉及七个以上交互主体且顺序复杂时使用。目前 frontmatter 仅支持 require-code-mention 字段。