---
title: Carry-A099 — VWR system.md director_notes prose redesign V8+ (W0.1 inventory, untracked)
date: 2026-05-19+
status: draft (W0.1 inventory only; Codex Q0-light verdict `PROCEED_TO_Q1_Q7_OUTLINE_WITH_OPTION_2_ABSTRACT_V1` 정합; Q1-Q7 outline drafting pending, spec drafting deferred)
purpose: Carry-A099 v1 entry pre-spec W0.1 inventory — direct `director_notes` consumer 식별 (broad `visual_world_rules` dependent 와 구분) + schema/test/audit anchor 확정. Codex Q0-light verdict 요구 정합. Not committed (untracked, Area #7a w0-inventory pattern 정합).
---

# Carry-A099 W0.1 Inventory (live, 2026-05-19+)

## 1. Active VWR prompt pack

- **Latest dir**: `prompts/_base/visual_world_rules/7.202605181540/`
- **Files (2 only)**:
  - `system.md` (130 line, Area #7a v1 W1 commit `54fe057` produced)
  - `rules_schema.json` (45 line)
- **`director_notes` section in `system.md`**: line **57-80** (실측):
  - line 57 heading `## director_notes (유형적 메타 판단 기준)`
  - line 59 lead — "씬 감독이 물리적 존재 여부를 판단할 때 혼동할 수 있는 유형적 원칙을 추출하세요."
  - line 61-65 **작성 규칙 (절대)** 4 rule (one principle / no character/scene/event / no violence detail / 1-2 sentence abstract).
  - line 67-72 **올바른 예시 5** (각 line 1 example):
    - line 68: `회상/F.B 장면의 인물·소품·혈흔 등은 회상하는 인물의 기억 이미지이며, 회상 종료 후 현재 씬 공간에는 물리적으로 존재하지 않는다.`
    - line 69: `특정 인물에게만 보이는 환각/현시 대상은 다른 인물이 등장하는 씬에서는 화면에서 제거한다.`
    - line 70: `CCTV·모니터·창문 너머 등 화면 매개로 보이는 인물은 그 매개 표면 안쪽 평면 이미지로만 그리고, 매개 밖 공간에는 두지 않는다.`
    - line 71: `교차편집/몽타주로 다른 장소가 보일 때 두 장소의 인물을 한 프레임에 합치지 않는다.`
    - line 72: `안개·어둠 등 시야 차단 장치는 그 안의 대상을 명확히 묘사하지 말고 차단 그대로 둔다.`
  - line 74-78 **잘못된 예시 4** (각 line 1 example):
    - line 75: `"인물A 가 보는 인물B 의 시신은 인물A 의 환각으로 우선 판단한다." (← 특정 인물 이름 + 사건)`
    - line 76: `"수사관과 형사가 장소X 에 도착했을 때 시신이 사라진 상태라면..." (← 씬 사건 요약)`
    - line 77: `"특정 씬 번호의 시신은 회상 이미지이다." (← 씬 번호 hardcode)`
    - line 78: `"인물C 의 배가 안개로 들어가는 장면은 다른 세계 이동이 아니다." (← 인물 + 사건)`
  - line 80 final self-questioning sentence.

## 2. `rules_schema.json` `director_notes` field shape

- **Path**: `prompts/_base/visual_world_rules/7.202605181540/rules_schema.json:32-36`
- **Shape**: `{"type": "array", "items": {"type": "string"}, "description": "씬 감독이 물리적 존재 여부를 판단할 때 참고할 구체적 가이드 (작품 전반에 적용 가능한 유형적 원칙만 — 특정 인물/씬/사건 묘사 금지)"}`
- **Required**: YES (line 42 `"required": ["rules", "director_notes", "era", "region", "source_language", "t2i_context"]`).
- **schema description** 안 closed-list 부재 (작성 규칙 / 예시는 system.md 안에만, schema description = 간단 한 줄).
- **STEP_MANIFEST**: `backend/app/core/step_manifest.py:141` `visual_world_rules.schema_version=1` (Area #7a W1 set, `cp invalidation: incompatible-stamp cp blocked via _check_cp_mismatch`).

## 3. Direct `director_notes` reader (live grep, 4 files)

Codex W0.1 inventory 요구 정합 — broad `depends_on visual_world_rules` consumer 와 구분:

| # | file | line | code | semantic |
|---|---|---|---|---|
| 1 | `backend/app/services/visual_context_helper.py` | 109-114 | `_bullet_block("Director notes (physical presence)", vwr.get("director_notes") or [])` | Format director_notes as bullet block for downstream consumers. Empty list → block omitted. |
| 2 | `backend/app/core/steps/character_list_step.py` | 55-72 | `notes = rules_data.get("director_notes", [])` → optional inject `"[시각적 규칙]\n{visual_rules}"` prefix to `entity_character_list` user prompt | character_list step 안 VWR cp prev load → director_notes 사용 (시각적 규칙 prefix). Empty → skip. |
| 3 | `backend/app/core/steps/director_steps.py` | 114-129 | `notes = rules_data.get("director_notes", [])` → `"시각적 존재 판단 참고사항 (단, 카메라에 보이면 무조건 포함):\n" + ...`; **fallback**: empty 시 `rules` with `rule_type in ("possession", "projection", "ghost")` extract → `visual_guideline` join | scene_director step 안 director_notes 주력 + **fallback chain** (Gate 4 No Silent Fallback 정합 risk for Option 1 폐기 — director_notes 폐기 시 fallback path 도 manage 필요). |
| 4 | `backend/app/core/steps/beat_shot_steps.py` | 103-119 (beat path) + 311-328 (shot path) | `notes = rules_data.get("director_notes", [])` + logger info `"beat_extract: visual_world_rules에 director_notes 없음 — 물리적 존재 기준 미적용"` (line 119) / `"shot_extract: visual_world_rules에 director_notes 없음 — 물리적 존재 기준 미적용"` (line 328) | beat_extract + shot_extract 각각 VWR cp prev load → director_notes 사용. Empty → logger info ("미적용"). |

**Broad `visual_world_rules` consumer (NOT direct director_notes reader)**: `entity_all`, `entity_relation`, `entity_extractor_v2`, `outlook_extractor`, `scene_verify`, `shot_validator`, `shot_selection`, `shot_staging`, `shot_dependency`, `scene_detail_composer`, etc. — `depends_on visual_world_rules` STEP_MANIFEST edge 만 보유, director_notes field 직접 read X (또는 Area #7b W1-W6 안 canonical VWR clause reference 만 보유).

## 4. Test anchor

### 4.1 Direct director_notes test (live grep, 2 files / 3 fixture site)
- `backend/tests/services/test_visual_context_helper.py:46` — fixture `"director_notes": ["N1"]` (single-string fixture, visual_context_helper format test).
- `backend/tests/integration/test_area_7a_no_drift.py:81/102` — fixture `"director_notes": []` (canary test, Area #7a W3b).

### 4.2 Area #7a inherited tests (Carry-A099 v1 안 보존 의무, broad VWR test)
- `backend/tests/test_visual_world_rules.py` (Area #7a W3a residue, 7 PASS).
- `backend/tests/integration/test_area_7a_no_drift.py` (W3b canary 8 PASS).
- `backend/tests/integration/test_area_7a_residue_gate.py` (W3a 7 PASS).

### 4.3 Potential consumer-direct tests (W1 execution 시 verify 의무)
- character_list_step test, director_steps test, beat_shot_steps test — VWR injection path test 별도 검사 의무 (W0.1 inventory 시점에 추가 grep 안 식별 — W1 시 verify).

## 5. Audit anchor

- `docs/visual-reliability-audit/2026-05-14-semantic-string-routing-debt-audit/02-prompt-side-hygiene-audit.md:308` — table row `A099 (system.md director_notes prose redesign) | §11.1 line 236 boundary 외 | Carry-A099 (V8+ VWR prose redesign)`.
- 같은 audit `§11.3/§13/§14` — carry follow-up bullet mentions (Area #7b/#7c/#7d post-closure).
- Area #7a v1 spec `§1.4 + §11.4 + §12.1` — Carry-A099 source 정의 (line 72/413).
- Area #7b v1 spec `§1.3 + §6.2 + §11.6` — Carry-A099 boundary preserve mention (line 14/109/129/570/715).

## 6. Closure context (current)

- **origin/main HEAD**: `05d5265` (Carry-D7d-1 v1 closure + fix-up 1 push 완료).
- **Pre-Carry-A099 HEAD**: `05d5265` (본 carry 진입 시점).
- **Working tree**: clean — Carry-A099 scope 외 modification 0.

## 7. v1 in-scope (Codex Q0-light verdict 정합)

**Option 2 추상화 (abstract) only** — Codex Q0-light verdict 정합:

- VWR system.md director_notes prose section (line 57-80) 안 **올바른 예시 5 (line 67-72) + 잘못된 예시 4 (line 74-78)** 추상화:
  - 작품-specific cue (예: 시신, 인물 이름, CCTV·모니터·창문, 안개, 회상/F.B 등 작품 hard-prime) 모두 추상화 / generic principle 만 보존.
  - closed-list semantic hard-prime example phrases 제거 + scenario-summary example 제거.
- **schema/consumer shape preserve**: `rules_schema.json` `director_notes: array<string> required` 변경 0. STEP_MANIFEST schema_version=1 변경 0 unless W1 시 description-only schema wording change 명확 식별 (cp invalidation 회피).
- **VWR prompt pack v8 신규**: `prompts/_base/visual_world_rules/8.<UTC>/` 신설 (system.md modified + rules_schema.json byte-identical from v7 unless W1 시 description-only change). 4-point sync (`STEP_MANIFEST/load_prompt/load_schema/active-version checks`) cascade 의무 (Area #7b W3 정합 — VWR producer cascade).
- **`director_notes` field carrier contract preserve**: `array<string> required` 보존.
- **direct consumer 4 file (visual_context_helper / character_list_step / director_steps / beat_shot_steps) 변경 0** (prompt-only abstraction, fallback chain in director_steps:122-128 보존).

## 8. v1 out-of-scope (Codex Q0-light verdict 정합)

- **Option 1 (폐기 / deprecate)**: NOT v1. Live direct consumer 4 file + fallback chain in director_steps:122-128 — director_notes 제거/empty 시 No Silent Fallback 위반 risk.
- **Option 3 (structured emit)**: NOT v1. Schema shape change + STEP_MANIFEST schema_version bump + cp invalidation cascade + downstream consumer rewrite/tests 의무. Future Carry-A099-structured 또는 Area follow-up.
- **`t2i_context` demonym redesign (Carry-A100, line 95+)**: 별도 carry, 본 carry 변경 0.
- **scene_consistency 7 enumeration broad (Carry-P021)**: 별도 carry.
- **Area #7a v1 closure boundary** (A047/A096/A097/A098 처리 완료, 본 carry 영향 0).
- **Area #7b v1 closure boundary** (VWR downstream prompt cascade 11-site, 본 carry consumer rewrite scope 외).
- **Area #7c v1 closure boundary** (t2i_review v6 placeholder example abstraction).
- **Area #7d v1 closure boundary** (cinematography closed-list SOT dual-site).
- **Carry-D7d-1 v1 closure boundary** (scene_detail v28 description align, 본 carry 영향 0).
- **field-shape migration**: structured directing_principle 전환 = major carry (Carry-A099-structured) — 본 carry Q0-light scope 외.
- **production consumer rewrite v1**: W0.1 finds no direct break caused by prompt-only abstraction → consumer 변경 0. W1 시 break 발견 시 narrow fix.
- **VLM / live LLM / semantic regex / standalone-token residue gates**: 모두 ban.

## 9. v1 allowed/forbidden claim (Codex Q0-light verdict 정합)

### Allowed claim
> `director_notes prose examples / bad examples were abstracted to remove closed-list semantic hard-prime examples and scenario-summary examples while preserving the existing director_notes carrier contract`

### Forbidden claim
- ❌ `director_notes structured SOT complete`
- ❌ `physical-presence routing fixed`
- ❌ `field-shape migration complete`
- ❌ `all VWR downstream raw-prose risk fixed`

## 10. v1 doctrine reaffirm (Codex Q0-light verdict 정합)

- **Gate 1 Semantic Regex Ban**: no regex semantic classification / token-stripping.
- **Gate 2 Prompt Closed-List Ban refined full-phrase only**: residue contract = exact current example/bad-example full phrases (system.md:67-78) only. Standalone word global ban X (회상 / 환각 / CCTV / 몽타주 / 안개 등 single token global ban 금지).
- **Gate 3 Structured SOT Required**: v1 = abstraction of existing free-text carrier (partial remediation), not full structured SOT completion.
- **Gate 4 No Silent Fallback**: field shape `array<string>` + required contract preserve. director_steps:122-128 fallback chain (empty director_notes → rules possession/projection/ghost) 보존 의무.
- **NO VLM hard constraint** ([[feedback_no_vlm_dependency]]).
- **TEMPLATE ONLY + W3/W4 self-reference + Substitution self-referential bug + Legacy 본 commit retroactive escape + post-Carry-D7d-1 fix-up 1 강화 `never re-emit literal angle-bracketed forms outside marker blocks`** doctrine ([[session_20260519_carry_d7d_1_v1_closure]] 함정 2 정합).

## 11. Next step (Codex Q0-light verdict 정합)

1. **Q1-Q7 outline drafting** (본 W0.1 inventory verified evidence 흡수).
2. **Codex outline iter review** (의무).
3. Outline APPROVED 후 spec v1 drafting.
4. Spec quality iter review + plan drafting + Wave execution (W1-W3+).
5. Closure docs + range review + push gate.
6. CONTINUE_THIS_SESSION (Codex 권고 — usage moderate 유지, plan drafting / execution 전 session health re-check).

## 12. References

- **Codex Q0-light verdict**: `PROCEED_TO_Q1_Q7_OUTLINE_WITH_OPTION_2_ABSTRACT_V1 + W0.1_DIRECTOR_NOTES_CONSUMER_INVENTORY_REQUIRED` (post-Carry-D7d-1 v1 closure CLOSE_HANDOFF_FRESH).
- **Area #7a v1 spec**: `docs/superpowers/specs/2026-05-18-area-7a-visual-world-rules-sot-v1-design.md:72, 413` (Carry-A099 source 정의).
- **Area #7b v1 spec**: `docs/superpowers/specs/2026-05-19-area-7b-vwr-cascade-downstream-v1-design.md:14, 109, 129, 570, 715` (Carry-A099 boundary preserve).
- **Roadmap**: `docs/superpowers/specs/2026-05-16-track-b-semantic-debt-roadmap-design.md:387-390` (Track B §5.7 Phase 1+2+ cinematography carry follow-up).
- **Audit 02**: `docs/visual-reliability-audit/2026-05-14-semantic-string-routing-debt-audit/02-prompt-side-hygiene-audit.md:308, §11.3, §13, §14` (A099 row + Carry follow-up).
- **Pre-Carry-A099 closure**: [[session_20260519_carry_d7d_1_v1_closure]] (HEAD `05d5265`, range pushed `b9c610e..05d5265` = 3 commits).
- **Memory references**: [[feedback_llm_based_judgment]] + [[feedback_no_vlm_dependency]] + [[feedback_codex_mcp_discussion_workflow]] + [[feedback_codex_mcp_claude_mcp_response_trigger]] + [[feedback_subagent_model_opus]] + [[feedback_push_no_user_ask]] + [[feedback_session_50pct_codex_close_check]] + [[feedback_session_reset_clear_not_exit]] + [[session_20260519_area_7a_v1_closure]] + [[session_20260519_area_7b_v1_closure]] + [[session_20260519_area_7c_v1_closure]] + [[session_20260519_area_7d_v1_closure]] + [[session_20260519_carry_d7d_1_v1_closure]].
