skills/decision-bundle/SKILL.md
# Skill: decision-bundle Compress all decisions from CLARIFY into a minimal user interrupt set. ## Purpose The most disruptive part of AI-driven development is constant interruptions. This skill implements the Decision Bundle pattern: collect ALL pending decisions, classify them, and condense `must_confirm` items into a single structured packet — maximizing autonomy while preserving control on what matters. ## Decision Categories ### must_confirm Decisions where: - Wrong assumption causes i
npx skillsauth add LUAgam/stage-harness skills/decision-bundleInstall 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.
Compress all decisions from CLARIFY into a minimal user interrupt set.
The most disruptive part of AI-driven development is constant interruptions. This skill implements the Decision Bundle pattern: collect ALL pending decisions, classify them, and condense must_confirm items into a single structured packet — maximizing autonomy while preserving control on what matters.
Decisions where:
→ Pack into Decision Packet for single user interrupt
Decisions where:
→ Auto-proceed with proposed_default, log in bundle
Decisions where:
→ Add to unknowns-ledger.json, revisit at appropriate stage
1. Collect all decisions from:
- requirement-analyst findings
- impact-analyst blast radius flags
- challenger questions
- deep-dive-specialist memos
2. For each decision:
a. Assign category (must_confirm / assumable / deferrable)
b. Assign risk_if_wrong (low / medium / high / critical)
c. Write proposed_default and why_now
3. Prerequisite constraint check:
When a must_confirm decision confirms a capability is in scope,
check whether that capability has known prerequisites or constraints
in existing implementations (from impact-scan precedent-constraint
flags or challenger CHK items). If so, generate a follow-up decision
asking whether those constraints should be inherited or overridden.
4. Count must_confirm items vs interrupt budget
4. If must_confirm count > budget:
a. Re-evaluate: can any be reclassified as assumable?
b. If not: bundle remaining into one packet (don't split across multiple interrupts)
5. Write decision-bundle.json (all decisions)
6. Write decision-packet.json (only must_confirm for user)
budget = interrupt_budget.json → remaining_interrupts
if must_confirm_count > budget:
→ Combine all into ONE well-structured interrupt
→ Never exceed budget by splitting across turns
if must_confirm_count == 0:
→ No interrupt needed; log "0 interrupts used" in budget
{
"epic": "epic-name",
"stage": "CLARIFY",
"created_at": "2024-01-15T10:00:00Z",
"summary": {
"must_confirm": 2,
"assumable": 8,
"deferrable": 3,
"interrupts_consumed": 1
},
"decisions": [
{
"id": "DEC-001",
"question": "Should the API use JWT or session cookies?",
"context": "New auth endpoint being added",
"risk_if_wrong": "high",
"category": "must_confirm",
"proposed_default": "JWT with 1h expiry",
"why_now": "Blocks SPEC security section",
"status": "pending | resolved | deferred",
"resolution": null
}
]
}
{
"epic": "epic-name",
"interrupt_number": 1,
"total_interrupts_in_budget": 2,
"questions": [
{
"id": "DEC-001",
"question": "Should the API use JWT or session cookies?",
"why_now": "Blocks SPEC security section — wrong choice requires full rewrite",
"options": ["JWT (recommended)", "Session cookies", "Both"],
"default_action": "JWT with 1h expiry",
"deadline": "before SPEC generation"
}
]
}
Invoke skill: decision-bundle
Epic: <epic-name>
Input: findings from requirement-analyst, impact-analyst, challenger
Output:
- .harness/features/<epic-id>/decision-bundle.json
- .harness/features/<epic-id>/decision-packet.json (if must_confirm > 0)
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