# 하네스 변경 이력 — PTOP 분석 팀 > `docs/harness-ptop.md` 에서 분리했다 (`rules.md` #4 — 200줄 상한). > 하네스를 고치면 **여기에 행을 추가**한다. 본문에는 표를 되돌리지 않는다. | 날짜 | 변경 내용 | 대상 | 사유 | |------|----------|------|------| | 2026-06-16 | 초기 구성: PTOP 분석 팀 구축 | agents/, skills/ | ILSOS_PrismaticRD_PTOP이 핵심 활성 모듈, 종합 분석 필요 | | 2026-08-03 | `.ubisam_agent/` → `.claude/`로 경로 이전, `.gitignore`에 `!.claude/agents/` 예외 추가 | agents 3개, skills 4개 | Claude Code가 `.claude/`만 로딩 — 하네스 전체가 호출 불가 상태였음 | | 2026-08-03 | `TeamCreate`/`TeamDelete` 의존 제거 → `Agent`+`SendMessage`로 교체 | orchestrate-ptop-harness, agents 3개 | 해당 도구가 이 환경에 존재하지 않아 오케스트레이터 실행 불가 | | 2026-08-03 | 진행·재시도 원장을 `_progress.md` **파일**로 고정 (태스크 도구는 보조로 강등) | 스킬 2·에이전트 6·참조 3·하네스 문서 2 | `TaskCreate`/`TaskUpdate`가 **서브에이전트 컨텍스트에는 없어** 재시도 카운트가 매번 0으로 리셋 → "최대 2회" 상한이 무력화 | | 2026-08-03 | 날조된 예시 분석 결과 삭제, "미측정" 표기 원칙 추가 | orchestrate-ptop-harness, build-devops-engineer | 예시 수치("Release가 20% 느림" 등)를 에이전트가 실측으로 오인해 복사할 위험 | | 2026-08-03 | 산출 파일명을 에이전트 정의와 일치시킴(01~06), 팀원 이름 실제 에이전트명으로 정정 | orchestrate-ptop-harness, ptop-lead | 오케스트레이터↔에이전트 간 참조 불일치(dead link) | | 2026-08-03 | `model: opus`·재호출 지침·분석 전용 명시 추가 | agents 3개 | 후속 실행 시 이전 산출물 재사용 규칙 부재 | | 2026-08-03 | 보고서 템플릿·CI/CD YAML을 `references/`로 분리 (200줄 상한 준수) | analyze-ptop-architecture/-implementation, optimize-ptop-build | `rules.md` #4 위반 (248·210·209줄) | | 2026-08-03 | 템플릿의 날조 수치(빌드 45s/60s, T+50ms, PLC `M10` 등)를 플레이스홀더로 교체 | 위 3개 스킬 references/ | 에이전트가 예시값을 실측으로 오인해 복사할 위험 | | 2026-08-03 | 죽은 소스 경로 정정 + 동명 심볼 함정 명시 | analyze-ptop-architecture, ptop-lead, ptop-developer | 2026-06-18 리네임(`SeqAutoRunPrismaticScanner`→`SeqAutoRunPrismatic`, `PAIX_PrismaticScanner`→`PAIX_PTOP`) 미반영. `PLCContoller.Config.cs` 오탈자·공유 클래스 동명 문제도 병기 | | 2026-08-03 | 에이전트 가용성 가드 + lead 2회 실패 폴백 + stale 표기 의무 추가 | orchestrate-ptop-harness | 에이전트 미등록 시 Phase 2에서 즉사, "지연"과 "실패"가 구분 안 됨, 부분 재실행 시 새 01+낡은 02가 무표기로 섞임 | | 2026-08-03 | 산출 .md 200줄 상한 지시 추가 | agents 3개 | 하네스 자신은 준수하나 산출물에 대한 강제가 없었음 | | 2026-08-03 | `.gitignore`에 `_workspace/`·`_workspace_prev/` 추가 | .gitignore | 하네스 중간 산출물이 레포 루트를 오염 | | 2026-08-03 | `CLAUDE.md`의 `@import X` → `@X` 문법 정정 | CLAUDE.md, docs/architecture.md | `@import`는 Claude Code 문법이 아니라 조용히 실패 — `rules.md` 등 규약 문서 5건이 세션에 로딩되지 않고 있었음 | | 2026-08-03 | `set PYTHONUTF8=1 &&` → `PYTHONUTF8=1` (bash 호환) | 스킬·에이전트·스크립트 9건 | bash에서 `set VAR=1`은 환경변수를 만들지 않아 stdout이 cp949로 깨짐 (`rules.md` #3 위반) | | 2026-08-03 | 죽은 심볼·경로 정정: `Views/Recipe\|Manual\|Monitoring`(부재), `PAGE_VERIFY_DELAY_MS`·`WELD_START_DELAY_MS`(부재), `ThetaTolerance`→`HeadThetaTolerance` | ptop-deliverables/references/source-map.md | 진실원 인덱스가 없는 파일·상수를 지목 | | 2026-08-03 | `ILSOS_PrismaticScanner 네임스페이스 사용` 주장 삭제 | ptop-lead, analyze-ptop-architecture | 실제 PTOP 네임스페이스는 `ILSOS_PrismaticRD_PTOP.*` (전수 확인, 옛 이름 0건) | | 2026-08-03 | 승인 게이트·실패 판정 기준·Phase 3 완료 판정·이중 디스패치 해소 | orchestrate-ptop-harness, ptop-lead, ubisam-deliverables | `rules.md` #2 미준수, "지연"과 "실패"를 구분할 관측 기준 부재, lead와 오케스트레이터가 둘 다 developer를 기동 | | 2026-08-03 | PTOP 하위 스킬 3개에 역방향 구분절 추가 | analyze-ptop-*, optimize-ptop-build | 종합 요청이 단일 영역 스킬로 새는 경로 | | 2026-08-03 | msbuild 탐색 폴백 + 미측정 확정 절차 | optimize-ptop-build | `msbuild`가 PATH에 없어 1단계에서 막힘 | | 2026-08-03 | .NET Core 전용 속성·`#if SIMULATION`·`MockPLC` 예시 삭제 | optimize-ptop-build, cicd 템플릿 | 이 프로젝트는 .NET Framework 4.8.1 legacy csproj. `Simulation\|x64`는 sln에서 `Release\|x64`로 매핑되며 `#if SIMULATION` 0건 — 존재하지 않는 빌드를 대상으로 삼게 됨 | | 2026-08-03 | `MotorIds`→`SettingIds`, `PLC_HEAVY_ALARM_STATUS` 출처→`SeqAlarmMonitor.cs:199`, 진행률 스냅샷 제거 | analyze-ptop-architecture, source-map | 없는 클래스 지목·처리 위치 오지목·근거 없는 수치 | | 2026-08-03 | 산출 경로 절대경로 변환 + `_workspace/` 사전 생성 지시 | orchestrate-ptop-harness | 서브에이전트 셸 cwd가 호출마다 초기화돼 상대경로 산출물이 유실되면 완료 판정이 오판 | | 2026-08-03 | PTOP 3인에 담당 스킬 역참조 1줄씩 추가 | agents 3개 | 단독 호출 시 스킬이 적용되지 않음 (ubisam 3인은 이미 보유) | | 2026-08-03 | qa 양식 미정의 폴백 수신 규칙 추가(#6만 미검증, #2는 정상 검증) | ubisam-qa, ubisam-producer | producer가 qa 동작을 일방 규정하고 있었고 enum 적용 여부와 자기모순 | | 2026-08-03 | Ubisam 하네스에 실패 판정 기준·stale 표기 이식, Phase off-by-one 수정 | ubisam-deliverable-rebuild | Phase 0 후 "Phase 2 시작"으로 적혀 analyst를 건너뛰면 매핑표 없이 producer가 즉사 | | 2026-08-03 | 네임스페이스 단정 정정 — 프로젝트 내 예외 3파일 병기 | ptop-lead, analyze-ptop-architecture | `SeqTestRun.cs:35`=TDC, `SeqAlarmMonitor.cs:22`·`SeqStatusMonitor.cs:11`=WeldingCommon. 앞선 "전부 `ILSOS_PrismaticRD_PTOP.*`" 주장이 거짓이었고, 그대로 grep하면 하네스가 인용하는 `SeqAlarmMonitor.cs:199`가 누락 | | 2026-08-03 | 4구성 → **2구성**으로 통일 (description·측정표·보고서 템플릿) | optimize-ptop-build ×2, build-devops-engineer, architecture.md | `Simulation`·`UserDefineUnit`은 `ILSOS_All.sln:413-416`에서 Release 매핑 — 존재하지 않는 빌드를 측정 대상으로 요구하고 있었음 | | 2026-08-03 | Phase 3 절대경로 전달·Phase 4 완료 알림 대기·재시도 카운트 기록 규칙 | orchestrate-ptop-harness, ubisam-deliverable-rebuild | Phase 2에만 있던 규칙이 전파되지 않아 `02`·`03` 유실 위험, "2회"를 세는 주체 부재 | | 2026-08-03 | 스킬 폴더 잔재 정리(`생성파일/*.pptx`, `__pycache__`) + `.gitignore` 보강 | .claude/skills, .gitignore | 스킬이 스스로 금지한 "출력이 스킬 폴더로 새는 것"의 흔적 | | 2026-08-03 | **`rules.md` #15·#16 바인딩** — 에이전트 6 + 스킬 6에 `[추론]` 표기 의무 삽입, `ubisam-qa` 검증항목 11 신설 | agents 6, skills 6 | 신규 조항이 하네스 어디에도 인용되지 않아 **미시행 상태**였다(문자열 `추론` 0건). 검증 주체가 없는 규칙은 문서에만 남는다 | | 2026-08-03 | 표기 축 판정표 신설 (`파일:라인` / `미측정`계 / `[추론]` / `(제안)`계) | rules.md, 두 하네스 문서 | `[추론]`과 기존 미확정 표기 5종의 관계가 미정의라 대체·이중표기 위험 | | 2026-08-03 | `rules.md` #5의 `@import` → `@경로` 정정, #15·#16을 `## 검증·표기` 절로 분리 | rules.md | 규칙서가 **폐기된 문법을 지시**하고 있었다(이미 정정한 결함의 발원지). 신규 조항이 제목 없이 붙어 파일 번호가 1,2,3,15,16,4,5로 흐트러짐 | | 2026-08-03 | 규칙 ↔ 바인딩 역인덱스 표 + `grep` 자가 점검 명령 추가 | docs/harness-ptop.md | 조항 추가 시 바인딩 누락이 3라운드 연속 지적 — 재발 방지 | | 2026-08-03 | `ptop-lead` 성공 기준의 "교차 확인 질문" 체크박스를 오케스트레이터 경유 시로 조건부화 | ptop-lead.md | 질문 정의·기록처가 모두 오케스트레이터 소유라 **단독 기동 시 충족 불가능**한 체크박스였음 | | 2026-08-03 | `141528_…md` 경로를 전체 경로로 명기 | ptop-deliverables/references/source-map.md | 앞 문장의 `06/17/`과 병렬로 읽히나 실제는 `06/20/` — 06/17에는 없는 파일 | | 2026-08-03 | **`[추론]` 검색 시 `\[추론\]` 이스케이프 의무** 명시 | ubisam-qa(검증항목11·작업원칙), ubisam-deliverables, rules.md | 대괄호가 정규식 문자클래스라 `[추론]`은 `추`·`론` 한 글자에도 매치 → **과다 매치**. 경로 케이스(0건)와 달리 결과가 많아 "0건이면 의심" 가드에 안 걸린다(실측 확인) | | 2026-08-03 | qa 성공 기준 "10개" → "**11개**" | ubisam-qa.md | 직전 패스에서 검증항목 11을 신설하고 최종 게이트를 안 고쳐, 신규 항목을 건너뛰어도 통과되는 상태였음 (**자체 유발 회귀**) | | 2026-08-03 | 실행 모드 판별을 `_workspace/` 폴더 존재 → **산출물 `01`~`06` 존재**로 변경 | orchestrate-ptop-harness | 채점·로그 파일만 있어도 "부분 재실행"으로 오판정 | | 2026-08-03 | 표기 축에 `미확인` 편입, `(추정)` → `[추론]` 통일 | rules.md, harness-ubisam, 00-harness.md | 판정표가 실사용 표기 2종을 누락 — 같은 축에 다른 토큰이 공존 | | 2026-08-03 | `analyze-ptop-architecture` 단독 기동 시 stale 표기 의무 명시 | analyze-ptop-architecture | "아키텍처만 다시"가 두 스킬에 동시 귀속되는데 단독 경로엔 표기 주체가 없었음 | | 2026-08-03 | `ubisam-deliverables` 자동 채움 단계에 `[추론]` 바인딩 | ubisam-deliverables/SKILL.md | 게이트 없이 값을 생성하는 유일 경로가 미바인딩으로 남아 있었음 | | 2026-08-03 | `rules.md` 절 순서 정정(`## 규칙 관리` → `## 검증·표기`), 역인덱스 `#11~13` 스킬 수 6→8 | rules.md, harness-ptop.md | 조항 15·16이 14보다 앞서 배치돼 자기 지침과 상충. 역인덱스 수치 오기 | | 2026-08-03 | **역인덱스에서 인용 건수 열 삭제** — "어디에 있어야 하는가"만 남기고 개수는 명령이 답하게 | docs/harness-ptop.md | **세 라운드 연속 자체 유발 회귀.** 바인딩을 늘릴 때마다 표의 숫자가 거짓이 됐다(17·17로 적고 실제 19·19). 숫자를 문서에 박는 구조 자체가 원인이라 열을 없앴다 | | 2026-08-03 | `source-map.md` 무효 심볼 3행 정정 — `Register*Device`·`MenuId`·`ViewType`·`AuthLevel`·`AddNode`·`AddTransition` | ptop-deliverables/references/source-map.md | 전부 **소스 0건**. 실제는 `registry.Register`(활성 3) · `AddSubMenu(CommonViewIds.*, UC)`(26, 권한 인자 없음) · `AddAction`(17)/`AddDecision`(4)/`AddSubsequence`(3). 하네스가 금지한 "창작"을 스스로 유발하는 경로였음 | | 2026-08-03 | **"0건" 가드에 `.gitignore` 원인 추가** | ubisam-qa.md, harness-ptop.md | 기존 가드는 대괄호만 원인으로 지목. 그런데 `rg` 는 `.gitignore` 를 존중하고 **검증 대상이 전부 무시 대상**(`docs/[Ubisam산출물]/`·`_workspace/`)이라 자기 산출물 검색이 0건이 된다(실측: 루트 glob 0 vs 실제 5) | | 2026-08-03 | `SendMessage` 회신 대상 `to: "main"` 명시 | 에이전트 6 | 6개 모두 "오케스트레이터에 보고한다"고 쓰면서 수신자 표기가 **전 저장소 0건**. 이름으로 보내면 메인 대화에 닿지 않는다 | | 2026-08-03 | 부분 상태(`01`만 있음) 분기 신설 + "전체 분석"을 이동 근거에서 제외 | orchestrate-ptop-harness, ubisam-deliverable-rebuild, test-scenarios.md | `01`만 있는 상태에 분기가 없고, "전체 분석"이 최초 실행과 전면 재실행에서 같은 발화라 `_workspace_prev/` 오이동 위험 | | 2026-08-03 | rebuild Phase 2에 **문서 1건당 producer 1기동** 명시 | ubisam-deliverable-rebuild | producer를 하나만 띄우면서 "문서 1건마다 qa"를 요구해 점진 검증의 관측점이 없었음 | | 2026-08-03 | **"소비처 확인 의무" 절 신설** (열거형·개수 변경 시 grep) | docs/harness-ptop.md | 4라운드 연속 같은 유형의 자체 유발 회귀 — 값을 늘리고 읽는 쪽을 안 고침. 개별 결함만 고치면 재발하므로 절차를 명문화 | | 2026-08-03 | 실행 모드 `이어서` 의 **소비처 신설** (전달부·`ptop-lead`를 3종→4종) | orchestrate-ptop-harness, ptop-lead | 신규 모드가 판별부에만 있고 소비처 0건 → 임의로 `전면` 매핑 시 재사용 대상 `01`이 `_workspace_prev/`로 사라짐 | | 2026-08-03 | `_progress.md` 행 단위를 `{에이전트}:{문서}` 로 정정 | ubisam-deliverable-rebuild | "3행 고정"인데 문서 N건이면 인스턴스가 3N개 → 문서별 재시도 상한이 무력화 | | 2026-08-03 | `AddSubMenu` 계수 규칙 정정 (26 → **활성 18**), 8탭 중 누락 4탭 행 추가 | ptop-deliverables/references/source-map.md | 26건에 주석 8건이 포함돼 형제 행(주석 제외 규칙)과 상충. `OverView`·`DeviceView`·`SettingView`·`VisionView` 는 진실원 행 자체가 없었음(`OverView` 는 대응 항목 미확인으로 표기) | | 2026-08-03 | `RegisterViews — 권한 레벨 포함` → **권한 필드 없음**으로 정정 | ptop-deliverables/SKILL.md | `AuthLevel` 을 참조 맵에서 지웠으나 STEP 1이 여전히 추출을 명령. STEP 1이 참조 맵보다 먼저 읽힌다 | | 2026-08-03 | `doyeon_note` 에 규약 바인딩(#3·#4·#9·#15·#16) 추가 | doyeon_note/SKILL.md | 유일하게 `rules.md` 인용 0건. 작업일지는 나중에 사실 기록으로 인용되므로 추론 혼입 위험이 크다 | | 2026-08-04 | **19R 수정 패스.** `MainMenu` `PermissionLevel` 인자 존재로 정정(18R N-1 오정정 되돌림) | ptop-deliverables/SKILL.md·source-map.md | `AddSubMenu`(2인자)만 보고 "권한 필드 없음"이라 선언했으나 `EquipmentSetup.cs:261,266,289,302,310,318,323,330` 8건이 값 보유. 소비처(`09-pptx-integration.md:55`·`build_02설계_pptx.py:92`)의 `권한` 열이 굶고 있었음 | | 2026-08-04 | §C 8탭 3중 모순 해소 + **상위 진실원 명시** | source-map.md | `VisionView`→`(해당없음)`(`EquipmentSetup.cs:342-343` 주석 확인), `OverView` 진실원→`docs/architecture.md`, `DeviceView`→Monitoring 3뷰 병기. 탭 목록의 진실원이 `05-form-schemas.md:78-85` 임을 명문화 | | 2026-08-04 | `.gitignore` negation 주석을 **실측대로 정정**(git 전용, ripgrep 무효) | .gitignore, ubisam-qa.md | negation 투입 후에도 `rg --files .claude`=1 / `--no-ignore`=57. 주석대로 믿으면 다음 감사관이 `Grep path:".claude"` 를 재신뢰 | | 2026-08-04 | `_workspace/`(경로 명시 시 정상) ↔ `.claude/`(루트 시작점이면 프루닝) **증상 분리** | harness-ptop.md, ubisam-qa.md | 두 증상을 같은 원인으로 묶어 진단하던 문구가 `_workspace/`에 불필요한 `--no-ignore` 를 요구 | | 2026-08-04 | `알려진 한계 2가지`→`3가지` + 소비처 표에 **"자기 문단의 리드 개수어"** 행 신설 | harness-ptop.md | 5라운드 연속 미수정. 개별 수정으로는 안 끊겨 회귀 유형 자체를 표에 등재 | | 2026-08-04 | Ubisam Phase 1·2 전달 항목에 **실행 모드 추가**, 3인에 모드 수신 규칙 이식 | rebuild/SKILL.md, ubisam-analyst·producer·qa | 모드 판별이 승인 목록 산정에만 쓰이고 이동·재사용 결정에 도달하지 못했음(`이어서` 소비처 0건) | | 2026-08-04 | `이어서`·`부분`이면 **기동 대상도 축소**한다는 규칙 신설 | orchestrate/SKILL.md | 모드가 바꾸는 것이 이동 여부뿐이라 "없는 것만 생성" 정의가 미시행 | | 2026-08-04 | `SendMessage` **`summary` 필수** 명시(에이전트 6) + Phase 3 developer `run_in_background: true` | 에이전트 6, orchestrate/SKILL.md | 실제 스키마상 `summary`는 필수이고 `to:"main"`은 백그라운드 전용 — 전경 기동 시 회신 경로가 막힘 | | 2026-08-04 | 단독 기동 stale 절·`rules.md` #1 을 형제 스킬 2종에 이식 | analyze-ptop-implementation, optimize-ptop-build, analyze-ptop-architecture | "빌드 분석만 다시"가 후속 트리거인데 표기 주체가 `analyze-ptop-architecture` 에만 있었음 | | 2026-08-04 | `PLCContoller.Config.cs` 역할 정정, `DefineConstants` 단정에 **PTOP csproj 기준** 한정 | ptop-developer.md, build-devops-engineer.md | 전자는 18줄 빈 파일인데 "주소 맵핑"으로 안내(형제 문서와 정반대). 후자는 저장소 전체에 `_NO_USE_*`·`USE_COGNEX` 가 실재하는데 에이전트가 자기 스킬보다 넓게 단정 | | 2026-08-04 | **모션 보드 벤더 주의문을 IO 보드로 정정** | source-map.md | `eIOBoardType`(Ajin·PAIX·ACS)은 `AuroraIO/IODevice.cs:18` 소속이고 `AuroraMotionBoard` 는 `Ajin/` 구현뿐 — 금지문이 IO와 모션을 혼동해 `architecture.md:133` 을 거짓 위반으로 만들고 있었음 | | 2026-08-04 | 디바이스 "5종 전수" → **활성 3 + 주석 3(상태감시는 살아 있음)** | ptop-lead.md | 활성 `registry.Register` 3건인데 5종 파악을 요구. `AddDeviceActiveStatus`(`:70-71`) 때문에 "미사용" 단정도 불가 | | 2026-08-04 | `render_helpers.py` 크래시 수정 + 출력 경로·실행 예 정정 | ui_layout_image/render_helpers.py | `os.makedirs('')` → `FileNotFoundError`(파일명만 준 경우). `_demo.png` 가 스킬 폴더로 새고 있었고 docstring 이 맨 파일명 실행을 지시 | | 2026-08-04 | 유형 뱃지 중복 2행 삭제(11→**9**), `TODAY` 출처 정정, ppt spec 예시 실명 제거 | design-system.md, 05-form-schemas.md, ubisam-ppt-make/SKILL.md | 뱃지가 enum 9종과 불일치, `TODAY`는 `xlsxfill.py` 가 아니라 `build_02설계_xlsx.py:41`, spec 예시의 타 프로젝트 조직·담당자가 복사 유발 | | 2026-08-04 | `README.md` 디자인 지시를 §7 부재에 맞게 재작성 | ubisam-deliverables/SKILL.md | `08-design-system.md:98` §7 은 `_task.md` 전용 — README 골격이 없는데 적용을 명령 | | 2026-08-04 | **200줄 상한 복구** — 변경 이력 분리, 보고서 골격·프로토콜을 `references/` 로 | harness-ptop.md, orchestrate/SKILL.md, rebuild/SKILL.md | 감사 중 수정으로 202·201줄 발생(`rules.md` #4 자기 위반). 본 파일도 200줄에 도달해 이력 추가가 불가능했음 | | 2026-08-04 | **20R.** `부분` 모드를 기동 축소 조건에서 제외 + 생략 시 완료 판정 대체 규칙 신설 | orchestrate/SKILL.md, references/mode-rules.md | **19R 수정이 만든 seam(A·B 둘 다 Major 지목).** `부분`은 지목 에이전트를 *다시 돌리는* 모드인데 산출물이 있다는 이유로 생략해 **0기동**이 됐고, `이어서`에서 lead를 생략하면 Phase 3이 오지 않을 알림을 무기한 대기했다 | | 2026-08-04 | `PLCContoller.Config.cs` 역할 정정을 **`analyze-ptop-architecture` 에도** 반영 | analyze-ptop-architecture/SKILL.md | 19R이 `ptop-developer.md` 만 고치고 같은 서술의 **다른 사본**을 놓쳤다. 하필 `ptop-lead` 가 "먼저 읽는다"고 지정한 스킬 | | 2026-08-04 | 하네스 문서 상호 인용을 **라인 번호 → 앵커 문자열**로 전환 | source-map.md, harness-ptop.md | `05-form-schemas.md:78-85` 가 같은 배치의 2줄 추가로 어긋나 정정 대상 `VisionView` 를 범위 밖으로 밀어냈다. 소비처 표에 "라인 드리프트" 행 신설 | | 2026-08-04 | 조건부서식 상수 소재 정정 (`xlsxfill.py` 에 **없다** — 관련 API 0건) | 00-harness.md | 계약 문서가 `ubisam-producer.md` 와 정반대를 적었고, 계약이 먼저 읽힌다 | | 2026-08-04 | 박제된 `rg` 실측치(57) → **재현 명령과 관계(1 ≪ 전체)** 로 교체 | harness-ptop.md, ubisam-qa.md, .gitignore | 파일이 늘어 59가 되며 드리프트. 숫자를 문서에 박는 구조 자체가 원인이라 숫자를 없앴다 | | 2026-08-04 | `test-scenarios` 개수 선언 `1+1` → **4흐름**, `_progress.md` 행 초기화에 `생략` 상태 추가 | orchestrate/SKILL.md | 19R이 신설한 "리드 개수어" 규칙의 자기 위반. 축소 기동과 3행 초기화가 미정합 | | 2026-08-04 | Ubisam producer·qa 기동에 `run_in_background: true` | rebuild/SKILL.md | `to:"main"` 은 백그라운드 전용인데 19R이 PTOP Phase 3 에만 적용 | | 2026-08-04 | 디바이스 5종 나열 잔여분 정정, 200줄 문구 앵커 5건, `build_deck.py`·`showcase.json` 실명 20건 → 플레이스홀더, `__pycache__` 3건 삭제 | ptop-lead.md 외 8건 | 19R 정정이 같은 파일 앞부분·형제 파일에 남긴 잔여 | | 2026-08-04 | 모드 규칙을 `references/mode-rules.md` 로 분리 (208 → 200줄 이하) | orchestrate/SKILL.md | 위 수정으로 `rules.md` #4 재위반 | | 2026-08-04 | **21R.** 원장 상태 enum **정의부**에 `생략` 추가 (3 → 4종) | references/data-protocol.md, orchestrate/SKILL.md, mode-rules.md | **20R 수정이 쓰는 쪽(Phase 분기)만 고치고 정의부를 안 고쳤다** — A·B 둘 다 지목. 정의부에 없으면 기록 주체가 애초에 안 적어 19R 교착이 재발한다 | | 2026-08-04 | `생략` 을 **모드 무관 "이번 실행에서 기동하지 않음"** 으로 일반화 | data-protocol.md, mode-rules.md, orchestrate/SKILL.md | `이어서` 에만 부여돼 `부분` 의 미지목 에이전트 상태가 미정의였고, Phase 4 생략 분기가 안 걸려 교차 질문이 불필요하게 `미검증` 으로 떨어졌다 | | 2026-08-04 | 생략 대상 표에 `ptop-developer` 추가 (2인 → **3인 전원**) | mode-rules.md | lead·build만 열거해 `이어서` 에서 developer 가 중복 기동 | | 2026-08-04 | 마지막 `.md:NN` 상호 인용을 앵커로 전환 — **살아 있는 라인 인용 0건** | source-map.md | 20R이 세운 앵커 정책의 유일한 미적용 지점. 이로써 라인 드리프트 결함 유형이 종료된다 | | 2026-08-04 | **"열거형 정의부 먼저" 규칙 신설** (① 정의한 표 → ② 기록하는 곳 → ③ 읽는 곳) | docs/harness-ptop.md | 6라운드 연속 같은 유형이 재발한 근본 원인. 개별 결함만 고쳐서는 안 끊겨 순서를 명문화 | | 2026-08-04 | `xlsxfill.py` 타 프로젝트명(공소수정기·FMM) 제거 + 맨 파일명 실행 지시 정규화 | references/xlsxfill.py | 형제 3곳은 이미 전체 경로로 정규화됐는데 이 파일만 남아 있었다 | | 2026-08-04 | rebuild qa 기동 문장에 `run_in_background: true` (잔여 seam) | rebuild/SKILL.md | 20R이 규칙은 넣고 **같은 파일의 재기술 문장**을 안 고쳤다 | | 2026-08-04 | `build-devops-engineer` 자기모순 해소 ("lead 지시 대기 안 함" ↔ "lead 지시에 따라 수행") | build-devops-engineer.md | 기동 주체가 오케스트레이터 전담으로 바뀐 뒤 §역할 문구가 옛 전제를 유지 | | 2026-08-04 | **22R.** Phase 3에 **developer 자신을 생략하는 분기** 신설 | orchestrate/SKILL.md, mode-rules.md | **21R 수정이 위임만 하고 수신처를 만들지 않았다**(A·B 둘 다 Major). `mode-rules.md` 가 "Phase 3에서 판단"으로 넘겼는데 Phase 3에 분기가 0건 → `생략` 으로 적어 둔 developer 가 실제 기동돼 원장이 거짓이 되고 `02`·`03` 을 덮어썼다 | | 2026-08-04 | Phase 4를 **`완료`/`실패`/`생략` 3분기**로 분리 | orchestrate/SKILL.md, references/collection-rules.md | "실패·미기동"을 한 처리로 묶어 `부분`·`이어서` 실행이 **매번** 교차 질문 2건을 통째로 `미검증` 으로 떨어뜨렸다. `생략` 은 산출물이 실재하므로 파일을 읽어 답할 수 있다 | | 2026-08-04 | 성공 기준의 `미검증` 대체 조건에 `생략` 경로 추가 | orchestrate/SKILL.md | "실패했으면"만 허용해 `부분` 실행이 **자기 성공 기준을 충족할 수 없었다** | | 2026-08-04 | 기동 축소 기준을 **모드별로 분리 서술** (`이어서`=산출물 유무 / `부분`=지목 여부) | orchestrate/SKILL.md, mode-rules.md | 본문이 "`부분`에는 적용하지 않는다"로만 적혀 §Phase 1-5의 `생략` 기록 지시와 표면 모순으로 읽혔다 | | 2026-08-04 | 앵커 오지정 정정 — `ubisam-format-map` §5 → **§6** | source-map.md | 21R이 라인 인용을 앵커로 바꾸며 절 번호를 확인하지 않았다. **앵커 전환도 검증이 필요하다**는 실증 | | 2026-08-04 | `test-scenarios.md` 부분 재실행 흐름에 **원장 `생략` 기록·Phase 3 스킵·Phase 4 3분기** 단계 추가 | references/test-scenarios.md | `생략` 분기의 유일한 end-to-end 검증점이 비어 있었다 | | 2026-08-04 | `build-devops-engineer` `(Phase 3 의존)` 잔여 정정, rebuild analyst 기동에 `run_in_background` | build-devops-engineer.md, rebuild/SKILL.md | build 는 Phase 2 병렬로 선행 의존이 없다(복붙 잔재). analyst 는 단일 문서 시 회신이 막혔다 | | 2026-08-04 | **소비처 확인 의무에 ④ "위임했으면 수신처 확인" + 앵커 전환 시 `grep -n "^## "` 절차** 신설 | docs/harness-ptop.md | 21R의 순서 규칙(①정의→②기록→③읽기)이 "정의부 누락" 유형은 잡았으나, **위임 문자열의 수신처 부재**는 못 잡았다 | | 2026-08-04 | Phase 4 상세를 `references/collection-rules.md` 로 분리 (213 → 200줄) | orchestrate/SKILL.md | 위 수정으로 `rules.md` #4 재위반 | | 2026-08-04 | **23R(최종 수정, 미채점).** `_workspace_prev/` 이동 주체 모순 해소 — 에이전트 정의를 **전면 금지**로 통일 | ptop-lead.md, ubisam-analyst.md, orchestrate/SKILL.md | **B 최상위 결함(잠재 데이터 유실).** 오케스트레이터 문서는 "팀원은 안 한다"인데 lead·analyst 는 "`전면`이면 옮긴다"로 정반대였다. 금지문이 구속 대상의 독서 경로 밖이라 수신처 0건 → 이중 이동 시 병렬로 쓰이던 `04`~`06` 이 딸려간다 | | 2026-08-04 | 모드 판별표를 **두 축(산출물 상태 × 요청 범위)으로 분리** + `생략`인데 파일 부재 시 분기 추가 | references/mode-rules.md | 1열이 두 축을 섞어 **산출물 0건 + "아키텍처만 다시"** 가 `초기`·`부분` 양쪽에 매치했다(현재 저장소가 정확히 그 상태) | | 2026-08-04 | 파일 이동으로 끊긴 인용 복구 — 교차 확인 질문 정의처를 `collection-rules.md` §교차 확인 질문으로 | ptop-lead.md | **22R의 파일 분리가 끊은 인용.** 답할 주체가 지목된 곳(`SKILL.md` Phase 4)을 열면 질문이 없었다 | | 2026-08-04 | 복붙 쌍둥이 자기모순 해소 — `ptop-developer.md` "lead 지시를 기다리지 않는다" ↔ "lead 지시를 받아 수행" | ptop-developer.md | 22R이 `build-devops-engineer.md` 만 고치고 세 줄 간격의 쌍둥이를 놓쳤다 | | 2026-08-04 | `mode-rules.md` 리드 문장을 표와 정합("`이어서`에서만" → 모드별 기준), Phase 3 전방 참조, 승인 ④에 stale 편집 편입 | mode-rules.md, orchestrate/SKILL.md | 표는 고쳤는데 그 위 요약문이 옛말로 남아 정면 충돌. 무조건 기동 문장이 생략 분기보다 앞. stale 편집이 승인 4항 어디에도 없었다 | | 2026-08-04 | `이어서` 수신 블록을 `ptop-developer`·`build-devops-engineer` 에 신설 | 에이전트 2 | Phase 2가 모드 4종을 전원에게 전달하는데 수신 블록은 lead 에만 있었다(문자열 각 0건) | | 2026-08-04 | **⑤~⑦ 재발 방지 규칙 신설** + 앵커 검출 명령을 `^#{2,4} \|^> \*\*` 로 확장 | docs/harness-ptop.md | ⑤ 금지·전담 지정 시 그 주체의 정의 파일 확인 ⑥ 절을 옮겼으면 제목을 `grep -rn` ⑦ 리드 문장·복붙 쌍둥이 동반 수정. `grep -n "^## "` 로는 하네스 자신의 앵커 4종이 검출되지 않았다 | | 2026-08-04 | `harness-ubisam.md` 200줄 문구 앵커 부착·자기 서술 정정, `protocol.md` 베어 `_workspace/` 경로 명시 | harness-ubisam.md, protocol.md | 21R P3 2R 연속 미이행. PTOP 하네스의 동명 폴더와 혼동 소지 |