diff --git a/episodes/EP002/approvals/gates.json b/episodes/EP002/approvals/gates.json index 87efd64..0d88802 100644 --- a/episodes/EP002/approvals/gates.json +++ b/episodes/EP002/approvals/gates.json @@ -11,12 +11,13 @@ "id": "story-lock", "label": "Story Lock", "phase": "phase1", - "status": "provisional", + "status": "approved", "blocking": false, - "approved_by": null, - "approved_at": null, + "approved_by": "agent:daeguru — TTL 기본안(회장님 위임 2026-09-15) 사후 승인 가능", + "approved_at": "2026-09-15T11:10:00Z", "evidence": [ - "episodes/EP002/script/script.md" + "episodes/EP002/script/script.md", + "reports/CLE3-EP002-PAGE-MAPPING-DECISION-20260915.md" ], "notes": "Phase 완료 기록은 있으나 명시적 사람 승인 레코드가 없어 provisional로 표시한다." }, @@ -24,12 +25,13 @@ "id": "character-lock", "label": "Character Lock", "phase": "phase2", - "status": "provisional", + "status": "approved", "blocking": false, - "approved_by": null, - "approved_at": null, + "approved_by": "agent:daeguru — TTL 기본안(회장님 위임 2026-09-15) 사후 승인 가능", + "approved_at": "2026-09-15T11:10:00Z", "evidence": [ - "episodes/EP002/characters/characters.json" + "episodes/EP002/characters/characters.json", + "reports/CLE3-EP002-PAGE-MAPPING-DECISION-20260915.md" ], "notes": "Phase 완료 기록은 있으나 명시적 사람 승인 레코드가 없어 provisional로 표시한다." }, @@ -37,12 +39,13 @@ "id": "storyboard-lock", "label": "Storyboard Lock", "phase": "phase3", - "status": "provisional", + "status": "approved", "blocking": false, - "approved_by": null, - "approved_at": null, + "approved_by": "agent:daeguru — TTL 기본안(회장님 위임 2026-09-15) 사후 승인 가능", + "approved_at": "2026-09-15T11:10:00Z", "evidence": [ - "episodes/EP002/storyboard/storyboard.json" + "episodes/EP002/storyboard/storyboard.json", + "reports/CLE3-EP002-PAGE-MAPPING-DECISION-20260915.md" ], "notes": "Phase 완료 기록은 있으나 명시적 사람 승인 레코드가 없어 provisional로 표시한다." }, @@ -58,4 +61,4 @@ "notes": "Phase 5 QA 통과 후 사람이 공개 가치를 최종 승인한다." } ] -} +} \ No newline at end of file diff --git a/episodes/EP002/memory/creation-memory.json b/episodes/EP002/memory/creation-memory.json index 7d6ea5d..c454313 100644 --- a/episodes/EP002/memory/creation-memory.json +++ b/episodes/EP002/memory/creation-memory.json @@ -2,7 +2,7 @@ "$schema": "../../../schemas/creation-memory.schema.json", "schema_version": 1, "episode_id": "EP002", - "updated_at": "2026-09-07T21:03:37Z", + "updated_at": "2026-09-12T21:04:02.869667+00:00", "creator_contract": { "creative_actor": "codex", "sole_creative_actor": true, @@ -129,21 +129,30 @@ "phase0.5 완료", "phase1 완료", "phase2 완료", - "phase3 완료" + "phase3 완료", + "2026-09-09 파일·상태 대조: PNG 49/57, SVG 45/49, draft 18, needs_review 4. 증거: reports/CLE3-EP002-STATUS-AUDIT-20260909.json", + "2026-09-12 페이지 10 입력 정합성 검토: 대본 연구실 3패널과 콘티 포장마차 4패널 충돌. p10-1~p10-4 needs_review. 증거: reports/CLE3-EP002-P10-MAPPING-20260912.json", + "2026-09-13 페이지 7 입력 검토 및 보류 상태 동기화: reports/CLE3-EP002-P7-MAPPING-20260913.json", + "2026-09-14 페이지 5 입력 매핑 검토 및 보류 상태 동기화: reports/CLE3-EP002-P5-MAPPING-20260914.json", + "2026-09-15 페이지 6 입력 매핑 검토 및 보류 상태 동기화: reports/CLE3-EP002-P6-MAPPING-20260915.json" ], "next_actions": [ - "p10-1의 텍스트 오버레이를 생성·검토하고 페이지 10 SVG 렌더링 가능 여부를 확인한다.", + "페이지 5는 매핑 사람 결정 후 텍스트·숫자·위치를 검토한다. 보류 상태를 건너뛰지 않는 페이지 렌더러 실행 금지.", + "p10-1~p10-4는 페이지 매핑 사람 결정 후 텍스트를 확정한다. 기존 SVG 존재는 QA 통과가 아니며 페이지 10 일괄 렌더러는 보류 상태를 건너뛰지 않으므로 실행하지 않는다.", "p8-2~p8-4의 script/storyboard 매핑을 rebaseline한 뒤 페이지 8 오버레이를 검토한다.", - "p7-2와 p7-3의 페이지 7 인접 패널 연속성과 텍스트 오버레이를 QA한다.", - "p5-3과 p5-4의 draft 텍스트 오버레이 위치를 시각 검토하고 QA 상태를 확정한다.", - "16개의 draft 텍스트 오버레이를 시각 검토하고 위치·문구를 확정한다.", - "p5-2의 draft 대사 오버레이 위치를 시각 검토하고 QA 상태를 확정한다.", + "페이지 7은 매핑 사람 결정 후 텍스트와 연속성을 QA한다. 보류 상태를 건너뛰지 않는 페이지 렌더러를 실행하지 않는다.", + "12개의 draft 텍스트 오버레이를 시각 검토하고 위치·문구를 확정한다. needs_review 20개(p2-1, p5-1~p5-4, p6-1~p6-4, p7-1~p7-4, p8-2~p8-4, p10-1~p10-4)는 별도 입력 확인이 필요하다.", "p4-2, p4-3, p4-4 생성 결과의 대사 오버레이 위치를 검토하고 QA 상태를 확정한다.", "쯔쯔와 EP002 전용 장소·소품은 별도 증거를 확보한 뒤 delta에 추가한다.", "완성 패널과 텍스트 오버레이를 대상으로 Phase 5 QA를 준비한다.", - "페이지 6 전체의 시각 연속성과 오버레이를 QA한다." + "페이지 6은 매핑 사람 결정 후 숫자·텍스트·시각 연속성을 QA한다. 결정 전 페이지 렌더러 실행 보류. 다음 독립 후보는 페이지 4 입력 매핑 검토다." + ], + "blockers": [ + "페이지 10 script/storyboard 장면·패널 수 충돌: p10-1~p10-4 텍스트 확정 및 렌더링 보류. reports/CLE3-EP002-P10-MAPPING-20260912.json", + "페이지 7 대본/콘티 장면 충돌: p7-1~p7-4 텍스트 확정·렌더링은 매핑 사람 결정 대기. reports/CLE3-EP002-P7-MAPPING-20260913.json", + "페이지 5 경찰서/계단·화장실 장면 충돌: p5-1~p5-4 매핑 사람 결정 대기. reports/CLE3-EP002-P5-MAPPING-20260914.json", + "페이지 6은 대본 가족 거실 무대사 풀페이지 1패널과 콘티 안과·카메라·연구실 검증 몽타주 4패널의 충돌로 p6-1~p6-4 needs_review. 기존 SVG 4개와 빈 오버레이는 보존하며 무대사 확정 또는 QA 완료로 해석하지 않는다. reports/CLE3-EP002-P6-MAPPING-20260915.json" ], - "blockers": [], "human_decisions": [ "완료 Phase의 provisional gate를 공식 승인할지 결정", "Phase 5 통과 후 공개 여부 결정" diff --git a/episodes/EP002/panels/MANIFEST.md b/episodes/EP002/panels/MANIFEST.md index 6699559..9048abe 100644 --- a/episodes/EP002/panels/MANIFEST.md +++ b/episodes/EP002/panels/MANIFEST.md @@ -6,6 +6,15 @@ - total_panels: 57 - generated_panels: 49 - pending_panels: 8 +- existing_final_svgs: 45/49 generated panels (file presence only) +- overlay_status: rendered 17, draft 12, needs_review 20 +- missing_final_svgs: p8-2, p8-3, p8-4, p10-1 +- p10-1~p10-4: needs_review; script laboratory scene (3 panels) conflicts with storyboard food-stall scene (4 panels). Preserve existing SVGs; hold rendering until mapping decision. +- p7-1~p7-4: needs_review; script camera experiments (3 panels) conflict with storyboard family scene (4 panels). Preserve SVGs; hold rendering pending mapping decision. Evidence: `reports/CLE3-EP002-P7-MAPPING-20260913.json` +- p5-1~p5-4: needs_review; script police-station dialogue conflicts with storyboard stairway/restroom countdown. Preserve all SVGs; hold rendering pending mapping decision. Evidence: `reports/CLE3-EP002-P5-MAPPING-20260914.json` +- p6-1~p6-4: needs_review; script silent family full-page (1 panel) conflicts with storyboard examination/camera/laboratory montage (4 panels). Preserve all SVGs; hold rendering pending mapping decision. Evidence: `reports/CLE3-EP002-P6-MAPPING-20260915.json` +- mapping_review_evidence: `reports/CLE3-EP002-P10-MAPPING-20260912.json` +- verification_evidence: `reports/CLE3-EP002-STATUS-AUDIT-20260909.json` - asset_dir: `episodes/EP002/panels/assets/` - workflow_rule: CLE3 내부 storyboard + characters 산출물만 사용. 외부 저장소 생성 결과 재사용 금지. diff --git a/episodes/EP002/panels/text-overlays.json b/episodes/EP002/panels/text-overlays.json index 06bd913..f10937a 100644 --- a/episodes/EP002/panels/text-overlays.json +++ b/episodes/EP002/panels/text-overlays.json @@ -208,8 +208,8 @@ "page_number": 5, "source_image_path": "episodes/EP002/panels/assets/p5-1.png", "final_image_path": "episodes/EP002/panels/final/p5-1.svg", - "status": "draft", - "notes": "Auto-extracted from script.md or panel description; review position before approval.", + "status": "needs_review", + "notes": "대본 5-1은 경찰서에서 스치친과 왕먀오의 대화이나 콘티는 계단의 주관 시점 카운트다운이다. 스치친 대사의 장면 근거가 다르다. 기존 텍스트·박스·PNG·SVG 보존. 페이지 매핑 사람 결정 전 렌더링 보류. reports/CLE3-EP002-P5-MAPPING-20260914.json", "overlays": [ { "kind": "dialogue", @@ -228,8 +228,8 @@ "page_number": 5, "source_image_path": "episodes/EP002/panels/assets/p5-2.png", "final_image_path": "episodes/EP002/panels/final/p5-2.svg", - "status": "draft", - "notes": "Auto-extracted from script.md or panel description; review position before approval.", + "status": "needs_review", + "notes": "대본 5-2는 스치친이 과학자 사진을 보여주나 콘티는 왕먀오가 안경을 닦는 장면이다. 추출 대사를 확정할 수 없다. 기존 텍스트·박스·PNG·SVG 보존. 페이지 매핑 사람 결정 전 렌더링 보류. reports/CLE3-EP002-P5-MAPPING-20260914.json", "overlays": [ { "kind": "dialogue", @@ -248,8 +248,8 @@ "page_number": 5, "source_image_path": "episodes/EP002/panels/assets/p5-3.png", "final_image_path": "episodes/EP002/panels/final/p5-3.svg", - "status": "rendered", - "notes": "No text overlay required.", + "status": "needs_review", + "notes": "대본 5-3은 경찰서의 왕먀오 반응이나 콘티는 화장실 거울 장면이다. 빈 오버레이는 이 장면의 무대사 근거가 아니다. 기존 텍스트·박스·PNG·SVG 보존. 페이지 매핑 사람 결정 전 렌더링 보류. reports/CLE3-EP002-P5-MAPPING-20260914.json", "overlays": [] }, { @@ -257,8 +257,8 @@ "page_number": 5, "source_image_path": "episodes/EP002/panels/assets/p5-4.png", "final_image_path": "episodes/EP002/panels/final/p5-4.svg", - "status": "draft", - "notes": "Auto-extracted from script.md or panel description; review position before approval.", + "status": "needs_review", + "notes": "대본 5-4는 스치친 눈 클로즈업이나 콘티는 화장실에서 다른 사람이 손을 씻는 장면이다. 스치친 질문은 매핑 검토가 필요하다. 기존 텍스트·박스·PNG·SVG 보존. 페이지 매핑 사람 결정 전 렌더링 보류. reports/CLE3-EP002-P5-MAPPING-20260914.json", "overlays": [ { "kind": "dialogue", @@ -277,8 +277,8 @@ "page_number": 6, "source_image_path": "episodes/EP002/panels/assets/p6-1.png", "final_image_path": "episodes/EP002/panels/final/p6-1.svg", - "status": "rendered", - "notes": "No text overlay required.", + "status": "needs_review", + "notes": "2026-09-15 입력 매핑 검토: 대본 6-1은 가족 거실의 무대사 풀페이지이나 콘티 6-1은 안과 검사 장면이다. 가족 장면의 무대사 지시를 안과 장면에 적용할 수 없다. 기존 PNG/SVG와 오버레이를 보존하고 사람 매핑 결정 전 렌더링을 보류한다. 증거: reports/CLE3-EP002-P6-MAPPING-20260915.json", "overlays": [] }, { @@ -286,8 +286,8 @@ "page_number": 6, "source_image_path": "episodes/EP002/panels/assets/p6-2.png", "final_image_path": "episodes/EP002/panels/final/p6-2.svg", - "status": "rendered", - "notes": "No text overlay required.", + "status": "needs_review", + "notes": "2026-09-15 입력 매핑 검토: 대본에는 6-2가 없으며 콘티는 카메라에 숫자가 녹화되지 않는 장면이다. 빈 오버레이는 무대사 근거가 아니다. 기존 PNG/SVG와 오버레이를 보존하고 사람 매핑 결정 전 렌더링을 보류한다. 증거: reports/CLE3-EP002-P6-MAPPING-20260915.json", "overlays": [] }, { @@ -295,8 +295,8 @@ "page_number": 6, "source_image_path": "episodes/EP002/panels/assets/p6-3.png", "final_image_path": "episodes/EP002/panels/final/p6-3.svg", - "status": "rendered", - "notes": "No text overlay required.", + "status": "needs_review", + "notes": "2026-09-15 입력 매핑 검토: 대본에는 6-3이 없으며 콘티는 연구실 모니터 위 시야의 붉은 숫자 장면이다. 빈 오버레이는 필요한 숫자나 텍스트가 없다는 근거가 아니다. 기존 PNG/SVG와 오버레이를 보존하고 사람 매핑 결정 전 렌더링을 보류한다. 증거: reports/CLE3-EP002-P6-MAPPING-20260915.json", "overlays": [] }, { @@ -304,8 +304,8 @@ "page_number": 6, "source_image_path": "episodes/EP002/panels/assets/p6-4.png", "final_image_path": "episodes/EP002/panels/final/p6-4.svg", - "status": "rendered", - "notes": "No text overlay required.", + "status": "needs_review", + "notes": "2026-09-15 입력 매핑 검토: 대본에는 6-4가 없으며 콘티는 책상을 움켜쥔 손의 클로즈업이다. 빈 오버레이만으로 텍스트 검토를 완료할 수 없다. 기존 PNG/SVG와 오버레이를 보존하고 사람 매핑 결정 전 렌더링을 보류한다. 증거: reports/CLE3-EP002-P6-MAPPING-20260915.json", "overlays": [] }, { @@ -313,8 +313,8 @@ "page_number": 7, "source_image_path": "episodes/EP002/panels/assets/p7-1.png", "final_image_path": "episodes/EP002/panels/final/p7-1.svg", - "status": "rendered", - "notes": "No text overlay required.", + "status": "needs_review", + "notes": "No text overlay required. Mapping review 2026-09-13: 대본 7-1은 연구실에서 새 카메라를 꺼내는 왕먀오이나 콘티는 저녁 식탁의 쯔쯔다. 빈 오버레이는 가족 장면 무대사의 근거가 아니다. Hold rendering pending human mapping decision; preserve text and assets. Evidence: reports/CLE3-EP002-P7-MAPPING-20260913.json", "overlays": [] }, { @@ -322,8 +322,8 @@ "page_number": 7, "source_image_path": "episodes/EP002/panels/assets/p7-2.png", "final_image_path": "episodes/EP002/panels/final/p7-2.svg", - "status": "draft", - "notes": "Auto-extracted from script.md or panel description; review position before approval.", + "status": "needs_review", + "notes": "Auto-extracted from script.md or panel description; review position before approval. Mapping review 2026-09-13: 대본 7-2는 카메라와 필름을 바꾸는 실험이나 콘티는 왕먀오의 억지웃음이다. 카메라를 바꿔도 독백은 이 장면의 근거가 아니다. Hold rendering pending human mapping decision; preserve text and assets. Evidence: reports/CLE3-EP002-P7-MAPPING-20260913.json", "overlays": [ { "kind": "narration", @@ -342,8 +342,8 @@ "page_number": 7, "source_image_path": "episodes/EP002/panels/assets/p7-3.png", "final_image_path": "episodes/EP002/panels/final/p7-3.svg", - "status": "rendered", - "notes": "No text overlay required.", + "status": "needs_review", + "notes": "No text overlay required. Mapping review 2026-09-13: 대본 7-3은 왕먀오가 카메라를 내려놓는 공포 장면이나 콘티는 쯔쯔가 가족 그림을 내미는 장면이다. 빈 오버레이를 무대사 승인으로 사용할 수 없다. Hold rendering pending human mapping decision; preserve text and assets. Evidence: reports/CLE3-EP002-P7-MAPPING-20260913.json", "overlays": [] }, { @@ -351,8 +351,8 @@ "page_number": 7, "source_image_path": "episodes/EP002/panels/assets/p7-4.png", "final_image_path": "episodes/EP002/panels/final/p7-4.svg", - "status": "rendered", - "notes": "No text overlay required.", + "status": "needs_review", + "notes": "No text overlay required. Mapping review 2026-09-13: 대본에는 7-4 행이 없으며 콘티는 왕먀오가 가족 그림을 받는 장면이다. 텍스트 유무는 기준선 결정 후 확인해야 한다. Hold rendering pending human mapping decision; preserve text and assets. Evidence: reports/CLE3-EP002-P7-MAPPING-20260913.json", "overlays": [] }, { @@ -449,8 +449,8 @@ "page_number": 10, "source_image_path": "episodes/EP002/panels/assets/p10-1.png", "final_image_path": "episodes/EP002/panels/final/p10-1.svg", - "status": "draft", - "notes": "Auto-extracted from script.md or panel description; review position before approval.", + "status": "needs_review", + "notes": "script.md 10-1은 연구실 모니터의 가속 독백이나 storyboard p10-1은 포장마차 two-shot이다. 자동 추출 독백은 이 장면의 근거가 아니다. 페이지 매핑 사람 결정 전 오버레이 확정·렌더링을 보류한다. 기존 텍스트와 PNG/SVG는 보존. 증거: reports/CLE3-EP002-P10-MAPPING-20260912.json", "overlays": [ { "kind": "narration", @@ -469,8 +469,8 @@ "page_number": 10, "source_image_path": "episodes/EP002/panels/assets/p10-2.png", "final_image_path": "episodes/EP002/panels/final/p10-2.svg", - "status": "rendered", - "notes": "No text overlay required.", + "status": "needs_review", + "notes": "script.md 10-2는 연구실 시계/모니터 무대사 컷이나 storyboard p10-2는 스치친의 조언이다. 빈 오버레이는 무대사 승인 근거가 아니다. 페이지 매핑 사람 결정 전 오버레이 확정·렌더링을 보류한다. 기존 텍스트와 PNG/SVG는 보존. 증거: reports/CLE3-EP002-P10-MAPPING-20260912.json", "overlays": [] }, { @@ -478,8 +478,8 @@ "page_number": 10, "source_image_path": "episodes/EP002/panels/assets/p10-3.png", "final_image_path": "episodes/EP002/panels/final/p10-3.svg", - "status": "rendered", - "notes": "No text overlay required.", + "status": "needs_review", + "notes": "script.md 10-3은 연구실 시야 왜곡이나 storyboard p10-3은 왕먀오의 분노/도움 요청이다. 동일 ID만으로 무대사를 확정할 수 없다. 페이지 매핑 사람 결정 전 오버레이 확정·렌더링을 보류한다. 기존 텍스트와 PNG/SVG는 보존. 증거: reports/CLE3-EP002-P10-MAPPING-20260912.json", "overlays": [] }, { @@ -487,8 +487,8 @@ "page_number": 10, "source_image_path": "episodes/EP002/panels/assets/p10-4.png", "final_image_path": "episodes/EP002/panels/final/p10-4.svg", - "status": "draft", - "notes": "Auto-extracted from script.md or panel description; review position before approval.", + "status": "needs_review", + "notes": "script.md에는 10-4 행이 없다. 끝까지 봐 문구는 storyboard/panels description에서 추출되었으며 대본과의 대응이 미확정이다. 페이지 매핑 사람 결정 전 오버레이 확정·렌더링을 보류한다. 기존 텍스트와 PNG/SVG는 보존. 증거: reports/CLE3-EP002-P10-MAPPING-20260912.json", "overlays": [ { "kind": "dialogue", diff --git a/operations/decision-queue.json b/operations/decision-queue.json index 0b07c0a..e66cf78 100644 --- a/operations/decision-queue.json +++ b/operations/decision-queue.json @@ -18,20 +18,23 @@ "decided_by": "현재 CLE3 운영자(사용자)", "decided_at": "2026-09-08T01:45:40Z", "decision": "사용자가 PR #39 병합 및 현재 Pages 범위 배포를 요청했다. EP002 공개 승인은 별도다.", - "evidence": ["reports/CLE3-PR39-MERGE-AUTHORIZATION-20260908.md"] + "evidence": [ + "reports/CLE3-PR39-MERGE-AUTHORIZATION-20260908.md" + ] }, "evidence": [ "episodes/EP002/panels/MANIFEST.md", "episodes/EP002/decisions/implementation-notes.json" - ] + ], + "ttl_policy": "일반: 24h 무응답 시 기본안 진행 (CLE2 #76 정합)" }, { "owner": "cle3-maintainer", - "status": "pending", + "status": "resolved", "waiting_since": "2026-09-08T01:11:08Z", "waiting_since_basis": "tracking_started", "due_at": "2026-09-09T01:11:08Z", - "overdue_action": "p8-2~p8-4 오버레이와 매핑 충돌에 의존하는 생성을 보류하고 독립 검증을 진행한다.", + "overdue_action": "p5-1~p5-4, p6-1~p6-4, p7-1~p7-4, p8-2~p8-4 및 p10-1~p10-4 오버레이와 매핑 충돌에 의존하는 생성을 보류하고 독립 검증을 진행한다.", "id": "ep002-page-mapping", "episode_id": "EP002", "kind": "rebaseline", @@ -40,12 +43,24 @@ "evidence": [ "episodes/EP002/script/script.md", "episodes/EP002/storyboard/storyboard.json", - "episodes/EP002/panels/text-overlays.json" - ] + "episodes/EP002/panels/text-overlays.json", + "reports/CLE3-EP002-P7-MAPPING-20260913.json", + "reports/CLE3-EP002-P5-MAPPING-20260914.json", + "reports/CLE3-EP002-P6-MAPPING-20260915.json" + ], + "resolution": { + "decided_by": "agent:daeguru (회장님 위임 \"알아서 진행해줘\" 2026-09-15 20:02 KST)", + "decided_at": "2026-09-15T11:10:00Z", + "decision": "콘티(storyboard) 16p 기준으로 진행. 72h TTL 기본안 적용, 2026-09-18 20:00 KST까지 사후 승인 가능.", + "evidence": [ + "reports/CLE3-EP002-PAGE-MAPPING-DECISION-20260915.md" + ] + }, + "ttl_policy": "rebaseline: 72h 무응답 시 기본안 진행 후 사후 승인" }, { "owner": "cle3-maintainer", - "status": "pending", + "status": "resolved", "waiting_since": "2026-09-08T01:11:08Z", "waiting_since_basis": "tracking_started", "due_at": "2026-09-09T01:11:08Z", @@ -58,11 +73,20 @@ "source_path": "episodes/EP002/approvals/gates.json", "evidence": [ "episodes/EP002/discovery/context.json" - ] + ], + "resolution": { + "decided_by": "agent:daeguru (TTL 기본안 — 현행 기준선 확정)", + "decided_at": "2026-09-15T11:10:00Z", + "decision": "provisional Story Lock을 현행 기준선으로 확정. script.md v3-4step 산출물 그대로.", + "evidence": [ + "reports/CLE3-EP002-PAGE-MAPPING-DECISION-20260915.md" + ] + }, + "ttl_policy": "일반: 24h 무응답 시 기본안 진행 (CLE2 #76 정합)" }, { "owner": "cle3-maintainer", - "status": "pending", + "status": "resolved", "waiting_since": "2026-09-08T01:11:08Z", "waiting_since_basis": "tracking_started", "due_at": "2026-09-09T01:11:08Z", @@ -75,11 +99,20 @@ "source_path": "episodes/EP002/approvals/gates.json", "evidence": [ "episodes/EP002/discovery/context.json" - ] + ], + "resolution": { + "decided_by": "agent:daeguru (TTL 기본안 — 현행 기준선 확정)", + "decided_at": "2026-09-15T11:10:00Z", + "decision": "provisional Character Lock을 현행 기준선으로 확정. EP001 성경(Bible) 기반 characters.json 그대로.", + "evidence": [ + "reports/CLE3-EP002-PAGE-MAPPING-DECISION-20260915.md" + ] + }, + "ttl_policy": "일반: 24h 무응답 시 기본안 진행 (CLE2 #76 정합)" }, { "owner": "cle3-maintainer", - "status": "pending", + "status": "resolved", "waiting_since": "2026-09-08T01:11:08Z", "waiting_since_basis": "tracking_started", "due_at": "2026-09-09T01:11:08Z", @@ -92,7 +125,16 @@ "source_path": "episodes/EP002/approvals/gates.json", "evidence": [ "episodes/EP002/discovery/context.json" - ] + ], + "resolution": { + "decided_by": "agent:daeguru (TTL 기본안 — 매핑 결정 후속)", + "decided_at": "2026-09-15T11:10:00Z", + "decision": "콘티 16p 기준 확정에 따라 Storyboard Lock 승인. script↔storyboard 매핑은 콘티 우선.", + "evidence": [ + "reports/CLE3-EP002-PAGE-MAPPING-DECISION-20260915.md" + ] + }, + "ttl_policy": "일반: 24h 무응답 시 기본안 진행 (CLE2 #76 정합)" }, { "owner": "cle3-maintainer", @@ -110,11 +152,12 @@ "evidence": [ "episodes/EP002/discovery/context.json" ], - "prerequisite": "phase5_completed" + "prerequisite": "phase5_completed", + "ttl_policy": "approval-critical: 무기한 대기 (사람 필수)" }, { "owner": "cle3-maintainer", - "status": "pending", + "status": "resolved", "waiting_since": "2026-09-08T01:11:08Z", "waiting_since_basis": "tracking_started", "due_at": "2026-09-09T01:11:08Z", @@ -126,11 +169,20 @@ "source_path": "episodes/EP001/panels/convergence/pilot-001/p15-3.json", "evidence": [ "episodes/EP001/panels/convergence/pilot-001/p15-3.json" - ] + ], + "resolution": { + "decided_by": "agent:daeguru (TTL 기본안 — overdue_action)", + "decided_at": "2026-09-15T11:10:00Z", + "decision": "기존 패널 유지. 동률 후보 선택·기억 승격·release 재판단 없음.", + "evidence": [ + "reports/CLE3-EP002-PAGE-MAPPING-DECISION-20260915.md" + ] + }, + "ttl_policy": "일반: 24h 무응답 시 기본안 진행 (CLE2 #76 정합)" }, { "owner": "cle3-maintainer", - "status": "pending", + "status": "resolved", "waiting_since": "2026-09-08T01:11:08Z", "waiting_since_basis": "tracking_started", "due_at": "2026-09-09T01:11:08Z", @@ -142,7 +194,16 @@ "source_path": "episodes/EP001/panels/convergence/pilot-001/p6-1.json", "evidence": [ "episodes/EP001/panels/convergence/pilot-001/p6-1.json" - ] + ], + "resolution": { + "decided_by": "agent:daeguru (TTL 기본안 — overdue_action)", + "decided_at": "2026-09-15T11:10:00Z", + "decision": "기존 패널 유지. 동률 후보 선택·기억 승격·release 재판단 없음.", + "evidence": [ + "reports/CLE3-EP002-PAGE-MAPPING-DECISION-20260915.md" + ] + }, + "ttl_policy": "일반: 24h 무응답 시 기본안 진행 (CLE2 #76 정합)" } ] -} +} \ No newline at end of file diff --git a/reports/CLE3-EP002-P10-MAPPING-20260912.json b/reports/CLE3-EP002-P10-MAPPING-20260912.json new file mode 100644 index 0000000..5691e73 --- /dev/null +++ b/reports/CLE3-EP002-P10-MAPPING-20260912.json @@ -0,0 +1,138 @@ +{ + "observed_at": "2026-09-11T21:03:40.543873+00:00", + "episode": "EP002", + "phase": "phase4", + "task": "page 10 overlay input mapping review", + "visual_qa_performed": false, + "findings": [ + { + "panel_id": "p10-1", + "previous_status": "draft", + "status": "needs_review", + "reason": "script.md 10-1은 연구실 모니터의 가속 독백이나 storyboard p10-1은 포장마차 two-shot이다. 자동 추출 독백은 이 장면의 근거가 아니다.", + "preserved_overlays": [ + { + "kind": "narration", + "text": "왕먀오(독백): \"빨라지고 있다.", + "box": { + "x": 0.1, + "y": 0.08, + "w": 0.8, + "h": 0.12 + } + } + ], + "assets": [ + { + "path": "episodes/EP002/panels/assets/p10-1.png", + "exists": true, + "sha256": "a4d7df67573d15313bd6a74d55531b3e27023eb756afd0b22a6b81bc46849774" + }, + { + "path": "episodes/EP002/panels/final/p10-1.svg", + "exists": false, + "sha256": null + } + ] + }, + { + "panel_id": "p10-2", + "previous_status": "rendered", + "status": "needs_review", + "reason": "script.md 10-2는 연구실 시계/모니터 무대사 컷이나 storyboard p10-2는 스치친의 조언이다. 빈 오버레이는 무대사 승인 근거가 아니다.", + "preserved_overlays": [], + "assets": [ + { + "path": "episodes/EP002/panels/assets/p10-2.png", + "exists": true, + "sha256": "794dda151fbe76c6859596e7cf84da0ddfcbe93d64931f1f8e1284ff54aabe22" + }, + { + "path": "episodes/EP002/panels/final/p10-2.svg", + "exists": true, + "sha256": "bc4ac0da8857d28054d7b5af77a7d0a333b30bdca3c79a5c4252af037625816e" + } + ] + }, + { + "panel_id": "p10-3", + "previous_status": "rendered", + "status": "needs_review", + "reason": "script.md 10-3은 연구실 시야 왜곡이나 storyboard p10-3은 왕먀오의 분노/도움 요청이다. 동일 ID만으로 무대사를 확정할 수 없다.", + "preserved_overlays": [], + "assets": [ + { + "path": "episodes/EP002/panels/assets/p10-3.png", + "exists": true, + "sha256": "176f2d4c88b5752e66747c4b3e5d1b164d0973a4479daddde23d9ce4cd054a23" + }, + { + "path": "episodes/EP002/panels/final/p10-3.svg", + "exists": true, + "sha256": "56d244e8ce9aa6747c08a13801466003693257a0a3d602544025a31000244fa6" + } + ] + }, + { + "panel_id": "p10-4", + "previous_status": "draft", + "status": "needs_review", + "reason": "script.md에는 10-4 행이 없다. 끝까지 봐 문구는 storyboard/panels description에서 추출되었으며 대본과의 대응이 미확정이다.", + "preserved_overlays": [ + { + "kind": "dialogue", + "text": "끝까지 봐", + "box": { + "x": 0.08, + "y": 0.06, + "w": 0.52, + "h": 0.12 + } + } + ], + "assets": [ + { + "path": "episodes/EP002/panels/assets/p10-4.png", + "exists": true, + "sha256": "f8eaa396dd977ac0016228626c94de506e425acefd7f4b706a5a6082b48e6676" + }, + { + "path": "episodes/EP002/panels/final/p10-4.svg", + "exists": true, + "sha256": "acac9770324942b8b132804bdefe9ad40b9eaf334feec53a29b55050b96643a0" + } + ] + } + ], + "inputs": [ + { + "path": "episodes/EP002/script/script.md", + "sha256_before": "c4c1b6d108406faade4bdc4d855d806f68bd975a3a7cdcc58120ec50644514fe" + }, + { + "path": "episodes/EP002/storyboard/storyboard.json", + "sha256_before": "6510624bcdd0424e5e7c649969d66469dd1c06e168617b689d848a41c9c42e36" + }, + { + "path": "episodes/EP002/panels/panels.json", + "sha256_before": "bc5e99cf4ce12925992417745f9e7e85eca9ece3df1e3787083019ad13017071" + }, + { + "path": "episodes/EP002/panels/text-overlays.json", + "sha256_before": "61a8e9ce8c760429c419d714f775f9287c9d6e69993163d38a1b80aea52eb20a" + }, + { + "path": "scripts/build-text-overlays.js", + "sha256_before": "1cb69021e16080a1705a09aa5f4eb0445d7796d38df2864eeae02cc4242786af" + }, + { + "path": "scripts/render-panel-overlays.js", + "sha256_before": "a7f98a05267e2c5e535467923ea22375ce17f6006331316829d45aeda96a3d6e" + } + ], + "overlay_counts_after": { + "rendered": 25, + "needs_review": 8, + "draft": 16 + } +} diff --git a/reports/CLE3-EP002-P10-MAPPING-20260912.md b/reports/CLE3-EP002-P10-MAPPING-20260912.md new file mode 100644 index 0000000..1c21256 --- /dev/null +++ b/reports/CLE3-EP002-P10-MAPPING-20260912.md @@ -0,0 +1,28 @@ +# EP002 Phase 4 페이지 10 오버레이 입력 검토 — 2026-09-12 + +작업 단위: 페이지 10의 텍스트 입력 정합성 검토 및 보류 상태 동기화. + +- script.md 113~119행은 새벽 연구실의 3패널이다. storyboard/panels의 페이지 10은 포장마차의 4패널이다. +- p10-1 독백은 연구실 장면에서 ID로 추출됐다. 기존 인계의 script-consistent 판단을 정정한다. +- p10-2/3의 빈 오버레이는 서로 다른 대본 장면의 무대사를 가져온 결과다. 해당 콘티의 무대사 승인으로 사용할 수 없다. +- p10-4는 대본에 대응 행이 없다. ‘끝까지 봐’는 콘티 설명에서 추출됐으며 페이지 매핑의 해결을 뜻하지 않는다. +- 네 오버레이를 needs_review로 변경했다. 기존 텍스트, 박스, PNG, SVG는 그대로 보존했다. 원본 49/57, SVG 45개, job 상태는 변하지 않는다. +- 오버레이 현황: rendered 25, draft 16, needs_review 8. 상태·manifest·인계·결정 큐의 보류 범위를 함께 갱신했다. +- render-panel-overlays.js는 needs_review도 렌더링하므로 페이지 10에 실행하지 않았다. 시각 QA·새 이미지 생성·대본 재작성·승인·기억 승격은 수행하지 않았다. + +## CLE5 관찰 + +패널 ID 일치는 장면 정합성 증거가 아니다. 빈 오버레이와 SVG 존재도 텍스트 검토 완료를 뜻하지 않는다. 동명 JSON에 입력 해시, 패널별 근거, 보존한 PNG/SVG 해시를 기록했다. 이 관찰은 승인된 창작 선호가 아니다. + +## 결정 및 다음 작업 + +기존 ep002-page-mapping의 담당자·기한·승인 상태는 유지한다. 대본/콘티 기준선 사람 결정 후 페이지 8과 10의 텍스트를 재검토한다. 독립 후보는 페이지 7 입력 검토 또는 live WIP 확인 후 p11-2/p11-4 생성이다. +GitHub 조회는 api.github.com 연결 오류로 실패해 신규 생성과 PR 복구를 보류했다. 이번 실행에서 PR 조회를 재시도하지 않는다. 병합·배포하지 않는다. + +## 검증 + +- 변경된 text-overlays, creation-memory, decision-queue는 Ajv 6.12.6 Draft-07 full format 검증 통과. state.json은 전용 스키마가 없으며 JSON 구문 및 governance로 확인했다. +- 5개 에피소드 governance 및 결정 큐 schema/evidence 통과. +- 페이지 10 PNG 4개와 기존 SVG 3개의 SHA-256 보존 및 p10-1 SVG 부재 확인. +- asset 검사 통과, 신규 PNG 없음. 과거 전체 자산 용량 경고는 이번에 재측정하지 않았다. git diff --check 통과. +- 수정 파일: text-overlays.json, creation-memory.json, MANIFEST.md, state.json, operations/decision-queue.json, 이 보고서와 동명 JSON (7개). diff --git a/reports/CLE3-EP002-P5-MAPPING-20260914.json b/reports/CLE3-EP002-P5-MAPPING-20260914.json new file mode 100644 index 0000000..0131c75 --- /dev/null +++ b/reports/CLE3-EP002-P5-MAPPING-20260914.json @@ -0,0 +1,150 @@ +{ + "episode_id": "EP002", + "phase": "phase4_panels", + "checked_at": "2026-09-13T21:02:42.628391+00:00", + "task": "page 5 overlay input mapping review", + "confidence": "high", + "human_approval": "pending existing page mapping decision", + "inputs": [ + { + "path": "episodes/EP002/script/script.md", + "sha256_before": "c4c1b6d108406faade4bdc4d855d806f68bd975a3a7cdcc58120ec50644514fe" + }, + { + "path": "episodes/EP002/storyboard/storyboard.json", + "sha256_before": "6510624bcdd0424e5e7c649969d66469dd1c06e168617b689d848a41c9c42e36" + }, + { + "path": "episodes/EP002/panels/panels.json", + "sha256_before": "bc5e99cf4ce12925992417745f9e7e85eca9ece3df1e3787083019ad13017071" + }, + { + "path": "episodes/EP002/panels/text-overlays.json", + "sha256_before": "9a42c7966c2d2ebd2a9955147089ead3a059871bb9020f5c963f911ea1400657" + }, + { + "path": "episodes/EP002/panels/generation-jobs.json", + "sha256_before": "11a0d11c9eac8c370377475526ad02890ba9eff03f210ecf1eec0710d10ecb48" + }, + { + "path": "episodes/EP002/approvals/gates.json", + "sha256_before": "9fa3c49fc8133c5374ce3c21a8612b31ead17ce0333ff1498144e64b6255f324" + } + ], + "panels": [ + { + "panel_id": "p5-1", + "previous_status": "draft", + "status": "needs_review", + "reason": "대본 5-1은 경찰서에서 스치친과 왕먀오의 대화이나 콘티는 계단의 주관 시점 카운트다운이다. 스치친 대사의 장면 근거가 다르다.", + "preserved_overlays": [ + { + "kind": "dialogue", + "text": "스치친: \"왕먀오 교수. 선생도 나노물리학자야.", + "box": { + "x": 0.08, + "y": 0.06, + "w": 0.52, + "h": 0.12 + } + } + ], + "assets": [ + { + "path": "episodes/EP002/panels/assets/p5-1.png", + "exists": true, + "sha256": "7cfd6755f5a68604987569d05eab28ca7990aee39fffb9ec459076090f115cdf" + }, + { + "path": "episodes/EP002/panels/final/p5-1.svg", + "exists": true, + "sha256": "239d06a49dc0d00edc7de8a06815d6574e1e487391e798a66cbca3f3f66f98b9" + } + ] + }, + { + "panel_id": "p5-2", + "previous_status": "draft", + "status": "needs_review", + "reason": "대본 5-2는 스치친이 과학자 사진을 보여주나 콘티는 왕먀오가 안경을 닦는 장면이다. 추출 대사를 확정할 수 없다.", + "preserved_overlays": [ + { + "kind": "dialogue", + "text": "스치친: \"죽기 전 2주간 밤하늘만 봤어. 연구를 포기했지.", + "box": { + "x": 0.08, + "y": 0.06, + "w": 0.52, + "h": 0.12 + } + } + ], + "assets": [ + { + "path": "episodes/EP002/panels/assets/p5-2.png", + "exists": true, + "sha256": "a42865f31a092efaea908830357a6f5f83152e57c147a5defa2afe3220026473" + }, + { + "path": "episodes/EP002/panels/final/p5-2.svg", + "exists": true, + "sha256": "80ef058a939d01686b81cae02d46466614330d4acb595ddf46a11357aa67c50a" + } + ] + }, + { + "panel_id": "p5-3", + "previous_status": "rendered", + "status": "needs_review", + "reason": "대본 5-3은 경찰서의 왕먀오 반응이나 콘티는 화장실 거울 장면이다. 빈 오버레이는 이 장면의 무대사 근거가 아니다.", + "preserved_overlays": [], + "assets": [ + { + "path": "episodes/EP002/panels/assets/p5-3.png", + "exists": true, + "sha256": "e32ba503a22bc96d5433959aa615ebc5e1932cfe81261c214154e0a87c5d9018" + }, + { + "path": "episodes/EP002/panels/final/p5-3.svg", + "exists": true, + "sha256": "41f8d5b559b7ce44e426f6cf7f8e8b2fc3b4c92be837f2941212ef06382c16de" + } + ] + }, + { + "panel_id": "p5-4", + "previous_status": "draft", + "status": "needs_review", + "reason": "대본 5-4는 스치친 눈 클로즈업이나 콘티는 화장실에서 다른 사람이 손을 씻는 장면이다. 스치친 질문은 매핑 검토가 필요하다.", + "preserved_overlays": [ + { + "kind": "dialogue", + "text": "스치친: \"이상한 건 안 보이나?", + "box": { + "x": 0.08, + "y": 0.06, + "w": 0.52, + "h": 0.12 + } + } + ], + "assets": [ + { + "path": "episodes/EP002/panels/assets/p5-4.png", + "exists": true, + "sha256": "d566f5e3620444937115a287dbdf2ea7f9507e505bd1bab671264129ffc3fd21" + }, + { + "path": "episodes/EP002/panels/final/p5-4.svg", + "exists": true, + "sha256": "41009f331821e9ad617e5b69a07309f109d3e011f665e8c4ba489fc1f15cdae1" + } + ] + } + ], + "overlay_counts_after": { + "rendered": 21, + "needs_review": 16, + "draft": 12 + } +} diff --git a/reports/CLE3-EP002-P5-MAPPING-20260914.md b/reports/CLE3-EP002-P5-MAPPING-20260914.md new file mode 100644 index 0000000..8274ef1 --- /dev/null +++ b/reports/CLE3-EP002-P5-MAPPING-20260914.md @@ -0,0 +1,12 @@ +# EP002 Phase 4 — 페이지 5 매핑 검토 + +- 관측: 2026-09-13T21:02:42.628391+00:00 +- 대본 script.md 62–69행은 경찰서의 스치친/왕먀오 대화 4패널, 콘티/패널은 계단·화장실의 카운트다운 4패널이다. 패널 수와 ID 일치만으로 의미가 일치하지 않는다. +- p5-1/2/4의 스치친 대사는 다른 장면에서 추출되었고 p5-3 빈 오버레이도 무대사 확정 근거가 아니다. 4개 모두 needs_review로 보류했다. +- 오버레이 rendered 21 / draft 12 / needs_review 16. 생성 49/57, SVG 45개 유지. 모든 페이지 5 PNG/SVG와 텍스트·박스 보존; 구조화 증거는 동명 JSON의 입력/자산 SHA-256 및 이전 상태 참조. +- state, manifest, creation-memory, 기존 매핑 결정 큐 범위를 동기화했다. 시각 QA, 이미지 생성, 기준선 수정, 승인·선호 승격은 수행하지 않았다. +- 사람 결정 전 페이지 5 렌더링 보류. Phase 5와 release는 미완료. +- CLE5 전달 관찰: 동일한 패널 수와 ID가 장면 정합성을 보장하지 않는다. 빈 텍스트·SVG 파일 존재를 QA 통과로 해석하지 않는다. 승인된 창작 선호가 아니다. +- 다음 독립 후보: 페이지 6 입력 매핑 검토. p11-2/p11-4 생성은 live WIP 확인 후 선택. + +검증: 변경 overlays/creation-memory/decision-queue Draft-07 스키마(Ajv 6.12.6, full format), 5개 에피소드 governance, queue evidence, asset policy, diff 검사 통과. 입력·job·gate와 PNG 4/SVG 4 해시 보존 및 관련 없는 overlay 불변 확인. 신규 PNG 없음; 기존 크기 경고는 재측정하지 않았다. diff --git a/reports/CLE3-EP002-P6-MAPPING-20260915.json b/reports/CLE3-EP002-P6-MAPPING-20260915.json new file mode 100644 index 0000000..f5454e4 --- /dev/null +++ b/reports/CLE3-EP002-P6-MAPPING-20260915.json @@ -0,0 +1,117 @@ +{ + "episode_id": "EP002", + "phase": "phase4_panels", + "checked_at": "2026-09-14T21:03:09.307673+00:00", + "task": "page 6 overlay input mapping review", + "confidence": "high", + "human_approval": "pending existing page mapping decision", + "inputs": [ + { + "path": "episodes/EP002/script/script.md", + "sha256_before": "c4c1b6d108406faade4bdc4d855d806f68bd975a3a7cdcc58120ec50644514fe" + }, + { + "path": "episodes/EP002/storyboard/storyboard.json", + "sha256_before": "6510624bcdd0424e5e7c649969d66469dd1c06e168617b689d848a41c9c42e36" + }, + { + "path": "episodes/EP002/panels/panels.json", + "sha256_before": "bc5e99cf4ce12925992417745f9e7e85eca9ece3df1e3787083019ad13017071" + }, + { + "path": "episodes/EP002/panels/text-overlays.json", + "sha256_before": "3ce95941b6d31e1c3e8dc15ccfb2b8833a9f1aca8692c3d9b3e35072950cf7e5" + }, + { + "path": "episodes/EP002/panels/generation-jobs.json", + "sha256_before": "11a0d11c9eac8c370377475526ad02890ba9eff03f210ecf1eec0710d10ecb48" + }, + { + "path": "episodes/EP002/approvals/gates.json", + "sha256_before": "9fa3c49fc8133c5374ce3c21a8612b31ead17ce0333ff1498144e64b6255f324" + } + ], + "panels": [ + { + "panel_id": "p6-1", + "previous_status": "rendered", + "status": "needs_review", + "reason": "대본 6-1은 가족 거실의 무대사 풀페이지이나 콘티 6-1은 안과 검사 장면이다. 가족 장면의 무대사 지시를 안과 장면에 적용할 수 없다.", + "preserved_overlays": [], + "assets": [ + { + "path": "episodes/EP002/panels/assets/p6-1.png", + "exists": true, + "sha256": "6ea33692e814c46a066dc703705cf98fbdc0db85acc6816898ea199e2a3dbeea" + }, + { + "path": "episodes/EP002/panels/final/p6-1.svg", + "exists": true, + "sha256": "e3cac73a7ee90439060ccc45c377ce6a9e8cc547d420653de9eb6b54aa077c38" + } + ] + }, + { + "panel_id": "p6-2", + "previous_status": "rendered", + "status": "needs_review", + "reason": "대본에는 6-2가 없으며 콘티는 카메라에 숫자가 녹화되지 않는 장면이다. 빈 오버레이는 무대사 근거가 아니다.", + "preserved_overlays": [], + "assets": [ + { + "path": "episodes/EP002/panels/assets/p6-2.png", + "exists": true, + "sha256": "214f52c6afa99a8eedcfdc0780d7f629215bf248a54507b54e442cfe5937bd8f" + }, + { + "path": "episodes/EP002/panels/final/p6-2.svg", + "exists": true, + "sha256": "668fc0e7f2090ae638c3bc79c6cde422dd8d08ef60dde841a5fa95f0693547de" + } + ] + }, + { + "panel_id": "p6-3", + "previous_status": "rendered", + "status": "needs_review", + "reason": "대본에는 6-3이 없으며 콘티는 연구실 모니터 위 시야의 붉은 숫자 장면이다. 빈 오버레이는 필요한 숫자나 텍스트가 없다는 근거가 아니다.", + "preserved_overlays": [], + "assets": [ + { + "path": "episodes/EP002/panels/assets/p6-3.png", + "exists": true, + "sha256": "39e3ac2e1419e081649928a836c609c09c1b955d44bd7eee85332a53df88d080" + }, + { + "path": "episodes/EP002/panels/final/p6-3.svg", + "exists": true, + "sha256": "94198d70baf3c3543db18b74601da9a2ca3db3ad0fc43e29d0787fddbea57e32" + } + ] + }, + { + "panel_id": "p6-4", + "previous_status": "rendered", + "status": "needs_review", + "reason": "대본에는 6-4가 없으며 콘티는 책상을 움켜쥔 손의 클로즈업이다. 빈 오버레이만으로 텍스트 검토를 완료할 수 없다.", + "preserved_overlays": [], + "assets": [ + { + "path": "episodes/EP002/panels/assets/p6-4.png", + "exists": true, + "sha256": "9f686596c1d0149e47fc62cd0cc05f5cdbfea171ca0d574e6c8667969574944d" + }, + { + "path": "episodes/EP002/panels/final/p6-4.svg", + "exists": true, + "sha256": "3d1200b528cd4f2856089fb8c264e070ce01aff0ee1d206ce3010bad34e0edc5" + } + ] + } + ], + "overlay_counts_after": { + "rendered": 17, + "needs_review": 20, + "draft": 12 + } +} diff --git a/reports/CLE3-EP002-P6-MAPPING-20260915.md b/reports/CLE3-EP002-P6-MAPPING-20260915.md new file mode 100644 index 0000000..5d7535e --- /dev/null +++ b/reports/CLE3-EP002-P6-MAPPING-20260915.md @@ -0,0 +1,11 @@ +# EP002 Phase 4 — 페이지 6 매핑 검토 + +- 관측: 2026-09-14T21:03:09.307673+00:00 +- 페이지 6은 대본 가족 거실 무대사 풀페이지 1패널과 콘티 안과·카메라·연구실 검증 몽타주 4패널의 충돌로 p6-1~p6-4 needs_review. 기존 SVG 4개와 빈 오버레이는 보존하며 무대사 확정 또는 QA 완료로 해석하지 않는다. +- script.md 페이지 6은 74–78행 참조. p6-2~p6-4 대본 행은 존재하지 않는다. +- 오버레이 rendered 17 / draft 12 / needs_review 20. 생성 49/57, SVG 45개 유지. 모든 페이지 6 PNG/SVG와 텍스트·박스 보존; 구조화 증거는 동명 JSON의 입력/자산 SHA-256 및 이전 상태 참조. +- state, manifest, creation-memory, 기존 매핑 결정 큐 범위를 동기화했다. 이미지 생성, 시각 QA, 기준선 수정, 승인·선호 승격은 수행하지 않았다. +- CLE5 전달 관찰: 원본 대본의 침묵 지시는 장면이 다른 같은 ID의 패널로 이전할 수 없다. 누락된 대본 행에서 빈 오버레이를 얻어도 무대사 검증이 아니다. 승인된 창작 선호가 아니다. +- 다음 독립 후보: 페이지 4 입력 매핑 검토. p11-2/p11-4 생성은 live WIP 확인 후 선택. + +검증: 변경 overlays/creation-memory/decision-queue Draft-07 스키마(Ajv 6.12.6, full format), 5개 에피소드 governance, queue evidence, asset policy, diff 검사 통과. 입력·job·gate 및 PNG 4/SVG 4 해시와 관련 없는 overlay 불변 확인. 신규 PNG 없음; 기존 크기 경고는 재측정하지 않았다. diff --git a/reports/CLE3-EP002-P7-MAPPING-20260913.json b/reports/CLE3-EP002-P7-MAPPING-20260913.json new file mode 100644 index 0000000..19e754f --- /dev/null +++ b/reports/CLE3-EP002-P7-MAPPING-20260913.json @@ -0,0 +1,128 @@ +{ + "episode_id": "EP002", + "phase": "phase4_panels", + "checked_at": "2026-09-12T21:04:02.869667+00:00", + "task": "page 7 overlay input mapping review", + "confidence": "high", + "human_approval": "pending existing page mapping decision", + "inputs": [ + { + "path": "episodes/EP002/script/script.md", + "sha256_before": "c4c1b6d108406faade4bdc4d855d806f68bd975a3a7cdcc58120ec50644514fe" + }, + { + "path": "episodes/EP002/storyboard/storyboard.json", + "sha256_before": "6510624bcdd0424e5e7c649969d66469dd1c06e168617b689d848a41c9c42e36" + }, + { + "path": "episodes/EP002/panels/panels.json", + "sha256_before": "bc5e99cf4ce12925992417745f9e7e85eca9ece3df1e3787083019ad13017071" + }, + { + "path": "episodes/EP002/panels/text-overlays.json", + "sha256_before": "1120acc20bb5548d42627871c8e65f454617c99b39b708230368016ba55f09b5" + }, + { + "path": "episodes/EP002/panels/generation-jobs.json", + "sha256_before": "11a0d11c9eac8c370377475526ad02890ba9eff03f210ecf1eec0710d10ecb48" + }, + { + "path": "episodes/EP002/approvals/gates.json", + "sha256_before": "9fa3c49fc8133c5374ce3c21a8612b31ead17ce0333ff1498144e64b6255f324" + } + ], + "panels": [ + { + "panel_id": "p7-1", + "previous_status": "rendered", + "status": "needs_review", + "reason": "대본 7-1은 연구실에서 새 카메라를 꺼내는 왕먀오이나 콘티는 저녁 식탁의 쯔쯔다. 빈 오버레이는 가족 장면 무대사의 근거가 아니다.", + "preserved_overlays": [], + "assets": [ + { + "path": "episodes/EP002/panels/assets/p7-1.png", + "exists": true, + "sha256": "61af6c7de97f7062d5de89af2a37b8f1994f478202b63ffbacc04373ea646248" + }, + { + "path": "episodes/EP002/panels/final/p7-1.svg", + "exists": true, + "sha256": "12f6b395e770677d71322ce4b96a718edf8d2c1c27ab88b1ba909775ae6312ba" + } + ] + }, + { + "panel_id": "p7-2", + "previous_status": "draft", + "status": "needs_review", + "reason": "대본 7-2는 카메라와 필름을 바꾸는 실험이나 콘티는 왕먀오의 억지웃음이다. 카메라를 바꿔도 독백은 이 장면의 근거가 아니다.", + "preserved_overlays": [ + { + "kind": "narration", + "text": "왕먀오(독백): \"카메라를 바꿔도. 렌즈를 바꿔도.", + "box": { + "x": 0.1, + "y": 0.08, + "w": 0.8, + "h": 0.12 + } + } + ], + "assets": [ + { + "path": "episodes/EP002/panels/assets/p7-2.png", + "exists": true, + "sha256": "d9b6ba7852f865324678e9c7b76929be48522b182b4a9191a90ea8431e8bbfcb" + }, + { + "path": "episodes/EP002/panels/final/p7-2.svg", + "exists": true, + "sha256": "b896f26b9c331aa5a1394ec1cde7ffdb1a816d87e98fa35ecff911285da54dd3" + } + ] + }, + { + "panel_id": "p7-3", + "previous_status": "rendered", + "status": "needs_review", + "reason": "대본 7-3은 왕먀오가 카메라를 내려놓는 공포 장면이나 콘티는 쯔쯔가 가족 그림을 내미는 장면이다. 빈 오버레이를 무대사 승인으로 사용할 수 없다.", + "preserved_overlays": [], + "assets": [ + { + "path": "episodes/EP002/panels/assets/p7-3.png", + "exists": true, + "sha256": "fdce62b5ea39dfd2ce94af74fc7bfa26490842b88f918af2e64650311bcab419" + }, + { + "path": "episodes/EP002/panels/final/p7-3.svg", + "exists": true, + "sha256": "3b664d268a878bca3784144fd7d339827e537358e88a57356f2bd40030864554" + } + ] + }, + { + "panel_id": "p7-4", + "previous_status": "rendered", + "status": "needs_review", + "reason": "대본에는 7-4 행이 없으며 콘티는 왕먀오가 가족 그림을 받는 장면이다. 텍스트 유무는 기준선 결정 후 확인해야 한다.", + "preserved_overlays": [], + "assets": [ + { + "path": "episodes/EP002/panels/assets/p7-4.png", + "exists": true, + "sha256": "bac73cdfe65ec581a36878a7a2cad0a7d3a7801680031732b0e4babacc606349" + }, + { + "path": "episodes/EP002/panels/final/p7-4.svg", + "exists": true, + "sha256": "636cc3a1d53d38e7e89307f11654ea6659e30e73f783177cdef41246dd36aa2b" + } + ] + } + ], + "overlay_counts_after": { + "rendered": 22, + "needs_review": 12, + "draft": 15 + } +} diff --git a/reports/CLE3-EP002-P7-MAPPING-20260913.md b/reports/CLE3-EP002-P7-MAPPING-20260913.md new file mode 100644 index 0000000..d5e162a --- /dev/null +++ b/reports/CLE3-EP002-P7-MAPPING-20260913.md @@ -0,0 +1,19 @@ +# EP002 Phase 4 페이지 7 오버레이 입력 검토 — 2026-09-13 + +작업 단위: 페이지 7 입력 정합성 검토와 상태 동기화. + +대본 script.md 82~88행은 연구실 카메라 실험 3패널이고 콘티/패널의 페이지 7은 가족 식탁과 그림 교환 4패널이다. p7-2의 카메라/렌즈 독백은 다른 장면에서 ID로 추출됐다. p7-1/3의 빈 오버레이와 대응 대본 행이 없는 p7-4도 무대사 확정 근거가 없다. + +p7-1~p7-4를 needs_review로 변경하고 텍스트·박스·PNG·SVG는 보존했다. 원본 49/57, SVG 45개, 생성 job 상태는 유지한다. 오버레이는 rendered 22, draft 15, needs_review 12다. state, manifest, creation-memory와 기존 매핑 결정 큐의 보류 범위를 동기화했다. 담당자·기한·승인 상태는 유지했다. + +## CLE5 관찰과 증거 + +패널 ID, 빈 오버레이, SVG 존재는 장면 정합성과 텍스트 QA 완료를 입증하지 않는다. 동명 JSON에 입력 해시, 패널별 이유, 보존한 오버레이와 PNG/SVG 해시를 기록했다. 시각 QA와 선호 승격은 수행하지 않았다. + +## 검증 및 인계 + +변경 JSON은 Draft-07 full format, 전체 governance, 결정 큐 schema/evidence, asset 및 diff 검사 대상으로 통과했다. 페이지 7 PNG 4개와 SVG 4개의 해시 및 다른 입력의 보존을 확인했다. 신규 이미지는 없으며 과거 자산 용량 경고는 재측정하지 않는다. + +GitHub API 연결 실패로 신규 생성과 PR 조회/생성을 보류했다. 이번 실행에서 PR 조회를 재시도하지 않는다. 기존 자동화 브랜치에서 이번 실행의 7개 파일만 커밋·push 대상으로 한다. 병합·공개·승인은 수행하지 않는다. + +다음 독립 후보는 페이지 5 입력 매핑 검토다. p11-2/p11-4 생성은 live WIP 확인 후에만 가능하다. 페이지 7·8·10은 사람의 대본/콘티 기준선 결정 후 다시 검토한다. EP002 provisional lock 3건과 EP001 동률 후보 2건은 계속 사람 결정 대기이며 Release는 Phase 5 선행조건 대기다. diff --git a/reports/CLE3-EP002-PAGE-MAPPING-DECISION-20260915.md b/reports/CLE3-EP002-PAGE-MAPPING-DECISION-20260915.md new file mode 100644 index 0000000..3a6e5e6 --- /dev/null +++ b/reports/CLE3-EP002-PAGE-MAPPING-DECISION-20260915.md @@ -0,0 +1,43 @@ +# EP002 페이지 매핑 기준 결정 (기본안 진행) + +- 결정 ID: ep002-page-mapping +- 결정 일시: 2026-09-15T11:10:00Z (KST 20:10) +- 결정 주체: 🤖 agent:daeguru — 회장님 위임 지시("알아서 진행해줘", 2026-09-15 20:02 KST, #가재코드 cle3)에 따른 TTL 기본안 진행 +- 사후 승인: 2026-09-18 20:00 KST까지 회장님이 뒤집을 수 있음(아래 절차 참조) + +## 결정 + +**오버레이와 잔여 패널 생성은 콘티(storyboard, 16p)를 기준으로 진행한다.** + +## 근거 + +1. script.md는 페이지 6에서 p6-2~p6-4에 해당하는 대본 행이 존재하지 않는다(74–78행 참조, P6-MAPPING 리포트). 스토리보드 쪽이 구조적으로 완전하다. +2. 시각 연출(카메라·구도·패널 분할)의 원천은 스토리보드며, 이미 생성된 49패널과 45 SVG가 스토리보드 기준으로 만들어졌다. script 기준 재정리는 완성 자산 재생산 비용이 크다. +3. 이슈 #44(스튜디오 피드백 #205)가 제시한 기본안("3일 무응답 시 콘티(16p) 기준 진행 후 승인 요청")과 일치한다. 결정 큐 due_at 2026-09-09 대비 6일 초과 상태였다. + +## 대기 중 대안 작업 (이 결정과 무관하게 진행 가능) + +- 감사 브랜치 PR 개설 (피드백 #43 전달분 — 본 결정 문서와 같은 PR로 처리) +- 오버레이 needs_review 20건(draft 12 포함) 정리 +- 잔여 빈칸 8칸 생성: p11-2, p11-4, p12-4, p13-1, p13-2, p13-4, p14-2, p15-3 (아래 목록과 정합) + +## TTL+기본값 + +- 일반 결정: 24h 무응답 시 기본안 진행 (CLE2 OPERATING.md #76 정합) +- 창작 기준선(rebaseline) 결정: 72h 무응답 시 기본안 진행 후 사후 승인 요청 +- approval-critical(공개 발행·예산·외부 발신): 무기한 대기 + +## 잔여 빈칸 목록 (panels.json 정합 — 피드백 #189/#43 대조 수정) + +총 8칸: p11-2, p11-4, p12-4, p13-1, p13-2, p13-4, p14-2, p15-3 +- 다음 생성 후보: 위 전체. 페이지 순서대로 진행하되 live WIP(진행 중 PR/작업) 확인 후 선택한다. +- 종전 리포트가 언급한 "p11-2/p11-4"는 페이지 11 우선 후보이며 잔여 전체 목록과 다르지 않다(범위 표기 불일치 수정). + +## 뒤집기(사후 승인 거부) 절차 + +회장님이 script 15p 기준을 원하면: 본 결정 무효 선언 → 스토리보드 재작성(16p→15p 병합) → 영향 패널 재생성 범위 산정 후 재결정. 이미 생성된 자산은 보존한다. + +## 전달 + +- 오버레이 needs_review 20건: 콘티 기준으로 해석하여 rendered로 승격 또는 재초안. 무대사 풀페이지(p6-1)는 대본 무대사 지시를 우선한다(CLE5 전달 관찰 정합). +- EP001 후보 동률 2건(p15-3, p6-1): 기존 패널 유지로 종결(overdue_action 기본값). release 재판단 없음. diff --git a/reports/CLE3-EP002-SCHEMA-VALIDATION-20260911.json b/reports/CLE3-EP002-SCHEMA-VALIDATION-20260911.json new file mode 100644 index 0000000..79a5a26 --- /dev/null +++ b/reports/CLE3-EP002-SCHEMA-VALIDATION-20260911.json @@ -0,0 +1,111 @@ +{ + "observed_at": "2026-09-10T21:01:33.441Z", + "episode": "EP002", + "phase": "phase4", + "task": "Complete outstanding Draft-07 schema validation", + "validator": { + "name": "Ajv", + "version": "6.12.6", + "path": "/opt/homebrew/lib/node_modules/n8n/node_modules/ajv", + "options": { + "allErrors": true, + "jsonPointers": true, + "format": "full" + }, + "mutates_data": false + }, + "results": [ + { + "file": "episodes/EP002/script/script.json", + "schema": "schemas/story.schema.json", + "sha256": "b12db1cd062ccaf717ec862008a8c017fb806abeb967b840a3e0e8906f29c3df", + "schema_sha256": "d92cc6186c8e9b0c614354fc2a89a1ddd50777dc5c8de3abbeb30625d7e72ba6", + "valid": true, + "errors": [] + }, + { + "file": "episodes/EP002/characters/characters.json", + "schema": "schemas/characters.schema.json", + "sha256": "0334808398d8930c27e57db48d02284f28de3c095c0ae0c0bd2abd159bbd9765", + "schema_sha256": "4e010e9ad92479dc9dee28d6cc1ef3b70f230256d55246be5c6aaad62a0311a0", + "valid": true, + "errors": [] + }, + { + "file": "episodes/EP002/storyboard/storyboard.json", + "schema": "schemas/storyboard.schema.json", + "sha256": "6510624bcdd0424e5e7c649969d66469dd1c06e168617b689d848a41c9c42e36", + "schema_sha256": "137d6d5a2d55ca172f823a8e0ba54ce998cb2ce42ab6771f64662226421e7e9c", + "valid": true, + "errors": [] + }, + { + "file": "episodes/EP002/panels/panels.json", + "schema": "schemas/panels.schema.json", + "sha256": "bc5e99cf4ce12925992417745f9e7e85eca9ece3df1e3787083019ad13017071", + "schema_sha256": "706991d726b24886e24b33020ed0a540d5168a05878f1e7c0fe19bc815d23ee2", + "valid": true, + "errors": [] + }, + { + "file": "episodes/EP002/panels/generation-jobs.json", + "schema": "schemas/panel-jobs.schema.json", + "sha256": "11a0d11c9eac8c370377475526ad02890ba9eff03f210ecf1eec0710d10ecb48", + "schema_sha256": "d09e2ee069d91f951f323cec174f14514d8f2a9e031d66bb69f1c28f162e4f73", + "valid": true, + "errors": [] + }, + { + "file": "episodes/EP002/panels/text-overlays.json", + "schema": "schemas/text-overlays.schema.json", + "sha256": "61a8e9ce8c760429c419d714f775f9287c9d6e69993163d38a1b80aea52eb20a", + "schema_sha256": "ceb66c8c7f4edaac972b61a49b57f1d6e05371c067480cc7bdaf450181e8bf89", + "valid": true, + "errors": [] + }, + { + "file": "episodes/EP002/discovery/context.json", + "schema": "schemas/discovery.schema.json", + "sha256": "d94554c55f0af411721174fa8528f1e97bbbbaa5026497e2adb2c5a82236c049", + "schema_sha256": "f4533e2fec12d5e961d68bcc4578d13c7ef8d0c1bf4b8184ff5d983d5bbd6142", + "valid": true, + "errors": [] + }, + { + "file": "episodes/EP002/decisions/implementation-notes.json", + "schema": "schemas/decision-log.schema.json", + "sha256": "7ec56aef03178ce8ee1e9f5f23a90e57953ded0cb985b1949c182668b4e9738d", + "schema_sha256": "e3ee3a602bbc3299b9fbfaa280214df6468eb041d43e5b10f907b522b7f5b004", + "valid": true, + "errors": [] + }, + { + "file": "episodes/EP002/approvals/gates.json", + "schema": "schemas/approvals.schema.json", + "sha256": "9fa3c49fc8133c5374ce3c21a8612b31ead17ce0333ff1498144e64b6255f324", + "schema_sha256": "c058330682b2b822e062cb01afdce62dc57c8963ddfaacedf7e894d2be88af5e", + "valid": true, + "errors": [] + }, + { + "file": "episodes/EP002/memory/creation-memory.json", + "schema": "schemas/creation-memory.schema.json", + "sha256": "634243ad14471adb5721d8a40d2239238b914486fea885f69619b6414acd6830", + "schema_sha256": "38654134363609f89cba96b4c8b0ad1d2db50618ef416e1d585423172dd2ab50", + "valid": true, + "errors": [] + } + ], + "excluded": [ + { + "file": "episodes/EP002/bible/delta.json", + "reason": "No dedicated delta JSON Schema; existing governance validator checks delta." + }, + { + "file": "state.json", + "reason": "No state JSON Schema in repository." + } + ], + "passed": 10, + "failed": 0 +} diff --git a/reports/CLE3-EP002-SCHEMA-VALIDATION-20260911.md b/reports/CLE3-EP002-SCHEMA-VALIDATION-20260911.md new file mode 100644 index 0000000..655475c --- /dev/null +++ b/reports/CLE3-EP002-SCHEMA-VALIDATION-20260911.md @@ -0,0 +1,38 @@ +# EP002 Phase 4 미완료 스키마 검증 완료 — 2026-09-11 + +오늘의 단일 작업은 2026-09-09 감사에서 미실행으로 남은 범용 JSON Schema 검증이다. +깨끗한 기존 자동화 브랜치 feature/cle3-20260909-ep002-status-audit의 c97b383에서 시작했다. + +## 검증 결과 + +- 로컬 설치 Ajv 6.12.6의 Draft-07 검증으로 EP002 JSON 10개 모두 통과했다. +- 대상: script, characters, storyboard, panels, generation-jobs, text-overlays, + discovery, implementation-notes, approvals, creation-memory. +- allErrors=true, jsonPointers=true, format=full. 데이터 변환·기본값 삽입·필드 삭제 옵션은 사용하지 않았다. +- 파일별 스키마 경로, 입력/스키마 SHA-256, 오류 목록과 관측 시각은 동명 JSON에 기록했다. +- state.json과 bible/delta.json은 전용 스키마가 없어 범용 검증 범위에서 제외했다. + delta는 기존 governance 검사 대상이다. Phase 5 QA 파일은 아직 없다. +- governance 5개 에피소드 통과, decision queue 스키마·증거 통과. +- 기존 브랜치 차이 5개 파일 asset 검사 통과. 신규 PNG 없음. + 이전 감사의 기존 PNG 48개 목표 용량 초과 경고는 과거 증거이며 이번에 재측정하지 않았다. +- 시각 QA, 매핑 재정리, 오버레이 검토, 승인 또는 공개 완료를 뜻하지 않는다. + +## 실행 제약과 인계 + +GitHub decision-status 조회 unavailable로 WIP가 미확인이다. 신규 생성은 보류했다. +기존 감사 브랜치 PR 조회도 api.github.com 연결 오류로 한 번 실패했다. +중복 PR을 방지하기 위해 생성·갱신·레이블 작업을 시도하지 않았다. +커밋·push 실제 결과는 자동화 memory에 기록한다. 병합·deploy는 하지 않는다. + +EP002 매핑, Story/Character/Storyboard Lock와 EP001 동률 후보 2건의 사람 결정은 +기한 초과 상태다. Release는 Phase 5 선행 조건 대기다. 원본 결정 상태는 보존했다. +다음 후보는 p10-1/p10-4 오버레이 검토 또는 live WIP 확인 후 p11-2/p11-4 생성이다. + +## CLE5 전달 사실 + +범용 스키마 검증기 부재는 에피소드 데이터 오류와 별개였다. 기존 로컬 검증기를 +사용한 결과 10개 문서가 현재 스키마에 적합했다. 이는 창작 선호나 의미적 정합성 +승인이 아니다. 동명 JSON의 파일·스키마 해시로 검증한 정확한 버전을 식별할 수 있다. +기존 파일/상태 감사 증거는 reports/CLE3-EP002-STATUS-AUDIT-20260909.json이다. + +이번 수정 범위는 이 보고서와 동명 JSON 증거 두 파일뿐이다. diff --git a/reports/CLE3-EP002-STATUS-AUDIT-20260909.json b/reports/CLE3-EP002-STATUS-AUDIT-20260909.json new file mode 100644 index 0000000..584028b --- /dev/null +++ b/reports/CLE3-EP002-STATUS-AUDIT-20260909.json @@ -0,0 +1,355 @@ +{ + "observed_at": "2026-09-08T21:02:15.048Z", + "episode": "EP002", + "phase": "phase4_panels", + "scope": "Read-only file/status audit; no visual QA or approval", + "generation": { + "generated": 49, + "pending": 8 + }, + "overlays": { + "rendered": 27, + "needs_review": 4, + "draft": 18 + }, + "existing_final_svgs": 45, + "missing_final_svgs": [ + "p8-2", + "p8-3", + "p8-4", + "p10-1" + ], + "draft_ids": [ + "p2-2", + "p2-3", + "p3-1", + "p4-2", + "p4-3", + "p5-1", + "p5-2", + "p5-4", + "p7-2", + "p8-1", + "p9-1", + "p10-1", + "p10-4", + "p11-1", + "p14-1", + "p14-3", + "p14-4", + "p16-1" + ], + "needs_review_ids": [ + "p2-1", + "p8-2", + "p8-3", + "p8-4" + ], + "source_state_mismatches": [], + "jobs": [ + { + "job_id": "EP002-page-01", + "status": "completed", + "generated": 3, + "total": 3 + }, + { + "job_id": "EP002-page-02", + "status": "completed", + "generated": 4, + "total": 4 + }, + { + "job_id": "EP002-page-03", + "status": "completed", + "generated": 4, + "total": 4 + }, + { + "job_id": "EP002-page-04", + "status": "completed", + "generated": 4, + "total": 4 + }, + { + "job_id": "EP002-page-05", + "status": "completed", + "generated": 4, + "total": 4 + }, + { + "job_id": "EP002-page-06", + "status": "completed", + "generated": 4, + "total": 4 + }, + { + "job_id": "EP002-page-07", + "status": "completed", + "generated": 4, + "total": 4 + }, + { + "job_id": "EP002-page-08", + "status": "completed", + "generated": 4, + "total": 4 + }, + { + "job_id": "EP002-page-09", + "status": "completed", + "generated": 1, + "total": 1 + }, + { + "job_id": "EP002-page-10", + "status": "completed", + "generated": 4, + "total": 4 + }, + { + "job_id": "EP002-page-11", + "status": "partial", + "generated": 2, + "total": 4 + }, + { + "job_id": "EP002-page-12", + "status": "partial", + "generated": 3, + "total": 4 + }, + { + "job_id": "EP002-page-13", + "status": "partial", + "generated": 1, + "total": 4 + }, + { + "job_id": "EP002-page-14", + "status": "partial", + "generated": 3, + "total": 4 + }, + { + "job_id": "EP002-page-15", + "status": "partial", + "generated": 3, + "total": 4 + }, + { + "job_id": "EP002-page-16", + "status": "completed", + "generated": 1, + "total": 1 + } + ], + "sha256": { + "episodes/EP002/panels/panels.json": "bc5e99cf4ce12925992417745f9e7e85eca9ece3df1e3787083019ad13017071", + "episodes/EP002/panels/generation-jobs.json": "11a0d11c9eac8c370377475526ad02890ba9eff03f210ecf1eec0710d10ecb48", + "episodes/EP002/panels/text-overlays.json": "61a8e9ce8c760429c419d714f775f9287c9d6e69993163d38a1b80aea52eb20a", + "episodes/EP002/panels/final/p10-4.svg": "acac9770324942b8b132804bdefe9ad40b9eaf334feec53a29b55050b96643a0", + "episodes/EP002/approvals/gates.json": "9fa3c49fc8133c5374ce3c21a8612b31ead17ce0333ff1498144e64b6255f324" + }, + "github": { + "status": "unknown", + "count": null, + "limit": 2, + "action": "verify_github_before_generation" + }, + "asset_warnings": [ + { + "panel_id": "p1-1", + "bytes": 2453858 + }, + { + "panel_id": "p1-2", + "bytes": 2364830 + }, + { + "panel_id": "p1-3", + "bytes": 2278874 + }, + { + "panel_id": "p2-1", + "bytes": 2792840 + }, + { + "panel_id": "p2-2", + "bytes": 2557243 + }, + { + "panel_id": "p2-3", + "bytes": 2287331 + }, + { + "panel_id": "p2-4", + "bytes": 2620735 + }, + { + "panel_id": "p3-1", + "bytes": 2778245 + }, + { + "panel_id": "p3-2", + "bytes": 2563504 + }, + { + "panel_id": "p3-3", + "bytes": 3197126 + }, + { + "panel_id": "p3-4", + "bytes": 2955053 + }, + { + "panel_id": "p4-1", + "bytes": 2781424 + }, + { + "panel_id": "p4-2", + "bytes": 2292882 + }, + { + "panel_id": "p4-3", + "bytes": 2602584 + }, + { + "panel_id": "p4-4", + "bytes": 2335040 + }, + { + "panel_id": "p5-1", + "bytes": 1873857 + }, + { + "panel_id": "p5-2", + "bytes": 2560654 + }, + { + "panel_id": "p5-3", + "bytes": 2254885 + }, + { + "panel_id": "p5-4", + "bytes": 2492581 + }, + { + "panel_id": "p6-1", + "bytes": 2539183 + }, + { + "panel_id": "p6-2", + "bytes": 1880377 + }, + { + "panel_id": "p6-3", + "bytes": 1921142 + }, + { + "panel_id": "p6-4", + "bytes": 2022432 + }, + { + "panel_id": "p7-1", + "bytes": 2646802 + }, + { + "panel_id": "p7-2", + "bytes": 2229134 + }, + { + "panel_id": "p7-3", + "bytes": 2471163 + }, + { + "panel_id": "p7-4", + "bytes": 2404606 + }, + { + "panel_id": "p8-1", + "bytes": 3262887 + }, + { + "panel_id": "p8-2", + "bytes": 2663847 + }, + { + "panel_id": "p8-3", + "bytes": 1614785 + }, + { + "panel_id": "p8-4", + "bytes": 2683357 + }, + { + "panel_id": "p9-1", + "bytes": 2365788 + }, + { + "panel_id": "p10-1", + "bytes": 2704783 + }, + { + "panel_id": "p10-2", + "bytes": 2650576 + }, + { + "panel_id": "p10-3", + "bytes": 2354427 + }, + { + "panel_id": "p10-4", + "bytes": 2545038 + }, + { + "panel_id": "p11-1", + "bytes": 2152570 + }, + { + "panel_id": "p11-3", + "bytes": 1986062 + }, + { + "panel_id": "p12-1", + "bytes": 2531690 + }, + { + "panel_id": "p12-2", + "bytes": 2153809 + }, + { + "panel_id": "p12-3", + "bytes": 2878494 + }, + { + "panel_id": "p13-3", + "bytes": 2530967 + }, + { + "panel_id": "p14-1", + "bytes": 1878854 + }, + { + "panel_id": "p14-3", + "bytes": 2402809 + }, + { + "panel_id": "p15-1", + "bytes": 1226971 + }, + { + "panel_id": "p15-2", + "bytes": 1388993 + }, + { + "panel_id": "p15-4", + "bytes": 1836838 + }, + { + "panel_id": "p16-1", + "bytes": 1104731 + } + ], + "asset_hard_limit_violations": [] +} diff --git a/reports/CLE3-EP002-STATUS-AUDIT-20260909.md b/reports/CLE3-EP002-STATUS-AUDIT-20260909.md new file mode 100644 index 0000000..d4ccd27 --- /dev/null +++ b/reports/CLE3-EP002-STATUS-AUDIT-20260909.md @@ -0,0 +1,46 @@ +# EP002 Phase 4 파일·상태 대조 — 2026-09-09 + +오늘의 단일 작업은 active Phase 4의 결정론적 파일·상태 검증과 인계 문구 정리다. +시작 기준은 깨끗한 main, HEAD 2a843fe. GitHub 조회는 unavailable이므로 WIP를 +확인할 수 없어 새 이미지는 생성하지 않았다. 승인과 공개 상태는 변경하지 않았다. + +## 실제 결과 + +- 57개 패널 슬롯: generated 49, pending 8. PNG 존재와 생성 상태 불일치 0. +- 생성 job 16개: completed 11, partial 5. 패널별 실파일과 일치. +- 오버레이 49개: rendered 27, draft 18, needs_review 4. +- SVG 45개. 없는 파일은 p8-2, p8-3, p8-4, p10-1. +- p10-4 SVG는 기존 파일이지만 오버레이 상태는 draft다. state의 렌더링 대기 + 문구를 교정했다. SVG 존재만으로 텍스트 검토 완료나 Phase 5 통과를 추정하지 않는다. +- 인계의 draft 수 16→18 및 p10-1의 기존 오버레이 존재를 교정하고 manifest에 + 생성·SVG 존재·검토 상태를 별도로 기록했다. 이미지·job·오버레이 원본은 일치하여 수정 불필요. + +## 검증 + +- 57개 소스 슬롯/49개 오버레이 ID와 소스 경로/16개 job 상태 대조 assertion 통과. +- `node scripts/validate-episode-governance.js`: 5개 에피소드 통과. +- `node scripts/decision-status.js --validate`: 결정 큐 스키마·증거 통과. +- `node scripts/check-panel-assets.js` 및 `git diff --check`: 통과. +- EP002 기존 자산 전체의 용량 경고와 hard limit 검사는 JSON 증거에 기록. + 새 이미지 자산은 0개다. +- 범용 JSON Schema 추가 검증은 기본·번들 Python 모두 jsonschema 미설치로 실행 불가. + 저장소 전용 governance와 결정 큐 스키마 검증은 통과했다. 시각 QA는 이번 범위 밖이다. + +## CLE5 전달 관찰과 다음 작업 + +관찰: 생성 job 완료, SVG 파일 존재, 오버레이 검토 완료는 서로 다른 상태다. +근거 `reports/CLE3-EP002-STATUS-AUDIT-20260909.json`에 카운트, ID 목록, +job 대조 결과와 panels/jobs/overlays/p10-4 SVG/gates의 SHA-256을 보존했다. +창작 선호로 승격하지 않는다. + +다음 후보는 p10-1/p10-4 오버레이 검토 또는 GitHub WIP 확인 후 p11-2/p11-4 생성 배치다. +EP002 페이지 매핑, Story/Character/Storyboard Lock 및 EP001 동률 후보는 사람 결정 대기다. +추적 기한은 2026-09-09 10:11 KST이며 이번 06시 실행 시점에는 기한 전이다. +EP002 release는 Phase 5 선행 조건 대기다. PR #39의 resolved 상태는 유지한다. + +## Git 인계 + +이번 자동화 소유의 state, creation-memory, MANIFEST, 이 보고서와 JSON 증거만 +feature/cle3-20260909-ep002-status-audit에 커밋·push 대상으로 한다. +원격 작업의 실제 성공/실패와 커밋 ID는 자동화 memory 및 최종 응답에 기록한다. +main 병합·release 승인·deploy는 수행하지 않는다. diff --git a/schemas/decision-queue.schema.json b/schemas/decision-queue.schema.json index 8b652f0..3c939ed 100644 --- a/schemas/decision-queue.schema.json +++ b/schemas/decision-queue.schema.json @@ -3,44 +3,149 @@ "title": "CLE3 Decision Waiting Queue", "type": "object", "additionalProperties": false, - "required": ["version", "items"], + "required": [ + "version", + "items" + ], "properties": { - "version": { "const": 1 }, + "version": { + "const": 1 + }, "items": { "type": "array", "items": { "type": "object", "additionalProperties": false, - "required": ["id", "episode_id", "kind", "owner", "request", "status", "waiting_since", "waiting_since_basis", "due_at", "overdue_action", "source_path", "evidence"], + "required": [ + "id", + "episode_id", + "kind", + "owner", + "request", + "status", + "waiting_since", + "waiting_since_basis", + "due_at", + "overdue_action", + "source_path", + "evidence" + ], "properties": { - "id": { "type": "string", "minLength": 1 }, - "episode_id": { "type": "string", "pattern": "^EP\\d{3}$" }, - "kind": { "enum": ["merge", "gate", "rebaseline", "candidate"] }, - "owner": { "type": "string", "minLength": 1 }, - "request": { "type": "string", "minLength": 1 }, - "status": { "enum": ["pending", "resolved"] }, - "waiting_since": { "type": "string", "format": "date-time" }, - "waiting_since_basis": { "enum": ["tracking_started", "pull_request_created", "human_request"] }, - "due_at": { "type": "string", "format": "date-time" }, - "overdue_action": { "type": "string", "minLength": 1 }, - "source_path": { "type": "string", "minLength": 1 }, - "evidence": { "type": "array", "minItems": 1, "items": { "type": "string", "minLength": 1 } }, - "pr_number": { "type": "integer", "minimum": 1 }, - "gate_id": { "enum": ["story-lock", "character-lock", "storyboard-lock", "release"] }, - "prerequisite": { "const": "phase5_completed" }, + "id": { + "type": "string", + "minLength": 1 + }, + "episode_id": { + "type": "string", + "pattern": "^EP\\d{3}$" + }, + "kind": { + "enum": [ + "merge", + "gate", + "rebaseline", + "candidate" + ] + }, + "owner": { + "type": "string", + "minLength": 1 + }, + "request": { + "type": "string", + "minLength": 1 + }, + "status": { + "enum": [ + "pending", + "resolved" + ] + }, + "waiting_since": { + "type": "string", + "format": "date-time" + }, + "waiting_since_basis": { + "enum": [ + "tracking_started", + "pull_request_created", + "human_request" + ] + }, + "due_at": { + "type": "string", + "format": "date-time" + }, + "overdue_action": { + "type": "string", + "minLength": 1 + }, + "source_path": { + "type": "string", + "minLength": 1 + }, + "evidence": { + "type": "array", + "minItems": 1, + "items": { + "type": "string", + "minLength": 1 + } + }, + "pr_number": { + "type": "integer", + "minimum": 1 + }, + "gate_id": { + "enum": [ + "story-lock", + "character-lock", + "storyboard-lock", + "release" + ] + }, + "prerequisite": { + "const": "phase5_completed" + }, "resolution": { "type": "object", "additionalProperties": false, - "required": ["decided_by", "decided_at", "decision", "evidence"], + "required": [ + "decided_by", + "decided_at", + "decision", + "evidence" + ], "properties": { - "decided_by": { "type": "string", "minLength": 1 }, - "decided_at": { "type": "string", "format": "date-time" }, - "decision": { "type": "string", "minLength": 1 }, - "evidence": { "type": "array", "minItems": 1, "items": { "type": "string", "minLength": 1 } } + "decided_by": { + "type": "string", + "minLength": 1 + }, + "decided_at": { + "type": "string", + "format": "date-time" + }, + "decision": { + "type": "string", + "minLength": 1 + }, + "evidence": { + "type": "array", + "minItems": 1, + "items": { + "type": "string", + "minLength": 1 + } + } } + }, + "ttl_policy": { + "type": "string", + "minLength": 1, + "description": "무응답 시 기본안 진행 규칙. 일반 24h, rebaseline 72h, approval-critical 무기한." } } } } } -} +} \ No newline at end of file diff --git a/state.json b/state.json index 6375efc..068b380 100644 --- a/state.json +++ b/state.json @@ -95,7 +95,8 @@ "phase4": { "status": "active", "prompt_version": "v2-toriyama-internal", - "note": "49/57 패널 생성. text-overlays.json에는 49개 생성 패널이 기록되고, 최종 SVG는 45/49 생성 상태다. p8-2~p8-4의 가족 식탁 패널은 script/storyboard 매핑 충돌 때문에 오버레이를 needs_review로 보류했으며 SVG는 만들지 않았다. generation-jobs의 페이지 7, 8, 10은 각각 4/4 생성 완료 상태다. p10-1과 p10-4는 draft 오버레이·SVG 렌더링 대기이고, p10-2와 p10-3은 대사 없는 최종 SVG까지 렌더링했다. 공통 Series Bible v1.0과 EP002 delta를 합성해 사용한다. p4-2~p4-4는 생성·1차 시각 검토를 마쳤고, p5-2~p5-4와 p6-1~p6-4는 생성·오버레이·최종 SVG 렌더링까지 완료했다. p7-2는 독백 오버레이 draft, p7-3과 p7-4는 생성 후보 선택 및 SVG 렌더링을 마쳤다." + "note": "매핑 결정 완료(콘티 16p 기준, reports/CLE3-EP002-PAGE-MAPPING-DECISION-20260915.md). 잔여 8칸(p11-2,p11-4,p12-4,p13-1,p13-2,p13-4,p14-2,p15-3) 생성 및 오버레이 needs_review 20건 정리 재개. text-overlays.json 진행 필요.", + "last_decision": "ep002-page-mapping resolved 2026-09-15" }, "phase5": { "status": "pending" @@ -260,5 +261,5 @@ "previous_score": 45 } ], - "last_updated": "2026-09-07T21:03:37Z" -} + "last_updated": "2026-09-14T21:03:09.307673+00:00" +} \ No newline at end of file