---
title: Carry-A099 — VWR system.md director_notes prose redesign V8+ (Q1-Q7 outline, untracked)
date: 2026-05-19+
status: outline draft (Codex W0_1_APPROVED__PROCEED_TO_Q1_Q7_OUTLINE 정합; outline iter 1 review pending; spec v1 drafting deferred until outline APPROVED)
purpose: Carry-A099 v1 Q1-Q7 outline — Option 2 abstract scope + W0.1 inventory verified + Codex outline structure 권고 정합. Not committed (untracked). Outline iter 1 Codex review 후 spec v1 drafting 진입.
w0_1_inventory_ref: docs/superpowers/specs/2026-05-19-carry-a099-w0-1-inventory.md (untracked, 145 line)
---

# Carry-A099 Q1-Q7 outline (Option 2 abstract v1)

## Q1. Problem / Purpose

### Problem (live evidence, W0.1 §1)
VWR latest `system.md:57-80` `director_notes` section 안:
- line 67-72 **올바른 예시 5** = `회상/F.B` / `환각/현시` / `CCTV·모니터·창문` / `교차편집/몽타주` / `안개·어둠` 각 generic principle phrase (작품 hard-prime cue 포함).
- line 74-78 **잘못된 예시 4** = `인물 이름 + 사건` / `씬 사건 요약` / `씬 번호 hardcode` / `인물 + 사건` (안티-pattern 명시).
- prose example phrases = LLM-generate natural-language rule 으로 physical-presence routing 위임 (Area #7a v1 spec §1.4 + audit 02 §11.1 A099 row).

### Purpose
prose example/bad-example 추상화하여 closed-list semantic hard-prime + scenario-summary cue 제거; **`director_notes: array<string> required` carrier contract preserve**. v1 claim = partial (prose abstraction only), structured SOT completion claim X.

### v1 claim boundary
- ✅ Allowed: `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` (Codex Q0-light verbatim).
- ❌ Forbidden: `director_notes structured SOT complete` / `physical-presence routing fixed` / `field-shape migration complete` / `all VWR downstream raw-prose risk fixed` (Codex Q0-light 4 항목).

## Q2. Scope / Non-Scope

### In-scope (v1)
- **Surface**: VWR prompt pack `prompts/_base/visual_world_rules/8.<UTC>/` (new dir, Area #7c/#7d 패턴 정합):
  - `system.md` modified (line 57-80 director_notes section prose abstraction).
  - `rules_schema.json` byte-identical from `7.202605181540/` default (Q3 binary decision 결과 따라 description-only wording change 가능).
- **4-point sync code** (Area #7a/#7b 패턴 정합) — VWR producer cascade:
  - `STEP_MANIFEST['visual_world_rules']['schema_version']` (current=1, Q3 결과 따라 변경 0 또는 schema-bound bump 결정).
  - `prompts/_base/visual_world_rules/8.<UTC>/` active-version latest resolution by `_latest_active_dir` / `load_prompt` / `load_schema`.
- **Test cascade** (Area #7a inherited + Carry-A099 신규):
  - `test_visual_world_rules.py` (Area #7a W3a residue, 7 PASS preserve + Carry-A099 새 residue 추가 가능).
  - `test_area_7a_no_drift.py` (W3b canary 8 PASS preserve + Carry-A099 새 canary 추가 가능).
  - `test_area_7a_residue_gate.py` (W3a 7 PASS preserve + Carry-A099 새 residue gate 추가 가능).
  - `test_visual_context_helper.py:46` (W0.1 inventory anchor, fixture verification).
- **Closure docs**: spec/plan/Area #7a refs + audit 02 A099 row + roadmap §5.7.

### Out-of-scope (explicit non-claim)
- **`director_notes` field carrier shape change**: `array<string> required` preserve (Q3 binary 결정 안 schema description-only wording change 가능, shape X).
- **Direct consumer rewrite** (4 file): `visual_context_helper.py` / `character_list_step.py` / `director_steps.py` / `beat_shot_steps.py` 변경 0 (prompt-only abstraction; W1 시 break 발견 시 narrow fix).
- **`director_steps.py:122-128` fallback chain preserve** (Gate 4 No Silent Fallback 정합).
- **STEP_MANIFEST schema_version bump**: default = no bump (current=1 preserve). Q3 binary 결과 schema description-only wording change 시 schema_version 영향 reconsider.
- **Carry-A100** (VWR system.md t2i_context demonym redesign line 95+) — 별도 carry.
- **Carry-P021** (scene_consistency 7 enumeration broad) — 별도 carry.
- **Area #7a v1 closure boundary** (A047/A096/A097/A098 처리 완료).
- **Area #7b v1 closure boundary** (VWR downstream prompt cascade 11-site).
- **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).
- **Field-shape migration** (structured `directing_principle: {category: enum, guideline: string}` etc.) = major carry (Carry-A099-structured 또는 future area).
- **VLM / live LLM / semantic regex / standalone-token residue gates** — 모두 ban.

## Q3. Design Decision

### Option 2 abstract only (v1 채택)
- VWR `system.md:57-80` `director_notes` section 안 line 67-72 올바른 예시 5 + line 74-78 잘못된 예시 4 모두 추상화.
- 추상화 후 prose = generic principle wording only (작품-specific cue 모두 제거; standalone token global ban X = `회상`, `환각`, `CCTV`, `몽타주`, `안개` 등 single token wording 보존 OK, full-phrase example 제거).
- LLM 에게 "추출 원칙" 가이드는 유지하되, "예시 자체"는 abstract category description 으로 lift (예: "scene-time/space mismatch 처리 원칙" / "perception-restricted entity 처리 원칙" 등 추상 category descriptor).

### Option 1 reject (Codex Q0-light verdict 정합)
- `director_notes` field 폐기 시 `director_steps.py:122-128` fallback chain (empty → rules possession/projection/ghost) 도 동시 manage 의무 → **Gate 4 No Silent Fallback 위반 risk**. v1 외.

### Option 3 reject (Codex Q0-light verdict 정합)
- Schema shape change (`array<string>` → structured `{category, guideline}`) = schema_version bump + cp invalidation cascade + 4 direct reader rewrite + test cascade. = major carry / 별도 area follow-up. v1 외.

### Binary decision (Q3): `rules_schema.json` description-only wording change 필요 여부
- **Default**: byte-identical from `7.202605181540/rules_schema.json` (sha256 match obligatory).
- **Conditional change**: outline iter / spec drafting 안 현재 schema description (`"씬 감독이 물리적 존재 여부를 판단할 때 참고할 구체적 가이드 (작품 전반에 적용 가능한 유형적 원칙만 — 특정 인물/씬/사건 묘사 금지)"`) 자체가 hard-prime 또는 새 prose 와 contradiction 명확 식별 시 → narrow description wording change. schema_version 영향 reconsider (description-only = schema shape 변경 X → schema_version=1 preserve 권고; spec 안 explicit verify).

## Q4. Consumer Contract

### 4 direct director_notes readers (W0.1 §3, v1 변경 0)
1. `visual_context_helper.py:109-114` — `_bullet_block("Director notes (physical presence)", vwr.get("director_notes") or [])`. Empty → block omitted (No Silent Fallback 정합).
2. `character_list_step.py:55-72` — VWR cp prev load → `notes = rules_data.get("director_notes", [])` → optional inject `"[시각적 규칙]"` prefix. Empty → skip.
3. `director_steps.py:114-129` — `notes = rules_data.get("director_notes", [])` 주력 + **fallback chain line 122-128** (empty → rules possession/projection/ghost visual_guideline join). v1 변경 0 (fallback chain 보존).
4. `beat_shot_steps.py:103-119 (beat) + 311-328 (shot)` — `notes = rules_data.get("director_notes", [])` + logger info "물리적 존재 기준 미적용" on empty.

### Broad VWR dependents (NOT direct director_notes readers)
`entity_all` / `entity_relation` / `entity_extractor_v2` / `outlook_extractor` / `scene_verify` / `shot_validator` / `shot_selection` / `shot_staging` / `shot_dependency` / `scene_detail_composer` — `depends_on visual_world_rules` STEP_MANIFEST edge 또는 Area #7b canonical VWR clause reference 만. director_notes field 직접 read X (W0.1 verified). Carry-A099 v1 변경 0.

### Important finding (Carry over)
`director_steps.py:122-128` fallback chain = Option 1 폐기 reject 근거 (Gate 4 No Silent Fallback). 본 outline 안 보존 의무 명시; W2 integrated test 안 fallback path canary 가능 권고.

## Q5. Gate / Doctrine Contract

- **Gate 1 Semantic Regex Ban** ([[feedback_llm_based_judgment]]): no regex semantic classification / token-stripping in Carry-A099 v1 W1-W3.
- **Gate 2 Prompt Closed-List Ban refined full-phrase only**: residue contract = exact full-phrase from `system.md:67-78` only. Standalone token global ban X (`회상` / `환각` / `CCTV` / `몽타주` / `안개` 등 single token 사용 보존 — full-phrase example 제거만).
- **Gate 3 Structured SOT Required**: v1 = abstraction of existing free-text carrier (partial remediation). Structured SOT completion claim X (Option 3 future).
- **Gate 4 No Silent Fallback**: `director_notes` field shape `array<string> required` preserve. `director_steps.py:122-128` fallback chain (empty director_notes → rules possession/projection/ghost extract) 보존 의무. 다른 direct reader 안 empty → skip / logger info 패턴 preserve.
- **NO VLM hard constraint** ([[feedback_no_vlm_dependency]]): VLM 의존 0, canary/audit log + structured SOT 만.
- **No live LLM**: W2 test 안 live LLM 호출 X (no_drift/residue_gate pattern 정합).
- **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`) ([[session_20260519_carry_d7d_1_v1_closure]] 함정 2 정합) — spec/plan/closure docs 작성 시 적용 의무.
- **closed-world exact phrase membership only** (open-world semantic 판단 ban).

## Q6. Residue / Test Contract

### Strict residue list (candidate, exact full-phrase from `system.md:67-78`)
**올바른 예시 5 phrases** (line 67-72, abstract 후 hit 0 의무):
- R1: line 68 verbatim `회상/F.B 장면의 인물·소품·혈흔 등은 회상하는 인물의 기억 이미지이며, 회상 종료 후 현재 씬 공간에는 물리적으로 존재하지 않는다.`
- R2: line 69 verbatim `특정 인물에게만 보이는 환각/현시 대상은 다른 인물이 등장하는 씬에서는 화면에서 제거한다.`
- R3: line 70 verbatim `CCTV·모니터·창문 너머 등 화면 매개로 보이는 인물은 그 매개 표면 안쪽 평면 이미지로만 그리고, 매개 밖 공간에는 두지 않는다.`
- R4: line 71 verbatim `교차편집/몽타주로 다른 장소가 보일 때 두 장소의 인물을 한 프레임에 합치지 않는다.`
- R5: line 72 verbatim `안개·어둠 등 시야 차단 장치는 그 안의 대상을 명확히 묘사하지 말고 차단 그대로 둔다.`

**잘못된 예시 4 phrases** (line 74-78, abstract 후 hit 0 의무):
- R6: line 75 verbatim 안 `"인물A 가 보는 인물B 의 시신은 인물A 의 환각으로 우선 판단한다."` (specific person+event hard-prime example).
- R7: line 76 verbatim 안 `"수사관과 형사가 장소X 에 도착했을 때 시신이 사라진 상태라면..."` (scene event summary).
- R8: line 77 verbatim 안 `"특정 씬 번호의 시신은 회상 이미지이다."` (scene number hardcode).
- R9: line 78 verbatim 안 `"인물C 의 배가 안개로 들어가는 장면은 다른 세계 이동이 아니다."` (specific person+event).

**Residue scope clarification**: 9 R-id 모두 full-phrase membership check (closed-world). Standalone word (`회상`, `환각`, `CCTV`, `몽타주`, `안개`, `회상/F.B`, `교차편집`, etc.) global ban X — abstract category descriptor 안 자연 사용 보존.

### Expected test/gate (W2/W3 integrated test scope)
- **G1 Active prompt pack resolution**: VWR latest = `8.<UTC>` (8.* prefix active sort + active dir count == 1).
- **G2 New v8 file count**: `prompts/_base/visual_world_rules/8.<UTC>/` 안 file count = 2 (system.md + rules_schema.json).
- **G3 `rules_schema.json` sha256**: byte-identical from `7.202605181540/rules_schema.json` (Q3 default) OR description-only narrow change verified (Q3 conditional).
- **G4 R1-R9 residue absence**: 9 R-id full-phrase membership hit 0 in v8 `system.md`.
- **G5 New abstract wording presence**: outline/spec 안 정해진 새 abstract category wording hit ≥ 1 in v8 `system.md` (spec drafting 시 정확 wording 정의).
- **G6 STEP_MANIFEST schema_version preserve**: `STEP_MANIFEST['visual_world_rules']['schema_version'] == 1` (Q3 default).
- **G7 fallback chain canary** (optional): `director_steps.py:122-128` fallback path verify (empty director_notes → rules possession/projection/ghost extract preserve).

### Test anchor scope (W0.1 §4 정합)
- `backend/tests/test_visual_world_rules.py` (Area #7a W3a residue, 7 PASS preserve + R1-R9 신규 가능).
- `backend/tests/integration/test_area_7a_no_drift.py` (W3b canary 8 PASS preserve + Carry-A099 새 canary 가능).
- `backend/tests/integration/test_area_7a_residue_gate.py` (W3a 7 PASS preserve + Carry-A099 새 gate 가능).
- `backend/tests/services/test_visual_context_helper.py` (W0.1 anchor, fixture `"director_notes": ["N1"]` preserve, prose change 영향 0 verify).

## Q7. Wave / Closure Plan

### Recommended wave split (Area #7a/#7c/#7d 패턴 정합)
- **W1 producer prompt-pack atomic** (1 commit):
  - Site 1-2: `prompts/_base/visual_world_rules/8.<UTC>/` 신설 (`system.md` modified + `rules_schema.json` byte-identical or description-only narrow).
  - 4-point sync verify (STEP_MANIFEST schema_version 1 preserve, active-version resolution).
  - Pre-commit gate: G1-G6 + 4 direct reader smoke (file load + parse).
  - Targeted pytest: 4 test file 위.
- **W2 integrated test atomic** (1 commit):
  - 신규 test file `backend/tests/integration/test_carry_a099_director_notes_abstraction.py`:
    - Gate 1 R1-R9 residue absence (9 strict full-phrase).
    - Gate 2 abstract category wording presence (G5).
    - Gate 3 schema sha256 (G3).
    - Gate 4 STEP_MANIFEST schema_version preserve (G6).
    - Gate 5 (optional) fallback chain canary (G7).
  - no live LLM + NO VLM + no regex semantic + no standalone token ban.
- **W3 closure docs atomic** (1 commit, range review + push gate):
  - Carry-A099 spec frontmatter status closed + §9/§10 closure section.
  - Carry-A099 plan first commit (drafting closure).
  - Roadmap §5.7 narrow append `Carry-A099 resolved by W1/W2 + W3 closure-docs (Option 2 abstract; structured emit follow-up deferred)`.
  - Audit 02 §11.3/§13/§14 + line 308 A099 row narrow update `Carry-A099 resolved by W1/W2 + W3 closure-docs`.
  - Area #7a v1 spec §1.4 + §11.4 + §12.1 line 72/413 Carry-A099 status update.
  - Area #7b v1 spec §1.3 + §6.2 + §11.6 line 14/109/129/570/715 Carry-A099 status update.
  - W0.1 inventory memo + Q1-Q7 outline = untracked / not committed unless plan explicitly says so (Codex 권고 정합).
- **Codex iter expected**: spec quality iter 1+ + plan quality iter 1+ + W1/W2 per-wave + W3 entry sanity + W1-W3 range review + push gate.

### W0.1 memo + Q1-Q7 outline commit decision
- W0.1 inventory memo (`docs/superpowers/specs/2026-05-19-carry-a099-w0-1-inventory.md`, untracked, 145 line) — not committed; spec drafting 시 reference only.
- 본 Q1-Q7 outline (`docs/superpowers/specs/2026-05-19-carry-a099-q1-q7-outline.md`, untracked) — not committed; spec v1 drafting 시 reference + outline iter 1 review 후 spec 안 content lift.

### Forbidden closure claim (Q1 + Codex Q0-light verdict 정합)
- ❌ `director_notes structured SOT complete`
- ❌ `physical-presence routing fixed`
- ❌ `field-shape migration complete`
- ❌ `all VWR downstream raw-prose risk fixed`

## References

- **Codex Q0-light verdict**: `PROCEED_TO_Q1_Q7_OUTLINE_WITH_OPTION_2_ABSTRACT_V1 + W0.1_DIRECTOR_NOTES_CONSUMER_INVENTORY_REQUIRED`.
- **Codex W0.1 ack verdict**: `W0_1_APPROVED__PROCEED_TO_Q1_Q7_OUTLINE` (W0.1 inventory APPROVED, no additional inventory required, narrow guard `separate direct readers from broad VWR dependents`, recommended Q1-Q7 structure 90-150 line outline-level).
- **W0.1 inventory memo**: `docs/superpowers/specs/2026-05-19-carry-a099-w0-1-inventory.md` (untracked, 145 line).
- **Active VWR pack**: `prompts/_base/visual_world_rules/7.202605181540/` (2 file: system.md + rules_schema.json).
- **director_notes section in system.md**: line 57-80.
- **`rules_schema.json` director_notes shape**: `array<string>` required at line 32-36 + line 42.
- **4 direct readers**: `visual_context_helper.py:109-114` + `character_list_step.py:55-72` + `director_steps.py:114-129 (fallback chain 122-128)` + `beat_shot_steps.py:103-119/311-328`.
- **Test anchors**: `test_visual_world_rules.py` + `test_area_7a_no_drift.py` + `test_area_7a_residue_gate.py` + `test_visual_context_helper.py:46`.
- **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).
- **Audit 02**: `docs/visual-reliability-audit/2026-05-14-semantic-string-routing-debt-audit/02-prompt-side-hygiene-audit.md:308` A099 row + §11.3/§13/§14 carry follow-up.
- **Pre-Carry-A099 closure**: [[session_20260519_carry_d7d_1_v1_closure]] (origin/main HEAD `05d5265`).
- **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]].
