harness-tour
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseSkill: harness-tour
Skill: harness-tour
WHAT
WHAT
Purpose và context
目的与背景
- Purpose: Cho user THẤY (không phải đọc) harness hoạt động: bạn — Claude — cố tình vi phạm rule trên project thật, bị hook chặn theo thời gian thực, và tường thuật lại. Kết thúc không để lại rác.
- Trigger (when to use): user gõ hoặc nói "harness tour", "xem harness làm gì", "test short", "test full" (
/harness-tour— chỉ chạy khi user gọi). Hai độ dài: SHORT (mặc định, R1·R2·R3) và FULL (R1–R10).disable-model-invocation: true - Non-goals: không cài/sửa harness (chỉ gợi ý lệnh cài khi MISSING), không diễn giả khi không có hook, không đụng file có sẵn của project, không thay /
demo.sh(bản máy-diễn không cần phiên).test-broad.sh
- 目的: 让用户亲眼看到(而不是阅读)harness 如何运行:你——Claude——在真实项目上故意违反 rule,被 hook 实时拦截,并进行解说。结束后不留下任何残留内容。
- 触发条件(何时使用): 用户输入 或说 “harness tour”、“看看 harness 做什么”、“test short”、“test full”(
/harness-tour— 仅在用户调用时运行)。两种长度:SHORT(默认,R1·R2·R3)和 FULL(R1–R10)。disable-model-invocation: true - 非目标: 不安装或修改 harness(仅在 MISSING 时建议安装命令);没有 hook 时不做演示;不触碰项目已有文件;不替换 /
demo.sh(无 session 的机器演示版本)。test-broad.sh
Mental model
心智模型
ARGUMENTS → độ dài (SHORT|FULL) → pre-check harness (POC|PROD|MISSING) → mỗi cảnh: tường thuật → vi phạm có chủ đích trên path map 1-rule → hook chặn live → trích nguyên văn → khắc phục → dọn dẹp tour-demo* + row index cùng lượt → kết màn trích audit.jsonlARGUMENTS → 长度(SHORT|FULL)→ harness 预检查(POC|PROD|MISSING)→ 每个场景:解说 → 按仅会触发 1 个 rule 的 path→rule 映射故意违规 → hook 实时拦截 → 原样摘录 → 修复 → 在同一轮次中清理 tour-demo* + index row → 结尾摘录 audit.jsonlInput và output contract
Input 和 output 契约
| Field | Required? | Ý nghĩa | |
|---|---|---|---|
| In | ARGUMENTS | không | chứa |
| In | session mở ở root project đã cài harness | có | |
| Out | tường thuật + stderr chặn trích nguyên văn mỗi cảnh | có | vd |
| Out | project sạch | có | mọi |
| Out | kết màn | có | tóm rule vừa chặn + |
| 字段 | 必需? | 含义 | |
|---|---|---|---|
| 输入 | ARGUMENTS | 否 | 包含 |
| 输入 | 在已安装 harness 的项目 root 中打开的 session | 是 | 必须加载 |
| 输出 | 每个场景的解说 + 原样摘录的拦截 stderr | 是 | 例如 |
| 输出 | 干净的项目 | 是 | 所有已 PASS 的 |
| 输出 | 结尾内容 | 是 | 总结刚刚拦截的 rule + |
Rules và capabilities
Rules 和 capabilities
- RULE-01 (MUST): Mỗi cảnh: tường thuật → vi phạm → trích nguyên văn lý do chặn → khắc phục. Không diễn tắt.
- RULE-02 (MUST): Chỉ đụng file tên ; tuyệt đối không sửa/xóa file có sẵn của project.
tour-demo* - RULE-03 (MUST): Một cảnh đáng-lẽ-chặn mà KHÔNG bị chặn → dừng tour, báo "hàng rào hỏng ở rule X" — đó là bug thật cần xử lý (KHÔNG áp dụng cho nhóm không-chặn R4/R6/R8/R10 — chúng vốn không block).
- Capabilities: ghi/xoá file demo trong
tour-demo*+ sửallmwiki/(row demo); đọc artifact audit; chạy script harness cục bộ. Phụ thuộc hook của host (PreToolUse/Stop) — không có hook thì không diễn.wiki/index.md
- RULE-01 (MUST):每个场景都必须按以下顺序进行:解说 → 违规 → 原样摘录拦截原因 → 修复。不得进行主观解释。
- RULE-02 (MUST):只能操作名称为 的文件;绝不能修改或删除项目已有文件。
tour-demo* - RULE-03 (MUST):某个场景本应被拦截却没有被拦截时,立即停止 tour,并报告“rule X 的防护栏已损坏”——这是需要处理的真实 bug。 (此规则不适用于不拦截的 R4/R6/R8/R10——它们本来就不会 block。)
- Capabilities:在 中创建或删除
llmwiki/demo 文件,并修改tour-demo*(demo row);读取 audit artifact;运行本地 harness 脚本。依赖宿主提供的 hook(PreToolUse/Stop)——没有 hook 时不进行演示。wiki/index.md
Failure boundaries
失败边界
- Pre-check không in gì → blocked (MISSING): DỪNG, gợi ý lệnh cài PoC + mở session mới tại root, không diễn giả.
- Cảnh đáng-lẽ-chặn mà không bị chặn → failed: dừng tour, báo "hàng rào hỏng ở rule X" (trừ R4/R6/R8/R10).
- Dọn dẹp xoá file mà sót row index → Stop hook R3 chặn chính lượt dọn → xoá row trong cùng lượt rồi kết thúc.
- Pre-check 没有任何输出 → blocked(MISSING):立即停止,建议 PoC 安装命令,并让用户在项目 root 中打开新 session;不做演示。
- 某个场景本应被拦截却没有被拦截 → failed:停止 tour,报告“rule X 的防护栏已损坏”(R4/R6/R8/R10 除外)。
- 清理时删除了文件,却残留 index row → Stop hook R3 会拦截当前清理轮次 → 在同一轮次中删除残留 row,然后结束。
HOW
HOW
Main workflow
主工作流
| Step | Type | Inputs | Action | Outputs/exit | Failure/next |
|---|---|---|---|---|---|
| W01 | deterministic | ARGUMENTS | Chọn độ dài tour | SHORT hoặc FULL | — |
| W02 | deterministic | root session | Pre-check harness (lệnh | POC / PROD | không in gì → MISSING, dừng |
| W03 | effect | map path → rule | Diễn kịch bản SHORT (3 cảnh) hoặc FULL (R1–R10) tuần tự, tường thuật TRƯỚC mỗi cảnh | stderr chặn trích nguyên văn + file PASS | không bị chặn → dừng, báo hàng rào hỏng |
| W04 | effect | file tour-demo* đã PASS | Dọn dẹp cùng một lượt: xoá file + row index | project sạch | Stop R3 chặn → xoá row còn sót |
| W05 | deterministic | audit | Kết màn: tóm rule + | báo cáo | — |
Chi tiết từng bước (nguồn chân lý cho W01–W05):
| Step | Type | Inputs | Action | Outputs/exit | Failure/next |
|---|---|---|---|---|---|
| W01 | deterministic | ARGUMENTS | 选择 tour 长度 | SHORT 或 FULL | — |
| W02 | deterministic | root session | 预检查 harness(使用下面的 | POC / PROD | 没有输出 → MISSING,停止 |
| W03 | effect | path→rule 映射 | 依次执行 SHORT(3 个场景)或 FULL(R1–R10)场景,每个场景开始前先解说 | 原样摘录的拦截 stderr + PASS 文件 | 未被拦截 → 停止并报告防护栏损坏 |
| W04 | effect | 已 PASS 的 | 在同一轮次中清理:删除文件 + index row | 项目保持干净 | Stop R3 拦截 → 删除残留 row |
| W05 | deterministic | audit | 结尾:rule 总结 + | 报告 | — |
各步骤详情(W01–W05 的唯一事实来源):
Chọn độ dài tour (đọc ARGUMENTS)
选择 tour 长度(读取 ARGUMENTS)
- Chứa /
full/ "đầy đủ" → FULL (R1–R10).10 - Còn lại (mặc định, hay /
short) → SHORT (3 cảnh: R1 · R2 · R3).3
- 包含 /
full/ “完整” → FULL(R1–R10)。10 - 其他情况(默认,或 /
short)→ SHORT(3 个场景:R1 · R2 · R3)。3
Pre-check — phát hiện harness nào đang sống trong session
Pre-check — 检测 session 中正在生效的 harness
Chạy ở ROOT của session:
bash
{ grep -q llmwiki-validate .claude/settings.json 2>/dev/null && test -f harness/poc-vendor-neutral/bin/llmwiki-validate.py && echo POC; }
test -f llmwiki/.claude/hooks/pre_tool_use.py && echo PROD- In → cách CHÍNH. PoC nay đủ R1–R10 (5 rule chặn ở PreToolUse + R3/R4/R8/R10 qua hook sự kiện).
POC - In → harness production. Cùng R1–R10, cùng kịch bản short/full dưới đây; chỉ khác tên hook script (
PROD/pre_tool_use.py/post_tool_use.py) và R1 có thể chặn quastop.py. Diễn y hệt.permissions.deny - KHÔNG in gì → MISSING. DỪNG (đừng diễn giả), gợi ý cài (PoC là cách chính):
rồi mở session Claude MỚI tại root project đó (đểbash
curl -fsSL https://raw.githubusercontent.com/Rheinmir/setup/orca/harness/poc-vendor-neutral/bootstrap.sh | bashđược load) → gõ lại.claude/settings.json./harness-tour
Hook chỉ chặn khi session loadở đúng root project đã cài. Mở session ở repo nguồn / root khác → không có hook → tour KHÔNG diễn (diễn mà không bị chặn = dàn dựng, cấm)..claude/settings.json
在 session 的 ROOT 中运行:
bash
{ grep -q llmwiki-validate .claude/settings.json 2>/dev/null && test -f harness/poc-vendor-neutral/bin/llmwiki-validate.py && echo POC; }
test -f llmwiki/.claude/hooks/pre_tool_use.py && echo PROD- 输出 → 主要方式。当前 PoC 已覆盖 R1–R10(5 个 rule 在 PreToolUse 阶段拦截,R3/R4/R8/R10 通过事件 hook 处理)。
POC - 输出 → production harness。R1–R10 以及下面的 short/full 场景完全相同;唯一区别是 hook 脚本名称(
PROD/pre_tool_use.py/post_tool_use.py),且 R1 可以通过stop.py拦截。演示完全相同。permissions.deny - 没有任何输出 → MISSING。立即停止(不要演示),建议安装(PoC 是主要方式):
然后在该项目 root 中打开新的 Claude session(确保加载bash
curl -fsSL https://raw.githubusercontent.com/Rheinmir/setup/orca/harness/poc-vendor-neutral/bootstrap.sh | bash)→ 再次输入.claude/settings.json。/harness-tour
只有当 session 在已安装 harness 的正确项目 root 中加载时,hook 才会拦截。若在源 repo 或其他 root 中打开 session → 不会存在 hook → tour 不会进行演示(在未被拦截的情况下演示等于排练,禁止执行)。.claude/settings.json
Harness là HOOK, KHÔNG phải MCP (giải thích nếu user hỏi "sao /mcp không thấy")
Harness 是 HOOK,不是 MCP(如果用户问“为什么在 /mcp 中看不到”则进行解释)
Lớp chặn là PreToolUse hook → kiểm bằng hoặc khối trong , KHÔNG ở .
MCP là thứ khác (tool cho model gọi). PoC: hook gọi . Production: …
/hookshooks.claude/settings.json/mcpllmwiki-validate claude-hookpre_tool_use.py拦截层是 PreToolUse hook → 可通过 或 中的 块进行检查,而不是在 中。
MCP 是另一回事(供 model 调用的 tool)。PoC:hook 调用 。Production:…
/hooks.claude/settings.jsonhooks/mcpllmwiki-validate claude-hookpre_tool_use.pyBảng map path → rule (DÙNG ĐÚNG path để mỗi cảnh chỉ kích 1 rule)
path→rule 映射表(使用正确路径,确保每个场景只触发 1 个 rule)
Nhiều rule cùng soi → chọn sai path là 2 rule cùng chặn, rối. Map chuẩn (theo ):
wiki/policy.yaml| Rule | File để vi phạm | Vì sao CHỈ rule đó kích |
|---|---|---|
| R1 no-write-raw | | deny_write glob |
| R2 origin-required | | frontmatter → R9 qua; thiếu Origin → R2 chặn |
| R3 index-sync | (Stop) chính file R2 vừa tạo, CHƯA có trong | |
| R5 folder-structure | | forbid_root: |
| R7 proposal-complete | | frontmatter→R9 qua, Origin→R2 qua → R7 là cái chặn |
| R9 okf-frontmatter | | có Origin nên R2 qua; thiếu |
⚠️ R9 nay phủ CẢ+sources/(khớp global production — nháp cũng cần frontmatter). Vì R2/R9 cùng soi mọi content dir → cô lập bằng NỘI DUNG, không bằng path: file CÓ frontmatter mà THIẾU Origin → chỉ R2; file CÓ Origin mà THIẾU frontmatter → chỉ R9.draft/
Không-chặn-live (chỉ cho XEM artifact, nói rõ "không chặn"): R4 ( + ),
R8 (dòng lúc SessionStart), R10 ( đếm prompt).
Tầng repo: R6 (pre-commit + CI + skill ).
.claude/audit/audit.jsonllog.md[harness] N rule….claude/audit/.docs-gate.json.github/workflows/harness.yml/verify-before-commit多个 rule 会同时检查 → 如果选错路径,就可能同时触发 2 个 rule 并造成混乱。标准映射(依据 ):
wiki/policy.yaml| Rule | 用于违规的文件 | 为何只触发该 rule |
|---|---|---|
| R1 no-write-raw | | |
| R2 origin-required | | 有 frontmatter,因此 R9 放行;缺少 Origin,因此 R2 拦截 |
| R3 index-sync | (Stop)刚创建的同一个 R2 文件,但尚未加入 | |
| R5 folder-structure | | |
| R7 proposal-complete | | frontmatter 使 R9 放行,Origin 使 R2 放行,因此由 R7 拦截 |
| R9 okf-frontmatter | | 有 Origin,因此 R2 放行;缺少 |
⚠️ R9 现在同时覆盖和sources/(与 global production 保持一致——draft 同样需要 frontmatter)。由于 R2 和 R9 都会检查所有 content 目录,因此必须通过内容进行隔离,而不是通过路径:文件有 frontmatter 但缺少 Origin → 只触发 R2;文件有 Origin 但缺少 frontmatter → 只触发 R9。draft/
不实时拦截(仅展示 artifact,并明确说明“不拦截”):R4( + )、R8(SessionStart 时的 行)、R10( prompt 计数器)。
Repo 层:R6(pre-commit + CI + skill )。
.claude/audit/audit.jsonllog.md[harness] N rule….claude/audit/.docs-gate.json.github/workflows/harness.yml/verify-before-commitKỊCH BẢN SHORT (mặc định) — 3 cảnh, diễn TUẦN TỰ, tường thuật TRƯỚC mỗi cảnh
SHORT 场景(默认)— 3 个场景,依次执行,每个场景开始前先解说
Mở màn: "Tôi sẽ cố tình vi phạm 3 rule. Xem hook chặn tôi theo thời gian thực — không phải tôi tự nhường."
Cảnh 1 — R1 (PreToolUse · deny ghi raw/):
- Tường thuật: "raw/ là inbox của con người, agent không được ghi."
- Write → exit 2 → CHẶN. Trích nguyên văn stderr
llmwiki/raw/tour-demo.md. KHÔNG retry. File không ra đời.[R1 no-write-raw] …
Cảnh 2 — R2 (PreToolUse · ép ):
## Origin- Tường thuật: "Tạo file nguồn mà 'quên' → không truy được gốc."
## Origin - Write =
llmwiki/wiki/sources/draft/tour-demo.md(CÓ frontmatter để R9 qua, nhưng KHÔNG có---\ntype: draft\n---\n# Tour Demo) → exit 2 → CHẶN. Trích## Origin.[R2 origin-required] … - Sửa: Write lại đúng file đó, thêm (giữ nguyên frontmatter) → lần này PASS, file được ghi.
## Origin\n- harness-tour demo
Cảnh 3 — R3 (Stop · index nói dối):
- Tường thuật: "File tour-demo vừa tạo nhưng tôi cố tình KHÔNG ghi nó vào . Giờ thử kết thúc lượt."
wiki/index.md - Kết thúc response tại đây mà không cập nhật index → Stop hook () trả exit 2, đưa danh sách lệch về.
harness-events.py stop - Khi bị block: trích nguyên văn , rồi thêm đúng 1 row cho tour-demo vào
[R3 index-sync] wiki/index.md chưa liệt kê: …, sang dọn dẹp.wiki/index.md
→ tiếp Dọn dẹp (dưới).
开场: “我会故意违反 3 个 rule。请看 hook 如何实时拦截我——这不是我自己主动让步。”
场景 1 — R1(PreToolUse · 禁止写入 raw/):
- 解说:“raw/ 是人类收件箱,agent 不得写入。”
- Write → exit 2 → 拦截。原样摘录 stderr
llmwiki/raw/tour-demo.md。不得重试。文件不会创建。[R1 no-write-raw] …
场景 2 — R2(PreToolUse · 强制要求 ):
## Origin- 解说:“创建一个故意‘忘记’ 的源文件 → 无法追溯来源。”
## Origin - Write =
llmwiki/wiki/sources/draft/tour-demo.md(有 frontmatter,因此 R9 放行,但没有---\ntype: draft\n---\n# Tour Demo)→ exit 2 → 拦截。原样摘录## Origin。[R2 origin-required] … - 修复: 重新 Write 同一个文件,添加 (保留 frontmatter)→ 此次 PASS,文件写入成功。
## Origin\n- harness-tour demo
场景 3 — R3(Stop · index 失同步):
- 解说:“刚创建的 tour-demo 文件,我故意不把它写入 。现在尝试结束本轮。”
wiki/index.md - 在此处结束 response,不更新 index → Stop hook()返回 exit 2,并给出不匹配列表。
harness-events.py stop - 被拦截时:原样摘录 ,然后向
[R3 index-sync] wiki/index.md chưa liệt kê: …添加且仅添加 1 个 tour-demo row,再进入清理。wiki/index.md
→ 接下来执行清理(见下文)。
KỊCH BẢN FULL (khi ARGUMENTS có full
) — R1–R10 tuần tự
fullFULL 场景(ARGUMENTS 包含 full
时)— 依次执行 R1–R10
fullDiễn 6 cảnh chặn-live (R1,R2,R3,R5,R7,R9) + 3 cái không-chặn cho xem artifact (R4,R8,R10) + 1 cái repo (R6).
Nói rõ trước nhóm không-chặn: "3 rule sau KHÔNG chặn lúc gõ — chúng GHI/NHẮC; tôi sẽ chỉ artifact làm bằng."
R1 — Write → CHẶN (deny raw/). Trích, không retry.
llmwiki/raw/tour-demo.mdR2 — Write (CÓ frontmatter để R9 qua, nhưng thiếu ) → CHẶN → thêm → PASS.
llmwiki/wiki/sources/draft/tour-demo.md---\ntype: draft\n---## Origin## OriginR3 — (Stop) kết thúc lượt khi file R2 chưa vào → Stop block → thêm row index → tiếp.
(Trong FULL, để liền mạch có thể gộp R3 vào cuối: sau khi tạo các file PASS bên dưới, thử kết thúc 1 lượt còn lệch index → block → cập nhật index.)
index.mdR4 — log-append (KHÔNG chặn): sau một Write PASS, chỉ vừa có dòng mới (tool+path+timestamp) và được sinh lại. vài dòng cuối làm bằng — "máy ghi, tôi không xoá được."
.claude/audit/audit.jsonl.claude/audit/log.mdcatR5 — Write (ngay dưới ) → CHẶN (file wiki phải nằm trong concepts/entities/…). Không retry.
llmwiki/wiki/tour-demo.mdwiki/[R5 folder-structure] …R6 — verify-before-commit (repo, KHÔNG chặn-live): chỉ ra cổng commit gồm pre-commit hook + CI (gọi lõi mode trên .md đổi) + skill (Claude tự soi code mới trước khi commit). Đây là tầng repo, không phải session — không demo block trực tiếp.
.github/workflows/harness.ymlfiles/verify-before-commitR7 — Write có frontmatter + + + nhưng THIẾU & → CHẶN → sửa thêm 2 mục đó → PASS.
llmwiki/wiki/sources/draft/tour-demo-proposal.md## Origin## Planproposed## Agent Task AssignmentSequence diagram[R7 proposal-complete] …R8 — pattern-health (KHÔNG chặn): chạy để hiện dòng (+ cảnh báo drift nếu policy lệch remote). Đây là thứ in lúc SessionStart.
python3 harness/poc-vendor-neutral/bin/harness-events.py session[harness] N rule đang gác…R9 — Write có nhưng KHÔNG có YAML frontmatter → CHẶN (thiếu ) → sửa thêm lên đầu → PASS.
llmwiki/wiki/concepts/tour-demo.md## Origin[R9 okf-frontmatter] …type---\ntype: concept\n---R10 — docs-gate (KHÔNG chặn): cho thấy bộ đếm prompt; giải thích mỗi (mặc định 5) lượt, UserPromptSubmit chèn directive đề nghị gọi .
cat .claude/audit/.docs-gate.jsonLLMWIKI_DOCS_GATE_EVERY/docs-site-macosKết FULL: bảng 10 rule — cái nào chặn-live, cái nào ghi/nhắc, cái nào ở repo; trích làm bằng.
.claude/audit/*.jsonl依次执行 6 个实时拦截场景(R1、R2、R3、R5、R7、R9)、3 个仅展示 artifact 的不拦截场景(R4、R8、R10),以及 1 个 repo 场景(R6)。
在进入不拦截场景组之前明确说明:“接下来的 3 个 rule 不会在输入过程中拦截;它们只会记录或提示。我将展示对应 artifact 作为证明。”
R1 — Write → 拦截(禁止写入 raw/)。原样摘录,不得重试。
llmwiki/raw/tour-demo.mdR2 — Write (有 frontmatter ,因此 R9 放行,但缺少 )→ 拦截 → 添加 → PASS。
llmwiki/wiki/sources/draft/tour-demo.md---\ntype: draft\n---## Origin## Origin**R3 —(Stop)**在 R2 文件尚未加入 时结束本轮 → Stop 拦截 → 添加 index row → 继续。
(在 FULL 中,为了保持流程连贯,也可以将 R3 合并到最后:创建下方所有 PASS 文件后,尝试结束一轮仍存在 index 不一致的场景 → 拦截 → 更新 index。)
index.md**R4 — log-append(不拦截):**在一次 PASS 的 Write 之后, 会新增一行(tool+path+timestamp),并重新生成 。使用 查看最后几行作为证明——“这是机器记录的,我无法删除它。”
.claude/audit/audit.jsonl.claude/audit/log.mdcatR5 — Write (直接位于 下)→ 拦截 (wiki 文件必须位于 concepts/entities/… 中)。不得重试。
llmwiki/wiki/tour-demo.mdwiki/[R5 folder-structure] …**R6 — verify-before-commit(repo,不实时拦截):**指出 commit 门禁由 pre-commit hook + CI (对变更的 .md 文件调用核心 模式)+ skill (Claude 在 commit 前自行检查新代码)组成。这属于 repo 层,而不是 session 层,因此不直接演示拦截。
.github/workflows/harness.ymlfiles/verify-before-commitR7 — Write ,包含 frontmatter + + + ,但缺少 和 → 拦截 → 补上这两个部分 → PASS。
llmwiki/wiki/sources/draft/tour-demo-proposal.md## Origin## Planproposed## Agent Task AssignmentSequence diagram[R7 proposal-complete] …**R8 — pattern-health(不拦截):**运行 ,显示 行(如果 policy 与 remote 不一致,还会显示 drift 警告)。这是 SessionStart 时输出的内容。
python3 harness/poc-vendor-neutral/bin/harness-events.py session[harness] N rule đang gác…R9 — Write ,包含 ,但没有 YAML frontmatter → 拦截 (缺少 )→ 在文件开头添加 → PASS。
llmwiki/wiki/concepts/tour-demo.md## Origin[R9 okf-frontmatter] …type---\ntype: concept\n---R10 — docs-gate(不拦截): 会显示 prompt 计数器;解释每经过 (默认 5)轮,UserPromptSubmit 会插入一条建议调用 的 directive。
cat .claude/audit/.docs-gate.jsonLLMWIKI_DOCS_GATE_EVERY/docs-site-macos**FULL 结尾:**提供 10 个 rule 的表格——哪些会实时拦截、哪些只记录或提示、哪些位于 repo 层;并摘录 作为证明。
.claude/audit/*.jsonlDọn dẹp (BẮT BUỘC — cùng một lượt, kẻo R3 chặn)
清理(强制要求 — 必须在同一轮次中完成,否则 R3 会拦截)
Xóa MỌI file đã PASS (được tạo) và xóa row tương ứng trong trong cùng lượt
(xóa file mà để row → index lệch → Stop hook chặn chính lượt dọn):
tour-demo*wiki/index.md- SHORT: + row của nó.
wiki/sources/draft/tour-demo.md - FULL: thêm ,
wiki/sources/draft/tour-demo-proposal.md+ các row.wiki/concepts/tour-demo.md - Các file bị CHẶN (raw/tour-demo, wiki/tour-demo R5) không tồn tại → khỏi xóa.
- Artifact harness (,
audit.jsonl,log.md) là bản ghi máy hợp lệ → giữ nguyên, không xóa..docs-gate.json - TUYỆT ĐỐI không đụng file có sẵn khác của project.
Kết màn: tóm 1 đoạn các rule vừa chặn + "mọi tool call vừa rồi nằm trong — máy ghi, tôi không quên được" (cat vài dòng cuối). Bản máy-diễn không cần phiên: (13 assertion) · (63).
.claude/audit/*.jsonlbash harness/poc-vendor-neutral/demo.shtest-broad.sh删除所有已 PASS(已创建)的 文件,并在同一轮次中删除 中对应的 row(如果只删除文件却保留 row,就会产生 index 不一致,Stop hook 会拦截当前清理轮次):
tour-demo*wiki/index.md- SHORT:删除 及其 row。
wiki/sources/draft/tour-demo.md - FULL:还需删除 、
wiki/sources/draft/tour-demo-proposal.md及其 rows。wiki/concepts/tour-demo.md - 被拦截的文件(raw/tour-demo、wiki/tour-demo R5)并不存在 → 无需删除。
- Harness artifact(、
audit.jsonl、log.md)是合法的机器记录 → 保持不变,不得删除。.docs-gate.json - 绝不触碰项目中其他已有文件。
**结尾:**用一个段落总结刚刚拦截的 rule,并说明“刚才所有 tool call 都记录在 中——这是机器记录的,我无法忘记”(使用 查看最后几行)。机器演示版本无需 session:(13 个 assertion)· (63 个)。
.claude/audit/*.jsonlcatbash harness/poc-vendor-neutral/demo.shtest-broad.shBranches
分支
| ID | Kind | Guard | Hành vi | Skip / failure | Rejoin |
|---|---|---|---|---|---|
| B01 | user_optional | ARGUMENTS có | KỊCH BẢN FULL R1–R10 thay SHORT | mặc định → SHORT | W04 |
| B02 | conditional_required | pre-check in | diễn y hệt, chỉ khác tên hook script ( | — | W03 |
| B03 | recovery | pre-check không in gì (MISSING) | DỪNG, gợi ý lệnh curl | không diễn | kết thúc |
| B04 | user_optional | user hỏi "sao /mcp không thấy" | giải thích harness là HOOK (kiểm | — | W03 |
| ID | Kind | Guard | 行为 | Skip / failure | Rejoin |
|---|---|---|---|---|---|
| B01 | user_optional | ARGUMENTS 包含 | 使用 FULL R1–R10 场景替代 SHORT | 默认 → SHORT | W04 |
| B02 | conditional_required | Pre-check 输出 | 演示完全相同,仅 hook 脚本名称不同( | — | W03 |
| B03 | recovery | Pre-check 没有任何输出(MISSING) | 立即停止,建议使用 curl | 不进行演示 | 结束 |
| B04 | user_optional | 用户询问“为什么在 /mcp 中看不到” | 解释 harness 是 HOOK(检查 | — | W03 |
Validation và stopping
验证与停止条件
Mỗi cảnh chặn-live chỉ tính khi hook thật trả exit 2 và stderr được trích nguyên văn; không retry sau chặn (trừ bước khắc phục đã định). Tour dừng ngay khi một rule chặn-live không chặn. Xong khi không còn và khớp.
tour-demo*wiki/index.md只有当真实 hook 返回 exit 2,并且 stderr 被原样摘录时,实时拦截场景才算成功;被拦截后不得重试(已规定的修复步骤除外)。一旦某个实时拦截 rule 没有执行拦截,tour 必须立即停止。当不再存在 ,且 与之匹配时,tour 完成。
tour-demo*wiki/index.mdExamples
示例
- Positive: trên project đã cài PoC → pre-check in
/harness-tour→ WritePOCbị chặnllmwiki/raw/tour-demo.md→ R2 chặn rồi PASS sau khi thêm[R1 no-write-raw] …→ kết lượt bị Stop## Origin→ thêm row → dọn[R3 index-sync] …+ row cùng lượt.wiki/sources/draft/tour-demo.md - Boundary/failure: mở ở repo nguồn (không load
/harness-tour fullcủa project) → pre-check không in gì → MISSING, dừng, gợi ý lệnh curl bootstrap + mở session mới; không diễn cảnh nào..claude/settings.json
- **正向:**在已安装 PoC 的项目中执行 → Pre-check 输出
/harness-tour→ WritePOC被llmwiki/raw/tour-demo.md拦截 → R2 拦截,添加[R1 no-write-raw] …后 PASS → 结束本轮时被 Stop## Origin拦截 → 添加 row → 在同一轮次中删除[R3 index-sync] …及其 row。wiki/sources/draft/tour-demo.md - **边界/失败:**在源 repo 中执行 (没有加载项目的
/harness-tour full)→ Pre-check 没有任何输出 → MISSING,立即停止,建议执行 curl bootstrap 并打开新 session;不演示任何场景。.claude/settings.json