skills/feedback-triage/SKILL.md
# SKILL: feedback-triage ## CLI Bootstrap ```bash test -n "${HARNESSCTL:-}" && test -x "$HARNESSCTL" || { echo "ERROR: HARNESSCTL 环境变量未设置或不可执行。请先执行: export HARNESSCTL=/path/to/stage-harness/scripts/harnessctl" >&2 exit 1 } ``` --- ## 概述 Feedback Triage Council 调度技能。当 stage-reminder hook 自动提交 feedback 后, 本 skill 负责完整执行多 agent 评审流程,决定是否 reopen 及返回哪个阶段。 --- ## 触发条件 - stage-reminder.sh 检测到 feedback_candidate 并自动提交 HFB-xxx - additionalContext 注入 `[Feedback - AUTO SUBMITTED]` 指令 - 也可手动触发
npx skillsauth add LUAgam/stage-harness skills/feedback-triageInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
test -n "${HARNESSCTL:-}" && test -x "$HARNESSCTL" || {
echo "ERROR: HARNESSCTL 环境变量未设置或不可执行。请先执行: export HARNESSCTL=/path/to/stage-harness/scripts/harnessctl" >&2
exit 1
}
Feedback Triage Council 调度技能。当 stage-reminder hook 自动提交 feedback 后, 本 skill 负责完整执行多 agent 评审流程,决定是否 reopen 及返回哪个阶段。
[Feedback - AUTO SUBMITTED] 指令evidence-pack.json、votes/*.json、verdict.json 文件。必须通过 harnessctl 标准命令完成每一步。PreToolUse hooks 会自动拦截违规操作。decision 字段仅接受以下值:REOPEN_CLARIFY、REOPEN_SPEC、REOPEN_PLAN、STAY_EXECUTE、NO_REOPEN_WITH_EVIDENCE、INSUFFICIENT_EVIDENCE、REJECT、DEFER。旧版值(如 agree_reopen、conditional、reopen 等)会被 aggregate-triage 拒绝。scope_change 或 high risk 需人工确认。continue --execute 只能调用 harness 编排命令(plan-amendment / approve-amendment / reopen / task-graph merge / re-complete / close),真正代码/文档修改仍由对应阶段命令执行。/stage-harness:feedback submit 默认强制编排完整 triage 闭环。HFB-xxx.related-gap-scan.json 必须存在才能 approve-amendment。高置信度 gaps 必须在 Amend 或 Deferred(含 reason) 中体现。通用 sibling category 扫描范围:docs / tests / frontend / backend / config / i18n / infra / data-schema / api-contract / release-user-facing-notes / domain-specific-support-matrix。harnessctl feedback write-vote 命令,禁止直接写入 votes 目录。write-vote 会注入 _managed、_written_by、_schema_version、_vote_session_id 元数据,aggregate-triage 会校验这些字段存在且 _managed=true。evidence 数组不得为空,每条 evidence 必须引用具体文件路径或代码片段。mentioned_surface 不能直接当路径用。evidence-pack 中必须先匹配 repo-catalog / surface-routing / codemap alias,命中后作为 probe root,未命中则仅作为 keyword hint。如果 hook 已自动提交,从 additionalContext 中获取 feedback_id。 否则手动提交:
$HARNESSCTL feedback submit \
--epic-id ${EPIC_ID} \
--stage ${CURRENT_STAGE} \
--text "<用户原文摘要>" \
--json
$HARNESSCTL feedback evidence-pack \
--epic-id ${EPIC_ID} \
--feedback-id ${FEEDBACK_ID} \
--json
输出 HFB-xxx.evidence-pack.json,包含:
candidates[].snippets 作为 evidence$HARNESSCTL feedback council-triage \
--epic-id ${EPIC_ID} \
--feedback-id ${FEEDBACK_ID} \
--json
返回 votes_dir 和 agents 列表。
使用 Agent 工具并行调度(复用已有 agent 定义)。每个 agent 必须通过 harnessctl feedback write-vote 提交投票,禁止直接写入 votes 目录文件:
Agent 1 (requirement-analyst):
读取 evidence-pack,判断用户反馈是否改变需求语义/范围/用户意图。
通过 write-vote 提交投票:
$HARNESSCTL feedback write-vote --epic-id ${EPIC_ID} --feedback-id ${FEEDBACK_ID} \
--agent requirement-analyst --stdin <<< '<vote JSON>'
Agent 2 (impact-analyst):
读取 evidence-pack + 项目源码(按 source_evidence_hints 检索),
判断是否遗漏影响面(仓库、模块、页面、接口)。
通过 write-vote 提交投票:
$HARNESSCTL feedback write-vote --epic-id ${EPIC_ID} --feedback-id ${FEEDBACK_ID} \
--agent impact-analyst --stdin <<< '<vote JSON>'
Agent 3 (challenger):
读取 evidence-pack,尝试反证"无需调整"是否站得住。
通过 write-vote 提交投票:
$HARNESSCTL feedback write-vote --epic-id ${EPIC_ID} --feedback-id ${FEEDBACK_ID} \
--agent challenger --stdin <<< '<vote JSON>'
Agent 4 (plan-reviewer):
读取 evidence-pack + tasks,判断 PLAN/tasks 是否遗漏相关任务。
通过 write-vote 提交投票:
$HARNESSCTL feedback write-vote --epic-id ${EPIC_ID} --feedback-id ${FEEDBACK_ID} \
--agent plan-reviewer --stdin <<< '<vote JSON>'
Agent 5 (test-reviewer):
读取 evidence-pack + spec,判断验收标准和测试是否覆盖。
通过 write-vote 提交投票:
$HARNESSCTL feedback write-vote --epic-id ${EPIC_ID} --feedback-id ${FEEDBACK_ID} \
--agent test-reviewer --stdin <<< '<vote JSON>'
Agent 6 (code-reviewer):
读取 evidence-pack + 相关源码(按 candidate_paths 检索),
判断代码证据是否支持结论。注意:code-reviewer 只做事实判断,
不单独决定上游阶段。
通过 write-vote 提交投票:
$HARNESSCTL feedback write-vote --epic-id ${EPIC_ID} --feedback-id ${FEEDBACK_ID} \
--agent code-reviewer --stdin <<< '<vote JSON>'
⛔ 禁止行为:Agent 不得使用 Write/Edit/Bash 直接创建
votes/*.json文件。 PreToolUse hooks 会拦截此类操作。只有write-vote命令能写入 votes 目录, 并自动注入_managed/_written_by/_schema_version/_vote_session_id元数据。
每个 agent 必须输出:
{
"agent": "<agent-name>",
"feedback_id": "<feedback-id>",
"decision": "<FEEDBACK_TRIAGE_OUTCOME>",
"classification": "<feedback-classification>",
"target_stage": "<CLARIFY|SPEC|PLAN|EXECUTE>",
"confidence": 0.86,
"evidence": ["具体证据描述1", "具体证据描述2"],
"reasoning": "判断理由简述",
"related_gaps": [
{
"category": "test|docs|config|frontend|backend|auth|i18n|infra|data",
"description": "同类遗漏描述",
"confidence": 0.7
}
]
}
强校验规则:
decision=REOPEN_PLAN → target_stage 必须是 PLANdecision=REOPEN_SPEC → target_stage 必须是 SPECdecision=REOPEN_CLARIFY → target_stage 必须是 CLARIFYdecision=STAY_EXECUTE → target_stage 必须是 EXECUTEdecision=NO_REOPEN_WITH_EVIDENCE → evidence 非空有效 decision 值:
REOPEN_CLARIFY — 需求澄清阶段遗漏,需回退到 CLARIFYREOPEN_SPEC — 规格定义遗漏,需回退到 SPECREOPEN_PLAN — 计划遗漏,需回退到 PLANSTAY_EXECUTE — 上游产物已覆盖,只是实现漏改NO_REOPEN_WITH_EVIDENCE — 确认无需调整,有充分证据INSUFFICIENT_EVIDENCE — 证据不足,无法判断REJECT — 反馈无效DEFER — 延期处理| Agent | 判断范围 | 不应判断 | |-------|----------|----------| | requirement-analyst | 需求语义/范围/意图是否变化 | 代码实现细节 | | impact-analyst | 影响面是否遗漏 | 具体代码修改方案 | | challenger | "无需调整"结论是否有漏洞 | 具体返工方案 | | plan-reviewer | 任务拆分是否遗漏 | 需求是否合理 | | test-reviewer | 验收/测试是否覆盖 | 代码实现 | | code-reviewer | 代码事实(是否缺口) | 上游阶段决策 |
$HARNESSCTL feedback aggregate-triage \
--epic-id ${EPIC_ID} \
--feedback-id ${FEEDBACK_ID} \
--json
聚合规则(按最早失效层级优先):
REOPEN_CLARIFY → 整体 reopen CLARIFYREOPEN_SPEC → reopen SPECREOPEN_PLAN → reopen PLANNO_REOPEN_WITH_EVIDENCE 且证据充分 → 不 reopenINSUFFICIENT_EVIDENCE(阻断,要求补证据)After aggregation, 必须检查是否需要 related-gap-scan。以下条件触发(任一即可):
REOPEN_*(任意 reopen 决策)STAY_EXECUTE 且 classification 含 scope_gaprelated_gaps 非空$HARNESSCTL feedback related-gap-scan \
--epic-id ${EPIC_ID} \
--feedback-id ${FEEDBACK_ID} \
--phase pre \
--json
This generates HFB-xxx.related-gap-scan.json with sibling categories to check.
⛔ 禁止行为:scope_gap 类型的 verdict 不得跳过 related-gap-scan 直接进入 amendment。 scan 结果必须合入 amendment-plan,确保兄弟缺口同批修复。
The scan results feed into the amendment-plan to ensure sibling gaps are addressed together. If scan discovers high-confidence sibling gaps (confidence ≥ 0.7), they must be included in the amendment plan as additional tasks.
读取 verdict:
cat .harness/features/${EPIC_ID}/councils/feedback_triage_council/${FEEDBACK_ID}/verdict.json
# triage.json 已由 aggregate 自动生成
$HARNESSCTL feedback plan-amendment --epic-id ${EPIC_ID} --feedback-id ${FEEDBACK_ID}
Auto-Execute Matrix (v2):
| Verdict | Low Risk | Medium Risk | High Risk |
|---------|----------|-------------|-----------|
| REOPEN_PLAN | 自动 | 自动 + revision-diff gate | 人工确认 |
| REOPEN_SPEC | 自动 | 自动 + revision-diff gate | 人工确认 |
| REOPEN_CLARIFY | 自动 | 自动 + revision-diff gate | 人工确认 |
| STAY_EXECUTE | 自动 | 自动 + review gate | 非破坏性自动;破坏性人工确认 |
| scope_change | 人工确认 | 人工确认 | 人工确认 |
核心原则:当前范围内 + 非破坏性 + 可验证 = 自动修
Risk-based approve 判断:
risk_level(默认 low)scope_change 或 blocker:始终人工确认⛔ 禁止行为:verdict 确认 in-scope 后,禁止输出类似"要我现在创建任务并实施吗?"的询问。 应当直接执行 approve-amendment → reopen → re-* skill 或 task-graph merge。
$HARNESSCTL feedback approve-amendment --epic-id ${EPIC_ID} --feedback-id ${FEEDBACK_ID}
$HARNESSCTL reopen --epic-id ${EPIC_ID} --to ${TARGET_STAGE} --feedback-id ${FEEDBACK_ID}
然后根据 target_stage 执行对应 re-* skill:
REOPEN 回退后必须重新完成对应阶段门禁:
使用 harnessctl feedback re-complete 标记每个回退阶段的完成:
$HARNESSCTL feedback re-complete --epic-id ${EPIC_ID} --feedback-id ${FEEDBACK_ID} \
--stage ${COMPLETED_STAGE} --artifacts "tasks/,coverage-matrix.json"
基于 council 证据回答用户原始问题,然后关闭:
$HARNESSCTL feedback close \
--epic-id ${EPIC_ID} \
--feedback-id ${FEEDBACK_ID} \
--evidence "Council verdict: NO_REOPEN_WITH_EVIDENCE. <具体理由>"
不允许关闭。输出提示:
证据不足,无法确定是否需要返工。
请补充以下信息后重新评审:
- [列出缺失的证据点]
留在当前阶段修复(不 reopen),自动创建补充任务并立即通过 /stage-harness:work 执行:
$HARNESSCTL task-graph merge \
--epic-id ${EPIC_ID} \
--feedback-id ${FEEDBACK_ID} \
--new-tasks '[{"title": "...", "surface": "..."}]' \
--json
⛔ 禁止行为:STAY_EXECUTE 裁决后,禁止询问用户"是否需要创建任务"。 必须直接创建补充任务并用
/stage-harness:work执行。
修复完成后关闭 feedback。
feedback_candidate 检测
→ hook 自动 submit HFB-xxx
→ Guard 阻断(submitted feedback 存在,禁止 idle)
→ harnessctl feedback run-triage(自动执行 evidence-pack + council-triage init)
→ ⚠️ run-triage 仅完成准备工作,返回 council_dispatch_required 信号
→ 调用方(Claude 主会话)必须接续完成以下步骤:
1. 解析返回 JSON 中的 agents 列表
2. 使用 Agent 工具并行调度 6 个评审 agent(每个通过 write-vote 提交投票)
3. 等待全部 agent 完成
4. harnessctl feedback aggregate-triage
5. harnessctl feedback continue --execute
→ 以上 5 步是 run-triage 的完整语义,不可部分执行
→ 6 agent 并行评审(必须使用 Agent 工具,禁止手工生成 vote JSON)
→ harnessctl feedback aggregate-triage(v2 严格 schema 校验)
→ harnessctl feedback continue(自动执行后续):
REOPEN_* → plan-amendment → risk-based auto-approve → reopen → re-* skill → re-complete gate
NO_REOPEN → evidence answer → close
INSUFFICIENT → 阻断,要求补证据
STAY_EXECUTE → 自动补充任务 → /stage-harness:work 执行 → close
scope_gap 类型 → mandatory related-gap-scan → 兄弟缺口合入 amendment
| 约束 | 说明 |
|------|------|
| 禁止手工复刻 | 不得用 Bash/Write 创建 evidence-pack/votes/verdict 文件,hooks 自动拦截 |
| write-vote 唯一路径 | Agent 投票必须通过 harnessctl feedback write-vote,注入 managed 元数据 |
| evidence 非空 | vote 的 evidence 数组不得为空,必须引用具体文件/代码 |
| v2 schema only | decision 仅限 8 个标准值,旧值被 aggregate 拒绝 |
| 自动继续 | low/medium risk 确认后自动执行,不问用户 |
| feedback 不得 idle | submitted/triaged 状态的 feedback 必须立即处理 |
| related-gap-scan | scope_gap 类型必须执行,结果送入 amendment |
| approve-amendment gate | 高置信度 related gaps 必须在 Amend 或 Deferred(含 reason) 中体现 |
| REOPEN 门禁 | 回退阶段必须重新完成门禁,使用 re-complete 标记 |
当 HFB 状态为 continuation_pending 且 continuation.category == "assumable" 时:
continuation.allowed_commands 中的命令| category | 行为 |
|----------|------|
| assumable (low/medium risk + REOPEN_*) | 静默自动推进 |
| must_confirm (high risk / scope_change) | 输出决策包,等待确认 |
| must_confirm + 预算耗尽 | 阻断,不自动默认执行 |
以下模式视为违反反空转约束:
continuation_pending
→ /stage-harness:plan --reopen (Agent 产出 amendment-plan.json)
→ harnessctl feedback re-plan (确定性合并 + revision-manifest)
→ harnessctl feedback re-complete --stage <STAGE> (manifest 校验)
→ HFB status = resolved
→ gate-check pass
禁止跳过 re-plan 直接执行 re-complete。 禁止手写 revision-manifest.json 或 revision-diff.md。
development
在 generate-test-cases 阶段之后执行,逐个验证测试用例并在失败时修复项目代码、重新编译部署、再次验证, 直到通过或达到最大修复次数。覆盖 UI / API / API+UI / 性能测试四个维度,UI 测试通过浏览器真实模拟用户操作并截图, API 测试根据项目代码生成可执行的接口脚本,性能测试调用现有性能/质量技能全量执行。 涉及真实用户登录信息(如手机号+验证码、账号密码、JWT)时必须中断要求用户提供,禁止编造无效凭证。 所有 case 状态变更必须通过 e2e-case-tracker.sh 脚本持久化,确保中途崩溃可恢复、无 case 遗漏。
development
# SKILL: e2e > **核心原则**: > 1. 测试范围跟着本次变动走。后端接口改了,对应的前端流程必须做联调验证;与本次需求无关的功能不测。对于涉及算法、转换准确率等质量敏感型需求,需额外生成专项质量测试。 > 2. **覆盖完整性优先于执行便利性**。不得以"链路复杂"、"需要外部依赖"为由跳过本次变动相关的用例;凡是受变动影响的接口和 UI 流程,都必须生成真实调用/操作用例。 > 3. **UI 测试必须模拟真实用户操作**(定位元素、点击、键入、等待渲染、断言可见文本/状态)。**禁止**将 UI 套件退化为浏览器上下文里的 `page.evaluate(fetch(...))` API 验证——那只是把 API 测试换了执行环境,没有额外价值,不算 UI 测试。 > 4. **通用性**:本 skill 不假设具体业务域,所有规则均以抽象变动面(文件、接口、页面、用户动作)为单位组织,不针对任何特定项目的数据库/领域词汇。 > 5. **E2E 套件必须验证运行时行为**。严禁把"读取源码/配置文件并做字符串/结构匹配"的检查封装成独立 E2E 套件——这类检
tools
# SKILL: deploy ## CLI Bootstrap 在执行任何 `harnessctl` 命令前,先解析本地 CLI 路径: ```bash if [ -z "${HARNESSCTL:-}" ]; then candidates=( "./stage-harness/scripts/harnessctl" "../stage-harness/scripts/harnessctl" "$(git rev-parse --show-toplevel 2>/dev/null)/stage-harness/scripts/harnessctl" ) for candidate in "${candidates[@]}"; do if [ -n "$candidate" ] && [ -x "$candidate" ]; then HARNESSCTL="$candidate" break fi done fi test -n "${HARNESSCTL:-}" && test -x "$H
tools
# SKILL: build ## CLI Bootstrap 在执行任何 `harnessctl` 命令前,先解析本地 CLI 路径: ```bash if [ -z "${HARNESSCTL:-}" ]; then candidates=( "./stage-harness/scripts/harnessctl" "../stage-harness/scripts/harnessctl" "$(git rev-parse --show-toplevel 2>/dev/null)/stage-harness/scripts/harnessctl" ) for candidate in "${candidates[@]}"; do if [ -n "$candidate" ] && [ -x "$candidate" ]; then HARNESSCTL="$candidate" break fi done fi test -n "${HARNESSCTL:-}" && test -x "$HA