feat(ack): refine intake and validation workflow
This commit is contained in:
@@ -216,7 +216,7 @@
|
||||
"properties": {
|
||||
"stopAt": {
|
||||
"type": "string",
|
||||
"enum": ["verified", "review_ready", "released"]
|
||||
"enum": ["verified", "validation_ready", "review_ready", "released"]
|
||||
},
|
||||
"steps": {
|
||||
"type": "array",
|
||||
|
||||
@@ -51,8 +51,8 @@ receipt 全部以 `docs/ack/tasks.yaml` 的 `project.orchestration` 与顶层
|
||||
项目如改用 Cursor,应修改结构化 profile、allowlist 和 defaults,再运行任务板
|
||||
校验;不能在这里粘贴 `orca --command`、Agent CLI 参数或自由 shell。
|
||||
每次自动派发必须先审阅 launcher plan,再把其中的 `launchFingerprint` 作为
|
||||
`--expected-launch-fingerprint` 启动 fresh worker。v0.10 的 `receiptHash` 只作
|
||||
审计 checksum,不授权自动复用旧终端。
|
||||
`--expected-launch-fingerprint` 启动 fresh worker。`receiptHash` 只作审计 checksum,
|
||||
不授权自动复用旧终端;只有同轮空闲、身份匹配且历史消息可信清理后才可复用。
|
||||
|
||||
## 路径权限(项目覆盖层,必须填实际路径)
|
||||
|
||||
@@ -108,7 +108,8 @@ Skill 的 `scripts/run_verification.py` 执行,不直接拼接 path/args。检
|
||||
等第二配置面。
|
||||
- v0.10 自动 launcher 只支持 `read-only` 和 `workspace-write`。full-access、
|
||||
bypass、YOLO/force 与关闭 sandbox 均 fail closed;需要可信平台审批通道后再开放。
|
||||
- v0.10 不自动复用持久化 receipt 指向的旧终端;每次自动派发都重新 plan/launch。
|
||||
- 复用仅限同轮空闲、身份匹配且历史消息可信清理的 worker;否则重新 plan/launch。
|
||||
- 整轮结束后回收只属于 verified 任务的终端;blocked/failed/leftover 终端保留且不设 TTL。
|
||||
- `worker_done` 与复测报告都不等于完成。必须 Test 独立复测 + Coordinator 终检后才能 `verified`。
|
||||
- 只有 Coordinator 写 `tasks.yaml` 和 `knowledge.yaml`;Developer 与 Test 都只读,
|
||||
通过消息回报。
|
||||
@@ -119,7 +120,7 @@ Skill 的 `scripts/run_verification.py` 执行,不直接拼接 path/args。检
|
||||
- ACK 不自动修改 `AGENTS.md`、`CLAUDE.md` 或其它 Agent 指令文件。
|
||||
- `delivery.yaml` 默认关闭,只描述能力,不自动授权提交、推送、发布或部署;交付仅在
|
||||
任务 `verified` 且本次 profile/目标/停止点得到确认后运行。
|
||||
- 默认交付 profile 最多到 `review_ready`;stable 发布或 production 部署必须有
|
||||
- 默认交付 profile 最多到 `validation_ready` 或 `review_ready`;stable 发布或 production 部署必须有
|
||||
approval 步骤并再次获得明确批准。配置变更只影响下一次 run。
|
||||
- 每个任务最多派发 3 轮,仍不过标记 `leftover` 并继续下一个。
|
||||
- 不提交、推送、发布或部署,除非用户确认的 ACK 任务或 delivery profile 明确包含。
|
||||
|
||||
@@ -181,7 +181,7 @@
|
||||
"provider": { "const": "feishu-base" },
|
||||
"workflow": {
|
||||
"type": "string",
|
||||
"enum": ["read-only-v1", "reviewed-writeback-v1"]
|
||||
"enum": ["read-only-v1", "reviewed-writeback-v1", "clarified-writeback-v1"]
|
||||
},
|
||||
"profile": { "type": "string", "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$" },
|
||||
"baseToken": { "type": "string", "minLength": 1, "pattern": "^\\S+$" },
|
||||
@@ -189,7 +189,7 @@
|
||||
"viewId": { "type": "string", "minLength": 1, "pattern": "^\\S+$" },
|
||||
"fields": {
|
||||
"type": "object",
|
||||
"required": ["title", "actual", "expected", "stepsToReproduce", "acceptance", "priority", "attachments", "updatedAt"],
|
||||
"required": [],
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"title": { "type": "string", "minLength": 1, "pattern": "^\\S+$" },
|
||||
@@ -201,10 +201,28 @@
|
||||
"priority": { "type": "string", "minLength": 1, "pattern": "^\\S+$" },
|
||||
"attachments": { "type": "string", "minLength": 1, "pattern": "^\\S+$" },
|
||||
"updatedAt": { "type": "string", "minLength": 1, "pattern": "^\\S+$" }
|
||||
,"details": { "type": "string", "minLength": 1, "pattern": "^\\S+$" }
|
||||
,"problemStatement": { "type": "string", "minLength": 1, "pattern": "^\\S+$" }
|
||||
,"expectedOutcome": { "type": "string", "minLength": 1, "pattern": "^\\S+$" }
|
||||
,"intakeStatus": { "type": "string", "minLength": 1, "pattern": "^\\S+$" }
|
||||
,"ackTaskId": { "type": "string", "minLength": 1, "pattern": "^\\S+$" }
|
||||
}
|
||||
}
|
||||
},
|
||||
"allOf": [
|
||||
{
|
||||
"if": {
|
||||
"not": {
|
||||
"properties": { "workflow": { "const": "clarified-writeback-v1" } },
|
||||
"required": ["workflow"]
|
||||
}
|
||||
},
|
||||
"then": {
|
||||
"properties": {
|
||||
"fields": { "required": ["title", "actual", "expected", "stepsToReproduce", "acceptance", "attachments", "updatedAt"] }
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"if": {
|
||||
"properties": { "workflow": { "const": "reviewed-writeback-v1" } },
|
||||
@@ -212,7 +230,18 @@
|
||||
},
|
||||
"then": {
|
||||
"properties": {
|
||||
"fields": { "required": ["fixLogic"] }
|
||||
"fields": { "required": ["fixLogic", "priority"] }
|
||||
}
|
||||
}
|
||||
}
|
||||
,{
|
||||
"if": {
|
||||
"properties": { "workflow": { "const": "clarified-writeback-v1" } },
|
||||
"required": ["workflow"]
|
||||
},
|
||||
"then": {
|
||||
"properties": {
|
||||
"fields": { "required": ["title", "details", "problemStatement", "expectedOutcome", "acceptance", "intakeStatus", "ackTaskId", "attachments", "updatedAt"] }
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -226,7 +255,7 @@
|
||||
"kind": { "const": "feishu-base" },
|
||||
"workflow": {
|
||||
"type": "string",
|
||||
"enum": ["read-only-v1", "reviewed-writeback-v1"]
|
||||
"enum": ["read-only-v1", "reviewed-writeback-v1", "clarified-writeback-v1"]
|
||||
},
|
||||
"ref": {
|
||||
"type": "string",
|
||||
@@ -250,6 +279,15 @@
|
||||
"required": ["approvedRevision", "approvedPayloadHash"]
|
||||
}
|
||||
}
|
||||
,{
|
||||
"if": {
|
||||
"properties": { "workflow": { "const": "clarified-writeback-v1" } },
|
||||
"required": ["workflow"]
|
||||
},
|
||||
"then": {
|
||||
"required": ["approvedRevision", "approvedPayloadHash"]
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"profileId": {
|
||||
@@ -614,6 +652,13 @@
|
||||
"launchFingerprint": {
|
||||
"$ref": "#/definitions/sha256"
|
||||
},
|
||||
"projectRoot": {
|
||||
"type": "string",
|
||||
"pattern": "^/"
|
||||
},
|
||||
"boardHash": {
|
||||
"$ref": "#/definitions/sha256"
|
||||
},
|
||||
"slot": {
|
||||
"type": "integer",
|
||||
"minimum": 1,
|
||||
@@ -730,6 +775,57 @@
|
||||
"evidence": { "type": "string" }
|
||||
}
|
||||
},
|
||||
"environmentIncident": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"id",
|
||||
"role",
|
||||
"phase",
|
||||
"status",
|
||||
"summary",
|
||||
"evidence",
|
||||
"impact",
|
||||
"recoveryAction",
|
||||
"userAction",
|
||||
"reportedAt"
|
||||
],
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"id": {
|
||||
"type": "string",
|
||||
"pattern": "^[A-Za-z0-9][A-Za-z0-9._-]*-ENV-[1-9][0-9]*$"
|
||||
},
|
||||
"attemptId": { "type": ["string", "null"] },
|
||||
"role": {
|
||||
"type": "string",
|
||||
"enum": ["coordinator", "developer", "test"]
|
||||
},
|
||||
"phase": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"launch",
|
||||
"orchestration",
|
||||
"service",
|
||||
"test_data",
|
||||
"browser",
|
||||
"tooling",
|
||||
"permissions",
|
||||
"other"
|
||||
]
|
||||
},
|
||||
"status": {
|
||||
"type": "string",
|
||||
"enum": ["open", "resolved"]
|
||||
},
|
||||
"summary": { "type": "string", "minLength": 1, "pattern": "\\S" },
|
||||
"evidence": { "type": "string", "minLength": 1, "pattern": "\\S" },
|
||||
"impact": { "type": "string", "minLength": 1, "pattern": "\\S" },
|
||||
"recoveryAction": { "type": "string", "minLength": 1, "pattern": "\\S" },
|
||||
"userAction": { "type": "string", "minLength": 1, "pattern": "\\S" },
|
||||
"reportedAt": { "type": "string", "minLength": 1, "pattern": "\\S" },
|
||||
"resolvedAt": { "type": ["string", "null"] }
|
||||
}
|
||||
},
|
||||
"knowledgeRef": {
|
||||
"type": "string",
|
||||
"pattern": "^K-[A-Z0-9][A-Z0-9-]*@[1-9][0-9]*$"
|
||||
@@ -906,6 +1002,7 @@
|
||||
"running",
|
||||
"blocked",
|
||||
"failed",
|
||||
"validation_ready",
|
||||
"review_ready",
|
||||
"released",
|
||||
"skipped"
|
||||
@@ -944,6 +1041,7 @@
|
||||
"running",
|
||||
"blocked",
|
||||
"failed",
|
||||
"validation_ready",
|
||||
"review_ready",
|
||||
"released"
|
||||
]
|
||||
@@ -965,6 +1063,7 @@
|
||||
"enum": [
|
||||
"blocked",
|
||||
"failed",
|
||||
"validation_ready",
|
||||
"review_ready",
|
||||
"released",
|
||||
"skipped"
|
||||
@@ -1062,6 +1161,10 @@
|
||||
"rounds": {
|
||||
"type": "array",
|
||||
"items": { "$ref": "#/definitions/round" }
|
||||
},
|
||||
"environmentIncidents": {
|
||||
"type": "array",
|
||||
"items": { "$ref": "#/definitions/environmentIncident" }
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
@@ -12,19 +12,19 @@ project:
|
||||
# 可选:飞书 Base Bug 收件箱。只保存 profile 名和资源 ID,绝不保存 App Secret。
|
||||
# bugIntake:
|
||||
# provider: "feishu-base"
|
||||
# workflow: "reviewed-writeback-v1"
|
||||
# workflow: "clarified-writeback-v1"
|
||||
# profile: "project-feishu"
|
||||
# baseToken: "<base_token>"
|
||||
# tableId: "<table_id>"
|
||||
# viewId: "<ack_ready_view_id>"
|
||||
# fields:
|
||||
# title: "<field_id>"
|
||||
# actual: "<field_id>"
|
||||
# expected: "<field_id>"
|
||||
# stepsToReproduce: "<field_id>"
|
||||
# fixLogic: "<field_id>" # 启用飞书审核前协作时必填
|
||||
# details: "<field_id>"
|
||||
# problemStatement: "<field_id>"
|
||||
# expectedOutcome: "<field_id>"
|
||||
# acceptance: "<field_id>"
|
||||
# priority: "<field_id>"
|
||||
# intakeStatus: "<field_id>"
|
||||
# ackTaskId: "<field_id>"
|
||||
# attachments: "<field_id>"
|
||||
# updatedAt: "<field_id>"
|
||||
orchestration:
|
||||
@@ -170,6 +170,8 @@ tasks:
|
||||
taskId: null
|
||||
dispatchId: null
|
||||
rounds: []
|
||||
# 环境失败不占产品复验轮次;按 BUG-001-ENV-1... 连续编号,并写清 userAction。
|
||||
environmentIncidents: []
|
||||
|
||||
resolution:
|
||||
fixedBy: null
|
||||
|
||||
Reference in New Issue
Block a user