# DB / Filesystem State Audit

## PostgreSQL Snapshot

조회 기준: 2026-05-02 KST 로컬 PostgreSQL.  
주의: 이 값은 현재 상태다. 과거 실패 시점의 DB 상태와 다를 수 있다.

### Schema

| 항목 | 현재 값 | 판단 |
| --- | --- | --- |
| `image_asset.variant_label` | `character varying(255)` | 과거 `VARCHAR(32)` truncation 직접 원인은 현재 DB에서는 수정됨 |
| `image_asset.file_path` | custom `ImagePathType` 적용 | ORM read 시 상대 경로를 프로젝트 root 기준 절대 경로로 변환 |
| `image_asset.asset_type` | string discriminator | `scene`, `reference`, `floor_plan`, `chain_bg` 등 혼재 |

### StepRun 상태

| step | status | completed/total | failed | 관찰 |
| --- | --- | --- | --- | --- |
| `floor_plan_render` | completed | 1/1 | 0 | floor plan ImageAsset 존재 |
| `background_render` | completed | 1/1 | 0 | chain_bg DB row 존재 |
| `ref_image_gen` | completed | 27/46 | 0 | generated + skipped 혼합 가능 |
| `scene_detail` | completed | 64/64 | 0 | selected still 64개 |
| `shot_dependency_t2i` | completed | 64/64 | 0 | selected still prompt 생성 |
| `t2i_review` | stale | 1/1 | 0 | review summary 기준 scene_applied 7 |
| `scene_image_pipeline` | completed | 64/64 | 0 | 현재 DB 기준 primary scene 존재 |

### ImageAsset 분포

| asset_type | total | primary | non_primary |
| --- | ---: | ---: | ---: |
| `chain_bg` | 29 | 0 | 29 |
| `floor_plan` | 29 | 18 | 11 |
| `reference` | 49 | 17 | 32 |
| `scene` | 184 | 64 | 120 |

### 오늘 생성된 ImageAsset

KST 2026-05-02 기준 today 범위로 관찰한 row다.

| asset_type | today total | today primary | today non_primary |
| --- | ---: | ---: | ---: |
| `chain_bg` | 29 | 0 | 29 |
| `floor_plan` | 7 | 3 | 4 |
| `reference` | 40 | 15 | 25 |
| `scene` | 124 | 64 | 60 |

### Selected Still 상태

| selected | image_generated | count |
| --- | --- | ---: |
| false | false | 129 |
| true | true | 64 |

현재 selected still 64개 중 primary scene asset이 없는 row는 0개로 관찰됐다. 따라서 현재 DB는 “씬 이미지가 하나도 생성되지 않음” 상태가 아니다. 다만 이전 실패 시점에는 `.force_cleared` checkpoint와 scene primary 0 상태가 관찰되었으므로, 그 사고는 force pre-clear 경로와 일치한다.

## chain_bg 상태

현재 `chain_bg` row는 29개이며, longest `variant_label` 길이는 38자로 관찰됐다. 과거 문제가 된 예시는 다음과 같다.

| label | length | 과거 영향 |
| --- | ---: | --- |
| `night_body_blood_curtain_red_circle` | 35 | `VARCHAR(32)` 환경에서는 insert 실패 |

현재 DB가 255자로 확장되어 있어 이 케이스는 통과한다. 그러나 migration 미적용 DB나 테스트 DB가 32자로 남아 있으면 동일 사고가 재발한다.

## Manifest / Checkpoint 관찰

`background_render` manifest는 현재 chain_bg 생성 결과의 주요 source of truth로 쓰인다. 관찰된 manifest의 `png_path`는 현재 샘플 기준 절대 경로 형태였으나, 코드 레벨에서는 checkpoint JSON raw path가 `ImagePathType`을 거치지 않는다.

```mermaid
flowchart LR
    DBPath[ImageAsset.file_path] --> Type[ImagePathType]
    Type --> Abs[project root 기준 절대 경로]
    JsonPath[checkpoint JSON png_path] --> Raw[Path 직접 처리]
    Raw --> CWD[cwd 의존 위험]
```

즉 DB row를 ORM으로 읽는 경로는 상대 경로 보호를 받지만, checkpoint/manifest JSON에 들어간 path는 loader가 직접 `Path(...)`로 처리하면 cwd에 의존할 수 있다.

## Current State vs Historical Failure

| 항목 | 과거 실패 시점 추정/관찰 | 현재 상태 |
| --- | --- | --- |
| scene primary | force clear 후 0 가능 | selected 64개 primary 존재 |
| chain_bg DB row | `variant_label` truncation으로 0 가능 | 29개 존재 |
| background_render status | silent failure면 completed 가능 | 현재 completed + DB row 존재 |
| scene image files | 생성 안 됨/DB 미등록 가능 | 오늘 scene ImageAsset 124개 |

결론적으로 현재 DB는 복구되었지만, 원인 경로가 사라진 것은 아니다. 특히 scene force pre-clear와 scene verify 부재는 여전히 구조적 리스크다.

