Skip to content

fix(harness): 다음 task 가 의존을 봐요 · 완료 전에 룰을 대조해요 · 끝난 spec 에 후속을 이어 열어요 · 합의 리뷰 상한에서 사용자 승인 (v0.7.10) - #43

Merged
bluecheat merged 4 commits into
mainfrom
fix/harness-friction-from-commerce
Oct 6, 2026

Conversation

@bluecheat

@bluecheat bluecheat commented Oct 6, 2026 •

Copy link
Copy Markdown
Owner

무엇이 좋아졌나 — 누구에게 체감되나

spec 을 tasks 로 나눠 구현하는 사람에게 체감돼요. 다섯 가지 모두 실사용 프로젝트에서 실제로 겪은 마찰이에요.

  • 다음 task 가 의존을 지켜요. mark-task.sh --next 가 의존: 을 무시하고 펜스 밖 첫 미완료 task 를 골라,
    아직 안 끝난 task 에 기대는 일을 먼저 시작했어요. 이제 의존이 전부 [x]·[~] 인 첫 task 를 골라요
    (tasks-plan.sh 와 같은 파서). 미완료가 전부 막혀 있으면 "끝났다" 가 아니라 warning 과 막힌 task ·
    풀리지 않은 의존(없는 ID 는 따로)을 돌려줘요 — 완료 게이트로 잘못 넘어가지 않아요.
  • 새 파일이 관례 위치로 가요. files: 목록이 관례 위치(같은 레이어의 별도 하위 디렉토리)를 빠뜨리면,
    구현자가 목록을 지키려고 새 타입을 목록 안 파일에 끼워 넣었어요. spec-tasks 는 새 파일 경로를 적기 전에 이웃을
    grep 하고, 레인·위임 브리프는 "목록과 관례가 충돌하면 멈추고 보고" 를 실어요.
  • 완료 전에 룰을 대조해요 (G7). 위반된 룰(이름 룰, 레이어 룰)은 편집 때 훅이 실제로
    매칭해서 안내했어요. 그런데 안내 훅은 룰 경로만 주고, rule-read-gate.sh 는 그 파일을 읽었는지만 봐요 —
    읽은 룰을 지켰는지, 새 파일이 이웃 관례를 따랐는지는 아무도 대조하지 않았어요. 이제 새 컨텍스트의
    rules-auditor 가 변경 파일마다 걸린 룰과 새 심볼의 이웃 관례를 대조해 review-rules.md 첫 줄에 verdict 를 쓰고,
    완료 게이트가 G6 과 같은 필수 여부(size L 이상 · M×L3)로 읽어요.
    • 편집 훅도 조금 더 줘요 — 세션에서 처음 매칭될 때 룰 파일 경로와 함께 룰 제목(SP-…: …)을 붙여요.
  • 끝난 spec 에 후속 작업을 이어 열어요. reset-task.sh 로 닫은 작업은 --activate 가 "작업이 없어요" 로 실패해
    새로 열면 spec 연결이 끊겼어요. update-task.sh --start --follow-up <spec> 가 spec_id · spec_dir · spec_tier 를
    이어받고 follow_up_of 를 남겨요.
  • 합의 리뷰 상한에서 사용자가 승인할 수 있어요. 상한에 닿은 뒤 남은 차단이 기계적 수정뿐이어도 진행하려면
    intent_notes 에 손으로 적어야 했고, --status 는 그걸 몰라 pass 가 안 됐어요. spec-review.sh --override --reason
    이 지금 sha 에 누가 · 언제 · 왜 를 review-override.md 로 남기고 --status 가 그걸 인정해요. 본문을 또 고치면 풀려요.

바뀐 것

  • common.sh goax_tasks_parse — tasks.md 실행 그래프 파서 하나 (tasks-plan.sh · mark-task.sh --next 공용).
    의존: 줄은 T-ID 만 읽고, T-ID 가 없는 다른 표기는 풀리지 않는 의존으로 남겨요 (오타가 "의존 없음" 으로 통과하지 않게)
  • tasks-plan.sh — 의존이 [~] 보류여도 풀린 걸로 봐요 (--next·G1 과 같은 기준)
  • mark-task.sh --next — 의존 판정 · 전부 막힘이면 status: warning · result.blocked · blocked_tasks[]
  • rules-audit-scope.sh (신규) — 변경 파일마다 걸린 spirit·모듈 룰(편집 훅과 같은 매칭 함수) · 상시 룰 · 새 파일
  • agents/rules-auditor.md (신규) · tasks-gate.sh G7 (rules_review_required · rules_review_verdict)
  • agents/evaluator.md — 구현 리뷰의 "하지 않는 것": 이름·패키지 관례 대조는 rules-auditor 범위
  • spec-implement — §1 막힘 처리 · §3.3 위임 브리프 · §8.1.5 룰 대조 · 절대 금지 2줄
  • spec-tasks · lane §10 브리프 · agents/lane-worker.md — 관례 위치 / 충돌 시 멈추고 보고
  • update-task.sh --follow-up · triage 사용법 한 줄 · 없는 작업 에러가 --follow-up 을 알려줘요
  • spec-review.sh --override --reason (상한 도달 전·사유 없음은 거부, --dry-run 무기록) · spec-validate 상한 절
  • pre-edit/spirit-rules-inject.sh — 경로와 함께 룰 제목 (파일당 15줄, 세션당 처음만)
  • subagent-start/harness-pointer.sh — rules-auditor 는 자기 에이전트로 제외

검증

  • bash tests/smoke.sh 전체 통과 — §65 신규 12건(의존 판정·전부 막힘·관례 위치·rules-audit-scope·G7·rules-auditor·훅 룰 제목·--follow-up·--override), §29 G6 fixture 보강
  • 바꾼 스크립트 bash -n 통과 (shellcheck 는 이 머신에 없어 미실행)
  • claude plugin eval (Claude Code 2.1.291) — 트리거 스위트 22/22 (runs 1, $3.43) · 행동 스위트(judge sonnet, runs 2):
    critical-canary 1.0 / without 0.5 (Δ +0.5) · triage-first 1.0 / 1.0 · doctor-i6 1.0 / 1.0 (scripts-used 2/2, 9턴)
    — doctor-i6 는 scaffold 가 feat(skills): 응답 이모지를 상태 4개·표지 4개로 줄여 ❌·❗ 가 눈에 띄게 해요 #23 의 템플릿 이모지 변경(⚠→❗) 뒤로 깨져 있어 이 PR 에서 같이 고쳤어요

🤖 Generated with Claude Code

… · 합의 리뷰 상한에서 사용자 승인 (v0.7.10)

commerce 레포 상품 별점 원장 작업(spec 2026-10-06-c627)에서 겪은 마찰 다섯 가지.

- mark-task --next 가 의존: 을 지켜요 (tasks-plan 과 같은 파서 goax_tasks_parse)
- spec-tasks·레인·위임 브리프에 관례 위치 grep, files: 와 충돌하면 멈추고 보고
- 완료 게이트 G7 — rules-auditor 가 변경 파일별 룰·이웃 관례를 대조해 review-rules.md 에 verdict
- update-task.sh --start --follow-up <spec> 으로 끝난 spec 에 후속 작업
- spec-review.sh --override --reason 으로 상한 도달 시 사용자 승인 기록

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@bluecheat bluecheat self-assigned this Oct 6, 2026
@bluecheat bluecheat changed the title fix/harness friction from commerce fix(harness): 다음 task 가 의존을 봐요 · 완료 전에 룰을 대조해요 · 끝난 spec 에 후속을 이어 열어요 · 합의 리뷰 상한에서 사용자 승인 (v0.7.10) Oct 6, 2026
bluecheat and others added 3 commits October 6, 2026 20:37
projection/·vo/·dto/, **/*.kt, commerce 실측 언급을 '같은 레이어의 별도 하위 디렉토리' 같은
범용 표현으로 바꿔요. 플러그인 문구는 특정 스택·프로젝트를 전제하지 않아요.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
goax_tasks_parse 가 없음·none·- 를 정확히 일치로만 받아, 뒤에 설명을 붙인
'의존: 없음 (첫 task)' 를 풀리지 않는 의존으로 읽었어요. 그 task 와 뒤 task 가
전부 blocked 가 되고 --next 가 전부 막힘 warning 을 냈어요. 예전 파서는
의존 없음으로 읽었으니 업그레이드 회귀예요. 값 뒤 공백·괄호부터는 설명으로 봐요.
T-ID 없는 다른 표기(오타)는 여전히 막혀요. smoke §65 에 케이스 추가.
lane SKILL 의 낡은 tasks-plan.sh:83 참조도 goax_tasks_parse 로.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
AGENTS.md.template 의 '> ⚠ hook 파일을…' 이 #23 에서 '> ❗' 로 바뀌었는데 scaffold 는 옛
문자열을 index 해서 ValueError 로 케이스 전체가 실행 전에 실패했어요. 이모지 대신 문구로
찾고 그 줄 처음부터 잘라요.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@bluecheat
bluecheat merged commit 3411301 into main Oct 6, 2026
2 checks passed
@bluecheat
bluecheat deleted the fix/harness-friction-from-commerce branch October 6, 2026 12:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants