Fix Critical 1 — Track B 10 영역 closure status
post-closure E2E follow-up — e2e-review-fix-v1 (original C1-C9 marathon 의 일부 아님; marathon closure 후 별도 follow-up bug-fix range):follow-up range in progress — 자세한 commit 은
- W1 — shot_extract v15: user.md rule_type enum 목록 format-brace escape (
str.formatKeyError 크래시 fix, 금월도 E2E blocker)- W2 — floor_plan_prompt test-pin sync (v4→v5)
- W1 fix-up — test_c8_area7 W2a pin sync (shot_extract v15 / shot_extractor 2.4.0)
- W3 — entity_extractor_v2 v12: active stem(system.md 변형 예시 / turn0_style.md hardcoded 문화권 예시) 닫힌 목록·시나리오 leak 추상화 — C8 v11 turn2.md 는 dead stem (cosmetic)
- W4 — C1 render_prompt_card build_id_policy perception_mode
.lower()제거 (consumer-boundary tighten)git log참조.
00 전체 개요 + 우선순위 #
194 audit finding 중 Area #1~#7d + Carry-D7d-1/A099/A100/P021 closure 후 진입했던 C1-C10 actionable list. C1-C9 marathon 9 영역 전부 closed, C10 = future / superseded by agentic editing direction. Codex narrow correction 흡수.
10 영역 closure matrix
| # | Area | Tier | Cost | 본질 | Status |
|---|---|---|---|---|---|
| 1 | C1 representation_binding / perception_mode | α | medium | code regex + LLM closed-list + schema 3-way drift | ✓ CLOSED 81abd24 |
| 2 | C2 owned_object_usage[] echo | α | medium-large | redraw verb closed whitelist + hard fail redraw_violation | ✓ CLOSED W1-W4 |
| 3 | C3 detail_steps focus rewrite | α | small | blind prompt body mutation 폐기 | ✓ CLOSED W1-W2 |
| 4 | C7 #12 shot_dependency_t2i drift | β | small | person/body lexicon ban (structured signal 필요) | ✓ CLOSED W1-W2 |
| 5 | C6 #10 detail_steps 색감-감정 | β | small | 한국어 감정→색감 closed list | ✓ CLOSED W1-W2 |
| 6 | C9 L-7 body-light verb | β | small | closed verb list 5 + forbidden/recommended examples 5+5 | ✓ CLOSED W1-W2 |
| 7 | C4 #8 Background / floor-plan classifier | β | medium-large | INDOOR/OUTDOOR Korean clue + 색깔 매핑 | ✓ CLOSED W1-W5 |
| 8 | C5 #9 Action segment SOT | β | medium | 시간 연결어 + visible-human-action lexicon | ✓ CLOSED W1-W4 |
| 9 | C8 #7 잔여 sub-area marathon | γ | large | scenario leak + closed-list (15+ prompt + 7 code carry) | ✓ CLOSED W1a-W5 |
| 10 | C10 Future structured carries | δ | deferred | field-shape migration (P021/A099/A100-structured) | future · superseded by agentic editing direction |
잔여 진입 순서 (post-C2, Codex APPROVED)
0. C1 perception_mode enum SOT ✓ CLOSED (push 81abd24, 2026-05-20+) 1. C2 owned_object_usage[] echo ✓ CLOSED (W1-W4, 2026-05-20+) 2. C3 detail_steps focus rewrite ✓ CLOSED (W1-W2, 2026-05-20+) 3. C7 #12 shot_dependency_t2i drift ✓ CLOSED (W1-W2, 2026-05-20+) 4. C6 #10 detail_steps 색감-감정 ✓ CLOSED (W1-W2, 2026-05-20+) 5. C9 L-7 body-light verb abstraction ✓ CLOSED (W1-W2, 2026-05-20+) 6. C4 #8 background classifier ✓ CLOSED (W1-W5, 2026-05-20+) 7. C5 #9 action segment SOT ✓ CLOSED (W1-W4, 2026-05-20+) 8. C8 #7 residual split (a)/(c)/(d) + code carry ✓ CLOSED (W1a-W5, 2026-05-20+) 9. C10 Carry-P021/A099/A100-structured [future / superseded by agentic editing direction]
DC Doctrine + Boundary Preserve #
4-Gate Boundary Doctrine
Closed Area Boundaries — 변경 0 의무
_ALLOWED_DIRECTIONALITY_CLASSES@render_prompt_card.py:124frozenset (5-enum)_REPRODUCTION_SURFACE_CLASSES@:134frozenset- fail-fast @
:1038-1043(directionality_class_missing/invalid) shot_staging/13/schema.json:80-86directionality_class enum required
KEEP_ELEMENT_KINDS = frozenset({"environment", "static_prop"})@keep_elements.py:25-26- 본체 변경 0, description drift 만 fix 허용 (C7 영역)
NO VLM Hard Constraint
VLM (Vision Language Model) 기반 판단 / 검증 / 성능 전제 / 의존 구조 절대 금지 (사용자 명시 2026-05-18). 대체 = structured SOT + regex/lexicon 권한 박탈 + prompt hygiene + canary/audit log 검증. Production image gen 정상 모듈 사용은 무관.
C1 representation_binding / perception_mode enum SOT #
code regex + LLM closed-list + schema 3-way drift (mirror schema gap). ✓ CLOSED (2026-05-20+) — W1 4655741 / W2 c486993 / W3 cfc0347 / W4 closure. Codex per-wave APPROVED.
C1 CLOSED (2026-05-20+): shot_staging v14perception_modeJSON enum 8-token 강제 (mirror추가) +backend/app/core/perception_mode.pyhelper 신설 + render_prompt_card/detail_steps helper consume + scene_detail v29 consumer prompt cross-reference. spec/plan =docs/superpowers/specs|plans/2026-05-20-c1-perception-mode-enum-sot-v1-*.md. 잔여 = C2~C10.
문제 본질
shot_staging schema 안 perception_mode 는 type:string + description 7-token, JSON enum 강제 0. mirror 가 schema description 에도 부재. consumer code 는 4-token literal subset 비교 ((perception_mode or "").lower() in (...)). 결과:
- arbitrary string silent miss — LLM 이 description 외 token (
"screen","lens","camera_feed"등) emit 시 모두 통과 - 3-way description drift — prompt 4-token / code 4-token / schema description 7-token.
mirror가 prompt+code 안에는 있으나 schema description 에는 없음 - cascade gap —
detail_steps._perception_guides6-key dict 에mirror부재. mirror 들어오면 generic fallback path
4-Layer Source Map (Q0-light LOCKED)
prompts/_base/shot_staging/13.../schema.json:18type:string + description 7-token (direct/hallucination/dream/memory/reflection/through_device/projection) — mirror 부재, JSON enum 강제 0
enum 강제 8-token (mirror 추가)backend/app/core/steps/render_prompt_card.py:1144-11464-tuple literal ("reflection","mirror","through_device","projection")
REPRODUCTION_PERCEPTION_MODES closed-world frozenset consumebackend/app/core/steps/detail_steps.py:2221-2231 perception guide blocknon-direct branch + 6-key dict (mirror 부재) + generic fallback @ :2231
prompts/_base/scene_detail/28.../system.md:644-token closed list — 본 file 1 site only
Cascade Audit — 4 material passthrough sites
| site | actual call |
|---|---|
| render_prompt_card.py:827 | pm = perception_mode or RENDER_MODE_DIRECT (default coerce) |
| render_prompt_card.py:1144 | reproduction subset routing branch (4-tuple literal, single material decision) |
| render_prompt_card.py:3449 | build_render_strategy(... perception_mode=perception_mode, ...) passthrough |
| render_prompt_card.py:3486 | build_id_policy(... perception_mode=perception_mode, ...) passthrough |
제외: :780, :857, :884, :942, :3409 = signature/dict-key/parameter only (material 아님) / :963, :1098, :1181, :2321, :3545 = comment lines
8 Open Questions
수정 방법 (step-by-step)
- spec v1 drafting —
docs/superpowers/specs/2026-MM-DD-c1-perception-mode-enum-sot-v1-design.md. OQ-1~6 결정 흡수. - plan v1 drafting — W1-W4 atomic execution plan + gate verify scripts.
- W1: shot_staging v14 producer 신설
prompts/_base/shot_staging/14.YYYYMMDDHHmm/ ├── schema.json (perception_mode → JSON enum 강제 8-token) └── system.md (perception_mode 전용 section 신규 추가)
현 v13 system.md 안 perception_mode 전용 section 부재 (line 57 "reflection" = composition technique 일부만). v14 system.md 에 enum emit instruction 신규.
version_registry sync + step_manifest
schema_versionbump 결정 (OQ-5). - W2: REPRODUCTION_PERCEPTION_MODES helper 신설
backend/app/core/perception_mode.py (신설 — OQ-2 (b)) ─ PERCEPTION_MODES: frozenset[str] = frozenset({ "direct", "hallucination", "dream", "memory", "reflection", "mirror", "through_device", "projection", }) ─ REPRODUCTION_PERCEPTION_MODES: frozenset[str] = frozenset({ "reflection", "mirror", "through_device", "projection", }) ─ def is_reproduction_perception(pm: str) -> bool: ... ─ def get_perception_guide(pm: str) -> str: ... # KeyError fail-fast - W2: render_prompt_card.py:1144 reflection branch rewrite
- if (perception_mode or "").lower() in ( - "reflection", "mirror", "through_device", "projection", - ): + from app.core.perception_mode import is_reproduction_perception + if is_reproduction_perception(perception_mode or ""):
- W2: detail_steps.py:2221-2231 perception guide block rewrite
- _perception_guides = { - "through_device": "...", - "hallucination": "...", - "dream": "...", - "memory": "...", - "reflection": "...", - "projection": "...", - } - _pguide = _perception_guides.get(perception, f"이 장면은 {perception}으로...") # generic fallback + _perception_guides = { + "through_device": "...", + "hallucination": "...", + "dream": "...", + "memory": "...", + "reflection": "...", + "mirror": "이 장면은 거울 반사이므로 좌우 반전된 구도 + 표면 반사 특성을 고려하세요.", + "projection": "...", + } # non-direct 7-key full coverage + try: + _pguide = _perception_guides[perception] + except KeyError: + raise AppError( + code="detail_steps.perception_mode_unknown", + message=f"perception_mode={perception!r} not in PERCEPTION_MODES enum", + ) - W3: scene_detail v29 consumer prompt
prompts/_base/scene_detail/29.YYYYMMDDHHmm/ └── system.md (line 64 4-token closed list → enum cross-reference)
변경 예시:
- - `perception_mode` 가 mirror / reflection / through_device / projection 이면 ... + - `perception_mode` ∈ REPRODUCTION_PERCEPTION_MODES (helper SOT) 이면 ...
- W3: integrated test 신설
backend/tests/integration/test_c1_perception_mode_enum_sot.py ─ Gate G1: shot_staging v14 schema enum strict (8-token, mirror 포함) ─ Gate G2: render_prompt_card reproduction branch uses helper (not literal) ─ Gate G3: detail_steps non-direct 7-key full coverage + KeyError fail-fast ─ Gate G4: scene_detail v29 system.md 4-token literal 부재 ─ Gate G5: version_registry + step_manifest 4-point sync ─ Gate G6: NO VLM canary + closed-world residue catalog 0 count
- W4: closure docs atomic — spec frontmatter status closed + roadmap §5 신설 area entry + audit 02 §15 (신설) C1 closure + 본 doc updated marker
Boundary Preserve (Area C closed, 변경 0)
_ALLOWED_DIRECTIONALITY_CLASSESfrozenset @render_prompt_card.py:124_REPRODUCTION_SURFACE_CLASSESfrozenset @:134- fail-fast @
:1038-1043(directionality_class_missing/invalid) shot_staging/13/schema.json:80-86directionality_class 5-enum required
차원 분리 의무 (Codex Guard 1): perception_mode 와 directionality_class 는 같은 helper 에 묶어도 field 분리. directionality_class 영역은 Area C closed boundary preserve.
C2 scene_detail_owned_judge owned_object_usage[] echo schema #
audit 03 P0 (L-2). redraw verb closed whitelist + hard fail redraw_violation (open-world verb 누락 silent miss). ✓ CLOSED (2026-05-20+) — W1 eb8343c / W2 55f54ab / W3 bc05dc7 / W4 closure. scene_detail v30 owned_object_usage[] echo + owned sentinel v2 + scene_detail_owned_judge v4 echo-verify-only. Codex per-wave APPROVED.
문제 본질
scene_detail_owned_judge LLM 이 redraw verb closed whitelist + anchor/reference phrase examples + spatial/framing examples + adjective/state examples + 5-step priority closed list 로 owned 객체 redraw 여부 판정. verdict redraw_violation = hard fail. 새 verb 누락 silent pass / 의도외 verb 매칭 over-trigger.
현재 site (Channel C confirmed)
prompts/_base/scene_detail_owned_judge/3.../system.md:18-20create / render / draw / generate / paint / build / furnish) + 추가/배치군 (add / place / put / insert / hang / mount / install / set up)scene_detail_owned_judge/3.../system.md:37-58ambiguous → anchor_reference defaultbackend/app/core/steps/_owned_judge.py:99-116run_owned_judge() — violations list shape 검증만 (실제 판단 = judge prompt 의 verb whitelist 의존)backend/app/core/steps/detail_steps.py:2940-2970_owned_helpers.build_owned_sentinel + assert_owned_sentinel_shape + has_redraw_violation + run_owned_judge — 이미 owned sentinel/contract path 실존prompts/_base/scene_detail/28.../detail_schema.jsonOQ-C2 결정 의무 (Codex Guard 2)
usage_kind: enum [redraw/anchor/absent] + per-variation 안 owned_list 모든 token echo (absent 포함, 검증 완전성 높음, array size 큼)(b) Present usages only + owned_set_hash —
usage_kind: enum [redraw/anchor] + present only + owned_set_hash: str sibling field (expected owned set hash 일치 검증, array size 절약)
수정 방법
- Q0-light source verify — 4-layer source map (Producer schema / Producer prompt / Judge prompt / Sentinel consumer) + OQ-C2 결정 ((a)/(b))
- spec v1 + plan v1 drafting (Codex 의논)
- W1: scene_detail v_next producer schema 신설
v_next 정책: C1 이 v29 bump 한 경우 → C2 = v30 (또는 C1 v29 미bump 시 C2 = v29). C1+C2 같은 spec/plan 으로 explicitly 묶는 경우만 동일 v29 안에서 bundle.
prompts/_base/scene_detail/v_next.../detail_schema.json ─ variations[].owned_object_usage[]: array<{ owned_token: str, usage_kind: enum [redraw / anchor / absent], # OQ-C2 (a) 채택 시 source_phrase: str # t2i_prompt 안 등장 phrase }> - W1: scene_detail v_next producer prompt — owned_object_usage echo instruction (OQ-C2 결정 반영, v_next 정책 C1 cascade dependent)
- W2: Sentinel/contract path 재사용 (Codex correction crucial)
backend/app/core/steps/detail_steps.py:2940-2970 ─ 기존 owned sentinel/contract path 재사용 ─ sentinel schema/signature 변경 여부 = C2 spec OQ로 결정 ─ parallel path 신설 절대 금지
주의:_owned_helpers.build_owned_sentinel()현재 signature (_owned_helpers.py:149-156) 에 echo field 부재. sentinel field 변경 가능성은 C2 spec 안에서 OQ로 결정. - W3: scene_detail_owned_judge v4 prompt rewrite
prompts/_base/scene_detail_owned_judge/v4.../system.md ─ redraw 동사 closed whitelist 폐기 (현재 :18-20) ─ anchor/reference phrase examples 폐기 (현재 :37-58) ─ 5-step priority 폐기 (현재 :54-58) ─ echo verify only: variations[].owned_object_usage[] 와 t2i_prompt cross-check 만
- W3: judge consumer cross-check 추가
backend/app/core/steps/_owned_judge.py ─ run_owned_judge() echo cross-check 추가 — owned_object_usage echo vs t2i_prompt 안 owned_list token 등장 verify
- W4: integrated test + closure docs
Boundary Preserve
- 기존 owned sentinel/contract path 재사용 — parallel path 신설 0
_owned_helpers.build_owned_sentinel+assert_owned_sentinel_shape+has_redraw_violation시그니처 변경 여부 = C2 spec OQ로 결정 (echo field 추가 필요 시 narrow extension)- verdict enum (
redraw_violation/anchor_reference) 보존 - scene_detail t2i_prompt body shape 변경 0
C3 detail_steps focus rewrite 폐기 (upstream fail-fast 우선) #
audit 01 §7 (Excluded — Closed ID syntax cleanup) detail_steps cleanup 을 roadmap §4.4/§225 가 prompt body mutation 으로 재분류. ✓ CLOSED (2026-05-20+) — W1 4740b03 / W2 closure. Codex per-wave APPROVED. (audit 01 #10 t2i_review 와는 별건 — C3 무관.)
C3 CLOSED (2026-05-20+): OQ option (b) upstream token-complete fix — _strip_invalid_sids() module-level helper 신설 (무효 closed-world SID + 후행 소유격 + 인접 공백 token-complete 제거, subn no-match no-op, semantic 재삽입 0) + VE-violation 강제 제거 2 site (t2i_prompt pure_remove / representative_moment bad_in_sfp) helper 호출 교체 + cleanup loop :2872-2882 폐기. test_c3_detail_steps_focus_rewrite.py G1-G7 신설. fail-fast (option a) 미채택 — VE-violation 강제 제거 graceful degradation 보존. spec/plan = docs/superpowers/specs|plans/2026-05-20-c3-detail-steps-focus-rewrite-v1-*.md. 잔여 = C7~C10.
현재 site
| site | code |
|---|---|
| backend/app/core/steps/detail_steps.py:2876-2886 |
# 빈 ID 패턴 정리 (엑스트라 인물 등으로 인한 빈 문자열 잔류) ← :2876
for var in t2i_vars:
prompt = var.get("t2i_prompt", "")
if prompt:
# "showing lying_down" → "showing lying_down"
prompt = re.sub(r'\s{2,}', ' ', prompt) # :2881
# "focus on 's" → "focus on the figure's"
prompt = re.sub(r"focus on\s+'s", "focus on the figure's", prompt) # :2883
# " 's " (빈 소유격) → "the figure's "
prompt = re.sub(r"\s+'s\s+", " the figure's ", prompt) # :2885
var["t2i_prompt"] = prompt.strip() # :2886
|
Code comment: # 빈 ID 패턴 정리 (엑스트라 인물 등으로 인한 빈 문자열 잔류) — empty C##/O## ID 잔류로 인한 broken focus on 's cleanup 목적.
Codex Correction
단순 1 block delete 금지 — malformed prompt 어디서 생기는지 (empty C##/O## ID emit source) upstream 추적 + 회귀 테스트 의무. fail-fast 설계 후 폐기.
수정 방법
- Upstream investigation — empty C##/O## ID emit source 추적
render_prompt_card/scene_detailproducer 안 empty ID emit 가능 path 식별outlook_dedup/scene_reference_service안 ID rewrite path 안 empty 잔류 caset2i_visual_converter[엔티티명] 마커 치환 안 empty 잔류 case
- fail-fast 결정
- 옵션 (a) 폐기 + fail-fast: empty ID 검출 시 producer 또는 helper layer 안 fail-fast (AppError raise) — Gate 4 No Silent Fallback
- 옵션 (b) upstream fix: empty ID emit source 자체 수정 → cleanup 자동 불필요
- 옵션 (c) cleanup 유지 + diagnostic log only — 단순 cleanup 보존, 단 warning emit (역행 위험)
- 회귀 test 신설
backend/tests/integration/test_detail_steps_focus_rewrite_regression.py ─ Test 1: empty ID 발생 시나리오 (extra 인물 / outlook 누락 / marker 치환 실패) canary ─ Test 2: cleanup 폐기 후 malformed prompt downstream 영향 측정 ─ Test 3: fail-fast path verify (옵션 (a) 채택 시)
- 3 substitution 폐기 commit
backend/app/core/steps/detail_steps.py:2876-2886 ─ 3 substitution block delete (:2881, :2883, :2885) - re.sub(r'\s{2,}', ' ', prompt) - re.sub(r"focus on\s+'s", "focus on the figure's", prompt) - re.sub(r"\s+'s\s+", " the figure's ", prompt) ─ upstream fail-fast 또는 fix 적용 후만
C7 Area #12 — shot_dependency_t2i schema drift #
audit row A059/A060/A061/A063. closed area D-next-min description vs system.md drift + 11-lexicon person/body ban list non-enforced. ✓ CLOSED (2026-05-20+) — W1 c8d2391 / W1 fix-up 1 e4ee3ed / W2 closure. Codex per-wave APPROVED.
C7 CLOSED (2026-05-20+): OQ-C7 option (a) — keep_elements[].subject_kind structured signal enum [non_human_visual_element / human_or_character_reference] required field 신설 (v8 prompt-pack 8.202605200618/). producer LLM 이 각 entry 의 인물/비인물 여부를 explicit emit → validate_keep_elements_entry() 가 enum 소비 + human_or_character_reference fail-fast (routing layer 안내). system.md false "fail-fast 거부" claim 을 subject_kind 기반 TRUE 진술로 정정 + 11-lexicon ban list 폐기 + schema description cleanup. version cascade — schema_version 3→4 / MODULE_VERSIONS 1.5.0 / prompt_dependency v8 / scene_context_loader envelope 3→4. KEEP_ELEMENT_KINDS + kind enum check 본체 + _LEGACY_SCHEMA_BUMP_ALLOWLIST 변경 0. code-side lexicon validator 미추가 (structured signal 소비만). test_c7_shot_dependency_subject_kind.py G1-G9 신설. spec/plan = docs/superpowers/specs|plans/2026-05-20-c7-shot-dependency-subject-kind-v1-*.md. 잔여 = C6/C9/C4/C5/C8/C10.
문제 본질
shot_dependency_t2i schema 안 keep_elements[].label: type:string + description "PERSON/CHARACTER/BODY descriptions are FORBIDDEN" instruction. kind: enum [environment, static_prop] 만 schema-strict. label string 안 11-lexicon ban (human/person/character/body/figure/man/woman/detective/prisoner/child/silhouette) 은 prompt 안 instruction only, code/schema validation 0 — silent miss.
Codex Guard 3 Crucial
kind enum 만으로 label string 의 person/body 단어 막을 수 없다. prompt lexicon 지우려면 upstream structured signal 또는 code/schema validation 필요. code-side banned-list lexicon 추가는 regex/오염 제거 목표와 충돌 → 최후수단.
현재 site
| site | 현재 상태 |
|---|---|
| shot_dependency_t2i/7.../schema.json:28 | "No add/replace/adjust instructions. No conditional phrasing (no 'if...', 'when...', 'only if')." |
| shot_dependency_t2i/7.../schema.json:42 | "character state (dead/unconscious/pose) is handled by separate layers (scene_consistency / character_state_variant / semantic_contract_router), not keep_elements." |
| shot_dependency_t2i/7.../system.md:156 | 11-lexicon ban: human / person / character / body / figure / man / woman / detective / prisoner / child / silhouette |
| shot_dependency_t2i/7.../system.md:161-163 | "enum 외 값 절대 금지 (immobilized_character / character / pose 등)" description-only |
| backend/app/core/keep_elements.py:32-90 | validate_keep_elements_entry() — label은 isinstance(str)만 check, kind enum check만. label substring lexicon validation 0 |
OQ-C7 결정 의무 (Codex Guard 3)
enum [non_human_visual_element / human_or_character_reference] per-entry — kind 와 차원 분리 (kind = 환경/소품, subject_kind = 인물/비인물)(b) contains_person_reference —
bool per-entry — boolean signal
kind: environment/static_prop 와 의미 중복 (Codex 명시)
수정 방법
- Q0-light source verify — 4-layer source map + OQ-C7 결정 ((a)/(b))
- Producer schema 1순위 (structured signal 우선)
prompts/_base/shot_dependency_t2i/v8.../schema.json ─ keep_elements[].subject_kind: enum [non_human_visual_element / human_or_character_reference] # OQ-C7 (a) 또는 ─ keep_elements[].contains_person_reference: bool # OQ-C7 (b) ─ producer LLM 이 explicitly emit ─ producer schema 안 enum required + additionalProperties false
- Schema description cleanup
prompts/_base/shot_dependency_t2i/v8.../schema.json:28,42 ─ "No add/replace/adjust instructions" closed list → 일반 instruction ─ "character state ... separate layers" prose → cross-reference 한 줄
- Producer prompt cleanup
prompts/_base/shot_dependency_t2i/v8.../system.md ─ line 156 11-lexicon ban list **structured signal 도입 후만 폐기** ─ line 161-163 enum 외 값 description → schema cross-reference
- Code validation 추가 (structured field consume)
backend/app/core/keep_elements.py:32-90 ─ validate_keep_elements_entry() 에 subject_kind / contains_person_reference enum check 추가 ─ subject_kind == "human_or_character_reference" 시 AppError fail-fast (keep_elements 외 layer 라우팅)
- code-side banned noun lexicon 추가는 최후수단 — structured signal 실패 case 만 검토. 1순위 진입 = 목표 (regex/오염 제거) 역행
Boundary Preserve
- Area D-next-min closed boundary:
KEEP_ELEMENT_KINDS = frozenset({"environment", "static_prop"})본체 변경 0 validate_keep_elements_entry()kind enum check 본체 보존, 신규 field validation 만 추가
C6 Area #10 — detail_steps 색감-감정 closed-list 매핑 #
audit row P034. 한국어 감정→시각 색감 closed-list 매핑 (Prompt Closed-List Ban 위반, code-side scenario leak). ✓ CLOSED (2026-05-20+) — W1 9f64928 / W2 closure. Codex per-wave APPROVED.
C6 CLOSED (2026-05-20+): OQ-C6 = (a)/(c) hybrid generic instruction 치환. detail_steps.py:2327 의 한국어 감정→색감 closed-list (긴장=어둡고 대비 강한, 슬픔=탈색/청색, 분노=적색) 한 줄을 generic instruction ("색감은 beat의 정서와 씬 분위기에서 직접 derive하고, 특정 정서에 고정 색조를 대응시키도록 강요하지 마세요") 으로 치환 — emotion-drives-color 의도 보존, 특정 감정→색 고정 매핑 제거. 옵션 (b) color_palette_intent enum 미채택 — scene_detail schema 의 camera_effect free-string 이 이미 색감 capture (closed-list 강제 X design intent). 형제 줄 2326/2328 (시간대·색온도·조명 방향 = 객관적 촬영 범주) byte-for-byte 불변 + schema/prompt-pack/version artifact 변경 0. test_scene_detail_analyze_one.py C6 regression test G1-G5 신설. spec/plan = docs/superpowers/specs|plans/2026-05-20-c6-detail-steps-color-emotion-v1-*.md. 잔여 = C9/C4/C5/C8/C10.
현재 site
| site | code |
|---|---|
| backend/app/core/steps/detail_steps.py:2327 |
"- 감정에 맞는 색감(긴장=어둡고 대비 강한, 슬픔=탈색/청색, 분노=적색 등)\n" (W1 generic instruction 으로 치환됨)"[조명/색감 판단]" prompt instruction 안 한국어 감정→색감 closed list mapping (single line) |
수정 옵션
- (a) 폐기 — LLM 이 색감 자체 자유 결정 (운영 자유도 ↑)
- (b) color_palette_intent enum 흡수 — producer 가 색감 의도 structured emit, code consume (Codex 권장)
- (c) prompt template 으로 이동 — code 안 한국어 prose 폐기, prompt 안 generic 으로 이동 (보수적)
수정 방법 (옵션 (b) 채택 가정)
- Producer schema 신설
shot_staging or scene_detail v_next schema ─ color_palette_intent: { intent_kind: enum [tense / sad / angry / calm / hopeful / oppressive / nostalgic / ...], descriptor: str # NL elaboration } ─ 또는 단순화: color_intent_description: str (free string) - Producer prompt — color_palette_intent emit instruction
- Code 폐기
backend/app/core/steps/detail_steps.py:2305 - "- 감정에 맞는 색감(긴장=어둡고 대비 강한, 슬픔=탈색/청색, 분노=적색 등)\n" + # color_palette_intent → producer LLM emit, code consume only
Boundary Review
C1 cascade boundary:detail_steps.py:2223-2230_perception_guides6-token dict 안 한국어 prose mapping = C1 representation_binding 영역. 본 site (line 2305) 와 차원 다름. 분리 영역 유지.
C9 L-7 — scene_detail body-light verb forbidden list 추상화 #
audit 03 L-7 단독 발견. closed verb list 5 + forbidden/recommended phrasing 예시 + recommended verb list → generic semantic principle 로 줄이는 prompt-only hygiene. ✓ CLOSED (2026-05-20+) — W1 04016da / W2 closure. Codex per-wave APPROVED.
C9 CLOSED (2026-05-20+): OQ-C9 = (c) narrow Rule B rewrite + (a) 예시 전폐. scene_detail v31 prompt-pack — system.md Rule B 섹션의 4개 닫힌 enumeration (closed verb list cut/slice/split/carve/bisect quoted-comma + slash form 2회 + forbidden 예시 5건 + recommended 예시 5건 + recommended verb list) + sub-header 3개를 단일 generic semantic principle 1문단으로 추상화 — "빛/색은 표면에 머무는 효과로 묘사, 신체를 물리적으로 변형·절단하듯 쓰지 마라". header + WHY 문단 byte-identical 보존, 닫힌 영문 토큰·예문 목록 0. detail_schema.json v30→v31 byte-identical (sha256 동일), SCENE_DETAIL_SCHEMA_VERSION / STEP_MANIFEST schema_version 12 변경 0. version cascade 4-point — SCENE_DETAIL_PROMPT_VERSION 31.202605200805 / MODULE_VERSIONS 1.31.0 / prompt_dependency scene_detail/v31. test_c9_scene_detail_body_light_verb.py G1-G7 신설. 무관 섹션 (실루엣 평면 cutout / windshield slice framing 예시) string boundary preserve. spec/plan = docs/superpowers/specs|plans/2026-05-20-c9-scene-detail-body-light-verb-v1-*.md. 잔여 = C4/C5/C8/C10.
현재 site
| site | 현재 상태 |
|---|---|
| scene_detail/30.202605200303/system.md:74 → v31 31.202605200805 | "빛이 신체에 직접 작용하는 동사(cut, slice, split, carve, bisect)를 신체 부위와 결합하지 마라." (W1 v31 generic semantic principle 로 추상화 폐기. audit/index 의 "28..." 은 stale — C1 v29 / C2 v30 bump 미반영, 본 W2 정정) |
| scene_detail/30.202605200303/system.md:78-82 | forbidden phrasing 예시 5건 (red light cuts across her eyes 등) (W1 v31 전폐. audit/index 의 "4건 :78-81" 은 stale — 실제 5건 :78-82, 본 W2 정정) |
| scene_detail/30.202605200303/system.md:94-95 | recommended verb list (falls on / washes / reflects on / catches on / pools on / glows across) + closed verb list 반복 (cut / slice / split / carve / bisect slash form) (W1 v31 전폐) |
수정 방법 (W1 적용 완료)
- scene_detail v31 prompt rewrite — v30
30.202605200303→ v3131.202605200805prompts/_base/scene_detail/31.202605200805/system.md Rule B 섹션 ─ v30 (폐기): - closed verb list cut/slice/split/carve/bisect (quoted-comma form + slash form 2회) - forbidden phrasing 예시 5건 - recommended phrasing 예시 5건 - recommended verb list (falls on/washes/reflects on/catches on/pools on/glows across) ─ v31 (적용): - generic semantic principle 1문단 — "빛/색은 표면(눈에 보이는 표면·재질·영역)에 머무는 효과로 묘사, 신체를 물리적으로 변형·절단하듯 쓰지 마라" - 닫힌 영문 토큰·예문 목록 0, header + WHY 문단 byte-identical 보존 - P2 plausible / small / low blast radius — schema/code 변경 X, prompt-only rewrite (detail_schema.json v30→v31 byte-identical, version cascade 4-point)
C4 Area #8 — Background / floor-plan semantic classifier #
audit row A001-A005, A031, A033, P043. INDOOR/OUTDOOR + Korean clue + 색깔 매핑 closed-list reasoning → structured emit.
C4 CLOSED (2026-05-20+): OQ-C4-1 옵션 B (narrow, C9/C6 pattern) — 신규 location_space_profile.py producer 미신설. 아래 9-step 수정 방법 원안은 superseded — Codex C4 entry sanity 가 신규 producer NO-GO 판정 (각 step 이 이미 자체 structured SOT emit: background_classify.is_indoor bool / background_chain_planning.skip_chain bool + D6 계열 entity_canon.metadata_json.location.space_profile + bg_state_vocab.validate_location_space_profile() + bg_catalog.normalize_space_key() 기존 SOT 존재 → 신규 producer 는 중복 + routing risk 증폭). C4 v1 = 8 row 해소 — P043 background_chain_planning.py:151-154 location 이름 substring 매칭 폐기 → exact·L-id 실패 시 ValueError fail-loud (W1 2c018f3) + A001/A002/A003/A004 background_chain_planning v5 prompt-pack 5.202605200932/ (W2 7c9a605) + A005 background_classify v4 4.202605200945/ (W3 4bf2c72 + fix-up 1 1130cf9) + A033/A034 location_floor_plan v4 4.202605201000/ (W4 ddcd115) — 닫힌 enumeration → generic semantic principle 추상화. A031 (floor_plan_prompt 색/glyph 매핑) = boundary-reviewed KEEP — schematic diagram 의 deterministic rendering convention, open-world semantic classifier 아님, floor_plan_prompt 변경 0. A020 (entity_extractor_v2 allowed_space_keys — 본 site table 9번째 row) = C4 scope 제외 (deferred — roadmap §5.8 audit row 미포함, file-fallback latest v10 vs version_registry v9, D6 location.space_profile SOT 와 묶인 큰 영역, C8/C10 carry). background_chain_planning (lifecycle deprecated + applicability disabled) / location_floor_plan (lifecycle deprecated) — active latest prompt/code residue 만 좁게 처리, step_manifest lifecycle/applicability entry 변경 0. 세 step PROMPT_VERSION bump (4→5 / 3→4 / 3→4), SCHEMA_VERSION 전부 불변. test_c4_background_classifier.py G1-G12 신설. spec/plan = docs/superpowers/specs|plans/2026-05-20-c4-background-classifier-v1-*.md. 잔여 = C5/C8/C10.
현재 site
| site | 현재 상태 | grade |
|---|---|---|
| background_chain_planning/4.../system.md:19-25 | INDOOR/ENCLOSED/FIXED-SET vs DETACHED OPEN AREA closed reasoning + skip_chain 결정 | P1 |
| background_chain_planning/4.../system.md:45-51 | close-ups vs room state (clean/lived-in/disturbed/heavily-ransacked) | P1 |
| background_chain_planning/4.../schema.json:5-7 | OUTDOOR/OPEN-AIR closed list (street/road/coast/sea/forest/yard/...) | P2 |
| background_chain_planning/4.../user_template.md:14-21 | SKIP outdoor/open-air vs Otherwise indoor/enclosed/fixed-set | P2 |
| background_classify/3.../system.md:18-20 | Korean clues 내부/안/방/실/층 vs 외부/옥상/거리/도로/공터/골목 | P1 |
| floor_plan_prompt/4.../system.md:10-13 | living=pale yellow / bedroom=pale blue / kitchen=pale green 색깔 매핑 + 가구 shape (bed/sofa/table) | P1 |
| location_floor_plan/3.../system.md:22-25 | 거실/안방/부엌/거실 cues + slash-zone parsing | P1 |
| background_chain_planning.py:151-152 | loc_raw in ename or ename in loc_raw substring 매칭 (P043) | P1 |
| entity_extractor_v2/10.../system.md:96-103 | allowed_space_keys: main/kitchen/rooftop/stairs/yard/exterior/office controlled vocab | P1 |
수정 방법
- Q0-light + spec drafting — Codex 의논 의무 (큰 area, dependency graph review)
- Producer schema 신설 — location_space_profile structured emit
backend/app/core/location_space_profile.py (신설) ─ class LocationSpaceProfile: is_indoor: bool space_type: enum [room / hallway / store_interior / office / kitchen / basement / vehicle_cabin / rooftop_open / street / forest / beach / yard / public_square] building_membership: enum [shared_building_set / detached_open_area] persistent_architecture: bool # floor plan 안 있는지 여부 ─ 또는 background_master_plan 또는 신규 step 안 producer 진입 - Code substring fallback 폐기
backend/app/modules/pipeline/background_chain_planning.py:151-152 - if len(ename) >= 2 and (loc_raw in ename or ename in loc_raw): - loc_id = esid + # ID-based resolve only — name substring fallback 폐기 (gate 1 Semantic Regex Ban) + # name match 실패 시 warning + fail-fast
- background_chain_planning prompt rewrite
prompts/_base/background_chain_planning/v_next.../ ─ INDOOR/ENCLOSED/FIXED-SET vs DETACHED OPEN AREA closed reasoning 폐기 ─ Korean clue closed list 폐기 ─ location_space_profile consume 만 (building_membership + persistent_architecture)
- background_classify prompt rewrite
prompts/_base/background_classify/v_next.../ ─ Korean clues (내부/안/방/실/층 + 외부/옥상/거리/도로) 폐기 ─ location_space_profile consume — is_indoor + space_type
- floor_plan_prompt — boundary review
floor_plan_prompt/v_next.../system.md:10-13 ─ living=pale yellow 색깔 매핑 → closed-world 시각 표현 (의미 추론 아님) — boundary review: - 옵션 (a): 유지 — closed-world technical color palette - 옵션 (b): 폐기 — 모든 색깔을 LLM 자유 결정 ─ 가구 shape (bed/sofa/table) → closed-world top-down convention — 유지 권장
- location_floor_plan prompt rewrite
prompts/_base/location_floor_plan/v_next.../system.md ─ 거실/안방/부엌 cues 폐기 ─ slash-zone parsing 폐기 (구체 token list 만) ─ location_space_profile consume
- entity_extractor_v2 cascade
entity_extractor_v2/v_next.../system.md:96-103 ─ allowed_space_keys controlled vocab 폐기 ─ location_space_profile.space_type enum consume
- integrated test + canary verification
backend/tests/integration/test_c4_background_classifier_v1.py ─ Production canary: background_chain 운영 routing 영향 (skip_chain 결정 분포) ─ NO VLM canary obligatory
Risk
background_chain 운영 routing 영향 — production canary 검증 의무. skip_chain 결정 분포가 prod 운영에 직접 영향 (chain image rendering 비용). NO VLM canary obligatory.
C5 Area #9 — Action segment SOT #
audit row A042, A064, A068, A069, A082, A083. 시간 연결어 + locomotion/water + visible-human-action lexicon → action_segment[] structured.
C5 CLOSED (2026-05-20+): OQ-C5-1 옵션 B narrow — 신규 action_segment[] structured schema 미신설. 아래 "수정 방법" 9-step 원안 (action_segment[] schema 신설 + validator segment count 검증) 은 superseded — Codex C5 entry sanity NO-GO 판정 (shot description 에 routing 하는 code regex 0 → action_segment[] 는 consumer 없는 write-only dead schema; 본질 = producer writing constraint 이지 routing signal 아님; C4 신규 producer NO-GO 와 동일 논리). C5 v1 = 5 row 해소 — A064/A068 shot_extract v13 prompt-pack 13.202605201049/ 시간 연결어 닫힌 목록 추상화 (W1 cfb9184) + A082/A083 shot_validator v6 6.202605201118/ 시간 연결어·locomotion·active-contact·visible-human-action 닫힌 lexicon 추상화 (W2 086ab0a) + A042 scene_detail v32 32.202605201133/ dynamic verb 닫힌 목록 추상화 + 4-point cascade (W3 2f41467 + fix-up 1 3d901cc) — 닫힌 lexicon → generic semantic principle. version_registry 3 module provenance sync (shot_extractor 2.2.0 / shot_validator 1.5.0 / scene_detail_composer 1.32.0). A069 (shot_extract 외모·연령 변화 닫힌 목록) = C5 scope 제외, C8 Area #7 sub-area (c) carry — 중복 closure claim 금지. W1 OQ blocker: shot_schema.json 을 v13 에 통합 시 OpenAI strict linter 가 pre-existing dormant 위반 (characters required 누락) 노출 → Codex OPTION_1_APPROVED 로 schema 미통합 (v10 per-stem fallback 유지), schema-strict 위반은 별도 carry. shot_validator active contact / characters fail-fast contract + schema 구조 byte-identical, SCHEMA_VERSION 전부 불변. test_c5_action_segment_sot.py G1-G10 (12 test) 신설. spec/plan = docs/superpowers/specs|plans/2026-05-20-c5-action-segment-sot-v1-*.md. 잔여 = C8/C10.
현재 site
| site | 현재 상태 | grade |
|---|---|---|
| shot_extract/12.../user.md:18-19 | 시간 연결어 절대 금지: ~하자/~하면서/~하며/~하고/~한 뒤/~한 후/~하고 나서 + 영어 and then/while ~ing/after ~ing/as ~/before ~ | P1 |
| shot_extract/12.../system.md:14-18 | 동일 시간 연결어 closed list | P1 |
| shot_extract/12.../system.md:42-50 | 나이 변화 / 부상 / 얼룩 / 창백해짐 / 멍 / 화상 — 외모 변화 (Area #7 sub-area (c) 와 overlap) | P1 |
| shot_validator/5.../system.md:8-12, 37-41 | 연속 동작 금지 + locomotion (running/sprinting/walking/striding/climbing) + riding/driving + water/swim + jumping/leaping + chasing/fleeing | P1 |
| shot_validator/5.../system.md:157-161 | visible-human-action 판정 기준 closed list (얼굴/손/다리/팔/머리/face/hand/leg/arm/잡기/보기/말하기/hold/look/talk/embrace) — (3 중 1 이상 만족) | P1 |
| scene_detail/28.../system.md:381,551 | running/riding/walking/moving/chasing/pedaling/rowing dynamic verb re-frame trigger | P1 |
수정 방법
- Producer schema 신설 (shot_extract v13)
prompts/_base/shot_extract/v13.../schema.json ─ shots[].action_segment[]: array<{ segment_kind: enum [motion / contact / state_change], start_anchor: str, # 동작 시작 phrase end_anchor: str # 동작 끝 phrase }> ─ 한 shot 안 action_segment 1개 default. 2+ 시 validator 경고/분리. - shot_extract prompt rewrite
prompts/_base/shot_extract/v13.../user.md + system.md ─ 시간 연결어 closed list (~하자/~하면서/and then/while ~ing) 폐기 ─ action_segment[] 분리 emit instruction
- shot_validator prompt rewrite
prompts/_base/shot_validator/v_next.../system.md ─ 시간 연결어 closed list 폐기 ─ locomotion/riding/water closed list 폐기 ─ visible-human-action 신체 부위 closed list 폐기 ─ action_segment count 검증 + segment_kind enum consume
- scene_detail cascade
prompts/_base/scene_detail/v_next.../system.md:381,551 ─ dynamic verb closed list (running/riding/walking/moving/chasing/pedaling/rowing) 폐기 ─ action_segment.segment_kind=motion consume
- boundary 명시 — Area #7 sub-area (c) overlap
shot_extract/12.../system.md:35,42-50 (인종/국적 + 나이 변화) ─ #9 scope 외, #7 marathon 에서 처리 ─ 중복 closure claim 금지
Risk
한국어 grammar pattern → structured action_segment 전환 시 LLM 분류 정확도 production verify 의무.
C8 Area #7 잔여 sub-area marathon (a/c/d split) #
roadmap §5.7 sub-area (a)/(c)/(d) 잔여. Hygiene v1 (C-1) + Area #7a/#7b/#7c/#7d (Sub-area (b)/(e)) closure 후 남은 prompt + code carry.
C8 CLOSED (2026-05-20+): Area #7 잔여 sub-area (a)/(c)/(d) + code carry marathon — index.html C8 25-site disposition: FIX 21 추상화 / KEEP 2 (Site 16 background_chain_render palette checklist / Site 21 render_prompt_card _ID_ETHNICITY_COMPONENTS·_ID_AGE_BANDS G4.3 SOT) / SPLIT 1 (Site 20 render_prompt_card camera_frame_rule.applies_when FIX + _SPATIAL_CAMERA_* canary KEEP) / DEFER 1 (Site 19 scene_consistency_step P020 prefix shim — checkpoint migration 설계 필요, Area #7 carry). 8-wave 10-commit: W1a-1 dc06ac1 / W1a-2 b227672 / W1a-3 c0fc5f7 / W1b a3037b6 / W2a ef2fa91 / W2b 589b7b1 / W3a 7c5ab8a / W4a dab5980 / W4b b2f06b8 / W5 closure docs. 13 prompt-pack (sub-area (a) entity_all/entity_extract_v4/entity_filter/entity_extractor_v2/outlook_extractor/location_consistency + (c) shot_extract/shot_essence_extraction/shot_selection/scene_extractor_v2 + (d) t2i_visual_converter/background_master_plan/floor_plan_prompt) 닫힌 enumeration·시나리오 leak → generic semantic principle 추상화 + code carry 5 file (entity_steps/outlook_dedup/scene_validator/reference_image_generator/render_prompt_card) carrier-shape 보존 prose 치환. 신규 schema/producer/mechanism 0, code-path constant 3 module 상수 bump, version_registry 신규 entry 0, NO VLM. test_c8_area7_residual_hygiene.py G-test 53 PASS. OQ-PLAN-1 location_consistency line 18 + lines 41-57 example block = boundary-reviewed KEEP. OQ-PLAN-3 render_prompt_card role_hint_from_outfit = G4.3 SOT reviewed KEEP, C8 closure claim 아님. Known carry (C8 scope 외): shot_schema.json OpenAI strict 위반 (C10/dedicated SchemaStrict) / prompt_service.replace_entity_ids camera-angle prefix strip pre-existing failure (C8 무관 out-of-scope) / outlook_extractor.py:44 docstring 작품 고유명사 (audit 25-site 미열거 out-of-scope). spec/plan = docs/superpowers/specs|plans/2026-05-20-c8-area7-residual-hygiene-v1-*.md. 잔여 = C10.
Sub-area (a) — entity / outlook / location scenario leak (8 site)
| site | 본질 | grade |
|---|---|---|
| entity_all/5.../prop.md:21,25 | 수트/우주복/갑옷/제복 + 피/물/불/연기/안개 (제외 기준) | P2 |
| entity_extract_v4/8.../prop.md:22 | 수트/우주복/갑옷 동일 list (live module entity_extractor_v4.py:9 _MODULE = "entity_extract_v4") | P2 |
| entity_filter/2.../system.md:12-13 | 수트/우주복/갑옷/벽면 모니터/TV/CCTV closed list | P1 |
| entity_extractor_v2/10.../turn2.md:10-11 | 20대→60대 + 군복/정장/일상복 + 부상/결박/사망 상태 | P2 |
| outlook_extractor/12.../phase2.md | 변신/갑옷 착용/피의갑옷 | P2 |
| outlook_extractor/12.../phase3.md | 고급선비복1 vs 고급선비복2 | P2 |
| location_consistency/2.../system.md:23-37 | 절대 포함 금지 closed list (날씨/시간/조명/대기/감정/순간적 상태) | P1 |
| location_consistency/2.../system.md:43-57 | apartment wallpaper / utility pole / 한옥 specific examples | P2 |
Sub-area (c) — shot_extract leftover (Area #9 boundary 명시, 7 site)
| site | 본질 | grade | #9 boundary |
|---|---|---|---|
| shot_extract/12.../user.md:63 | 한국인 경찰 / 동양인 노파 | P2 | #9 scope 외 |
| shot_extract/12.../system.md:35 | 인종/국적 반드시 포함 (인간형/외계인/귀신/돌연변이) | P2 | #9 scope 외 |
| shot_extract/12.../system.md:42-50 | 나이 변화 / 부상 / 얼룩 / 창백해짐 | P1 | #9 scope 외 |
| shot_essence_extraction/3.../system.md:13 | 혈흔 / 깨진 유리 / 부상 흔적 (사건 영구 흔적) | P2 | - |
| shot_essence_extraction/3.../system.md:44-66 | 거실 바닥에 엎어진 + 인형 백팩 | P2 | - |
| shot_selection/4.../system.md:54-65 | 연결 순간 단독 선택 금지 closed list (이동/추격/교통/작업) | P1 | - |
| scene_extractor_v2/20.../system.md:47 | <몽타주> marker semantic_string_judgment | P1 | - |
Sub-area (d) — t2i_visual_converter / background 작품 고유명사 (4 site)
| site | 본질 | grade |
|---|---|---|
| t2i_visual_converter/v4/system.md:46-49 | 지하 극저온 저장 시설 / 투명 원통형 캡슐 (콘티형 예시) | P2 |
| background_chain_render/2.../system.md:11-43 | wall finish / floor / ceiling / lighting palette mandatory closed | P1 |
| background_master_plan/3.../system.md:74-79 | bg_large_mart L09/L10/L14 specific example | P2 |
| floor_plan_prompt/4.../system.md:16 | ondol-friendly bed (한식 가구) — #8 scope 외, 가구 표현 영역 | P2 |
Code carry (production, 7 site)
| site | 본질 | grade |
|---|---|---|
| scene_consistency_step.py:317-319, 422-427, 452, 579-582 | P020 — analysis_summary backward-compat shim (startswith("분석 실패") / "분석 차단") — 5 hit | P2 |
| render_prompt_card.py:584 | P025 — low / hip-height / overhead / ground level / quay level / floor level 카메라 prose | P2 |
| render_prompt_card.py:142-163 + 1068-1070 | P026 — _ID_ETHNICITY_COMPONENTS + _ID_AGE_BANDS constants @ :142, :156 + consume site @ :1068-1070 | P2 |
| entity_steps.py:453-461 | P028 — 인물(character) 다른 타입과 중복 prose | P2 |
| outlook_dedup.py:136-145 | P054 — 검은정장1 vs 검은정장2 | P2 |
| scene_validator.py:144 | P059 — 동녘(강의원) 원격 조종 prose | P2 |
| reference_image_generator.py:61-98 | P070 — 포박 상태 / 현대 한국 / 근미래 한국 mapping | P2 |
수정 방법 (sub-area split 권장)
- Sub-area (a) 진입 — entity/outlook/location scenario leak (8 prompt site). 작품 고유명사 (이무기/구미호/조선시대/한옥/뱀파이어) 폐기 → generic example or pure principle.
- Sub-area (c) 진입 — shot_extract leftover. Area #9 closure 후 진입 (boundary 명시 의무, 중복 closure claim 금지).
- Sub-area (d) 진입 — t2i_visual_converter / background 작품 고유명사. 콘티형 예시 추상화 + bg_large_mart specific example → generic.
- Code carry 통합 — 7 code site (P020/P025/P026/P028/P054/P059/P070) sub-area별 흡수 또는 별도 wave.
Risk
광범위 prompt rewrite — version bump 다수 + DB row override / file fallback 의무 4-point sync. 또한 Area #8/#9 와 overlap row 중복 closure claim 금지.
C10 Future Carry Structured (P021/A099/A100-structured) #
Carry-P021/A099/A100 v1 closure (producer prompt-pack abstraction) 후의 deferred field-shape migration. future / superseded by agentic editing direction — 즉시 진입 대상 아님.
현재 상태
| Carry | v1 closed (producer abstraction) | Future structured (deferred) |
|---|---|---|
| Carry-P021-structured | prompts/_base/scene_consistency/8.202605191744/ v8 prompt-pack (hard-prime examples abstracted) |
scene_consistency carrier type:string → field-shape migration (structured emit) |
| Carry-A099-structured | VWR system.md director_notes prose hard-prime examples abstracted |
director_notes carrier → field-shape migration |
| Carry-A100-structured | prompts/_base/visual_world_rules/9.202605191334/ v9 prompt-pack — t2i_context + rules_schema.json:40 description abstraction |
t2i_context + rules_schema.json carrier type:string → structured emit (carrier 보존) |
현재 상태 (진입 조건 superseded)
future / superseded by agentic editing direction. C1-C9 9 영역 closure 는 달성됐으나, 이전 "9 영역 closure 후 진입" 조건은 superseded — C10 structured carries 는 즉시 진입 대상이 아니며 agentic editing direction 으로 대체. 향후 진입 시 structured emit / field-shape migration 의 producer/consumer 영향 분석 + dependency review 의무.