Initial publish v0.1.0: standalone workflow core (corpus + examples + guards)

This commit is contained in:
octopus
2026-09-15 08:41:51 +08:00
commit bb35e661b2
114 changed files with 20240 additions and 0 deletions
+116
View File
@@ -0,0 +1,116 @@
# 工件寻址契约(Core,后端中立)
> Core 原生契约(Increment 3,无 dogfood 对应源文件)。术语对照见
> `core/adapters/TERMINOLOGY.md`;本文所有实例路径以占位符表述
> `<runs-root>` = 实例运行目录根),落地实例时按术语表绑定。
## 1. ref 语法
所有 Tier-2 工件的规范引用格式:
```
{backend}:{kind}/{owner}/{repo}/{id}#{anchor}
```
- `{backend}` — 工单后端标识(如 `gitea`);由 adapter 层注册。
- `{kind}` — 工件类别,枚举见下表;新类别扩展时须同步各 adapter 的
resolve 实现并在本表登记。
- `{owner}/{repo}` — 仓库坐标。
- `{id}` — 工件标识:issue/PR 用数字,wiki 页用页名(可含 `/`),
评论用 `{issue-number}c{comment-id}`commit-status 用 `{sha}@{context}`
- `#{anchor}` — 可选锚点(页内段落、行号等),解析时透传不解释。
| kind | 含义 | id 形态 |
| --------------- | --------------- | ---------------------- |
| `issue` | 工单 | 数字 |
| `issue-comment` | 工单评论 | `{issue}c{comment-id}` |
| `wiki-page` | Tier-2 工件库页 | 页名(含 `/` |
| `commit-status` | 提交状态 | `{sha}@{context}` |
| `pr` | 合并请求 | 数字 |
## 2. 页名文法(Core 契约)
Tier-2 工件库的**常规页名**
```
{slug}/{type}-{seq:02d}-{title}
```
- `{slug}``[a-z0-9-]``{seq}` 两位零填充;`{title}`
`[a-z0-9-]`CJK 标题按 adapter 层编码规则处理)。
### 2.1 例外页(全枚举)
以下页名不受常规文法约束(勘自实例的全部真实约定):
| 例外页 | 形态 | 说明 |
| -------------------- | ---------------------------------------------------------------------------------- | --------------------------------------------------- |
| 评审轮次页 | `{slug}/reviews/{stage}/round{N}/{page}` | `page``task-{ROLE}``revision-summary` |
| 评审终报 | `{slug}/reviews/{stage}/final/report` | 含 DAG task 变体 `…/final/report-task-{node-id}` |
| 验证报告 | `{slug}/05-verify-iteration-{N}` | 常规前缀 + 无 title 段的变体 |
| 验证报告(里程碑) | `{epic-slug}/05-verify-milestone-{M-id}` | 同上 |
| 验证报告(任务节点) | `{epic-slug}/05-verify-task-{node-id}` | 同上 |
| DAG 工件 | `{epic-slug}/dag``{epic-slug}/dag-nodes/{node-id}``{epic-slug}/dag-coverage` | 单门 DAG 管线工件 |
| DAG 共享契约 | `{epic-slug}/shared/{file}` | 跨会话契约 |
| bugfix 附件 | `{slug}/repro-notes``{slug}/test-report``{slug}/bugfix-report``{slug}/ABORT` | 单段固定名 |
| 原型/笔记 | `{slug}/prototype-debt``{slug}/spike-report``{slug}/impl-notes` | 单段固定名 |
| 设计修订 | `{slug}/03-design-amendments` | 常规前缀 + 固定名 |
| 浏览器证据 | `{slug}/verify/evidence/{name}` | 验证证据页 |
| 审计轮次页 | `audit/{date}/round{N}/{page}` | 日期 slug 例外;`page``synthesis``task-{ROLE}` |
| 审计终报 | `audit/{date}/final/report` | 日期 slug 例外 |
| 回顾报告 | `_retrospectives/{cycle-name}` | 跨 slug 命名空间例外 |
| 技能评估 | `_evals/{skill-name}/{page}` | 评估命名空间例外 |
| 移植工件 | `port-{name}/source-analysis/{file}``port-{name}/self-check` | 移植命名空间例外 |
| 回顾归档 | `_archive/{slug}/…` | 归档命名空间例外 |
> 历史只读页名(旧管线产物,仍可读取):`{slug}/01-stakeholder-interview`、
> `{slug}/02-requirements-index`、`{slug}/02-req-{seq:02d}-{title}`、
> `{slug}/02-03-req-design`、`{slug}/03-design-{seq:02d}-{title}`、
> `{slug}/03-adr-{NNNN}-{title}`、`{slug}/04-plan-index`、
> `{slug}/04-plan-{seq:02d}-{title}`、`{slug}/roadmap/{page}`。
### 2.2 kind ↔ type 映射
| 工件类别(kind 语境) | 页名 `{type}` 段 |
| --------------------- | ---------------------------------------------------------------- |
| 验证报告 | `05-verify-iteration` / `05-verify-milestone` / `05-verify-task` |
| 设计文档 | `03-design` / `03-adr` / `03-design-amendments` |
| 计划文档 | `04-plan` |
| 需求文档 | `02-req` / `02-requirements-index` |
| 评审工件 | `reviews`(目录段,非前缀) |
| DAG 工件 | `dag` / `dag-nodes` / `dag-coverage` |
| 审计工件 | `audit`(日期前缀命名空间) |
## 3. Tier-1 ↔ Tier-2 映射
wiki 页 `{slug}/…` 与实例运行目录 `<runs-root>/{slug}/…`Tier-1 本地
结构化工件,见 Two-Tier 规则)按 slug 一一对应:
-`{slug}/reviews/{stage}/round{N}/findings-{DIM}.json` ↔ 本地
`<runs-root>/{slug}/reviews/{stage}/round{N}/findings-{DIM}.json`
- 页面正文承载 Tier-2 决策记录;原始发现、工作草稿留在 Tier-1 本地。
**文件名 URL 编码规则**:页名映射为本地文件名时 `/``%2F`
(逆向解码同理);`.-` 尾缀是实例后端生成的 slug 产物,解码时剥除。
## 4. 双向链接不变量
1. **工件 ↔ 工单引用成对**:工件发布到工件库后,源工单侧必须有反向
索引(工件索引评论);工单侧索引的每一行必须指向真实存在的工件。
2. **单评论聚合**:一个源工单有且仅有一条工件索引评论,各技能只
原位增改自己的行,绝不发第二条。
3. **归档补全**:工单关闭时,关闭方 agent 原位编辑索引评论——加归档
横幅、全部行重读优先级置 `ARCHIVE`;不删行、不改位置列。
## 5. adapter 义务
每个工单后端 adapter 必须实现三个操作:
- **parse** — 解析 ref 字符串为 `{backend, kind, owner, repo, id, anchor}`
- **resolve** — 把解析结果解析为该后端可调用的 API 形态(端点、工具名、
参数),API 调用形态归 adapter 层,Core 不约束;
- **validate** — 校验页名符合第 2 节文法(含例外枚举)。
页名规范是**后端中立契约**;仓里的共用解析器
`script/resolve-artifact-ref.ts` 提供 parse 与页名/文件名编解码、
Tier-1 路径预测的中立实现,adapter 可复用。