3 Commits
22 changed files with 185 additions and 140 deletions
-41
View File
@@ -138,31 +138,6 @@ curl -fsS -X PATCH "<gitea-base-url>/api/v1/repos/Octopus/octopus/issues/comment
单评论聚合不变量(工件索引、当前状态表等)的执行手段。 单评论聚合不变量(工件索引、当前状态表等)的执行手段。
## Pattern 7: move-issue-to-column
看板列迁移(Todo → In Progress → Review → Done)。projects/columns
发现用 REST;「把工单移到列」的操作端点语义复杂,经 swagger 查询后
调用,不臆造路径:
```bash
# 列出 repo 级 projects(projects 仅 repo 级,无 org/user 级端点)
curl -fsS -H "Authorization: token <token>" \
"<gitea-base-url>/api/v1/repos/Octopus/octopus/projects"
# 列某 project 的 columns
curl -fsS -H "Authorization: token <token>" \
"<gitea-base-url>/api/v1/repos/Octopus/octopus/projects/{project_id}/columns"
# 移动工单到列:先经 swagger.v1.json 查询 projects 相关端点后调用
curl -s <gitea-base-url>/swagger.v1.json -o /tmp/gitea-sw.json
jq -r '.paths | keys[]' /tmp/gitea-sw.json | grep projects
```
## Pattern 7.5: move-issue-to-pipeline-stage
管线阶段板列(Pipeline Stages board column)承载阶段迁移——阶段转移
落到板列,**不落** `## 当前状态` 行(该表只承载 PR / 评审 / CI 行与
非阶段阻塞项)。列序列按管线阶段定义;移动与 Pattern 7 同款
(projects/columns 经 REST + swagger 发现,同上)。
## Pattern 8: post-commit-status ## Pattern 8: post-commit-status
commit status 直发 REST(评审综合的 Tier-2 落点): commit status 直发 REST(评审综合的 Tier-2 落点):
@@ -183,22 +158,6 @@ context 公式:`pipeline/review-{stage}`(`code` / `review-dag` /
`audit-process`)。token 从实例配置读取(此处 `<token>` 占位)。 `audit-process`)。token 从实例配置读取(此处 `<token>` 占位)。
merge 前读回验证:`GET /commits/{PR_SHA}/status`。 merge 前读回验证:`GET /commits/{PR_SHA}/status`。
## Pattern 9: create-iteration-board
```bash
# 建 project(board):先经 swagger 查询 create 端点契约
curl -s <gitea-base-url>/swagger.v1.json -o /tmp/gitea-sw.json
jq '.paths["/repos/{owner}/{repo}/projects"].post' /tmp/gitea-sw.json
# 随后 POST 建板(title="{slug} — Iteration {N}", description="…")
# 再对每列(Todo / In Progress / Review / Done):
jq '.paths["/repos/{owner}/{repo}/projects/{project_id}/columns"].post' /tmp/gitea-sw.json
# 随后 POST 建列
```
projects 仅 repo 级。DAG 聚合 agent 在单门 PASS 后建板;工单正文模板带
`## Node Reference`(指向 `{epic-slug}/dag`)、`## Acceptance Criteria`、
`## Parent`。
## Pattern 10: artifact-index(工单 ↔ 工件索引) ## Pattern 10: artifact-index(工单 ↔ 工件索引)
技能发布工件后,在源工单维护 **`## 工件索引` 评论**——单一原位编辑的 技能发布工件后,在源工单维护 **`## 工件索引` 评论**——单一原位编辑的
+2 -4
View File
@@ -80,7 +80,7 @@ curl -fsS -H "Authorization: token <token>" \
## Pattern 4: read-project-column-issues ## Pattern 4: read-project-column-issues
看板列工单队列。project/column 发现: 看板列工单队列(只读)。project/column 发现:
``` ```
curl -fsS -H "Authorization: token <token>" \ curl -fsS -H "Authorization: token <token>" \
@@ -89,9 +89,7 @@ curl -fsS -H "Authorization: token <token>" \
"<gitea-base-url>/api/v1/repos/Octopus/octopus/projects/{project_id}/columns" "<gitea-base-url>/api/v1/repos/Octopus/octopus/projects/{project_id}/columns"
``` ```
「把工单移到列」等复杂操作:经 `swagger.v1.json` projects 仅 repo 级(无 org/user 级端点)。
(`jq '.paths | keys[]' | grep projects`)查询 projects 相关端点后调用,
不要臆造具体端点路径。projects 仅 repo 级(无 org/user 级端点)。
## Pattern 5: read-review-status(CLI) ## Pattern 5: read-review-status(CLI)
+1
View File
@@ -179,6 +179,7 @@ creating thin wrapper checklist files would add no value.
| 8.5 | 防范范围收窄:明令禁止「只看重点/从简」类弱化措辞(IEEE 1028-2008 完整性) | ☐ | ☐ | | | 8.5 | 防范范围收窄:明令禁止「只看重点/从简」类弱化措辞(IEEE 1028-2008 完整性) | ☐ | ☐ | |
| 8.6 | 留痕:审计产物落盘到结构化文件,而非仅存于对话 | ☐ | ☐ | | | 8.6 | 留痕:审计产物落盘到结构化文件,而非仅存于对话 | ☐ | ☐ | |
| 8.7 | 闭环:存在重审循环与收敛/审批终止条件(ISO 19011:2018 跟踪与关闭) | ☐ | ☐ | | | 8.7 | 闭环:存在重审循环与收敛/审批终止条件(ISO 19011:2018 跟踪与关闭) | ☐ | ☐ | |
| 8.8 | 流程自身测试为绿:Orchestrator(bash 可用)在派发审计员**之前**机械运行流程自身的测试套件与守卫门(`bun run test:parallel` 全量分片 + `check:*` 守卫族,如 core-parity / encoding-health / derived-artifacts),并把命令、基线 SHA 与结果摘要落盘到 `<runs-root>/audit/reviews/audit-process/process-tests-green.md`(Tier 1);审计员(只读,无 bash)核对该记录存在于当前基线且为绿——任何红测试/红守卫本身即流程缺陷,按 findings 登记(缺陷逃逸案例:红测试存活 3 轮审计、无任何维度运行过测试套件,[org-internal #4787]) | ☐ | ☐ | 运行归 Orchestrator、核对归审计员(角色边界:`core/skills/_shared/review-orchestrator-rules.md` §No bash for Explorer sub-agents) |
--- ---
+22 -1
View File
@@ -1,6 +1,6 @@
# Release 检查清单 # Release 检查清单
> 发版前自检。Release Manager 在 Phase 1 和 Phase 6 完整过一遍。 > 发版前自检。Producer (Worker) 在 Phase 1 和 Phase 6 完整过一遍。
> **维度命名空间(dimension namespace)**: 本清单中的维度代码(如 TST/BEH/GATE/REG)是**清单局部(checklist-local)**标识符,仅在本文档内唯一;其他清单可能对相同字母串绑定不同概念(如 code-review.md 的 TST=Test Quality、verification.md 的 TST=Test Suite Completeness、port.md 的 TST=Test Porting)。跨清单引用时必须带清单限定(如 code-review.md TST 5.8),不得使用裸代码。 > **维度命名空间(dimension namespace)**: 本清单中的维度代码(如 TST/BEH/GATE/REG)是**清单局部(checklist-local)**标识符,仅在本文档内唯一;其他清单可能对相同字母串绑定不同概念(如 code-review.md 的 TST=Test Quality、verification.md 的 TST=Test Suite Completeness、port.md 的 TST=Test Porting)。跨清单引用时必须带清单限定(如 code-review.md TST 5.8),不得使用裸代码。
@@ -74,3 +74,24 @@
| 6.1 | Tagged commit 可构建 | ☐ | ☐ | | | 6.1 | Tagged commit 可构建 | ☐ | ☐ | |
| 6.2 | 测试全部通过 | ☐ | ☐ | | | 6.2 | 测试全部通过 | ☐ | ☐ | |
| 6.3 | 回到了原始分支 | ☐ | ☐ | | | 6.3 | 回到了原始分支 | ☐ | ☐ | |
---
## 7. 产物发布(DIST — Artifact Distribution,octopus 项目)
> 对应 `.octopus/skills/release/SKILL.md` Phase 4b(#2003 退役 CI publish
> 管线后的手工发布流程)。**主仓库 tag + release 对象 ≠ 发布完成**——CLI
> 二进制、公开镜像、桌面 feed 三层外圈全部就位才算。本清单从磁盘读取,
> 作为技能注入被截断时的兜底事实源(v0.25.0 发布时技能注入截断恰好切掉
> Phase 4b,导致外圈整层遗漏——本节由此设立)。
| # | 检查项 | 通过 | 不通过 | 备注 |
| --- | ---------------------------------------- | ---- | ------ | ---- |
| 7.1 | 12 平台 CLI 二进制已构建(tag 的干净 checkout,`bun packages/octopus/script/build.ts`),全部 smoke test 输出版本号 | ☐ | ☐ | Windows 无 `python3` 命令,zip 归档需垫 shim 或手动补齐 |
| 7.2 | 12 个归档已挂到主仓库 release(zip×6 + tar.gz×6) | ☐ | ☐ | |
| 7.3 | (可选,Gitea-only 口径可跳过)npm/docker/AUR 外部 registry 已发或明确跳过 | ☐ | ☐ | `OCTOPUS_GITEA_ONLY=true` |
| 7.4 | `sync-public-assets.sh` 已跑:公共镜像 `Octopus/octopus-release` 的 `v{version}` release 有 12 资产 | ☐ | ☐ | 大 POST 出站不通时经服务器 localhost 中继 |
| 7.5 | `sync-public-install.sh` 已跑:install/install.ps1/README 同步到镜像 main(注意 cp 目标是**根 README.md**,不是 scripts/ 副本) | ☐ | ☐ | |
| 7.6 | `verify-public-sync.sh` PASSED | ☐ | ☐ | |
| 7.7 | Desktop feed 双平台已派发(`desktop-feed.yml` dispatch ×2:beta/prod × win/linux),`latest.yml` 与 `latest-linux.yml` 的 `version:` == CLI 版本 | ☐ | ☐ | concurrency 组已按 platform 分离;资产字节数须与 feed 声明一致 |
| 7.8 | README 下载链接抽查(install 脚本 raw、资产直链、docs 相对链接)匿名可达 | ☐ | ☐ | v0.18 遗留 wiki 坏链由此发现 |
+3 -3
View File
@@ -46,9 +46,9 @@ Rules:
surfaced by checklist annotations alone — do NOT add live-status rows for surfaced by checklist annotations alone — do NOT add live-status rows for
them. PR / review / CI transitions carry BOTH a checklist annotation AND them. PR / review / CI transitions carry BOTH a checklist annotation AND
a live-status row. a live-status row.
- **Stage rows live on the board, not here**: pipeline stage transitions are - **No stage rows here**: pipeline stage transitions are NOT represented by
represented by the Pipeline Stages board column (shared write-patterns `## 当前状态` rows — they surface through checklist annotations at skill
Pattern 7.5), NOT by `## 当前状态` rows. Keep only the exits. Keep only the
status-sync-automated rows (PR / 代码评审 / CI) and non-stage status-sync-automated rows (PR / 代码评审 / CI) and non-stage
blockers/deferrals. blockers/deferrals.
- Update in place (same section heading `## 当前状态`), never append a second copy. - Update in place (same section heading `## 当前状态`), never append a second copy.
+3 -1
View File
@@ -31,6 +31,7 @@
}, },
"quantitative_summary": { "quantitative_summary": {
"type": "object", "type": "object",
"description": "Every check the reviewer executed this round (PASS and FAIL counted in total_checks; NA reported via na_count). The verdict field must follow these counts per the thresholds documented on verdict — a synthesis consumer recalculates pass_rate from passed/total_checks and treats a mismatch as a malformed artifact.",
"required": ["total_checks", "passed", "failed", "pass_rate"], "required": ["total_checks", "passed", "failed", "pass_rate"],
"properties": { "properties": {
"total_checks": { "type": "integer", "minimum": 1 }, "total_checks": { "type": "integer", "minimum": 1 },
@@ -74,7 +75,8 @@
}, },
"severity": { "severity": {
"type": "string", "type": "string",
"enum": ["BLOCKER", "MAJOR", "MINOR", "INFO"] "enum": ["BLOCKER", "MAJOR", "MINOR", "INFO"],
"description": "BLOCKER: breaks an acceptance criterion, hangs/leaks, or opens an abuse channel — the artifact must not land as-is. MAJOR: a real defect on a non-blocking path, or a test/lock blind to a plausible regression (a mutation would escape). MINOR: quality/drift issue with a cheap local fix (naming, duplication, small docs gap); no behavioral risk. INFO: observation, accepted-risk note, or follow-up ticket material — no action required this round. Calibration rule: severity grades the FINDING's impact, not the reviewer's confidence; low-confidence suspicions go to INFO with the evidence, never inflated to MAJOR."
}, },
"checklist_ref": { "checklist_ref": {
"type": "string", "type": "string",
+21 -7
View File
@@ -41,11 +41,6 @@ in `_shared/gitea-write-patterns.md`.
**Orchestrator actions**: **Orchestrator actions**:
0. **Move the source issue to the `review` column** on the Pipeline Stages
board per `_shared/gitea-write-patterns.md` Pattern 7.5. Skip if no
source issue exists. The review stage is a single board column covering
all review targets (DAG single gate / code review / audit-process).
0.5. **Initialize the review-status file** (round 1 only). The Orchestrator 0.5. **Initialize the review-status file** (round 1 only). The Orchestrator
creates `<runs-root>/{slug}/reviews/{stage}/status.json` before dispatching creates `<runs-root>/{slug}/reviews/{stage}/status.json` before dispatching
round 1, with the full schema-required field set round 1, with the full schema-required field set
@@ -111,6 +106,13 @@ in `_shared/gitea-write-patterns.md`.
`core/skills/_shared/review-orchestrator-rules.md` — Default `core/skills/_shared/review-orchestrator-rules.md` — Default
Explorer Permissions). Explorer Permissions).
- Temperature: 0.1 (deterministic output). - Temperature: 0.1 (deterministic output).
- StructuredOutput mount ([org-internal #5658]): pass `format: { type:
"json_schema", schema: <the reviewer-output.schema.json contents you
read at prompt build time> }` on the task dispatch — the reviewer's
final emission is schema-enforced (malformed verdict/severity/summary
args are rejected with field-path repair feedback inside the reviewer's
own loop). The findings FILE remains the canonical Tier-1 artifact; the
structured output mirrors it as a self-check.
4. Wait for all {REVIEWER_OR_AUDITOR}s to complete. Each reviewer writes its 4. Wait for all {REVIEWER_OR_AUDITOR}s to complete. Each reviewer writes its
dimension result to the skill's configured findings sink: dimension result to the skill's configured findings sink:
@@ -171,6 +173,11 @@ in `_shared/gitea-write-patterns.md`.
`tier1-local` skills; `/tmp/octopus/...` for `tier2-comment` skills) `tier1-local` skills; `/tmp/octopus/...` for `tier2-comment` skills)
- `permissions`: read + write + edit + bash + glob + grep (all allow) - `permissions`: read + write + edit + bash + glob + grep (all allow)
- `temperature`: 0.1 - `temperature`: 0.1
- `format` ([org-internal #5658]): `{ type: "json_schema", schema: <the
synthesis.schema.json contents you read> }` — the Synthesizer's final
emission is schema-enforced (malformed verdict/dimension args rejected
with field-path repair feedback in-loop). The posted fenced JSON block
remains the canonical artifact; the structured output mirrors it.
- Foreground (the Orchestrator waits for completion). - Foreground (the Orchestrator waits for completion).
3. The Synthesizer: 3. The Synthesizer:
@@ -324,8 +331,15 @@ After the {REVISION_ROLE} completes revision:
round, or the diff touches a frozen cross-session contract) — round, or the diff touches a frozen cross-session contract) —
`<instance-root>/workflow-routing.yaml` `review.max_rounds` ([org-internal #3567], process-diet `<instance-root>/workflow-routing.yaml` `review.max_rounds` ([org-internal #3567], process-diet
P0b). At budget without convergence: STOP, register the remaining P0b). At budget without convergence: STOP, register the remaining
BLOCKER/MAJOR findings as TD registry rows, verdict FAIL if any BLOCKER BLOCKER/MAJOR findings as TD registry rows, then compute the verdict
remains else PASS — the debt is carried by those TD registry rows with the shared three-tier ladder (`core/schemas/synthesis.schema.json`
`overall_verdict` + `core/skills/_shared/review-orchestrator-rules.md`
rule 3): FAIL if any BLOCKER or FAIL dimension remains, else WARN,
PASS only if every remaining dimension is PASS ([org-internal #4786]:
the prior binary "else PASS" wording silently upgraded WARN-eligible
outcomes to PASS; a PASS round has already stopped at the convergence
table above, so the residual tail lands WARN or FAIL). The debt is
carried by those TD registry rows
(see `review-code/SKILL.md` Phase D). This (see `review-code/SKILL.md` Phase D). This
supersedes the 2026-08-25 [org-internal #3380] calibration (p50=2, p95=5, n=66): the runs supersedes the 2026-08-25 [org-internal #3380] calibration (p50=2, p95=5, n=66): the runs
past round 3 are the marathon tail this budget exists to cut; their residue past round 3 are the marathon tail this budget exists to cut; their residue
@@ -32,6 +32,18 @@ Label: {DIMENSION_NAME}
## Instructions ## Instructions
### Gate records are deterministic inputs ([org-internal #5656] N-04)
When the work item carries gate records (`gate` tool results — metadata
`exit_code`, `duration_ms`, `ci_run_id`), those records ARE the command
outcomes for mechanical questions (tests/typecheck/lint): cite the exit code
verbatim (`gate <id> (<tier>): exit_code=<n> -> green|red` — canonical block
in `packages/octopus/src/gate/consume.ts`) and never substitute a model's
narration of command output. A claim that disagrees with a record's
exit_code is a finding (record wins); a mechanical claim with no record is
unverifiable — request the citation. A green verdict-cache hit
(`metadata.verdict_cache.key`) counts the same as a fresh run.
{READ_FIRST_STEPS} {READ_FIRST_STEPS}
4. For each checklist item, determine whether the {ARTIFACT_NOUN} satisfies it. 4. For each checklist item, determine whether the {ARTIFACT_NOUN} satisfies it.
Every checklist item must receive a PASS or FAIL verdict. Every checklist item must receive a PASS or FAIL verdict.
@@ -46,6 +58,21 @@ Label: {DIMENSION_NAME}
(reviewer_count > 1), use the slot-prefixed form {DIM}R{k}-F{NNN} with your (reviewer_count > 1), use the slot-prefixed form {DIM}R{k}-F{NNN} with your
1-based slot k (e.g. TOPOR1-F001) so parallel slot files never collide on id. 1-based slot k (e.g. TOPOR1-F001) so parallel slot files never collide on id.
{CONTRADICTION_RULE} {CONTRADICTION_RULE}
6b. Code graph availability (worktree sessions): if `codegraph_status` is
unavailable or reports no index for the tree under review (typical when
reviewing from a session worktree whose per-worktree `.codegraph/` index
has not finished building — see `<instance-root>/rules/code-graph.md`), do NOT
silently substitute grep+read for structural questions ("who calls /
what depends on / where defined"). Instead:
- For symbols on the MAIN branch side (baselines, design refs, cross-session
frozen contracts), you MAY query the main checkout's index (path given in
your dispatch preamble) and cite `main:<path>:<line>`.
- If no index is reachable at all, mark the affected checklist items NA
with reason "codegraph unavailable — structural check degraded to grep"
and emit one INFO finding (id `{DIM}-F001`-style, in your dimension's own
code) recording the degradation, so the Synthesizer can surface it.
Findings derived purely from grep+read when a graph query was required are
treated as low-confidence and may be waived in synthesis.
7. Assign severity strictly: 7. Assign severity strictly:
{SEVERITY_DEFINITIONS} {SEVERITY_DEFINITIONS}
8. Count every PASS and FAIL. Compute pass_rate = passed / total_checks. 8. Count every PASS and FAIL. Compute pass_rate = passed / total_checks.
+1 -1
View File
@@ -1,4 +1,4 @@
> Core 中立版(Increment 6a 改写,原 deferHard verbatim)。编号与条目结构严格不变(C-2 不变量);实例术语按 `core/adapters/TERMINOLOGY.md` 绑定。 # > Core 中立版(Increment 6a 改写,原 deferHard verbatim)。编号与条目结构严格不变(C-2 不变量);实例术语按 `core/adapters/TERMINOLOGY.md` 绑定。
name: Coordinator name: Coordinator
purpose: > purpose: >
Pool dispatch coordinator (billing-v2 [org-internal #4041] §7, REQ-F-012): a wake-driven, Pool dispatch coordinator (billing-v2 [org-internal #4041] §7, REQ-F-012): a wake-driven,
+1 -1
View File
@@ -1,4 +1,4 @@
> Core 中立版(Increment 6a 改写,原 deferHard verbatim)。编号与条目结构严格不变(C-2 不变量);实例术语按 `core/adapters/TERMINOLOGY.md` 绑定。 # > Core 中立版(Increment 6a 改写,原 deferHard verbatim)。编号与条目结构严格不变(C-2 不变量);实例术语按 `core/adapters/TERMINOLOGY.md` 绑定。
name: Producer name: Producer
purpose: > purpose: >
Write production artifacts — requirements, design, plans, code, fixes, Write production artifacts — requirements, design, plans, code, fixes,
+1 -1
View File
@@ -1,4 +1,4 @@
> Core 中立版(Increment 6a 改写,原 deferHard verbatim)。编号与条目结构严格不变(C-2 不变量);实例术语按 `core/adapters/TERMINOLOGY.md` 绑定。 # > Core 中立版(Increment 6a 改写,原 deferHard verbatim)。编号与条目结构严格不变(C-2 不变量);实例术语按 `core/adapters/TERMINOLOGY.md` 绑定。
name: Reviewer name: Reviewer
purpose: > purpose: >
Review one dimension of an artifact against its checklist, read-only. Review one dimension of an artifact against its checklist, read-only.
+1 -1
View File
@@ -1,4 +1,4 @@
> Core 中立版(Increment 6a 改写,原 deferHard verbatim)。编号与条目结构严格不变(C-2 不变量);实例术语按 `core/adapters/TERMINOLOGY.md` 绑定。 # > Core 中立版(Increment 6a 改写,原 deferHard verbatim)。编号与条目结构严格不变(C-2 不变量);实例术语按 `core/adapters/TERMINOLOGY.md` 绑定。
name: Tool name: Tool
purpose: > purpose: >
Specialized tool agent for image interpretation and other vision/utility Specialized tool agent for image interpretation and other vision/utility
+1 -1
View File
@@ -1,4 +1,4 @@
> Core 中立版(Increment 6a 改写,原 deferHard verbatim)。编号与条目结构严格不变(C-2 不变量);实例术语按 `core/adapters/TERMINOLOGY.md` 绑定。 # > Core 中立版(Increment 6a 改写,原 deferHard verbatim)。编号与条目结构严格不变(C-2 不变量);实例术语按 `core/adapters/TERMINOLOGY.md` 绑定。
name: Verifier name: Verifier
purpose: > purpose: >
Run the iteration's DoD matrix, integration tests, NFR validation, and Run the iteration's DoD matrix, integration tests, NFR validation, and
+13
View File
@@ -198,6 +198,14 @@
- **Rule 4 — Aggregation, not reinterpretation**: You MUST NOT soften, rephrase, - **Rule 4 — Aggregation, not reinterpretation**: You MUST NOT soften, rephrase,
or downgrade reviewer findings. If a reviewer writes "BLOCKER", it stays or downgrade reviewer findings. If a reviewer writes "BLOCKER", it stays
"BLOCKER" in synthesis. "BLOCKER" in synthesis.
1c. **Pass-rate recalc post-check (MANDATORY, [org-internal #5658])**: for
every dimension, recompute `pass_rate = passed / total_checks` from its
`quantitative_summary` and compare with the reported value. On a mismatch:
keep the raw file unchanged, use the RECOMPUTED value in the synthesis
digest, and note the mismatch — a reviewer-output whose `pass_rate` does
not match its own counts is a malformed artifact (the schema description
says exactly this; this step is the enforcement).
- **Rule 5 — Anonymous findings preservation**: If two reviewers independently - **Rule 5 — Anonymous findings preservation**: If two reviewers independently
flag the same issue from different dimensions, preserve both entries. Do not flag the same issue from different dimensions, preserve both entries. Do not
deduplicate by discarding one — cross-dimension agreement is itself a signal. deduplicate by discarding one — cross-dimension agreement is itself a signal.
@@ -209,6 +217,11 @@
Return ONLY this summary as your final message. Do NOT include the full Return ONLY this summary as your final message. Do NOT include the full
synthesis JSON — it is already posted to the pipeline PR / source issue synthesis JSON — it is already posted to the pipeline PR / source issue
comment (for audit-process runs, the wiki page `audit/{date}/round{N}/synthesis`). comment (for audit-process runs, the wiki page `audit/{date}/round{N}/synthesis`).
When your dispatch carries `format` (StructuredOutput mount, [org-internal
[org-internal #5658]]): the structured output is the MIRROR self-check of this summary (same
schema, schema-enforced), not a second artifact — the posted fenced JSON block
and this summary remain canonical.
Persist this summary verbatim to Persist this summary verbatim to
`<runs-root>/{slug}/reviews/{stage}/round{N}/synthesis-return.md` before `<runs-root>/{slug}/reviews/{stage}/round{N}/synthesis-return.md` before
returning (step 9 above — worker-report persistence [org-internal #2847]). returning (step 9 above — worker-report persistence [org-internal #2847]).
+2 -21
View File
@@ -1,33 +1,14 @@
--- ---
name: codegraph-setup name: codegraph-setup
description: > description: >
Use ONLY when installing, configuring, initializing, or troubleshooting CodeGraph Use ONLY when installing, configuring, initializing, or troubleshooting
(@colbymchenry/codegraph — https://github.com/colbymchenry/codegraph) in the CodeGraph (@colbymchenry/codegraph) in the octopus environment.
octopus environment. Covers global CLI install, per-project `.codegraph/`
indexing, and maintenance commands (status, sync, upgrade, uninstall). MCP
wiring into octopus.jsonc is handled by the kickoff pipeline
(`octopus kickoff` or `/kickoff`). Also use when a project session reports a
missing/stale `.codegraph/` index.
triggers: triggers:
- codegraph - codegraph
- code graph - code graph
- codegraph setup
- codegraph install
- codegraph init
- .codegraph
- codegraph_explore
- codegraph_node
- codegraph_callers
- codegraph_status
- install codegraph
# Chinese — bare nouns for code-graph concepts. The English "codegraph" brand
# name above already covers mixed-language phrasings; these cover pure Chinese.
- 代码图 - 代码图
- 代码图谱
- 代码索引 - 代码索引
- 索引代码 - 索引代码
- 装代码图
- 初始化代码图
role: Producer role: Producer
--- ---
+4 -4
View File
@@ -3,7 +3,7 @@ name: image-interpret
description: > description: >
Use ONLY when the agent needs to read or analyze an image (screenshot, Use ONLY when the agent needs to read or analyze an image (screenshot,
design mockup, UI capture, .png/.jpg/.webp file) but the active model lacks design mockup, UI capture, .png/.jpg/.webp file) but the active model lacks
vision capability. Delegates to the Image Interpreter role (vision-capable vision capability. Delegates to the Tool role (image interpretation) (vision-capable
model) which returns a structured text spec — layout regions, colors (hex), model) which returns a structured text spec — layout regions, colors (hex),
spacing (px), typography, component hierarchy, and responsive breakpoints. spacing (px), typography, component hierarchy, and responsive breakpoints.
Do not use for non-image tasks or when the active model already supports Do not use for non-image tasks or when the active model already supports
@@ -31,7 +31,7 @@ role: Tool
You (the calling agent) cannot read images — your model has no vision. Any You (the calling agent) cannot read images — your model has no vision. Any
task that requires *seeing* a visual artifact must be delegated to the task that requires *seeing* a visual artifact must be delegated to the
**Image Interpreter** role, which runs on a vision-capable model and returns a **Tool** role (image interpretation), which runs on a vision-capable model and returns a
structured text description you can act on. structured text description you can act on.
Trigger situations: Trigger situations:
@@ -64,7 +64,7 @@ Trigger situations:
) )
``` ```
4. **Consume the returned text spec.** The Image Interpreter returns a 4. **Consume the returned text spec.** The Tool sub-agent (image interpretation) returns a
structured description only — it cannot write code or artifacts. Use the structured description only — it cannot write code or artifacts. Use the
returned spec to drive your own work (code generation, design review, returned spec to drive your own work (code generation, design review,
planning). planning).
@@ -74,7 +74,7 @@ Trigger situations:
## Notes ## Notes
- The Image Interpreter is **read-only** — it describes images, it does not edit - The Tool sub-agent (image interpretation) is **read-only** — it describes images, it does not edit
files or write code. files or write code.
- One delegation per distinct visual question. Batch multiple images into a - One delegation per distinct visual question. Batch multiple images into a
single delegation only when they must be compared. single delegation only when they must be compared.
@@ -179,10 +179,6 @@ Available work items:
#### Phase 1 — Parse Context #### Phase 1 — Parse Context
> **Pipeline stage**: if the source issue exists, move it to the `implement`
> column on the Pipeline Stages board per `_shared/gitea-write-patterns.md`
> Pattern 7.5. Skip if no source issue exists.
Read the upstream artifacts to build a complete implementation context. Read the upstream artifacts to build a complete implementation context.
Resolve inputs per the DAG-route read map (Preconditions above); standalone Resolve inputs per the DAG-route read map (Preconditions above); standalone
modes read the request/bug report instead: modes read the request/bug report instead:
@@ -499,11 +495,6 @@ issue exists.
retired — each one re-triggered the full CI surface for near-zero re-tested retired — each one re-triggered the full CI surface for near-zero re-tested
risk. risk.
> **Kanban column lifecycle**: automated (`POST <gitea-base-url>/api/v1/repos/{owner}/{repo}/issues` → Backlog,
> `POST .../pulls` → Review; no manual moves). Single shared reference:
> `_shared/gitea-write-patterns.md` Pattern 7.5; column semantics: wiki
> `kanban-lifecycle`.
--- ---
#### Phase 5 — Report #### Phase 5 — Report
+29 -26
View File
@@ -1,12 +1,11 @@
--- ---
name: release name: release
description: > description: >
Use ONLY when ready to cut a release. The Release Manager (Worker) inspects Use ONLY when ready to cut a release. The Producer (Worker) inspects
project state (git log, version files, build) to determine the semver bump, project state (git log, version files, build) to determine the semver bump,
generate the changelog, tag, and produce a release artifact. Works on any generate the changelog, tag, and produce a release artifact. Works on any
project state — no pipeline artifacts required. project state — no pipeline artifacts required.
triggers: triggers:
- release
- cut release - cut release
- 发版 - 发版
- publish release - publish release
@@ -14,7 +13,6 @@ triggers:
role: Producer role: Producer
--- ---
> Core 中立版(Increment 6a 改写,原 deferHard verbatimDir)。机制、结构与 frontmatter 保持;实例术语(工具名、路径、工单号)按 `core/adapters/TERMINOLOGY.md` 绑定到具体实例。
# Release # Release
Prepare and tag a release based on project facts — git history since the last Prepare and tag a release based on project facts — git history since the last
@@ -28,14 +26,14 @@ produced here is the input to project-specific deployment workflows.
## Agent Role ## Agent Role
The release is owned and executed by the **Release Manager** (Worker). The release is owned and executed by the **Producer** (Worker).
**Context compaction**: release is a pipeline stage boundary. The main session **Context compaction**: release is a pipeline stage boundary. The main session
compacts at this clean boundary ONLY when a capacity/projection trigger holds, compacts at this clean boundary ONLY when a capacity/projection trigger holds,
per `core/rules/compact.md` §"Stage-boundary compaction" (long multi-stage per `.octopus/rules/compact.md` §"Stage-boundary compaction" (long multi-stage
runs — DAG Epic orchestration — keep the legacy every-boundary compaction; runs — DAG Epic orchestration — keep the legacy every-boundary compaction;
short runs — bugfix / DAG task — and standalone runs default to NOT short runs — bugfix / DAG task — and standalone runs default to NOT
compacting). The Release Manager itself is single-phase and compacting). The Producer itself is single-phase and
artifact-driven (version files, changelog, tag); a mid-run compaction loses artifact-driven (version files, changelog, tag); a mid-run compaction loses
nothing — re-read the release checklist state and git log to resume. nothing — re-read the release checklist state and git log to resume.
@@ -46,7 +44,7 @@ nothing — re-read the release checklist state and git log to resume.
Before starting the release: Before starting the release:
- [ ] Working tree is clean (`git status` has no uncommitted changes). - [ ] Working tree is clean (`git status` has no uncommitted changes).
- [ ] `core/checklists/release.md` is accessible. - [ ] `.octopus/checklists/release.md` is accessible.
--- ---
@@ -86,7 +84,7 @@ Two source types today: (a) dependency bump audits; (b) docs 批量修订
- **(a) Dependency bump audits** (the [org-internal #3846] origin case): advisories whose - **(a) Dependency bump audits** (the [org-internal #3846] origin case): advisories whose
remediation is a plain version bump (lockfile-only diff, no semver-major remediation is a plain version bump (lockfile-only diff, no semver-major
jump, no overrides/catalog surgery, no API or adapter fallout) are filed jump, no overrides/catalog surgery, no API or adapter fallout) are filed
together via `工单 API(见 TERMINOLOGY)create` with together via REST `POST .../issues` with
`title="[{origin}] audit-batch@{version}: mechanical bumps for {N} advisories (TD-{NNN})"` `title="[{origin}] audit-batch@{version}: mechanical bumps for {N} advisories (TD-{NNN})"`
and labels `[tech_debt_label_id, severity_label_id, kind_bug_label_id]` and labels `[tech_debt_label_id, severity_label_id, kind_bug_label_id]`
(severity = highest in the batch). One row per advisory — CVE/GHSA ID, (severity = highest in the batch). One row per advisory — CVE/GHSA ID,
@@ -101,7 +99,7 @@ Two source types today: (a) dependency bump audits; (b) docs 批量修订
`title="[{origin}] docs-batch: {class} revisions for {N} files"`, with one `title="[{origin}] docs-batch: {class} revisions for {N} files"`, with one
row per file (path, correction, reason); same ONE-batch-PR landing. row per file (path, correction, reason); same ONE-batch-PR landing.
- **Landing**: when members live on separate branches, compose the single - **Landing**: when members live on separate branches, compose the single
batch PR via the `land-batch` skill (`core/skills/land-batch/SKILL.md` batch PR via the `land-batch` skill (`.octopus/skills/land-batch/SKILL.md`
— cross-branch batch composition, topology B). For dependency-bump — cross-branch batch composition, topology B). For dependency-bump
batches pass `batch-compose --convergent bun.lock` (script batches pass `batch-compose --convergent bun.lock` (script
`.gitea/scripts/batch-compose.ts`): the regenerable lockfile is exempt `.gitea/scripts/batch-compose.ts`): the regenerable lockfile is exempt
@@ -110,11 +108,11 @@ Two source types today: (a) dependency bump audits; (b) docs 批量修订
#### 适用边界 / Applicability boundary #### 适用边界 / Applicability boundary
- **非mechanical(含判断成分的变更,不并单)** — items requiring judgment - **非 mechanical(含判断成分的变更,不并单)** — items requiring judgment
(wording decisions, behavior/API changes, review-dependent edits) are (wording decisions, behavior/API changes, review-dependent edits) are
never batched; file each as its own issue. never batched; file each as its own issue.
- **路径重叠(batch 成员触碰相同文件 → 不并单;唯一豁免 = - **路径重叠(batch 成员触碰相同文件 → 不并单;唯一豁免 =
可再生共享文件`bun.lock` 经batch-compose `--convergent` 收敛)** — the sole 可再生共享文件 `bun.lock` 经 batch-compose `--convergent` 收敛)** — the sole
path-overlap exemption is the regenerable shared lockfile under path-overlap exemption is the regenerable shared lockfile under
`--convergent`; every other same-file collision stays un-batched. `--convergent`; every other same-file collision stays un-batched.
- **semver-major 跳变 / overrides·catalog 手术 / adapter·peer 联动(→ - **semver-major 跳变 / overrides·catalog 手术 / adapter·peer 联动(→
@@ -157,12 +155,12 @@ template and `_shared/gitea-write-patterns.md` Pattern 3.
| Check | Status | | Check | Status |
| ----------------- | ----------------------------------------------------- | | ----------------- | ----------------------------------------------------- |
| Clean workspace | ✅/ ❌ | | Clean workspace | ✅ / ❌ |
| Branch | {branch name} | | Branch | {branch name} |
| Build | ✅/ ❌ | | Build | ✅ / ❌ |
| Typecheck + Lint | ✅/ ❌ | | Typecheck + Lint | ✅ / ❌ |
| Tests | ✅/ ❌(N passed, M failed) | | Tests | ✅ / ❌ (N passed, M failed) |
| Dependency audit | ✅/ ⚠️ N known CVEs (pre-existing) / ❌N new CVEs | | Dependency audit | ✅ / ⚠️ N known CVEs (pre-existing) / ❌ N new CVEs |
``` ```
If any gate fails except known CVEs, stop and report what failed. If any gate fails except known CVEs, stop and report what failed.
@@ -309,7 +307,7 @@ credentials in the environment.
- `NODE_AUTH_TOKEN` — only if publishing to npm. - `NODE_AUTH_TOKEN` — only if publishing to npm.
- `AUR_KEY` — only if pushing the AUR package. - `AUR_KEY` — only if pushing the AUR package.
- Docker logged in to the Gitea container registry: - Docker logged in to the Gitea container registry:
`echo "$GITEA_TOKEN" | docker login <instance-registry-host> -u <user> --password-stdin`. `echo "$GITEA_TOKEN" | docker login eightarms.net -u <user> --password-stdin`.
### Steps ### Steps
@@ -323,7 +321,7 @@ credentials in the environment.
```bash ```bash
OCTOPUS_VERSION={version} OCTOPUS_RELEASE={release-id} \ OCTOPUS_VERSION={version} OCTOPUS_RELEASE={release-id} \
GH_REPO=Octopus/octopus GITEA_TOKEN=<pat> \ GH_REPO=Octopus/octopus GITEA_TOKEN=<pat> \
bun <harness-package>/script/build.ts bun packages/octopus/script/build.ts
``` ```
`build.ts` attaches the 12 release assets to the draft release. `build.ts` attaches the 12 release assets to the draft release.
@@ -339,14 +337,14 @@ credentials in the environment.
4. **Undraft the release** (makes it public): 4. **Undraft the release** (makes it public):
```bash ```bash
curl -fsS -X PATCH \ curl -fsS -X PATCH \
"<instance-base-url>/api/v1/repos/Octopus/octopus/releases/{release-id}" \ "https://eightarms.net/api/v1/repos/Octopus/octopus/releases/{release-id}" \
-H "Authorization: token $GITEA_TOKEN" \ -H "Authorization: token $GITEA_TOKEN" \
-H "Content-Type: application/json" -d '{"draft": false}' -H "Content-Type: application/json" -d '{"draft": false}'
``` ```
5. **Verify assets** — the release must carry 12 assets: 5. **Verify assets** — the release must carry 12 assets:
```bash ```bash
curl -sS "<instance-base-url>/api/v1/repos/Octopus/octopus/releases/tags/v{version}" \ curl -sS "https://eightarms.net/api/v1/repos/Octopus/octopus/releases/tags/v{version}" \
-H "Authorization: token $GITEA_TOKEN" | jq '.assets | length' -H "Authorization: token $GITEA_TOKEN" | jq '.assets | length'
``` ```
@@ -375,9 +373,14 @@ Document how to undo this release:
1. **Git rollback**: 1. **Git rollback**:
- `git tag -d v{version}` (if not yet pushed). - `git tag -d v{version}` (if not yet pushed).
- `git revert {commit_hash}` (if already merged). - `git revert {commit_hash}` (if already merged).
- If the release includes DB migrations, confirm the `down` migration exists. - If the release includes DB migrations, confirm the `down` migration exists
**when the project's migration tooling provides one**. This repo's Drizzle
convention is forward-only (`migration.sql` + `snapshot.json`, no `down`
files) — there, record the reversal plan (manual SQL / restore) or mark the
change irreversible instead of waiting on a `down` file that never comes.
2. **Data rollback** (if applicable): 2. **Data rollback** (if applicable):
- For each migration, confirm the `down` migration exists and has been tested. - For each migration, confirm the `down` migration exists and has been tested
where the tooling offers one; otherwise document the manual reversal steps.
- If the release changes data format without a reversible migration, mark - If the release changes data format without a reversible migration, mark
`⚠️ IRREVERSIBLE DATA CHANGE`. `⚠️ IRREVERSIBLE DATA CHANGE`.
@@ -390,7 +393,7 @@ git tag -d v{version}
# or: git revert {hash} # or: git revert {hash}
### Data Rollback ### Data Rollback
- Migration `{name}`: down {exists / NOT FOUND} - Migration `{name}`: down {exists / NOT FOUND / N/A — forward-only tooling}
- {additional risks} - {additional risks}
### Rollback Triggers ### Rollback Triggers
@@ -419,7 +422,7 @@ git tag -d v{version}
**Version**: {old} → {new} (MAJOR / MINOR / PATCH) **Version**: {old} → {new} (MAJOR / MINOR / PATCH)
**Tag**: v{version} **Tag**: v{version}
**Commits**: {N} since last tag ({feat} features, {fix} fixes) **Commits**: {N} since last tag ({feat} features, {fix} fixes)
**Typecheck**: ✅| Lint: ✅| Tests: ✅ **Typecheck**: ✅ | Lint: ✅ | Tests: ✅
### Changelog ### Changelog
@@ -435,13 +438,13 @@ git tag -d v{version}
**Deploy**: {manual step — "merge to main triggers CI", etc.} **Deploy**: {manual step — "merge to main triggers CI", etc.}
**Rollback**: see Phase 5 above **Rollback**: see Phase 5 above
**Next**: `core/skills/retrospective/SKILL.md` (optional — run on any project state) **Next**: `.octopus/skills/retrospective/SKILL.md` (optional — run on any project state)
``` ```
--- ---
## References ## References
- `core/checklists/release.md` — Release checklist - `.octopus/checklists/release.md` — Release checklist
- Semver spec: https://semver.org - Semver spec: https://semver.org
- Conventional Commits: https://www.conventionalcommits.org - Conventional Commits: https://www.conventionalcommits.org
+11 -5
View File
@@ -97,10 +97,7 @@ The stage IDs remain as-is — they are used by the stage registry and auto-appr
This skill follows the standardized parallel-review pipeline. The full mechanics are in: This skill follows the standardized parallel-review pipeline. The full mechanics are in:
- `<!-- inject: ../_shared/review-pipeline-phases.md -->` — Phase A through Phase E - `<!-- inject: ../_shared/review-pipeline-phases.md -->` — Phase A through Phase E
- **Phase A step 0**: move the source issue to the `review` column on the (canonical orchestrator actions for the shared flow)
Pipeline Stages board per `_shared/gitea-write-patterns.md` Pattern 7.5
(see `_shared/review-pipeline-phases.md` for the canonical orchestrator
actions — step 0 is now part of the shared flow).
- `<!-- inject: ../_shared/review-orchestrator-rules.md -->` — mandatory orchestrator rules - `<!-- inject: ../_shared/review-orchestrator-rules.md -->` — mandatory orchestrator rules
- `<!-- inject: ../_shared/review-final-report-template.md -->` — final report format - `<!-- inject: ../_shared/review-final-report-template.md -->` — final report format
- `<!-- inject: ../_shared/review-revision-prompt.md -->` — Phase C revision prompt template - `<!-- inject: ../_shared/review-revision-prompt.md -->` — Phase C revision prompt template
@@ -187,6 +184,15 @@ The audit target is the **SDLC factory itself** — the set of skills, checklist
- [ ] `core/skills/` exists and contains at least one `SKILL.md`. - [ ] `core/skills/` exists and contains at least one `SKILL.md`.
- [ ] `core/checklists/audit-process.md` is accessible. - [ ] `core/checklists/audit-process.md` is accessible.
- [ ] `core/schemas/` contains the shared review schemas (`reviewer-output`, `synthesis`, `review-status`). - [ ] `core/schemas/` contains the shared review schemas (`reviewer-output`, `synthesis`, `review-status`).
- [ ] **Process-tests-green gate ([org-internal #4787] STD 8.8)**: before dispatching
auditors, the Orchestrator (bash-capable; Explorer auditors have none by
construction) runs the process's own suite and guards — from
`<harness-package>`: `bun run test:parallel`, plus the repo-root `check:*`
guard family — and writes the commands, baseline SHA, and per-command result
summary to `<runs-root>/audit/reviews/audit-process/process-tests-green.md`
(Tier 1). The read-only STD 8.8 auditor verifies that record against the
current baseline; any red test/guard is itself a process defect and MUST be
filed as a finding.
No `.artifacts/{slug}/` inputs are required — the audit reads `<instance-root>/` itself. Audit outputs are published as Gitea wiki pages under `audit/{date}/`. No `.artifacts/{slug}/` inputs are required — the audit reads `<instance-root>/` itself. Audit outputs are published as Gitea wiki pages under `audit/{date}/`.
@@ -201,7 +207,7 @@ No `.artifacts/{slug}/` inputs are required — the audit reads `<instance-root>
| 5 | FLOW | Pipeline Cohesion | FLOW 5.1–5.6 | Preconditions + output sections of every `SKILL.md` | | 5 | FLOW | Pipeline Cohesion | FLOW 5.1–5.6 | Preconditions + output sections of every `SKILL.md` |
| 6 | SCH | Schema Contract | SCH 6.1–6.5 | `core/schemas/*.json` + skills that reference them | | 6 | SCH | Schema Contract | SCH 6.1–6.5 | `core/schemas/*.json` + skills that reference them |
| 7 | DUP | Duplication & Drift | DUP 7.1–7.4 | ALL `SKILL.md` + ALL `checklists/*.md` | | 7 | DUP | Duplication & Drift | DUP 7.1–7.4 | ALL `SKILL.md` + ALL `checklists/*.md` |
| 8 | STD | Audit Standards (ISO/IEEE) | STD 8.1–8.7 | `review-*` skills, `review-artifact` (target: `audit-process`) itself | | 8 | STD | Audit Standards (ISO/IEEE) | STD 8.1–8.8 | `review-*` skills, `review-artifact` (target: `audit-process`) itself |
| 9 | AGT | AGENTS.md Conformance | AGT 9.1–9.5 | ALL `SKILL.md` + `AGENTS.md` | | 9 | AGT | AGENTS.md Conformance | AGT 9.1–9.5 | ALL `SKILL.md` + `AGENTS.md` |
| 10 | TRC | Traceability | TRC 10.1–10.5 | `review-*` skills, schemas, status artifacts | | 10 | TRC | Traceability | TRC 10.1–10.5 | `review-*` skills, schemas, status artifacts |
+24 -2
View File
@@ -458,7 +458,7 @@ table).
<!-- section:phase-a --> <!-- section:phase-a -->
## Phase A — Parallel Review ## Phase A — Parallel Review
> **Canonical mechanics**: `core/skills/_shared/review-pipeline-phases.md` — keep this section in sync with the canonical Phase A–E flow. This section adds review-code-specific constants (10 dimensions, severity definitions, risk tiers, output mode, standalone-bugfix mode). Step 0 (move source issue to `review` column on Pipeline Stages board per Pattern 7.5) is inherited from the shared Phase A orchestrator actions; see `_shared/review-pipeline-phases.md`. > **Canonical mechanics**: `core/skills/_shared/review-pipeline-phases.md` — keep this section in sync with the canonical Phase A–E flow. This section adds review-code-specific constants (10 dimensions, severity definitions, risk tiers, output mode, standalone-bugfix mode); orchestrator actions are inherited from the shared Phase A flow.
### Standalone Bugfix Mode — Orchestrator Dispatch ### Standalone Bugfix Mode — Orchestrator Dispatch
@@ -530,6 +530,13 @@ fallback is retired with the design pipeline, [org-internal #3072] phase 3):
emits the reviewer's output; it does NOT touch the code under review, so emits the reviewer's output; it does NOT touch the code under review, so
rule #7 auditor independence holds.) rule #7 auditor independence holds.)
- Temperature: 0.1 (deterministic output). - Temperature: 0.1 (deterministic output).
- StructuredOutput mount ([org-internal #5658]): pass `format: { type: "json_schema",
schema: <the reviewer-output.schema.json contents you read at prompt
build time> }` on the Task dispatch — the reviewer's final emission is
schema-enforced (malformed verdict/severity/summary args are rejected
with field-path repair feedback inside the reviewer's own loop). The
findings FILE remains the canonical Tier-1 artifact; the structured
output mirrors it as a self-check.
**Worktree-path rule (mandatory)**: Every file path in the reviewer prompt **Worktree-path rule (mandatory)**: Every file path in the reviewer prompt
(`{FILE_SECTIONS}`, design reference paths, artifact paths) MUST be the (`{FILE_SECTIONS}`, design reference paths, artifact paths) MUST be the
@@ -545,6 +552,21 @@ fallback is retired with the design pipeline, [org-internal #3072] phase 3):
observed in the 2026-07 auto-approve retrospective (5-round convergence, observed in the 2026-07 auto-approve retrospective (5-round convergence,
67.7% rework fraction). 67.7% rework fraction).
**Code-graph availability preamble (worktree sessions, [org-internal #4187])**: the main
checkout's `.codegraph/` index does NOT cover a session worktree
([org-internal #2561]/TD-006). Before dispatch, the Orchestrator checks the worktree's
own index: run `codegraph_status` against the worktree root, or check for
`<worktree-root>/.codegraph/codegraph.db` (a bare `init.log` without the
db means the background `session-worktree.sh create` init is still running).
Include in each reviewer's dispatch preamble: (a) the worktree index state
(ready / building / absent), and (b) when absent or still building, the
ABSOLUTE path of the main checkout (which has its own `.codegraph/`) so
DGN/COR reviewers can query MAIN-side symbols (design baselines, frozen
cross-session contracts) from the main checkout's index and cite them as
`main:<path>:<line>`. Reviewers apply rule 6b of
`_shared/review-reviewer-prompt.md` (NA + INFO finding) when no index is
reachable at all — grep-only structural claims must never pass silently.
4. Wait for all reviewers to complete. Each reviewer writes its finding JSON to 4. Wait for all reviewers to complete. Each reviewer writes its finding JSON to
`<runs-root>/{slug}/reviews/code/round{N}/findings-{DIMENSION_CODE}.json` `<runs-root>/{slug}/reviews/code/round{N}/findings-{DIMENSION_CODE}.json`
(Tier 1 local, validated by `core/schemas/reviewer-output.schema.json`). After all (Tier 1 local, validated by `core/schemas/reviewer-output.schema.json`). After all
@@ -860,7 +882,7 @@ After the Developer completes revision:
**Convergence criteria**: see `core/skills/_shared/review-pipeline-phases.md` Phase D for the canonical table (stop conditions). `{MAX_ROUNDS}` is per-skill — code review binds the routing budget: **2** rounds default, **3** for high risk (a BLOCKER survived a round, or the diff touches a frozen cross-session contract) — `<instance-root>/workflow-routing.yaml` `review.max_rounds` ([org-internal #3567]). The code-review-specific addition is inheritance of the shared INFO-disposition rule. The shared Round-3 Escalation Guardrail is scoped to the `review-artifact` skill targets only and does not apply here. **Convergence criteria**: see `core/skills/_shared/review-pipeline-phases.md` Phase D for the canonical table (stop conditions). `{MAX_ROUNDS}` is per-skill — code review binds the routing budget: **2** rounds default, **3** for high risk (a BLOCKER survived a round, or the diff touches a frozen cross-session contract) — `<instance-root>/workflow-routing.yaml` `review.max_rounds` ([org-internal #3567]). The code-review-specific addition is inheritance of the shared INFO-disposition rule. The shared Round-3 Escalation Guardrail is scoped to the `review-artifact` skill targets only and does not apply here.
**Round budget (mandatory, [org-internal #3567])**: when `current_round` reaches the budget (2; 3 for high risk) without convergence, do NOT enter another round. STOP: register every remaining BLOCKER/MAJOR finding as TD registry rows (`rules/ticket-lifecycle.md`), record the verdict (FAIL if any BLOCKER remains, else PASS — the debt is carried by the TD registry rows just registered), and close the loop. A review that cannot converge within budget is a design-level stall wearing review clothes (retro 2026-08-21 / [org-internal #3050]): in DAG task mode, map it to the DAG oversize signals (`<instance-root>/workflow-routing.yaml` `dag.size_derivation.oversize_signals`) and let the aggregator agent drive re-derivation + a `review-dag` re-run; otherwise record the design-level finding on the Epic, or open `{slug}/03-design-amendments` via `wiki 读写 API(见 TERMINOLOGY)` (`_shared/gitea-write-patterns.md` Pattern 1). **Round budget (mandatory, [org-internal #3567])**: when `current_round` reaches the budget (2; 3 for high risk) without convergence, do NOT enter another round. STOP: register every remaining BLOCKER/MAJOR finding as TD registry rows (`rules/ticket-lifecycle.md`), record the verdict with the shared three-tier ladder (`core/schemas/synthesis.schema.json` `overall_verdict` + `core/skills/_shared/review-orchestrator-rules.md` rule 3): FAIL if any BLOCKER or FAIL dimension remains, else WARN, PASS only if every remaining dimension is PASS ([org-internal #4786]: the prior binary "else PASS" wording silently upgraded WARN-eligible outcomes to PASS), and close the loop. The debt is carried by the TD registry rows just registered, not by the recorded verdict. A review that cannot converge within budget is a design-level stall wearing review clothes (retro 2026-08-21 / [org-internal #3050]): in DAG task mode, map it to the DAG oversize signals (`<instance-root>/workflow-routing.yaml` `dag.size_derivation.oversize_signals`) and let the aggregator agent drive re-derivation + a `review-dag` re-run; otherwise record the design-level finding on the Epic, or open `{slug}/03-design-amendments` via `wiki 读写 API(见 TERMINOLOGY)` (`_shared/gitea-write-patterns.md` Pattern 1).
**Efficiency optimization**: see `core/skills/_shared/review-pipeline-phases.md` Phase D (same rule — from round 2 onward ([org-internal #2598]), only spawn reviewers for FAIL/WARN/UNRESOLVED dimensions; full sweep every 2 rounds). Round ≥2 reviewer input is delta-scoped to the revised files + their neighbors. **Efficiency optimization**: see `core/skills/_shared/review-pipeline-phases.md` Phase D (same rule — from round 2 onward ([org-internal #2598]), only spawn reviewers for FAIL/WARN/UNRESOLVED dimensions; full sweep every 2 rounds). Round ≥2 reviewer input is delta-scoped to the revised files + their neighbors.
+15 -8
View File
@@ -196,10 +196,6 @@ each missing item.
<!-- section:phase-1 --> <!-- section:phase-1 -->
## Phase 1 — Load Verification Context ## Phase 1 — Load Verification Context
> **Pipeline stage**: if the source issue exists, move it to the `verify`
> column on the Pipeline Stages board per `_shared/gitea-write-patterns.md`
> Pattern 7.5. Skip if no source issue exists.
Read the upstream artifacts. DAG task/milestone mode (the live path — see Read the upstream artifacts. DAG task/milestone mode (the live path — see
the DAG branch below for its read map): the DAG branch below for its read map):
@@ -310,6 +306,20 @@ gate fingerprint is keyed on the working tree (SHA + uncommitted state +
untracked), so it covers pre-push/headless states the same-SHA CI clauses untracked), so it covers pre-push/headless states the same-SHA CI clauses
cannot. cannot.
### 2.0b — Gate Records as Deterministic Inputs ([org-internal #5656] N-04)
Mechanical checks MUST be grounded in gate records (`gate` tool result
metadata), never in a model's transcription of command output:
- Cite `exit_code` verbatim — canonical block from
`packages/octopus/src/gate/consume.ts`: `gate <id> (<tier>):
exit_code=<n> -> green|red`, plus `duration_ms` / `ci_run_id` when present.
- `exit_code === null` (timeout/abort) is NO verdict — rerun required; a
pass claim cannot stand on it.
- A green verdict-cache hit (`metadata.verdict_cache.key`) satisfies the
check the same as a fresh run (content-addressed, same fingerprint).
- Narration drift (claim != record) is itself a verification finding.
### 2.1 Full Test Suite ### 2.1 Full Test Suite
```bash ```bash
@@ -1203,10 +1213,7 @@ If the user confirms, invoke the commit workflow per
An iteration is NOT Done until all code is committed in git history. An iteration is NOT Done until all code is committed in git history.
After the commit gate passes, move the source issue to the `done` column on Issue closing follows the lifecycle per `issue-checklist-sync.md` 归档动作.
the Pipeline Stages board per `_shared/gitea-write-patterns.md` Pattern 7.5.
Skip if no source issue exists. `done` is a stage column marker; issue
closing follows the lifecycle per `issue-checklist-sync.md` 归档动作.
To notify workflow completion, call the `signal_stage_done` tool. To notify workflow completion, call the `signal_stage_done` tool.
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "octopus-workflow", "name": "octopus-workflow",
"version": "0.1.3", "version": "0.1.6",
"description": "Standalone workflow core: provider-neutral agent workflow corpus (skills / rules / checklists / templates / schemas) with drift guards, extracted from the octopus agent platform.", "description": "Standalone workflow core: provider-neutral agent workflow corpus (skills / rules / checklists / templates / schemas) with drift guards, extracted from the octopus agent platform.",
"license": "MIT", "license": "MIT",
"private": false, "private": false,