with one click
reflect
// 구현 후 회고 — 우려점·유사문제·리팩토링·미발견오류·지시불이행·agent 교정작업 제안 추출 → 계획서 생성 → review-plan 자동 수행. Use when: 리뷰, reflect, 회고, 검토, 우려점
// 구현 후 회고 — 우려점·유사문제·리팩토링·미발견오류·지시불이행·agent 교정작업 제안 추출 → 계획서 생성 → review-plan 자동 수행. Use when: 리뷰, reflect, 회고, 검토, 우려점
[HINT] Download the complete skill directory including SKILL.md and all related files
| name | reflect |
| description | 구현 후 회고 — 우려점·유사문제·리팩토링·미발견오류·지시불이행·agent 교정작업 제안 추출 → 계획서 생성 → review-plan 자동 수행. Use when: 리뷰, reflect, 회고, 검토, 우려점 |
구현 완료 후 현재 대화 컨텍스트를 분석하여 6가지 관점에서 후속 작업을 추출하고, 필요시 계획서를 자동 생성합니다.
/done 완료 후 안내에서 연결wtools에서 /reflect를 수정하거나 해석할 때 기준 파일은 D:\work\project\service\wtools\.agents\skills\reflect\SKILL.md이다.C:\Users\Narang\.codex\skills\reflect\SKILL.md는 참조용이며, 충돌 시 로컬 .agents 규칙을 우선한다..agents 스킬 수정 가능성을 검토한다.조사만 / 조사 — 1~2단계만 실행, /review-plan 자동 호출 스킵
/reflect 조사만, /reflect 조사/merge-test, /done)의 출력/메타에 나타난 plan/archive 경로를 primary anchor로 고정한다.declared/processed/excluded/remaining count를 reflect 입력 요약에 남긴다.명시 제외와 agent 임의 제외를 구분하지 못했거나 excluded_unconfirmed 상태를 전체 완료에 포함했다면 Q6 교정 후보로 남긴다.
.worktrees/plans/TODO.md)는 후속 plan 생성이나 remaining target 계산에 자동 합류시키지 않는다.참고 backlog로 분리해 보여주고, 사용자가 명시하지 않으면 자동 reroute/진행하지 않는다.*_todo-N.md 아님)이고 > **실행 TODO:** 링크 또는 sibling _todo-*.md가 있으면, 미완료 _todo 전부를 session targets에 포함한 것으로 해석한다.
_todo만 끝났다면 현재 target 회고 완료, 남은 target N개로만 출력하고 대표 plan 전체 완료로 말하지 않는다.현재 target 회고 완료, 남은 target N개 형태로 남기고, 다음 target 처리로 같은 턴에서 계속 진행한다.계속, 멈추지마, 끝날 때까지 등으로 재지시한 경우:
[$done] [$reflect]처럼 여러 skill을 같은 턴에 명시하면 각 skill의 실행 여부와 evidence를 별도 row로 남긴다.| skill | 실행 여부 | evidence | 남은 조치 |
|---|---|---|---|
{skill} | `{executed | already_complete | blocked |
review-plan 선행, target scope 제한, 완료 여부 재질문, dirty/conflict/untracked 조사, sync trigger 미실행, done/reflect 재호출을 별도 행으로 나눠 검토한다.reflect findings: N건, 신규 plan 0건으로 보고한다.| 발화 요지 | 누락/오판 | Q분류 | 처리(plan/new, attach_existing, report-only) | 근거 |
|---|---|---|---|---|
{사용자 교정 요약} | {누락 또는 오판} | `{Q5 | Q6 | Q5/Q6}` |
왜 멈췄냐, 다 하지도 않았는데, 계획서를 다시 읽고, 남은 작업 계속해, stash 했으면 pop 하라고, 죽을래?처럼 명시 재지시, 질책, 강한 불만 신호가 포함된 발화다.해당 없음으로 닫으려면 발화별로 report-only, attach_existing, plan/new 중 하나와 근거를 ledger에 남겨야 한다.완료 축소 보고와 remaining targets 재확인 누락을 Q5/Q6 후보로 남긴다.리뷰 완료 — 추가 작업 없음, 리뷰 완료., 추가 작업 없음)는 금지한다. 먼저 사용자 escalation 처리 행에 무엇을 다시 확인했고 무엇을 고쳤는지 또는 왜 report-only인지 적는다.사용자가 "main의 기존 수정사항을 고려하지 말라"고 명시한 경우:
dirty/untracked 파일은 reflect 중단 사유로 취급하지 않는다..git 보호 규칙과 파괴적 명령 금지 규칙은 그대로 유지한다.git status --short 결과에서 추출한 dirty path 목록. 세션 시작 시 1회 고정.current dirty ∩ $TouchedPaths. agent가 만들었지만 아직 커밋하지 않은 dirty.$TouchedPaths에도 포함된 path. agent가 같은 컨텍스트에서 수정했으면 whitelist 안에서는 커밋 책임이 agent에게 있다.attach_existing, 없으면 plan/new로 처리한다. owner plan이 archive라면 새 corrective plan에 archived owner와 dirty-left closeout owner를 모두 남긴다.git diff --cached --name-status가 current owner expected staged set과 다르면 Q5/Q6 후보로 승격한다. commit.ps1 -Files warning은 success가 아니라 staged ownership 재검증 trigger다.스킬 시작 직후, 조사만 모드 포함 모든 실행 경로에서 어떤 파일도 건드리기 전에 실행한다:
.worktrees/plans 각각에서 git status --short로 path 목록을 $BaselinePaths/$PlansBaselinePaths로 기록한다.$TouchedPaths를 빈 set으로 초기화한다.현재 대화 컨텍스트 전체를 스캔하여 아래 6가지 항목을 추출한다.
대화 텍스트 스캔 전에 최근 실행한 검증 명령을 표로 먼저 정리한다.
| 실패 명령 | 종료코드 | 로그근거 | 카테고리 |
|----------|----------|---------|---------|
| {cmd} | {exit} | {요약} | {frontend-check|frontend-build|frontend-tsc|other} |
build/check/test 게이트 명령 (pnpm -C frontend check, pnpm -C frontend build, tsc, pytest 등)frontend-check: frontend check, svelte-check found, ELIFECYCLEfrontend-build: frontend build, vite build, npm run buildfrontend-tsc: tsc, TypeScript, TS\d+.svelte-kit EPERM/EBUSY와 같은 validation concurrency failure 여부를 보존한다. 단독 재실행으로 통과했더라도 병렬 실행 원인과 재실행 명령/결과를 Q4 근거로 남긴다.T4_T5_CONTRACT_VIOLATION: T4/T5 체크박스가 [x]인데 근거 파일에 pytest.mark.http_live가 없고 page.route("**/*")/page.route('**/*') mock-only 또는 TestClient 단독 근거만 있으면 Q4 hard gate finding으로 기록한다. 이 경우 해당 없음 판정 금지, must_plan 강제, live T4/T5 follow-up 또는 T3 재분류 plan을 생성/attach한다.plan 본문, diff, 로그, 또는 의심 코드에 아래 detector seed가 있으면 상태 머신 변경으로 의심하고 Q4/Q6 closeout 전에 6축 누락 여부를 표로 enumerate한다. seed가 0개인 CRUD/문서 plan에는 이 gate를 강제하지 않는다.
state, status, phase, transition, lifecycle, terminal, waiting, pending, approval_required, 완료, 보류, 대기overwrite, late writer, race, cleanup, retry, fallback, concurrent, 순서 역전, 덮어씀, stale6축 matrix:
| 축 | 요구 evidence |
|---|---|
creator | 중요한 상태를 처음 만드는 경로와 TC/assert |
preserver | cleanup/retry/fallback 같은 후속 writer가 상태를 보존하는 경로와 TC/assert |
overwrite-block | 늦은 writer가 terminal/waiting 상태를 덮지 못하는 guard와 TC/assert |
override | 명시적 사용자 action만 guard를 우회하는 경로와 TC/assert |
display | API/UI/read-model이 stale metadata와 terminal state 충돌을 올바르게 표시하는 TC/assert |
late-writer ordering | 동시 또는 시간차 writer 경합에서 순서 의존 결함을 드러내는 TC/assert |
N/A: 사유를 명시해야 한다. 예: override: N/A: 사용자 override 경로가 없는 내부 상태.N/A: 사유가 빠진 축이 있으면 Q4 미발견 오류 또는 Q6 agent 교정작업 제안 후보로 남기고, 해당 없음/report-only로 축소하지 않는다.Q1. 우려점
대화 중 아래에 해당하는 내용을 탐색:
추가로 수정한 파일을 Grep으로 스캔:
# 워크트리 또는 프로젝트 디렉토리에서
grep -rn "TODO\|FIXME\|HACK\|WORKAROUND\|TEMP\|XXX" {수정된 파일들}
"해당 없음" 기준: 대화에 우회/타협 언급 없고, Grep 결과 0건이며, 구현이 plan 대로 완료됨.
Q2. 유사 문제
프로젝트 전체(tests/, .worktrees/, node_modules/ 제외)에서 Grep으로 같은 패턴 재검색:
tests/, .worktrees/, node_modules/ 제외)에서 Grep 수행 후 동일 패턴의 위치를 정렬"해당 없음" 기준: 프로젝트 전체 Grep 결과 동일 패턴 0건, 또는 이미 방어된 패턴.
수정한 파일이 경로 이동/이름 변경/재배치와 연관되어 있으면, 같은 패턴의 이전 경로를 전체 Grep한 뒤 참조 처리를 점검한다.
tests/, .worktrees/, node_modules/ 제외)../, ./, $PSScriptRoot, __file__, Path().parent 등의 상대경로 깊이 일치 여부를 검증Q3. 리팩토링
수정한 파일을 대상으로:
pre-existing finding promotion guard: Q1~Q6 발견에서 pre-existing, 이번 세션에서 도입되지 않음, 수정 순증이 작음은 plan 생성 제외 사유가 아니다. pre-existing은 발견 설명, 우선순위, owner 경계에만 기록하고 계획서: -의 근거로 쓰지 않는다. 발견 항목이 active plan에 있으면 existing, active plan이 없으면 plan/new 또는 user-review로 남긴다.
Q3에서 과도하게 비대한 파일, 복잡한 조건/분기, 중복, 임시 해결책이 발견되면 기존 active plan 검색을 먼저 수행한다. active plan이 없고 대상 파일/모듈이 식별되면 리팩토링 follow-up plan을 생성한다. active plan도 없고 owner가 불명확한 경우만 user-review로 보류하며, 단순 report-only로 축소하지 않는다.
재현 fixture: LogViewer.svelte 1,291줄, pre-existing, 이번 세션 수정분 약 20줄 순증, 계획서: - 조합은 실패 사례다. active plan이 없으면 신규 리팩토링 plan 후보를 남기고, matching active plan이 있으면 신규 생성 대신 기존 plan 링크를 남긴다.
"해당 없음" 기준: 파일 규모/복잡도, 중복, 임시 코드 발견이 없거나 이미 active plan 또는 명시적 제외 지시로 추적 중임.
Q4. 미발견 오류
1-0단계 실패표 + 대화 로그를 함께 사용해 아래 항목을 열거한다:
product-surface evidence scope guard: completion-scope: product_surface plan 또는 제품 UI/API/runtime surface를 완료했다고 주장한 plan은 scripts/scratch/, scratch/, tmp/, private/, .private/ 같은 scratch/private utility evidence만으로 완료 처리하지 않는다. 제품 surface path/read-back(app/, frontend/, backend/, src/, packages/, services/, common/tools/ 등)이 없으면 non_product_only로 분류하고 target-local blocked 또는 Q4 finding으로 남긴다. 이 경우 계획서: -, report-only, already complete로 축소하지 않는다.
"해당 없음" 기준: 실패표 항목 0건 AND 대화/로그에 미처리 오류 언급 없음.
Q5. 지시불이행
대화/작업 로그에서 아래 항목을 확인한다:
왜 멈췄냐, 다 하지도 않았는데, 계획서를 다시 읽고, 남은 작업 계속해, stash 했으면 pop 하라고, 죽을래? 등)가 발생했는데도 해당 발화가 드러낸 누락 작업, 완료 축소, read-back 누락을 반영하지 않은 경우[$skill](...SKILL.md) 링크나 exact skill name을 다시 제시했는데도 실행 대신 설명을 반복한 경우skill | 실행 여부 | evidence | 남은 조치 결과표를 남기지 않은 경우branch/worktree present -> /merge-test; absent -> /done 판정을 수행한 경우Phase DB-Direct가 있는 plan에서 running DB 직접 실행, 존재 확인 쿼리, live API 또는 runtime 결과를 남기지 않은 경우.agents/.claude/.gemini mirror 파일 직접 edit/commit을 제안하거나 실행한 경우. mirror drift는 wtools 원본 수정, downstream sync evidence, 또는 /pull-sync 수신 검증으로 라우팅해야 한다..gemini/GEMINI.md, gemini_surface_registry.py, parity test, sync script가 서로 다른 .gemini/agents 정책을 말하면 surface policy contradiction으로 기록하고 Q5/Q6 finding 후보로 승격한다.기록 기준:
"해당 없음" 기준: 대화/로그에 명시적 지시 위반 또는 필수 절차 누락이 없고, 사용자 교정이 발생하지 않음.
사용자가 "직접 실행", "직접 마이그레이션", "live로 다시 검증" 같은 재지시를 남긴 경우, DB-direct/live 누락을 Q5 해당 없음으로 축소하지 않는다.
해당 없음, 불필요, 과함, 닫음으로 종결하지 않는다.사용자 보고로 남기고, 재발 방지 수정(스킬/규칙/코드)이 필요하면 plan/new 또는 plan candidate로 승격한다. (조사만/조사 모드도 동일)Q6. agent 교정작업 제안
에이전트가 이전 분석 또는 진행 중에 제안했으나 실제 plan/TODO/스킬 수정으로 이어지지 않은 교정안을 추출한다.
skills.md 또는 관련 SKILL.md 수정 plan으로 연결하지 않은 경우plan candidate로 승격하지 않은 경우판정 기준:
"해당 없음" 기준: 교정 제안이 모두 후속 계획/수정으로 연결되었거나, 별도 교정안이 제안되지 않음.
Q5/Q6에서 교정작업 또는 정리 요청을 approval 대상으로 정리할 때는 아래 승인 단위를 분리한다.
data_cleanup: 특정 데이터/상태 정리만 포함한다. 예: specific DB item 삭제, TrackingItem id=5 삭제, orphan row 제거, stale ledger entry 제거.feature_rollback: 기능 제거, scheduler/worker 경로 삭제, commit revert, migration 제거, UI/API surface 되돌리기처럼 동작 surface를 되돌리는 조치만 포함한다.data_cleanup 승인 문구만으로 scheduler 경로 삭제, 기능 제거, commit revert, migration 제거를 수행하거나 계획하지 않는다.item 삭제, row 제거, TrackingItem id=5 삭제 요청을 scheduler 경로 삭제, 기능 제거, commit revert, migration 제거 계획으로 바꾼 사례는 approval scope expansion으로 기록하고 plan/new 또는 active plan attach 대상으로 둔다.data_cleanup과 feature_rollback을 별도 승인 단위로 split해 각각 범위/근거/리스크를 기록한다.D:\work\project\service\wtools\.agents\skills\reflect\SKILL.md는 수동 /reflect 규칙, D:\work\project\service\wtools\.agents\agents\auto-reflect.md는 자동 회고 계약, D:\work\project\service\wtools\common\tools\plan-runner\cli\runner.py는 auto-reflect runtime 호출부다. 세 surface는 파일과 owner가 나뉘어 있으므로, 한쪽만 수정해도 반대편 drift가 남는지 같은 review 단계에서 같이 판정해야 한다.
조사 목적:
조사 트리거:
reflect 또는 다른 skill/agent instruction 문서를 수정했으면 auto-reflect와 runner.py 영향 여부를 같이 조사한다.auto-reflect 또는 runner.py를 수정했으면 수동 /reflect 규칙 수정 필요 여부를 같이 조사한다.판정값:
영향 없음: 반대편 surface에 수정할 계약이나 runtime drift가 남지 않는다.참조만: 관련 surface는 있지만 이번 변경으로 실제 수정은 필요 없고 근거 파일/active plan만 함께 남긴다.수정필요: 반대편 surface에도 follow-up 수정 또는 기존 active plan 연결이 필요하다.후속 규칙:
영향 없음, 참조만은 새 plan 생성 금지다. 근거 파일 또는 기존 active plan 링크만 남긴다.수정필요만 follow-up plan 또는 기존 active plan 링크 반환 대상이다.수정필요를 사용자 승인 없이 불필요로 축소하지 않는다. 이 축소 금지 정의 자체는 D:\work\project\service\wtools\.worktrees\plans\docs\plan\2026-04-21_fix-done-reflect-target-fixation-and-git-mutation-serialization.md가 owner다.수정필요를 단순 참조만으로 닫지 않는다. 현재 세션 결과는 Q5/Q6 finding, plan candidate, 또는 active plan 링크 중 하나로 그대로 남긴다.라우팅 규칙:
.agents active surface 문구 drift는 D:\work\project\service\wtools\.worktrees\plans\docs\plan\2026-04-21_fix-reflect-agent-plans-worktree-path-policy-drift.md 계열로 연결한다..claude mirror drift 또는 runner.py runtime parity는 D:\work\project\service\wtools\.worktrees\plans\docs\plan\2026-04-21_fix-plan-runner-agent-surface-parity-and-phasez-drift.md 계열로 연결한다..agents 문구 drift와 runtime/.claude parity를 각각 분리하지 말고, runner.py 소비 방식 또는 .claude mirror drift가 포함된 경우 runtime parity plan을 primary owner로 삼는다..claude 요소가 없고 .agents active-surface 문구 drift만 남으면 reflect active-surface plan을 primary owner로 삼는다.참조 plan으로만 같이 남긴다. 하나의 finding을 동일 레벨 신규 plan 2개로 쪼개지 않는다./pull-sync 수신 검증 plan으로 라우팅한다.사례 1: 사용자가 "계획서부터 써"라고 지시했는데 plan 없이 전역 스킬부터 수정함
계획서 선행 지시 미이행, 로컬 스킬 대신 전역 수정이 기록되어야 한다..agents\skills\reflect\SKILL.md 또는 관련 workflow 규칙 보강으로 해결 가능하면 후속 plan 생성 대상이다.사례 2: 세션 중 "지시불이행, agent 교정작업 제안도 reflect에 들어가야 한다"는 교정 방향이 제안됐지만 plan/TODO/스킬 수정으로 이어지지 않음
교정작업 제안만 있었고 후속 실행이 없었다가 기록되어야 한다.사례 3: docs-only 커밋에서 git reset HEAD {파일} 후 orphaned delete가 남았는데도 계속 진행하려 한 경우
staged rename/delete mismatch 미처리가 기록되어야 한다.docs-only exact-match 검증 누락이 기록되어야 한다.review-plan, plan, auto-reflect 문구 보강으로 막을 수 있으면 follow-up plan 생성 대상이다.사례 4: 사용자가 [$plan](...SKILL.md) 또는 [$review-plan](...SKILL.md)를 다시 찍어줬는데도 실행 대신 설명을 이어간 경우
explicit skill invocation execute-now 누락이 기록되어야 한다.execute-now 교정 방향을 말했지만 가이드/스킬 수정 plan으로 연결하지 않음이 기록되어야 한다.사례 5: 사용자가 계속/멈추지마/끝날 때까지로 교정했는데도 agent가 단계별 closeout 톤으로 멈춘 경우
explicit continue/no-stop 위반(중간 마일스톤을 종료로 오독)이 기록되어야 한다.continue 계약을 owner SKILL.md/가이드에 반영하지 않음이 기록되어야 한다.implement/merge-test/done 스킬 문구 보강으로 막을 수 있으면 follow-up plan 생성 대상이다.사례 6: 대표 plan가 _todo-N으로 분리돼 있는데 child 1개만 처리하고 대표 plan 전체 완료/회고 종료로 보고한 경우
_todo 분리 plan completeness gate 누락이 기록되어야 한다.representative plan -> remaining _todo continuation 규칙을 스킬/가이드에 반영하지 않음이 기록되어야 한다.implement/merge-test/reflect 문구 보강으로 막을 수 있으면 follow-up plan 생성 대상이다.사례 7: Phase DB-Direct가 있는 plan에서 사용자가 "직접 실행" 또는 동등한 재지시를 남겼는데도 running DB 반영과 live 검증 evidence 없이 거의 완료처럼 보고한 경우
DB-direct 미실행, live 검증 미실행, 직접 실행 대기 상태를 숨긴 workflow 누락이 기록되어야 한다.DB-direct hard gate 교정안을 plan candidate로 승격하지 않음이 기록되어야 한다.사례 8: post-merge 보강이나 테스트 수정이 main root protected path(app/, frontend/, scripts/, tests/, .agents/, .claude)에 dirty로 남았거나 impl worktree 밖에서 수정된 경우
root main 직접 수정, impl worktree 밖 수정, post-merge 테스트/코드 dirty 잔여를 지시불이행 후보로 기록해야 한다.ROOT_PROTECTED_DIRTY_CREATED repair, related-plan dirty, dirty 0 종료 조건 같은 workflow guard가 누락됐는지 교정 후보로 남긴다.해당 없음으로 축소하지 않고 기존 active plan attach 또는 신규 plan 후보로 둔다.finding을 plan으로 승격하기 전에 아래 4가지를 판정한다:
| 판정 | 조건 | 후속 동작 |
|---|---|---|
must_plan | 실패 증거 있음 + 구체 owner 있음 + 기존 active plan에 귀속 불가 + 사용자 보고만으로 닫을 수 없는 잔여 리스크 | 즉시 plan 생성 |
attach_existing | 기존 active plan이 같은 owner/범위를 커버 | 기존 plan에 항목 추가, 신규 생성 스킵 |
user-review | 증거 약함 / owner 불명확 / expected outcome 추상적 | 사용자검토 후보로 보류 |
report-only | 실행 가능한 owner 또는 잔여 리스크가 없는 관찰만의 항목 | 출력 텍스트에만 기록, plan 생성 스킵 |
즉시 승격 예외군 (위 gate를 우선 적용하지 않음):
must_plan 강제T4_T5_CONTRACT_VIOLATION mock-only/TestClient-only 완료 체크 → must_plan 강제must_plan 강제must_plan 강제report-only가 아니라 attach_existing, must_plan, user-review 중 하나로 판정한다.-인 경우 허용 사유를 existing, 명백한 오탐, 사용자 제외 지시, user-review 중 하나로 남긴다.추출 결과를 의미 단위로 묶어 계획서를 생성한다.
$TouchedPaths에 추가한다.묶기 규칙:
생성 절차:
_path-rules.md helper 우선순위(PLAN_ROOT -> .worktrees/plans/docs/plan -> docs/plan)를 함께 확인한다.
(예: wtools 공통은 .worktrees/plans/docs/plan, 일반 프로젝트는 docs/plan)
계획서 생성 위치 분기 — 발견 항목의 수정 대상에 따라 올바른 프로젝트에 생성:
.claude/skills/, .claude/agents/, 공통 스크립트 → wtools .worktrees/plans/docs/plan/에 생성.agents, .claude, .gemini mirror 파일이면 wtools 원본 수정 plan, downstream sync evidence task, 또는 /pull-sync 수신 검증 task로 분류하고 child repo impl plan은 생성 금지
git pull 또는 /pull-sync로 sync commit 수신.agents/.claude/.gemini mirror 파일을 직접 edit/commit해 wtools 원본과 수동 정렬 — Q5 위반/pull-sync conflict 분류 정책으로 위임한다.app/, frontend/, scripts/ 등 → 해당 프로젝트의 docs/plan/에 생성.worktrees/plans/docs/plan/에 생성/plan 스킬 디렉터리의 _template.md 형식으로 계획서 작성{plan경로}/YYYY-MM-DD_{주제}.md> 출처: /reflect에서 자동 생성 표기중복 처리 규칙 (필수):
{plan경로}의 미완료 plan을 검색한다.제목 키워드 + 실패 카테고리 + 최근 N일이 일치하면 신규 생성 대신 기존 plan 링크를 반환한다.plan/new(신규 생성) 또는 existing(기존 링크 반환)로 기록한다.docs/archive/, .worktrees/plans/docs/archive/에만 남은 우려점은 "이미 기록됨" 근거가 될 수 없다.Q5/Q6 계획서 생성 규칙:
skills.md와 특정 SKILL.md가 같은 계약을 공유하면 same-file 또는 same-rule follow-up plan으로 묶는다수정필요면 기존 active plan 귀속 가능성을 먼저 본다. .agents 문구 drift는 reflect active-surface plan, runtime/.claude parity는 plan-runner parity plan 링크를 우선 검토한다.runner.py 소비 방식 또는 .claude mirror drift가 포함되면 runtime parity plan을 primary owner로 고르고, .agents 문구 drift는 참조 plan으로만 남긴다..agents active-surface 문구 drift에만 머물면 reflect active-surface plan을 primary owner로 고르고, 같은 finding을 중복 plan 2개로 쪼개지 않는다.fix-done-reflect-target-fixation-and-git-mutation-serialization plan의 축소 금지 규칙이 아직 live instruction에 반영되지 않았더라도, Q5/Q6 또는 상호 영향 조사 수정필요를 "참조했으니 해결됨"으로 닫지 않는다.Phase DB-Direct plan의 실행 증거 누락은 파일/규칙 수정으로 재발 방지가 가능하면 최소 plan candidate로 남긴다.0건 처리: 6가지 모두 "해당 없음"이면:
리뷰 완료 — 추가 작업 없음
출력 후 3단계 스킵, 종료.
단, 사용자 escalation evidence가 있으면 위 0건 처리는 금지한다. 사용자 escalation 처리 행에 무엇을 다시 확인했고 무엇을 고쳤는지, 남은 작업이 있으면 어느 owner로 넘겼는지, report-only라면 왜 추가 수정이 불필요한지 먼저 기록한다.
$TouchedPaths에 추가하고, fallback/review-plan 전 current dirty ∩ $TouchedPaths로 self residual을 계산한다.남은 dirty 행으로 기록한다./review-plan의 커밋으로 충족한다./review-plan 단계가 실패/스킵되면, reflect가 직접 화이트리스트 커밋({plan경로}/*.md, 필요 시 TODO.md)을 수행하고 종료한다./review-plan 실패 사유가 local drift 충돌, related-plan 충돌, 입력 누락 등 새 재검토 실패 유형이어도, reflect는 그 사유를 출력 표와 종료 메시지에 그대로 기록한다./review-plan 실패 전에 현재 입력 계획서에 deterministic한 보정이 반영된 경우, reflect fallback은 그 현재 입력 계획서 파일만 화이트리스트 커밋 대상으로 판정한다.reflect가 직접 화이트리스트 커밋을 수행한다.commit.ps1 -Files warning은 success가 아니라 git diff --cached --name-status 재검증 trigger다. staged mismatch, D/R/RM/?? 비대칭, 비화이트리스트 파일이 보이면 실패를 그대로 보고하고 종료한다.docs: reflect — add follow-up plans"조사만" 또는 "조사" 인자가 감지된 경우:
current dirty ∩ $TouchedPaths로 touched plan 파일이 dirty인지 확인하고, whitelist 안이면 화이트리스트 커밋을 시도한다.생성된 계획서: {경로1}, {경로2}, ...
재검토가 필요하면 /review-plan {경로}를 실행하세요.
조사 완료와 함께 남은 dirty: {path 목록}을 출력한다.$TouchedPaths에 추가한다.생성된 계획서에 대해 /review-plan 스킬의 SKILL.md를 읽고, 그 실행 단계를 직접 수행한다.
(Skill 도구로 /review-plan을 호출하는 것이 아님 — review-plan 절차를 인라인으로 따르되, review-plan이 요구하는 downstream Skill 호출/커밋 규칙을 그대로 따른다. 특히 review-plan 2단계는 expand-todo를 Skill 도구로 직접 호출하므로, reflect도 expand-todo를 직접 인라인 수행하지 않는다.)
계획서 경로 목록을 review-plan의 입력으로 사용한다.
review-plan은 로컬 drift/연관 계획서 참조를 검토한 뒤 현재 입력 계획서만 보정할 수 있다.review-plan이 local drift 충돌, related-plan 충돌, 입력 누락 등으로 실패하면, reflect는 같은 실패 사유를 결과 표와 종료 메시지에 남기고 2.5단계 fallback 규칙으로 종료한다.## 컨텍스트 리뷰 결과
| # | 카테고리 | 발견 | 계획서 |
|---|---------|------|--------|
| 1 | 우려점 | {내용 또는 해당 없음} | {plan 링크 또는 —} |
| 2 | 유사 문제 | {내용 또는 해당 없음} | {plan 링크 또는 —} |
| 3 | 리팩토링 | {내용 또는 해당 없음} | {plan 링크 또는 —} |
| 4 | 미발견 오류 | {내용 또는 해당 없음} | {plan 링크 또는 —} |
| 5 | 지시불이행 | {내용 또는 해당 없음} | {plan 링크, 사용자 보고, 또는 —} |
| 6 | agent 교정작업 제안 | {내용 또는 해당 없음} | {plan 링크, 사용자 보고, 또는 —} |
명시 다중 skill 결과:
| skill | 실행 여부 | evidence | 남은 조치 |
|-------|-----------|----------|-----------|
| {skill} | {executed|already_complete|blocked|skipped} | {근거} | {next owner 또는 없음} |
사용자 개입 ledger:
| 발화 요지 | 누락/오판 | Q분류 | 처리(plan/new, attach_existing, report-only) | 근거 |
|-----------|-----------|-------|----------------------------------------------|------|
| {요약} | {누락 또는 오판} | {Q5|Q6|Q5/Q6} | {plan/new|attach_existing|report-only} | {근거} |
사용자 escalation 처리:
| escalation evidence | 다시 확인한 범위 | 고친 내용 또는 남은 owner | 처리 |
|---------------------|------------------|---------------------------|------|
| {재지시/질책 요약} | {plan/TODO/diff/status/read-back 범위} | {수정/문서화/attach_existing/report-only 사유} | {done|remaining targets|blocked} |
reflect findings: {N}건, 신규 plan {M}건
상호 영향 조사:
| 방향 | 판정 | 근거 파일 | 후속 파일 또는 plan 링크 |
|------|------|-----------|---------------------------|
| reflect/skill -> auto-reflect/runner | {영향 없음|참조만|수정필요} | {reflect SKILL.md, auto-reflect.md, runner.py 중 관련 파일} | {후속 파일, active plan 링크, 또는 —} |
| auto-reflect/runner -> reflect/skill | {영향 없음|참조만|수정필요} | {auto-reflect.md, runner.py, reflect SKILL.md 중 관련 파일} | {후속 파일, active plan 링크, 또는 —} |
실패 명령 표:
| 실패 명령 | 종료코드 | 카테고리 | 처리결과(plan/new|existing) |
|----------|----------|---------|-----------------------------|
| {cmd} | {exit} | {frontend-check|frontend-build|frontend-tsc|other} | {plan/new|existing} |
생성된 계획서: N개
→ review-plan 실행 단계를 인라인으로 수행 중...
review-plan 실패 시:
- 실패 사유: {local drift 충돌|related-plan 충돌|입력 누락|기타}
- fallback 커밋: {실행|스킵}
user-review 판정 finding이 있으면 아래 형식으로 출력한다:
| finding | 판정 사유 | 권장 조치 |
|---|---|---|
| {finding 요약} | owner 불명확: {사유} | 필요 시 직접 plan 생성 |
후보가 없으면 이 섹션을 생략한다.
/implement에서local drift 충돌, related-plan 충돌 같은 재검토 실패도 fallback 출력/종료 메시지에서 생략하지 않는다./reflect는 대화 컨텍스트 기반, 자동 파이프라인은 auto-reflect 에이전트(로그+실패표 기반)를 사용\), 절대경로, PowerShell 전용commit.ps1 또는 commit.sh)git add/reset/stash/worktree/branch 및 commit.ps1 실행은 병렬 실행 금지. 병렬화는 read-only 명령에만 허용한다.