skills/work/SKILL.md
# SKILL: work ## CLI Bootstrap 在执行任何 `harnessctl` 命令前,校验环境变量 `HARNESSCTL` 是否已配置: ```bash test -n "${HARNESSCTL:-}" && test -x "$HARNESSCTL" || { echo "ERROR: HARNESSCTL 环境变量未设置或不可执行。请先执行: export HARNESSCTL=/path/to/stage-harness/scripts/harnessctl" >&2 exit 1 } ``` EXECUTE 阶段开发执行技能(Worker 循环)。严格按序完成每个 task 的 5-Phase 内循环,确保实现与 spec 对齐,每个 task 有可验证的证据,新发现问题按规则分类处理。 > **受控产物写入协议**:`.harness/tasks/*.json`、`.harness/features/*/state.json`、`.harness/epics/*.json` 等受 write-guard hook 保护,禁止直接
npx skillsauth add LUAgam/stage-harness skills/workInstall 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.
在执行任何 harnessctl 命令前,校验环境变量 HARNESSCTL 是否已配置:
test -n "${HARNESSCTL:-}" && test -x "$HARNESSCTL" || {
echo "ERROR: HARNESSCTL 环境变量未设置或不可执行。请先执行: export HARNESSCTL=/path/to/stage-harness/scripts/harnessctl" >&2
exit 1
}
EXECUTE 阶段开发执行技能(Worker 循环)。严格按序完成每个 task 的 5-Phase 内循环,确保实现与 spec 对齐,每个 task 有可验证的证据,新发现问题按规则分类处理。
受控产物写入协议:
.harness/tasks/*.json、.harness/features/*/state.json、.harness/epics/*.json等受 write-guard hook 保护,禁止直接 Write/Edit。所有 task 状态变更必须通过$HARNESSCTL task done/update、$HARNESSCTL state transition等命令操作。
EXECUTE/stage-harness:work 命令每个 task 严格按以下 5 个 Phase 执行,不允许跳步。
在开始任何实现前,完整加载当前上下文。
# 读取 task 详情
$HARNESSCTL task show <task-id> --json
# 读取 epic 当前状态
$HARNESSCTL state get <epic-id>
# 确认工作区状态
git status
git log -5 --oneline
# 读取相关 memory 记录
ls .harness/memory/
cat .harness/memory/<epic-id>-*.md 2>/dev/null || true
Context Depth Loading(上下文深度加载):
在基础 re-anchor 之后,根据 task JSON 补充精确上下文:
# 读取 SPEC 中对应章节(根据 task 的 spec_refs 字段定位)
cat .harness/specs/<epic-id>.md # 定向阅读 spec_refs 列出的 REQ/FR 段落
# 若 task 含 source_context_hint,读取原始需求对应段落
cat .harness/features/<epic-id>/source-materials.md # 按 hint 定位行范围
加载规则:
spec_refs(如 ["REQ-001", "REQ-003"]),读取 SPEC 文件中对应编号的段落source_context_hint(如 "SRC-001:L42-L58"),读取 source-materials.md 中对应行范围requirement-index.json 存在且 input_density 为 rich 但无 source_context_hint,快速浏览 source-materials.md 的 Inline Requirements 段落Contract Context Loading(接口契约加载):
若 .harness/features/<epic-id>/contracts/ 目录存在且非空,检查当前 TASK 是否为某 contract 的 provider 或 consumer:
# 查找与当前 TASK 相关的 contract 文件
ls .harness/features/<epic-id>/contracts/ 2>/dev/null | grep -i "<task-id>" || true
加载规则:
contract.response_schemacontract.shared_enums 定义的集合contract.required_fields 中列出的所有字段contract.shared_enums 定义的集合Re-anchor 输出:
acceptance_criteria)在进入实现前验证所有前置条件。任一失败则阻断,不进入实现。
| 检查项 | 失败处理 |
|--------|---------|
| 依赖前置 task 是否全部 done | 阻断,等待依赖完成 |
| 工作区是否干净(无未提交修改) | 先提交或 stash |
| 基线测试是否通过 | 报告失败,回流 FIX |
| Task surface 是否在 in-scope 范围 | 核查 .harness/features/<epic-id>/surface-routing.json(CLARIFY 门禁必备)与 clarification-notes.md 范围边界章节 |
# 检查基线测试
<project-test-command> # e.g., npm test / pytest / go test ./...
Preflight 结果写入 task receipt 的 preflight 字段。
记录 BASE_COMMIT,然后严格按 TDD 顺序执行。
BASE_COMMIT=$(git rev-parse HEAD)
acceptance_criteria 编写测试实现中发现新问题时,分类(见"新发现问题处理"章节),不要就地修复超出当前 task 范围的问题。
每个 task 完成后的最小可运行验证。
# 运行与当前 task 相关的测试
<test-command> --filter <task-related-pattern>
# 验证证据文件存在
ls <evidence_path> # 来自 task JSON 的 evidence 字段
校验清单:
evidence 字段中列出的文件均存在)contract.response_schema 一致contract.required_fields 的所有字段contract.shared_enums 定义的集合(通过 grep/静态分析验证)Task Smoke 失败:
原子提交,写 receipt,标记 task done。
# 原子提交(只提交当前 task 的变更)
git add <task-related-files>
git commit -m "feat(<surface>): <task-title>
task: <task-id>
epic: <epic-id>"
HEAD_COMMIT=$(git rev-parse HEAD)
# 写入 runtime receipt
$HARNESSCTL receipt write <task-id> \
--base-commit "$BASE_COMMIT" \
--head-commit "$HEAD_COMMIT" \
--smoke-passed true
# 标记 task done
$HARNESSCTL task done <task-id>
Receipt 文件路径:.harness/features/<epic-id>/receipts/<task-id>.json
Receipt 格式(参考模板):
{
"task_id": "<task-id>",
"phase": "EXECUTE",
"preflight": {"passed": true, "checks": []},
"implementation": {
"base_commit": "<sha>",
"head_commit": "<sha>",
"files_changed": 0
},
"smoke": {"passed": true, "commands": []},
"build": {
"executed": true,
"command": "<build-command>",
"exit_code": 0,
"passed": true
},
"evidence": {},
"new_risks": [],
"timestamp": "<iso8601>"
}
在 Phase 5 commit 之后执行项目构建验证。
# 读取项目 profile 获取构建信息
$HARNESSCTL profile show --json
根据 project-profile.yaml 中的 build_tool 自动选择:
| build_tool | 构建命令 |
|-----------|---------|
| npm | npm run build 或 npx tsc --noEmit |
| maven | mvn compile -q |
| gradle | ./gradlew build |
| go | go build ./... |
| cargo | cargo build |
# 使用 harnessctl build(如可用)
$HARNESSCTL build --epic-id <epic-id> --task-id <task-id> --json
构建结果写入 receipt 的 build 字段。构建失败视为 smoke 失败,消耗重试预算。
完成一个 task 后:
# 获取下一个 ready task(status=pending,依赖全部 done)
$HARNESSCTL task list <epic-id> --status pending --json
选择依赖全部满足的 task,重新从 Phase 1 开始。
在实现过程中发现计划外问题时,按以下分类处理:
| 分类 | 条件 | 处理方式 |
|------|------|---------|
| local_fix | 当前 task 内可修复,不影响其他 task | 直接修复,记录到 receipt 的 new_risks |
| plan_patch | 需要新增/修改/删除其他 task | 停止,回流 PLAN |
| spec_patch | 发现 spec 与实现现实不符 | 停止,回流 SPEC |
回流命令:
# 回流 PLAN
$HARNESSCTL state transition <epic-id> PLAN
# 回流 SPEC(需要从 PLAN 再回 SPEC)
$HARNESSCTL state transition <epic-id> PLAN
# 在 PLAN 中再触发 SPEC 回流
在写 receipt 前,明确回答以下问题:
本次实现是否暴露了新的语义风险(行为与预期不符)、兼容风险(破坏现有接口)、运维风险(影响部署/监控/告警)?
new_risks,分类为 local_fix / plan_patch / spec_patchnew_risks: []plan_patch 流程# 自动生成 triage 报告
$HARNESSCTL triage <epic-id> <task-id> \
--reason "consecutive_failures" \
--failures 3
# 停止执行,等待人工干预或回流 PLAN
所有 tasks 状态均为 done 时,验证出口门禁后进入 VERIFY:
# 验证所有 tasks 完成
$HARNESSCTL task list <epic-id> --json | jq '.[] | select(.status != "done")'
# 验证所有 receipt 包含 build 结果
$HARNESSCTL receipt list <epic-id> --json
出口门禁检查清单:
donesmoke.passed 为 truebuild.passed 为 true(如 build.executed 为 true)# 触发状态转换
$HARNESSCTL state transition <epic-id> VERIFY
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