Generate an Acceptance Demo HTML for non-engineer vibecoders right before ship/wait/reject decision. Reads back the acceptance_criteria that were stored as personal-preference.v1 by harness-plan-brief (joined by user_request_hash), then renders a single-file HTML showing each criterion as verified or unverified along with a ship/wait/reject recommendation. Use when the user asks for an acceptance review, wants to decide whether to ship a delivered task, or says: acceptance demo, accept demo, 受け入れ判断, 受入レビュー, ship/wait/reject 判定, 検収レビュー. Do NOT load for: implementation, code review, release work.
The canonical home for this skill is harness-accept in Chachamaru127/claude-code-harness
非エンジニアの発注者・プロデューサー職向けに、実装完了タスクの受け入れ判断 (ship / wait / reject) を HTML 1 枚 で提示するスキル。 発注者の認知負荷ピーク (3) 受け入れ判断の段階で使う。
Phase 65.1.x (harness-plan-brief) の対構造として動作し、Plan Brief で承認した acceptance_criteria を read 側で取り戻して評価する。
| 範囲 | このスキルの責務 |
|---|---|
| 検索 | 現プロジェクトのみ (project: <current>, strict_project: true を必ず指定) |
| クロスプロジェクト | やらない (Phase 65.3 以降で --cross-project-group <name> flag で opt-in 解放) |
| Plan Brief 連携 | user_request_hash を join key として personal-preference.v1 (Phase 65.1.4) を read |
| 書き込み | やらない (Acceptance 承認後の memory write は accept-record-decision.sh の責務) |
| recommendation 算出 | verified / 全 criteria の比率で 0.8 / 0.5 閾値判定。ロジックは scripts/render-html.sh 直前で計算 |
引数 [task-description] にユーザーの request を渡す (Plan Brief 時と同じ文を使う)。
引数なしの場合は対話形式で受け取る。
| 出力 | パス | 形式 |
|---|---|---|
| Acceptance Demo HTML | .claude/state/views/accept-<timestamp>.html | 単独で開ける HTML (no server, no JS framework) |
| Acceptance context JSON | .claude/state/views/accept-<timestamp>.context.json | acceptance-context.v1 schema |
acceptance-context.v1{
"schema": "acceptance-context.v1",
"user_request": "string",
"user_request_hash": "sha256 hex (Plan Brief 側の personal-preference.v1 と join)",
"demo_artifacts": [
{ "kind": "video|screenshot|text", "path": "string" }
],
"verified_criteria": [
{ "name": "string", "passed": true, "evidence": "string" }
],
"tdd_verified": "yes|no|not-required|skip:<reason>",
"unverified_caveats": ["string"],
"past_issue_patterns": [
{ "pattern_id": "P5", "title": "string", "verified_in_current_task": true }
],
"recommendation": "ship|wait|reject",
"recommendation_evidence": ["string"],
"project": "string",
"generated_at": "ISO8601",
"blind_evaluation": {
"applicable": true,
"eligibility_reason": "persuasive-doc|functional-skip|not_applicable|unavailable",
"audience_purpose_line": "string",
"evaluator_believable": "believable|not_believable|uncertain",
"evaluator_useful": "useful|not_useful|uncertain",
"evaluator_friction_points": ["string"],
"internal_recommendation": "ship|wait|reject",
"divergence": "none|internal_high_evaluator_low|internal_low_evaluator_high",
"divergence_notes": "string"
}
}blind_evaluation は Phase 137.2 で追加した optional field (additive、既存 consumer は無視してよい)。
詳細は references/blind-evaluator.md を参照。
完全 schema は schemas/acceptance-context.v1.schema.json を参照。
verified_count = count of verified_criteria where passed=true
total_criteria = count of verified_criteria
pending_count = count of criteria whose evidence が "pending_validations: " prefix を持つ (Step 4 の記入規約)
ratio = verified_count / total_criteria (total=0 のときは 0)
total = 0 → "reject" (criteria 0 件は判定不能、安全側 reject)
ratio >= 0.8 → base = "ship"
ratio >= 0.5 → base = "wait"
ratio < 0.5 → base = "reject"
# pending 補正 (Phase 134.4): 検証待ちの criteria が残っている限り ship にしない
pending_count >= 1 かつ base == "ship" → interim = "wait" (ship から丸める)
それ以外 → interim = base
# blind_evaluation 補正 (Phase 137.2): fresh fork 評価者が「信じられない/役に立たない」と
# 判定し、かつ内側の recommendation が依然 ship なら wait に丸める。reject へはさらに丸めない
blind_evaluation.applicable == true
かつ blind_evaluation.divergence == "internal_high_evaluator_low"
かつ interim == "ship"
→ recommendation = "wait"
それ以外
→ recommendation = interim評価根拠は recommendation_evidence に literal な数値で残す。
例: "verified 4 件 / 全 5 件 (80%) → ship 閾値以上"
pending 補正が効いた場合は "pending_validations 該当 criteria N 件が未解消のため ship を wait に丸めた" のように理由を明記する。
blind_evaluation 補正が効いた場合は "blind evaluator が believable=not_believable / useful=not_useful と判定したため ship を wait に丸めた" のように理由を明記する。
アルゴリズムと Eligibility (説得系/文書系のみ適用、機能系は functional-skip で skip) の詳細は
references/blind-evaluator.md 参照。
スキル起動時、Claude は以下の手順で動作する。
PROJECT_NAME="$(basename "$(git rev-parse --show-toplevel)")"
USER_REQUEST_HASH="$(printf '%s' "$USER_REQUEST" | sha256sum | awk '{print $1}')"PROJECT_NAME が空 (git 外) の場合は current をデフォルトに使う。
引数に --cross-project-group <name> flag がない場合 (default behavior):
mcp__harness__harness_mem_search を以下のパラメータで呼び出す:
project: <PROJECT_NAME>
strict_project: true
tags: ["personal-preference", "plan-brief-approval"]
limit: 10重要:
projectパラメータは必須。strict_project: trueを指定し、cross-project な検索は絶対に行わない。
取得した record を data.user_request_hash == <USER_REQUEST_HASH> でフィルタし、最も新しい 1 件を選ぶ。
これが Plan Brief 時の承認内容 (chosen_option / acceptance_criteria 等) を保持している。
引数に --cross-project-group <name> flag がある場合のみ、横断 group 内の他プロジェクトでの
類似 plan-brief-approval / acceptance-decision 履歴を取得する (D43 Option α):
MEMBERS_JSON="$(bash scripts/load-cross-project-groups.sh --group "<name>" 2>/dev/null)" || {
echo "ERROR: cross-project group not found: <name>" >&2
exit 1
}MEMBERS_JSON が [] の場合は default の単一 project search に fallback。
MEMBERS_JSON が非空の場合、各 member project ごとに MCP search を 1 回発行:
for each project in MEMBERS_JSON:
mcp__harness__harness_mem_search(
project: <member>,
strict_project: true,
tags: ["personal-preference", "plan-brief-approval"],
limit: 10
)結果を client 側でマージし、data.user_request_hash == <USER_REQUEST_HASH> でフィルタ。
hash 一致は基本的に同一 user request 由来のため複数 project での重複は稀だが、念のため id 単位で dedupe。
cross-project 由来の record を採用すると過去他案件の chosen_option / acceptance_criteria が混入する
可能性があるため、HTML 出力時は --with-redaction flag を必ず使用 すること:
bash scripts/render-html.sh --template accept ... --with-redaction詳細は .claude/rules/cross-repo-handoff.md の「Phase 65.3 実装決定事項 (D43)」を参照。
bash scripts/accept-past-issues.sh --project "$PROJECT_NAME" --task "$USER_REQUEST" > "$PAST_ISSUES_JSON"このスクリプトは patterns.md (P1-P33) と過去の acceptance-context.v1 record を semantic search し、
最大 3 件の past-issue.v1 を返す。各々 verified_in_current_task: bool 付き。
まず scripts/accept-collect-evidence.sh <task-id> (read-only) を実行し、accept-evidence.v1 を取得する:
EVIDENCE_JSON="$(bash scripts/accept-collect-evidence.sh "$TASK_ID")"これは 4 artifact (.claude/state/review/<task-id>.worker-report.json / .claude/state/review-result.json
[task.id 一致時のみ採用] / <task-id>.runtime-review.json / <task-id>.browser-result.json) を読み、
各 artifact の present / reason / data と pending_validations (Reviewer が積んだ未解消レイヤー) を正規化して返す。
原則: artifact から引用する。新規主張を作らない。 Plan Brief 時の acceptance_criteria 各項目について、
EVIDENCE_JSON の 4 artifact の中から該当する記述を探し、その内容を evidence にそのまま転記する。
Claude が artifact に無い「動作確認した」を独自に主張することは禁止。
各 criterion の判定:
passed: true、evidence に artifact の該当箇所を引用するpresent: false) か、EVIDENCE_JSON.pending_validations に該当 layer がある場合 → passed: false。
evidence には次の literal prefix で実状態を転記する (pending_count の機械カウントに使う規約):
"pending_validations: " + <該当 pending_validations[].reason>"artifact missing: " + <path> + " (" + <reason> + ")"unverified_caveats に 1 行追記するevidence が空文字列の場合、HTML 上で警告表示される (DoD c、既存動作)。
demo_artifacts への video 合流 (Phase 134.6): EVIDENCE_JSON.demo_artifacts (browser-review-runner.sh
が拾った playwright screencast の {kind:"video", path}) を、コンテキスト JSON の demo_artifacts 配列に
追記する。ただし path はプロジェクトルート相対のまま転記してはならない — 出力先 HTML は
.claude/state/views/accept-<timestamp>.html にあり、<video src> はブラウザが HTML のある場所
(.claude/state/views/) を基点に解決するため、../../../ を前置してプロジェクトルートから
そこへ辿れる相対パスに書き換えてから追記する (例: test-results/x/trace.webm →
../../../test-results/x/trace.webm)。accept.html.template は kind=="video" のエントリだけ
<video> 埋め込みで表示する (それ以外の kind は従来通りテキスト表示のまま)。
TDD が必要な task では、Acceptance Demo に TDD verified: yes|no の 1 行を必ず出す。
TDD 不要または skip の場合は TDD verified: not-required または TDD verified: skip:<reason> と表示する。
yes にできるのは .claude/state/tdd-red-log/<task-id>.jsonl の Red 証跡、または literal failing test output が確認できる時だけ。
Eligibility を確認する: 成果物の主目的が「説得すること・読ませて理解させること」の文書系
(提案書・レポート・README 等) なら適用、「動くこと」の機能系 (コード・設定・スキーマ等) なら
skip する。詳細な Eligibility 表と手順は
references/blind-evaluator.md 参照。
blind_evaluation = { applicable: false, eligibility_reason: "functional-skip" }
として Step 5 に進む (DoD b)。評価者は起動しない。subagent_type: general-purpose) を起動し、
依頼文 + 成果物 + 読者像 1 行のみを渡す (verified_criteria / recommendation の閾値 / 過去の
判定は渡さない)。Judge Prompt Template で「信じられるか / 役に立つか / 引っかかった箇所」の
3点を受け取り、blind_evaluation を組み立てる。eligibility_reason: "unavailable" とし fake の結果を作らない。上記「Recommendation 算出ロジック」に従って ship / wait / reject を決定する。
Step 4.5 で blind_evaluation を適用した場合、divergence による補正もここで適用する。
scripts/render-html.sh (Phase 65.1.1) を templates/html/accept.html.template で呼ぶ:
bash scripts/render-html.sh \
--template accept \
--data "$CONTEXT_JSON" \
--out "$HTML_OUT"scripts/plan-brief-open.sh (Phase 65.1.2 で導入された 汎用 OS dispatcher) を再利用:
bash scripts/plan-brief-open.sh "$HTML_OUT"注: スクリプト名に「plan-brief」が入っているが、実体は OS 別 browser open dispatcher で kind 中立。 Phase 65.1.2 で先に導入されたため historical name。Layer 3 (HTML 直前最終 scan) 等の他用途でも再利用される。
BROWSER=trueの env が設定されている場合 (CI 環境)、open は skip されprintfで path だけ出力する。
「ship / wait / reject の recommendation を採用するか、override するか」を確認する。
判断後の memory write は別スキル (accept-record-decision.sh、Phase 65.2.3) の責務。
| 失敗 | 挙動 |
|---|---|
mcp__harness__harness_mem_search 不達 | 警告を表示し、verified_criteria を空配列で続行 (recommendation = reject) |
| Plan Brief 側 record が見つからない | warning を出し、verified_criteria を空配列で続行 |
git rev-parse --show-toplevel 失敗 | PROJECT_NAME=current で続行 |
accept-past-issues.sh 失敗 | past_issue_patterns: [] で続行 (best-effort) |
render-html.sh 失敗 | エラーを stderr に出力し exit 1 |
harness-plan-brief (Phase 65.1.2) — 計画段階の対構造スキル。本スキルは Plan Brief 時の personal-preference.v1 を user_request_hash で join して readscripts/accept-collect-evidence.sh (Phase 134.4) — 4 artifact (worker-report / review-result / runtime-review / browser-result) を読み accept-evidence.v1 を返す read-only script (Step 4 で使用)references/blind-evaluator.md (Phase 137.2) — Step 4.5 の optional blind evaluation。説得系/文書系のみ適用、機能系は skip。blind-judge.md から設計原則を継承しつつ Output Contract と recommendation への反映は独立に定義scripts/accept-past-issues.sh (Phase 65.2.2) — 過去の問題パターン取得 (read side)scripts/accept-record-decision.sh (Phase 65.2.3) — 承認 memory write (acceptance-decision.v1)scripts/render-html.sh (Phase 65.1.1) — HTML テンプレートエンジンscripts/plan-brief-open.sh (Phase 65.1.2) — 汎用 OS browser dispatcherharness-progress skill (Phase 65.4.1) — 進行管理スキル (3 surface のうち真ん中)7d8deba
Canonical home
since Jul 27, 2026
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.