7.8 KiB
Gitea Adapter — 读模式(Read Patterns)
Gitea adapter 参考实现(Increment 3,自 dogfood 源
_shared/gitea-read-patterns.md拆分上提)。页名规范与寻址语义见core/rules/artifact-addressing.md(后端中立契约,本文不重复)。 实例基址<gitea-base-url>由实例配置提供,见 TERMINOLOGY.md。
Owner/repo 固定 Octopus/octopus。compaction 恢复从 Pattern 6
(读工件索引)开始——源工单上的工件索引是上下文恢复的规范入口,
硬编码页名路径仅作回退。
Pattern 1: read-wiki-page
# 1. 列 wiki 页拿 mangled sub_url(绝不手工拼 mangled name)
curl -fsS -H "Authorization: token <token>" \
"<gitea-base-url>/api/v1/repos/Octopus/octopus/wiki/pages"
# 2. 用返回的 sub_url 原样读页(含 %2F 编码与 .- 尾缀)
curl -fsS -H "Authorization: token <token>" \
"<gitea-base-url>/api/v1/repos/Octopus/octopus/wiki/page/{mangled-name}"
常用页名(全量文法 + 例外枚举见 core/rules/artifact-addressing.md §2):
| 工件 | page_name |
|---|---|
| 验证报告 | {slug}/05-verify-iteration-{N} |
| DAG 工件(单门) | {epic-slug}/dag;AC 子页 {epic-slug}/dag-nodes/{node-id};覆盖子页 {epic-slug}/dag-coverage |
| 评审终报(review-dag) | {epic-slug}/reviews/review-dag/final/report |
| 评审终报(code) | {slug}/reviews/code/final/report |
| 评审终报(code, DAG task) | {epic-slug}/reviews/code/final/report-task-{node-id} |
| 验证(DAG milestone) | {epic-slug}/05-verify-milestone-{M-id} |
| 验证(DAG task) | {epic-slug}/05-verify-task-{node-id} |
| 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 |
| 审计工件 | audit/{date}/{page},如 audit/{date}/final/report |
| 移植工件 | port-{name}/source-analysis/{file} · port-{name}/self-check |
| 回顾报告 | _retrospectives/{cycle-name} |
| 回顾归档 | _archive/{slug}/ |
| 技能评估 | _evals/{skill-name}/{page} |
| 浏览器调试证据 | {slug}/verify/evidence/{name}(临时截图留在工作区截图目录) |
历史只读页名(旧管线产物仍可读):{slug}/01-stakeholder-interview、
{slug}/02-requirements-index、{slug}/02-req-{seq:02d}-{title}、
{slug}/02-03-req-design、{slug}/03-design-index、
{slug}/03-design-{seq:02d}-{title}、{slug}/03-adr-{NNNN}-{title}、
{slug}/04-plan-index、{slug}/04-plan-{seq:02d}-{title}、
{slug}/roadmap/{page}、{slug}/shared/{file}、
{slug}/reviews/{roadmap|design-space|plan}/final/report。
本地回退(REST 不可达时):读本地 wiki 克隆(实例路径见
TERMINOLOGY.md)。wiki 文件名 URL 编码(/→%2F,.md 前可能带
.-),用 glob 而非固定路径解析:
glob(pattern="*{slug}*{page-title}*.md", path="<local-wiki-clone>/{repo}-wiki/")
Pattern 2: read-issue
curl -fsS -H "Authorization: token <token>" \
"<gitea-base-url>/api/v1/repos/Octopus/octopus/issues/{issue_number}"
读工单详情、正文、元数据(label、assignee、milestone、state)。
Pattern 3: read-issue-comments
curl -fsS -H "Authorization: token <token>" \
"<gitea-base-url>/api/v1/repos/Octopus/octopus/issues/{issue_number}/comments?page=N&limit=50"
分页用 page/limit(上限 50),响应头 x-total-count 给总数。
读工单全部评论(评审结果、状态备注、讨论线程)。
Pattern 4: read-project-column-issues
看板列工单队列。project/column 发现:
curl -fsS -H "Authorization: token <token>" \
"<gitea-base-url>/api/v1/repos/Octopus/octopus/projects"
curl -fsS -H "Authorization: token <token>" \
"<gitea-base-url>/api/v1/repos/Octopus/octopus/projects/{project_id}/columns"
「把工单移到列」等复杂操作:经 swagger.v1.json
(jq '.paths | keys[]' | grep projects)查询 projects 相关端点后调用,
不要臆造具体端点路径。projects 仅 repo 级(无 org/user 级端点)。
Pattern 5: read-review-status(CLI)
octopus review status [--stage <stage>] [--sha <sha>] [--json]
读评审收敛状态(commit status)。stage 值:code、review-dag、
audit-process;省略 --stage 列出该提交全部状态。历史 stage 值
(design-space 等)仅可查历史。
stage-id → 评审目录映射(Tier-1 本地 reviews/{stage}/ 段):
review-code → code;review-dag → review-dag;
audit-process → audit-process。只有 code 评审用短名,不得发明其他。
收敛判定:context pipeline/review-{stage} 的 status 存在且
state = success(= PASS 或 WARN,无未决 BLOCKER)。退出码 0 = 全部
success,1 = 有 failure/error。
Pattern 6: read-artifact-index(compaction 恢复主路径)
压缩后或新会话从工单种子恢复时,读工件索引评论(写侧 Pattern 10) 而非猜测页名路径:
# 1. 读源工单
curl -fsS -H "Authorization: token <token>" \
"<gitea-base-url>/api/v1/repos/Octopus/octopus/issues/{issue_number}"
# 2. 拉评论列表,找 body 以 "## 工件索引"(遗留 "## Pipeline 工件追踪表")开头的评论
curl -fsS -H "Authorization: token <token>" \
"<gitea-base-url>/api/v1/repos/Octopus/octopus/issues/{issue_number}/comments?page=N&limit=50"
# 3. 按 CORE 行位置列逐个读工件页:先 GET .../wiki/pages 拿 sub_url(mangled
# name),再原样请求
curl -fsS -H "Authorization: token <token>" \
"<gitea-base-url>/api/v1/repos/Octopus/octopus/wiki/page/{mangled-name}"
位置列提取规则:单元格形如 [`{page_name}`]({html_url}) ——
取链接文本(首个 [ 与 ] 之间、剥反引号)作为 page_name,不是
href(含 %2F/.-,API 不认)。裸 page_name 单元格(无链接包裹)也
接受:整格即 page_name。形如 #comment-{id} 的值改用
GET .../issues/{index}/comments 拉工单评论列表后按 id 取,不得当作
wiki 页名去读 wiki 端点。
重读规则:重读集 = 全部 CORE 行;ON-DEMAND 行仅当前任务需要
时读;绝不读 ARCHIVE 行。索引缺失(历史工单)→ 回退 issue body +
## 当前状态 + 硬编码页名路径。
已归档索引:无 CORE 行,恢复时重读集为空,按需直读目标工件
(位置列 URL 仍有效);归档只改重读优先级,不改可访问性。