tests/data/skill_code_blocks.json lists all 37 fenced blocks of the eight SKILL.md files at 45d1621, classed (a) duplicate of a script, (b) procedure no script offers, (c) example / call / diagram, with script file:line evidence.
tests/test_issue42_skill_blocks.py fails when a block changes without the inventory, an (a) block comes back, a removed block's entry-point call is missing, an exit-code table drifts from its script, or evidence points nowhere.
Stage 2 - remove the duplicate blocks
Removed the five (a) blocks: resume Workflow, stop pre-flight, create pre-flight / Workflow / manual YAML append.
Each is replaced by the entry-point call plus option and exit-code tables (each with a catch-all row for codes a failing sub-step passes through).
Doc-to-script mismatches fixed in the doc: resume Case 3 does not attach; stop --purge-conversation needs --yes; status --json keys; create cmd_full; the nonexistent yaml-edit script.
Full suite at 8d26106 in a detached worktree: 12 failed / 1380 passed / 20 skipped. The 12 are the known baseline failures in tests/test_issue10_13_purge.py.
Mutation checks: restoring the old stop pre-flight block, or deleting the stop exit-4 row, each makes the new test fail.
Refs #42 (stages 1-2 only; stages 3-5 remain)
## Stage 1 - inventory as test data
- `tests/data/skill_code_blocks.json` lists all 37 fenced blocks of the eight SKILL.md files at 45d1621, classed (a) duplicate of a script, (b) procedure no script offers, (c) example / call / diagram, with script `file:line` evidence.
- `tests/test_issue42_skill_blocks.py` fails when a block changes without the inventory, an (a) block comes back, a removed block's entry-point call is missing, an exit-code table drifts from its script, or evidence points nowhere.
## Stage 2 - remove the duplicate blocks
- Removed the five (a) blocks: resume Workflow, stop pre-flight, create pre-flight / Workflow / manual YAML append.
- Each is replaced by the entry-point call plus option and exit-code tables (each with a catch-all row for codes a failing sub-step passes through).
- Doc-to-script mismatches fixed in the doc: resume Case 3 does not attach; stop `--purge-conversation` needs `--yes`; status `--json` keys; create `cmd_full`; the nonexistent yaml-edit script.
- No behaviour change, no version bump.
## Verification
- Loop: planner + 4 reviewers (claude, agy, grok, codex), unanimous PASS in round 3.
- Full suite at 8d26106 in a detached worktree: 12 failed / 1380 passed / 20 skipped. The 12 are the known baseline failures in `tests/test_issue10_13_purge.py`.
- Mutation checks: restoring the old stop pre-flight block, or deleting the stop exit-4 row, each makes the new test fail.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Stage 1: tests/data/skill_code_blocks.json lists all 37 fenced blocks of the
eight SKILL.md files at base 45d1621 (indented fences count), classed (a)
duplicate of a script, (b) procedure no script offers, (c) example/call/
diagram, with script file:line evidence and recorded mismatches.
tests/test_issue42_skill_blocks.py fails when a block changes without the
inventory, an (a) block comes back, a removed block's entry call is missing,
an exit-code table drifts from the script, or evidence points nowhere.
Stage 2: the five (a) blocks are gone - resume Workflow, stop pre-flight,
create pre-flight / Workflow / manual YAML append - replaced by the
entry-point call with option and exit-code tables. Each exit table has a
catch-all row: under set -e a failing sub-step's code passes through.
create's exit 4 is real (the YAML write raises SystemExit(4) for a duplicate
running row) and is listed as such. Doc-to-script mismatches are fixed in the
doc (resume Case 3 / no attach, stop --purge-conversation --yes, status
--json keys, create cmd_full and the nonexistent yaml-edit script). No
behaviour change, no version bump.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The registry update after the kill chain raises SystemExit(1) when the row
disappeared during the run (stop_session.sh:310), so "exit 1 changed nothing"
was false on that path. The stop table now says so, the code is declared as a
passthrough, and the test requires every integer SystemExit in an entry
script's heredocs to be declared - the check that would have caught it.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
raised == passthrough forced the declaration, but nothing checked the
declared code against the table: dropping create's exit 4 from both the
table and the data still passed. Assert passthrough <= table codes.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Merge-workspace review of PR #46 (codex R1-R3 and C1, claude O1 and O4).
- R1: resume never attaches, and the server it exports does not reach the
calling shell; the native herdr binary does not route on environment
variables. The attach advice and the Verification block now name the
server: `herdr --session <server> agent attach <name>`, with <server> the
row's herdr_session.
- R2: --dry-run in resume and create skips the spawn and the registry
update, but the checks before it still run and on macOS remove the
quarantine attribute from the agent binary. The option rows say so.
- R3: test_no_deleted_body_came_back compares every current block with the
deleted bodies by exact sha and by a whitespace-insensitive fingerprint
(stored as base_fingerprint), independently of the inventory, so a
deleted block cannot return by being listed again under class c.
Replaying the review's probe (the deleted resume Workflow re-added and
inventoried as c) fails the new test and passes the old one.
- C1 / O1: the base create call block at 263-266 (class c) folded into the
Workflow call is recorded under "superseded"; the 37 base blocks are all
accounted for.
- O4: create exit 42 also covers MAM_KILL_ON_READY_TIMEOUT=1; stop's no-op
exit 0 does not apply with --purge-conversation.
- The inventory's positions and shas are regenerated for the edited blocks;
every classification is unchanged.
No product code changed.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VCgu9Fa9iT7TbJUSzdq4Ff
Issue #42 stages 1-2: the SKILL.md code-block inventory as test data and
the removal of blocks the entry scripts already do. Merge-workspace review:
round 1 (@8d26106) claude agy grok PASS, codex NOT PASS (R1-R3); fixed in
17eba09 (docs, inventory data and the guard test only); round 2 4/4 PASS.
Full suite at 8d26106 1408 passed / 0 failed. Reports and the round-2
identity sidecars go to .agents/reports/<session>/.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VCgu9Fa9iT7TbJUSzdq4Ff
Godopu
merged commit 6af4a796b1 into main2026-10-03 23:36:27 +00:00
R1 분리한 attach 안내 herdr agent attach <name> 가 격리 서버를 잃는다(스크립트의 export 는 호출 셸에 전달되지 않고 native herdr 는 환경변수로 라우팅하지 않음) → herdr --session <server> agent attach <name>, Verification 도 행의 herdr_session 을 읽어 쓴다.
R2--dry-run "write nothing" 이 실제와 다름(macOS 에서 사전 검사가 quarantine 속성을 지움) → "기동·레지스트리 갱신 없음"으로 한정.
R3 지운 블록을 목록에 다른 분류로 다시 등록하면 가드가 못 잡음 → 지운 본문을 정확 sha·공백 무시 fingerprint 로 목록과 무관하게 비교. codex 탐침을 재현해 새 테스트 실패·이전 테스트 통과를 확인.
함께: 목록에서 빠졌던 create 의 (c) 블록을 superseded 로 기록(37 개 모두 추적), 종료 코드 표 문구 2곳(claude O4).
테스트
전체 스위트(8d26106, MQTT 환경변수 없이): 1408 passed / 0 failed / 4 skipped(61 분). PR 본문의 "기준 실패 12건"(test_issue10_13_purge.py)은 Linux(#28)의 것이고 이 macOS 호스트에서는 통과.
test_claude_skills_link_resolves_to_agents_skills 가 본 체크아웃에서 실패한다. 테스트는 .claude/skills 를 .agents/skills 로 가는 심볼릭 링크 하나로 가정하는데, 이 체크아웃은 스킬별 링크를 담은 디렉터리다(모든 링크는 정상). 리뷰·스위트는 워크트리에서 돌아 이 테스트가 skip 이었다. 두 배치를 모두 받도록 테스트만 고치는 후속 PR 을 올린다.
후속 (비차단)
종료 코드 스캐너의 일반화(heredoc 안 주석·sys.exit·|| true, codex C2), 목록의 줄 번호 고정(claude O2), $(( 1 << 2 )) 오인(claude O3). 현재 스크립트·표에는 영향 없음.
## 병합 요약 (v4.8.3)
병합 커밋 6af4a79, 릴리스 44999ff. Refs #42 (단계 1·2).
### 리뷰 (병합 워크스페이스, 네 리뷰어)
| 회차 | head | claude | agy | grok | codex |
|---|---|---|---|---|---|
| 1 | 8d26106 | PASS | PASS | PASS | NOT PASS (R1–R3) |
| 2 | 17eba09 | PASS | PASS | PASS | PASS |
**codex 1회차 지적과 수정 (17eba09, 문서·테스트 데이터·가드 테스트만)**
- **R1** 분리한 attach 안내 `herdr agent attach <name>` 가 격리 서버를 잃는다(스크립트의 export 는 호출 셸에 전달되지 않고 native herdr 는 환경변수로 라우팅하지 않음) → `herdr --session <server> agent attach <name>`, Verification 도 행의 `herdr_session` 을 읽어 쓴다.
- **R2** `--dry-run` "write nothing" 이 실제와 다름(macOS 에서 사전 검사가 quarantine 속성을 지움) → "기동·레지스트리 갱신 없음"으로 한정.
- **R3** 지운 블록을 목록에 다른 분류로 다시 등록하면 가드가 못 잡음 → 지운 본문을 정확 sha·공백 무시 fingerprint 로 목록과 무관하게 비교. codex 탐침을 재현해 새 테스트 실패·이전 테스트 통과를 확인.
- 함께: 목록에서 빠졌던 create 의 (c) 블록을 `superseded` 로 기록(37 개 모두 추적), 종료 코드 표 문구 2곳(claude O4).
### 테스트
- 전체 스위트(8d26106, MQTT 환경변수 없이): **1408 passed / 0 failed / 4 skipped**(61 분). PR 본문의 "기준 실패 12건"(`test_issue10_13_purge.py`)은 Linux(#28)의 것이고 이 macOS 호스트에서는 통과.
- 17eba09 의 변경은 문서 테스트 6 파일 132 passed.
### 병합 후 발견
- `test_claude_skills_link_resolves_to_agents_skills` 가 본 체크아웃에서 실패한다. 테스트는 `.claude/skills` 를 `.agents/skills` 로 가는 심볼릭 링크 하나로 가정하는데, 이 체크아웃은 스킬별 링크를 담은 디렉터리다(모든 링크는 정상). 리뷰·스위트는 워크트리에서 돌아 이 테스트가 skip 이었다. 두 배치를 모두 받도록 테스트만 고치는 후속 PR 을 올린다.
### 후속 (비차단)
- 종료 코드 스캐너의 일반화(heredoc 안 주석·`sys.exit`·`|| true`, codex C2), 목록의 줄 번호 고정(claude O2), `$(( 1 << 2 ))` 오인(claude O3). 현재 스크립트·표에는 영향 없음.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Refs #42 (stages 1-2 only; stages 3-5 remain)
Stage 1 - inventory as test data
tests/data/skill_code_blocks.jsonlists all 37 fenced blocks of the eight SKILL.md files at45d1621, classed (a) duplicate of a script, (b) procedure no script offers, (c) example / call / diagram, with scriptfile:lineevidence.tests/test_issue42_skill_blocks.pyfails when a block changes without the inventory, an (a) block comes back, a removed block's entry-point call is missing, an exit-code table drifts from its script, or evidence points nowhere.Stage 2 - remove the duplicate blocks
--purge-conversationneeds--yes; status--jsonkeys; createcmd_full; the nonexistent yaml-edit script.Verification
8d26106in a detached worktree: 12 failed / 1380 passed / 20 skipped. The 12 are the known baseline failures intests/test_issue10_13_purge.py.🤖 Generated with Claude Code
병합 요약 (v4.8.3)
병합 커밋
6af4a79, 릴리스44999ff. Refs #42 (단계 1·2).리뷰 (병합 워크스페이스, 네 리뷰어)
8d2610617eba09codex 1회차 지적과 수정 (
17eba09, 문서·테스트 데이터·가드 테스트만)herdr agent attach <name>가 격리 서버를 잃는다(스크립트의 export 는 호출 셸에 전달되지 않고 native herdr 는 환경변수로 라우팅하지 않음) →herdr --session <server> agent attach <name>, Verification 도 행의herdr_session을 읽어 쓴다.--dry-run"write nothing" 이 실제와 다름(macOS 에서 사전 검사가 quarantine 속성을 지움) → "기동·레지스트리 갱신 없음"으로 한정.superseded로 기록(37 개 모두 추적), 종료 코드 표 문구 2곳(claude O4).테스트
8d26106, MQTT 환경변수 없이): 1408 passed / 0 failed / 4 skipped(61 분). PR 본문의 "기준 실패 12건"(test_issue10_13_purge.py)은 Linux(#28)의 것이고 이 macOS 호스트에서는 통과.17eba09의 변경은 문서 테스트 6 파일 132 passed.병합 후 발견
test_claude_skills_link_resolves_to_agents_skills가 본 체크아웃에서 실패한다. 테스트는.claude/skills를.agents/skills로 가는 심볼릭 링크 하나로 가정하는데, 이 체크아웃은 스킬별 링크를 담은 디렉터리다(모든 링크는 정상). 리뷰·스위트는 워크트리에서 돌아 이 테스트가 skip 이었다. 두 배치를 모두 받도록 테스트만 고치는 후속 PR 을 올린다.후속 (비차단)
sys.exit·|| true, codex C2), 목록의 줄 번호 고정(claude O2),$(( 1 << 2 ))오인(claude O3). 현재 스크립트·표에는 영향 없음.🤖 Generated with Claude Code