LGES-OC5-PtoP-Welder/docs/harness-ptop-changelog.md
2026-08-06 11:29:00 +09:00

113 lines
28 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 하네스 변경 이력 — 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 하네스의 동명 폴더와 혼동 소지 |