{"candidate_reason": "python scope discovery", "chunk_end": 60, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 3469, "findings": [], "path": "backend/alembic/versions/007_d6_entity_canon_metadata_json.py", "scan_kind": "python", "sha256": "dd607b5a3858f9f017e6f5f9b32eb2c1e81a61faf1a53b7ba9dbcdf8ce30c307"}
{"candidate_reason": "python scope discovery", "chunk_end": 99, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 3470, "findings": [], "path": "backend/alembic/versions/005_file_path_relative_check.py", "scan_kind": "python", "sha256": "63389a9d05e169558dc925ede63fceb3a0d990d8cc66b4ca85c640f9a2fe056e"}
{"candidate_reason": "python scope discovery", "chunk_end": 48, "chunk_start": 1, "chunk_summary": "No actionable findings; this is a standard database migration adding a metadata column for technical tracking.", "duration_ms": 3471, "findings": [], "path": "backend/alembic/versions/006_llm_call_log_metadata_json.py", "scan_kind": "python", "sha256": "1b72ded9be069eae18d32f41b6f416b9804e4877927fce0731f13475004634bf"}
{"candidate_reason": "python scope discovery", "chunk_end": 70, "chunk_start": 1, "chunk_summary": "No actionable findings; this is standard Alembic infrastructure for database migrations and schema discovery.", "duration_ms": 3658, "findings": [], "path": "backend/alembic/env.py", "scan_kind": "python", "sha256": "0ebc7e60b781371151de2a3e04377b883bf6dc5258eec68551ce6d915acb66c0"}
{"candidate_reason": "python scope discovery", "chunk_end": 65, "chunk_start": 1, "chunk_summary": "No actionable findings; this is a standard database migration for infrastructure tracking and schema length adjustments.", "duration_ms": 3943, "findings": [], "path": "backend/alembic/versions/003_resume_integrity.py", "scan_kind": "python", "sha256": "8ce8dd8d21121f9b607f2ad1c9dac6df425a9f83d9b80fb807be0988d41667f9"}
{"candidate_reason": "python scope discovery", "chunk_end": 104, "chunk_start": 1, "chunk_summary": "No actionable findings; this is a standard database migration file defining technical indexes for schema performance.", "duration_ms": 4034, "findings": [], "path": "backend/alembic/versions/001_add_indexes.py", "scan_kind": "python", "sha256": "443d404214d268646a852a16b9fb0dae2be7d48f7e5246ca1280fc7ed869aed2"}
{"candidate_reason": "python scope discovery", "chunk_end": 72, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 4873, "findings": [], "path": "backend/alembic/versions/002_phase5_image_asset_variants.py", "scan_kind": "python", "sha256": "e4e87dc3c8f6b93e5f1dd0ea46beeece8ebe6c77003fb5157d59d60b5ad47783"}
{"candidate_reason": "python scope discovery", "chunk_end": 46, "chunk_start": 1, "chunk_summary": "No actionable findings; this file contains standard authentication endpoints (login, logout, me) and does not involve scenario analysis or visual generation logic.", "duration_ms": 2434, "findings": [], "path": "backend/app/api/v1/auth.py", "scan_kind": "python", "sha256": "897f59b16fd7a5874d60124f0bfeb419ae516004bf924b003684733adf31e85e"}
{"candidate_reason": "python scope discovery", "chunk_end": 154, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 3088, "findings": [], "path": "backend/app/api/deps.py", "scan_kind": "python", "sha256": "483314672232f13f52c439ddde4113e4cc80d4d9c9ecedee6b0a6f9313f87cfb"}
{"candidate_reason": "python scope discovery", "chunk_end": 70, "chunk_start": 1, "chunk_summary": "No actionable findings; this file contains standard API plumbing for operation logs and provenance tracking without semantic string judgment or scenario pollution.", "duration_ms": 3378, "findings": [], "path": "backend/app/api/v1/operations.py", "scan_kind": "python", "sha256": "0f7f23fe55215e99777c21681da6ba640ac71643716099be716f6c272a926691"}
{"candidate_reason": "python scope discovery", "chunk_end": 212, "chunk_start": 1, "chunk_summary": "The file is a standard FastAPI router for export and import operations, delegating all semantic logic to services and containing no actionable findings.", "duration_ms": 6106, "findings": [], "path": "backend/app/api/v1/exports.py", "scan_kind": "python", "sha256": "2020ad132c8eb0656b13fabe61e1981975228e27cd7c09e7ec805cd852f16059"}
{"candidate_reason": "python scope discovery", "chunk_end": 84, "chunk_start": 1, "chunk_summary": "No actionable findings; this file contains standard FastAPI CRUD endpoints for user management without scenario-specific logic or semantic string judgments.", "duration_ms": 3844, "findings": [], "path": "backend/app/api/v1/users.py", "scan_kind": "python", "sha256": "6976912b349a4e82df9ee64157335cca7cb55bc0178040ecc9669a78001d75d6"}
{"candidate_reason": "python scope discovery", "chunk_end": 236, "chunk_start": 1, "chunk_summary": "The file provides a standard CRUD API for prompt template management and versioning with no scenario-specific logic or semantic string judgments.", "duration_ms": 7714, "findings": [], "path": "backend/app/api/v1/prompts.py", "scan_kind": "python", "sha256": "122494141f3e88c71eda968f511c7e8d06566fc93f08738a132bae1706040aa4"}
{"candidate_reason": "python scope discovery", "chunk_end": 570, "chunk_start": 1, "chunk_summary": "The file contains standard FastAPI route definitions for project and member management, including technical logic for file uploads and LLM configuration routing, with no actionable semantic string judgments or scenario-specific pollution.", "duration_ms": 10065, "findings": [], "path": "backend/app/api/v1/projects.py", "scan_kind": "python", "sha256": "3aa863e13caa986487d44188e1d22e782e543cb053da74423a706f1c39a18079"}
{"candidate_reason": "python scope discovery", "chunk_end": 60, "chunk_start": 1, "chunk_summary": "The file is a standard Alembic migration increasing the length of a database column to accommodate longer LLM-generated labels; no actionable semantic or scenario-dependent logic findings.", "duration_ms": 16358, "findings": [], "path": "backend/alembic/versions/004_variant_label_extend.py", "scan_kind": "python", "sha256": "4d8a88e7e7074489bb79c48cbb9cb62b23bf132db35add90d286cb0f93954b52"}
{"candidate_reason": "python scope discovery", "chunk_end": 268, "chunk_start": 1, "chunk_summary": "The file is a standard FastAPI router for pipeline steps and snapshots, delegating logic to services without any scenario-specific logic or semantic string judgments.", "duration_ms": 8376, "findings": [], "path": "backend/app/api/v1/steps.py", "scan_kind": "python", "sha256": "475e38d587f4bc934cf5ebd1edd7a6d457e47f1204a977998d8ccfb592964670"}
{"candidate_reason": "python scope discovery", "chunk_end": 82, "chunk_start": 1, "chunk_summary": "No actionable findings; this file provides technical infrastructure for atomic JSON file I/O used in checkpointing.", "duration_ms": 2919, "findings": [], "path": "backend/app/core/checkpoint_io.py", "scan_kind": "python", "sha256": "9921f13f1dd3fafa94bdb8d7ed2f6a0642f772854ae7dcc168958e3df2a4ddea"}
{"candidate_reason": "python scope discovery", "chunk_end": 298, "chunk_start": 1, "chunk_summary": "The file manages pipeline step applicability using technical state checks and configuration toggles without performing open-world semantic analysis or containing scenario-specific pollution.", "duration_ms": 5740, "findings": [], "path": "backend/app/core/applicability.py", "scan_kind": "python", "sha256": "8cc4c734e80e9b97e773f8c16db66ae397ee7d17a4477f8f86c75e34f41eb45e"}
{"candidate_reason": "python scope discovery", "chunk_end": 422, "chunk_start": 1, "chunk_summary": "The file contains API routers for episode management and pipeline orchestration, primarily handling CRUD operations and technical status tracking without making direct open-world semantic judgments.", "duration_ms": 21931, "findings": [], "path": "backend/app/api/v1/episodes.py", "scan_kind": "python", "sha256": "63af6d843b5f1747846e3e921cf2787ed67a29846924d55773b26004c2473c65"}
{"candidate_reason": "python scope discovery", "chunk_end": 8, "chunk_start": 1, "chunk_summary": "No actionable findings; this file contains standard package initialization and DTO exports.", "duration_ms": 2582, "findings": [], "path": "backend/app/core/dto/__init__.py", "scan_kind": "python", "sha256": "08aff79b29f622f9a3b9d2722fd95e43d14ee3c512de50b4cd6fee5912c05d64"}
{"candidate_reason": "python scope discovery", "chunk_end": 264, "chunk_start": 1, "chunk_summary": "The file contains database initialization and schema migration logic, including table definitions and ID generation patterns, which are within the allowed scope of technical infrastructure.", "duration_ms": 12320, "findings": [], "path": "backend/app/core/database.py", "scan_kind": "python", "sha256": "3255c3bb7dbac684feae1f4fa2b966b762df9cb41a1ef2a41d02ae7e68c73abe"}
{"candidate_reason": "python scope discovery", "chunk_end": 249, "chunk_start": 1, "chunk_summary": "The file defines application settings and infrastructure configuration using Pydantic, including feature toggles and technical validation for the scenario analysis pipeline, with no actionable semantic findings.", "duration_ms": 13995, "findings": [], "path": "backend/app/core/config.py", "scan_kind": "python", "sha256": "08605a2d225b7e37cf36b1211e63abc722c2a5b55a6dd1f3afb3e3896fc7f034"}
{"candidate_reason": "python scope discovery", "chunk_end": 213, "chunk_start": 1, "chunk_summary": "The file contains hardcoded semantic enums for background states and location space types that restrict the LLM's open-world story generation to specific genres and settings.", "duration_ms": 17597, "findings": [{"category": "llm_closed_list_instruction", "evidence": "STATE_CLASS_ENUM: FrozenSet[str] = frozenset({\"normal\", \"quiet\", \"busy\", \"busy_exit\", \"ransacked\", \"clean_after\", \"blood_scene\", \"intrusion\", \"arrival\", \"evidence_display\", \"dream_or_vision_state\"})", "line_end": 38, "line_start": 26, "recommended_fix": "Move state class definitions to a scenario-specific configuration or a structured world SOT that can be injected into the prompt dynamically.", "severity": "P1", "why_problematic": "This hardcoded list of semantic state classifiers is forced onto the LLM via prompts. It contains genre-specific tropes (e.g., 'blood_scene', 'ransacked') that bias the system toward crime/thriller scenarios and prevent arbitrary story generation."}, {"category": "llm_closed_list_instruction", "evidence": "LOCATION_SPACE_KEY_VOCAB: FrozenSet[str] = frozenset({\"main\", \"kitchen\", \"rooftop\", \"stairs\", \"yard\", \"exterior\", \"office\"})", "line_end": 136, "line_start": 128, "recommended_fix": "Define allowed space keys within the world/location schema in the SOT rather than as a global hardcoded constant.", "severity": "P1", "why_problematic": "This list restricts the physical space types a location can have to a specific set of domestic/office environments. It is hardcoded in the core logic and forced into the entity extractor prompt, limiting the system's ability to handle diverse settings (e.g., sci-fi, nature)."}], "path": "backend/app/core/bg_state_vocab.py", "scan_kind": "python", "sha256": "d6c2d1fccafa20ba72e40e90ca8a76f14d4225eebe57c37a205c010e50e9aafd"}
{"candidate_reason": "python scope discovery", "chunk_end": 330, "chunk_start": 1, "chunk_summary": "The file implements a deterministic background ID catalog and hashing system using structured metadata and SOT-based validation, with no evidence of scenario-specific pollution or pattern-based semantic judgment.", "duration_ms": 19683, "findings": [], "path": "backend/app/core/bg_catalog.py", "scan_kind": "python", "sha256": "2225fe163ccb224e71c66211be106160a1aaef1c39fac8d4e2cf93eacbe4a480"}
{"candidate_reason": "python scope discovery", "chunk_end": 175, "chunk_start": 1, "chunk_summary": "This file contains technical infrastructure for normalizing file paths between absolute and relative formats for database storage and runtime resolution, with no actionable findings.", "duration_ms": 3855, "findings": [], "path": "backend/app/core/file_paths.py", "scan_kind": "python", "sha256": "39921edd78a9cb4a0ade74a2728088eff7b2d104f6ee7f95c19b8da0a8992679"}
{"candidate_reason": "python scope discovery", "chunk_end": 205, "chunk_start": 1, "chunk_summary": "The file provides structural validation for entity metadata (character, location, prop) and contains no actionable semantic judgments or scenario-specific pollution.", "duration_ms": 7746, "findings": [], "path": "backend/app/core/entity_metadata.py", "scan_kind": "python", "sha256": "893d93150185304ee8d6b294842e6b970f8a7590185eb9681df3095795d0be49"}
{"candidate_reason": "python scope discovery", "chunk_end": 484, "chunk_start": 1, "chunk_summary": "The asset readiness check uses hardcoded semantic strings ('dead', 'unconscious', etc.) and overloads the 'gaze_target' field to determine visual asset requirements, creating a fragile link between story analysis and asset validation.", "duration_ms": 25940, "findings": [{"category": "semantic_string_judgment", "evidence": "_STATE_LABELS = (\"dead\", \"severely_injured\", \"unconscious\")", "line_end": 305, "line_start": 305, "recommended_fix": "Centralize character states in a shared SOT or Enum that is used by both the staging logic and the readiness validator.", "severity": "P1", "why_problematic": "The pipeline relies on a hardcoded list of semantic tropes to decide if a character requires a specific visual state variant. This creates a fragile dependency on exact string matches for open-world story states that should be defined in a structured SOT."}, {"category": "semantic_string_judgment", "evidence": "gaze = ca.get(\"gaze_target\", \"\") ... if gaze in (\"dead\", \"severely_injured\", \"unconscious\")", "line_end": 440, "line_start": 435, "recommended_fix": "Use a dedicated 'character_state' field in the manifest for character conditions and ensure it uses a controlled vocabulary.", "severity": "P1", "why_problematic": "The code overloads the 'gaze_target' field to carry character health/life states. This is a semantic mismatch where a technical property is used to drive visual asset routing based on string patterns, which will fail if the upstream LLM or staging logic uses synonyms or different fields."}], "path": "backend/app/core/asset_readiness.py", "scan_kind": "python", "sha256": "254da5a0e1790186c83b8f42077b113e9f92c2d3fa3fcd1d4fd01d9551f8a5af"}
{"candidate_reason": "python scope discovery", "chunk_end": 63, "chunk_start": 1, "chunk_summary": "The file defines a technical enum for framing scales and provides a validation helper, adhering to closed-world syntax validation without scenario-specific pollution.", "duration_ms": 3475, "findings": [], "path": "backend/app/core/framing_scale.py", "scan_kind": "python", "sha256": "a48840fd0a5c37397cb26a10a57d4bd4333071aa55ad4bae0f6db74f786ca4e3"}
{"candidate_reason": "python scope discovery", "chunk_end": 46, "chunk_start": 1, "chunk_summary": "No actionable findings; the file defines technical integrity report structures for infrastructure and artifact validation without semantic story or visual logic.", "duration_ms": 3538, "findings": [], "path": "backend/app/core/integrity_report.py", "scan_kind": "python", "sha256": "746d4ecf33b66cd7e4c2b3d94f850ba980b2ca941cf49393fbaeef54dc4bce79"}
{"candidate_reason": "python scope discovery", "chunk_end": 137, "chunk_start": 1, "chunk_summary": "The file defines a SceneAnalysisContext DTO for aggregating checkpoint data, and no actionable findings were identified as it contains only structural definitions and technical metadata.", "duration_ms": 16065, "findings": [], "path": "backend/app/core/dto/scene_analysis.py", "scan_kind": "python", "sha256": "5d17c2fdffaa87103bf4484442ea4485b1da846eb1a343445430c5fd3cd8ce84"}
{"candidate_reason": "python scope discovery", "chunk_end": 35, "chunk_start": 1, "chunk_summary": "No actionable findings; the file contains standard infrastructure for structured JSON logging and does not perform semantic analysis or visual routing.", "duration_ms": 3029, "findings": [], "path": "backend/app/core/logging_config.py", "scan_kind": "python", "sha256": "b6e8ab379da48f01ee8f87b1878a8d25a6bb38859dce8238521a89ee7f1a4d4c"}
{"candidate_reason": "python scope discovery", "chunk_end": 218, "chunk_start": 1, "chunk_summary": "The file defines custom application errors, including a drift error that reveals the use of hardcoded natural language phrases for visual visibility logic.", "duration_ms": 14160, "findings": [{"category": "semantic_string_judgment", "evidence": "off-camera/off-screen/화면 밖 phrase", "line_end": 104, "line_start": 103, "recommended_fix": "Replace natural language phrase detection with structured visibility attributes in the staging schema or use a dedicated LLM classification step for SOT reconciliation.", "severity": "P1", "why_problematic": "The system uses a hardcoded list of natural language phrases to determine entity visibility (dual SOT reconciliation). This pattern-based semantic judgment is fragile for open-world scenario descriptions."}], "path": "backend/app/core/errors.py", "scan_kind": "python", "sha256": "ba89fa3d25ef305a82f0bc1b664d5f5b01a78c04656a81067792cb165042f7b2"}
{"candidate_reason": "python scope discovery", "chunk_end": 42, "chunk_start": 1, "chunk_summary": "No actionable findings; this file contains standard infrastructure for background job management using threading.", "duration_ms": 5029, "findings": [], "path": "backend/app/core/job_manager.py", "scan_kind": "python", "sha256": "fee1d9730d64a20295f3dbc70474835423be6fa6632498e616d282a36a410696"}
{"candidate_reason": "python scope discovery", "chunk_end": 130, "chunk_start": 1, "chunk_summary": "The file defines technical validation logic for keep_elements schema (v7) using a closed set of generic categories (environment, static_prop) without scenario-specific pollution or semantic string judgment.", "duration_ms": 5680, "findings": [], "path": "backend/app/core/keep_elements.py", "scan_kind": "python", "sha256": "1fa17ab361a1f74991d78c8965aa818897f82f6e9cbd652423308c3f853293fe"}
{"candidate_reason": "python scope discovery", "chunk_end": 85, "chunk_start": 1, "chunk_summary": "No actionable findings; this file provides technical infrastructure for pipeline step caching based on input hashes without semantic or scenario-specific logic.", "duration_ms": 2933, "findings": [], "path": "backend/app/core/pipeline_cache.py", "scan_kind": "python", "sha256": "0efc4fe218ff2295389ecfb153eede4bfa30670817c8b6059307c716350ee318"}
{"candidate_reason": "python scope discovery", "chunk_end": 62, "chunk_start": 1, "chunk_summary": "This file provides technical I/O utilities for persisting and loading lists of skipped entity IDs and contains no scenario-specific logic or semantic string judgments.", "duration_ms": 5658, "findings": [], "path": "backend/app/core/low_freq_skip.py", "scan_kind": "python", "sha256": "5a119ae11d83690059124ebe4ab43860481a2bac301864835aaf9d9e972f9f9d"}
{"candidate_reason": "python scope discovery", "chunk_end": 1016, "chunk_start": 1, "chunk_summary": "The file defines the image management API router. A finding was identified where entity membership (outlook association) is determined by parsing natural-language prompt strings instead of using structured database relationships.", "duration_ms": 51593, "findings": [{"category": "semantic_string_judgment", "evidence": "returns images whose prompt_used contains 'outlook_id:{outlook_id}'", "line_end": 109, "line_start": 107, "recommended_fix": "Replace the substring search with a structured database relationship (e.g., a foreign key or a link table) between ImageAsset and EntityCanon to track which outlooks are present in an image, rather than embedding and parsing technical IDs within the prompt string.", "severity": "P1", "why_problematic": "The API documentation (and the underlying service logic it describes) indicates that filtering images by 'outlook_id' is performed via a substring check on the 'prompt_used' field. This field contains the natural-language prompt text. Using substring matching on prompt text to determine entity membership or drive data routing is brittle and violates the principle of using structured data for entity associations, especially when the result determines visible entity membership."}], "path": "backend/app/api/v1/images.py", "scan_kind": "python", "sha256": "5b74e60458b29711ced0f37357bf4401cf87a5b19b1b52a81fe798e58a34f6b9"}
{"candidate_reason": "python scope discovery", "chunk_end": 31, "chunk_start": 1, "chunk_summary": "No actionable findings; this file contains standard security and session management infrastructure unrelated to scenario analysis or visual generation.", "duration_ms": 3245, "findings": [], "path": "backend/app/core/security.py", "scan_kind": "python", "sha256": "efce0d75e3a2e4ccdc8c675afcc00854a5af7fbe5799da350b7caf2bf30957ad"}
{"candidate_reason": "python scope discovery", "chunk_end": 191, "chunk_start": 1, "chunk_summary": "The file implements entity protection logic using hardcoded semantic types and a fragile ID parsing mechanism that relies on blind string splitting, which contradicts its own documentation.", "duration_ms": 28742, "findings": [{"category": "blind_string_mutation", "evidence": "short_id.split(\"O\")[0] if short_id and \"O\" in short_id else (short_id or \"\")", "line_end": 70, "line_start": 70, "recommended_fix": "Use a specific regex pattern (e.g., r'^(C\\d+)O\\d+$') to identify and split composite IDs, or verify the ID starts with 'C' and the 'O' is at a valid index before splitting.", "severity": "P1", "why_problematic": "This logic attempts to extract a base ID from a composite (e.g., C01O01 -> C01) but fails for bare IDs starting with 'O' (e.g., O01 becomes an empty string) or containing 'O'. This directly contradicts the docstring on line 69 which states O## bare IDs should remain unchanged, leading to lost entity references in the protection cascade."}, {"category": "semantic_string_judgment", "evidence": "if etype in (\"location\", \"outlook\"):", "line_end": 182, "line_start": 181, "recommended_fix": "Define protection behavior as a property of the entity type in a central schema or metadata rather than hardcoding strings in the logic.", "severity": "P2", "why_problematic": "Hardcoded semantic entity types are used to bypass the low-frequency skip logic. This creates a hidden dependency on specific category names for pipeline routing and protection behavior that should be driven by the entity schema or a central SOT."}], "path": "backend/app/core/entity_protection.py", "scan_kind": "python", "sha256": "e181a4a35b8014686e298d8c09967a00e3be7867fd2c0fd005f3836515faaaa6"}
{"candidate_reason": "python scope discovery", "chunk_end": 83, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 4023, "findings": [], "path": "backend/app/core/settings_registry.py", "scan_kind": "python", "sha256": "a75c16fd433e6ca3dbba88f5a6ed532714c3670dc287f6992b8cef98fc7d62d7"}
{"candidate_reason": "python scope discovery", "chunk_end": 276, "chunk_start": 1, "chunk_summary": "The pipeline gate relies on regex parsing of the prompt_used string field to identify composite image associations and uses a hardcoded 'O00' ID for null outlooks.", "duration_ms": 16675, "findings": [{"category": "semantic_string_judgment", "evidence": "ImageAsset.prompt_used.like(\"%composite:%\"), re.search(r'composite:([a-f0-9-]+):([a-f0-9-]+)', p)", "line_end": 156, "line_start": 144, "recommended_fix": "Store character/outlook associations in a structured metadata column (JSON) or dedicated link table on the ImageAsset model instead of parsing the prompt string.", "severity": "P1", "why_problematic": "The pipeline determines if a composite image is complete by regex-parsing the prompt_used field. This couples technical metadata (character/outlook IDs) to the natural language prompt text. If the prompt generation format changes or the field is cleaned for production, the gate logic will fail to identify existing assets, blocking the pipeline."}, {"category": "scenario_dependent_code", "evidence": "EntityCanon.short_id == \"O00\"", "line_end": 127, "line_start": 127, "recommended_fix": "Use a boolean flag (e.g., is_null_outlook) or a system-level constant/enum on the EntityCanon model instead of a hardcoded short_id.", "severity": "P2", "why_problematic": "Hardcoded magic string 'O00' is used to identify a 'Null Outlook' to exclude it from composite requirements. This assumes a specific naming convention in the world-building data that may not be consistent across all scenarios or future schema versions."}, {"category": "semantic_string_judgment", "evidence": "ImageAsset.prompt_used.like(\"%outlook_id:%\")", "line_end": 239, "line_start": 238, "recommended_fix": "Unify asset identification using structured metadata fields rather than multiple inconsistent string patterns in the prompt field.", "severity": "P1", "why_problematic": "The pipeline status reporting uses a different regex pattern ('outlook_id:') than the gate check ('composite:') to identify completed assets. This inconsistency in parsing natural-language prompt fields for technical status leads to drift between the gate and the UI status."}], "path": "backend/app/core/pipeline_gate.py", "scan_kind": "python", "sha256": "7c845f2b6194ec9c311aa1825f965c6553892db648cd29cb090e356e7921c46f"}
{"candidate_reason": "python scope discovery", "chunk_end": 161, "chunk_start": 1, "chunk_summary": "The name matcher utility implements entity resolution logic using regex-based bracket stripping and heuristic hierarchy rules to handle naming drift.", "duration_ms": 18746, "findings": [{"category": "blind_string_mutation", "evidence": "_BRACKET_PATTERN = re.compile(r\"[\\(\\[（［【〈《「『].*$\")", "line_end": 74, "line_start": 51, "recommended_fix": "Instead of blind regex stripping, use a structured entity registry where variants are explicitly linked to base entities in the database, or use a context-aware LLM resolution step for non-exact matches.", "severity": "P1", "why_problematic": "The code blindly strips all text following any bracket character to create a 'bare' key for entity matching. This assumes that bracketed content is always a non-essential variant suffix (e.g., 'Character (Soul)'), which may not hold true for all open-world story names and can lead to incorrect entity resolution or collisions."}, {"category": "semantic_string_judgment", "evidence": "if not _BRACKET_PATTERN.search(raw): ... bare = normalize_name(raw)", "line_end": 141, "line_start": 137, "recommended_fix": "Move entity relationship logic (base vs. variant) into the database schema or a structured world-rule SOT rather than inferring hierarchy from string patterns during index construction.", "severity": "P1", "why_problematic": "The indexing logic uses the presence of brackets as a semantic marker to distinguish between 'base' and 'variant' entities, deciding that entities with brackets should 'yield' their bare name to those without. This hardcodes a specific naming convention into the entity resolution pipeline."}], "path": "backend/app/core/name_matcher.py", "scan_kind": "python", "sha256": "6a06d3cde26de3c8fec7c158b189b543c3b86df0d99b9e9cdda903b03f62f797"}
{"candidate_reason": "python scope discovery", "chunk_end": 125, "chunk_start": 1, "chunk_summary": "The file serves as a technical registry for pipeline step classes and contains no actionable findings regarding semantic string judgment or scenario pollution.", "duration_ms": 3260, "findings": [], "path": "backend/app/core/steps/__init__.py", "scan_kind": "python", "sha256": "7dfe3f4a7e6f7f2fb6c660abc77c47b48790b723847c664652cecacc26c88b42"}
{"candidate_reason": "python scope discovery", "chunk_end": 363, "chunk_start": 1, "chunk_summary": "The file defines the Frame Spatial Contract (FSC) system, which includes structural validation of spatial constraints and a diagnostic tool for checking prompt adherence.", "duration_ms": 34180, "findings": [{"category": "semantic_string_judgment", "evidence": "label_present = bool(label) and label in prompt_lower; zone_present = any(v in prompt_lower for v in zone_variants)", "line_end": 324, "line_start": 322, "recommended_fix": "Replace substring-based prompt validation with a structured LLM evaluation step or a vision-language model (VLM) check that can semantically verify the prompt's content against the spatial contract.", "severity": "P1", "why_problematic": "The phrase_diagnostic function uses substring matching to verify if entity labels and spatial keywords (from ZONE_PHRASES and DEPTH_PHRASES) appear in the generated t2i_prompt. This is a brittle semantic judgment on open-world natural language text, which is explicitly forbidden when used for validation or routing decisions, as it cannot reliably handle linguistic variation."}], "path": "backend/app/core/frame_spatial_contract.py", "scan_kind": "python", "sha256": "dc8cd3121d7ca06ba098541ab7a40a722f0c79326fa6c4f65ed6b0ded2483f80"}
{"candidate_reason": "python scope discovery", "chunk_end": 457, "chunk_start": 1, "chunk_summary": "The validator uses hardcoded keyword lists and heuristic window-based string matching to classify the semantic targets of prompt phrases, which drives reference validation and fail-fast behavior.", "duration_ms": 24445, "findings": [{"category": "semantic_string_judgment", "evidence": "_CHARACTER_TOKENS, _BACKGROUND_TOKENS, _OBJECT_TOKENS, _GENERIC_VERB_TOKENS, _GENERIC_NOUN_TOKENS", "line_end": 89, "line_start": 49, "recommended_fix": "Move the classification of prompt reference targets to a structured LLM analysis step or have the prompt generator emit explicit metadata indicating the target of each reference phrase.", "severity": "P1", "why_problematic": "These are hardcoded noun and verb lists used to classify the semantic meaning of 'from the reference' phrases in open-world prompts. This pattern-based approach to deciding whether a phrase refers to a character, background, or object is used to trigger or skip validation logic, which can lead to incorrect fail-fast errors (RefContractError) or missed validations based on arbitrary string patterns."}, {"category": "semantic_string_judgment", "evidence": "_classify_window, _has_generic_instruction_signal, classify_from_the_reference", "line_end": 190, "line_start": 91, "recommended_fix": "Replace the heuristic window-based classification with a robust semantic parser or an LLM-based classification step that provides structured output for reference targets.", "severity": "P1", "why_problematic": "These functions implement semantic classification of open-world prompt text using substring checks and nearest-token heuristics. This logic decides the 'type' of a reference (character/object/background) which directly routes validation behavior in the visual generation pipeline."}], "path": "backend/app/core/ref_contract_validator.py", "scan_kind": "python", "sha256": "93a34075f568486f74bd384f96f18208bab54f8e5777726c6d7beef955a7b504"}
{"candidate_reason": "python scope discovery", "chunk_end": 1597, "chunk_start": 1, "chunk_summary": "The StepRunner base class is a clean infrastructure component handling pipeline execution, checkpointing, and state management without scenario-specific pollution or open-world semantic judgments.", "duration_ms": 14624, "findings": [], "path": "backend/app/core/step_runner.py", "scan_kind": "python", "sha256": "1bc98850586701b74aec05907a3329fb336d1b8e4412efc5724e836aeafc121a"}
{"candidate_reason": "python scope discovery", "chunk_end": 129, "chunk_start": 1, "chunk_summary": "The file provides structural normalization and contract validation for LLM-generated evidence fields, using allowed enum checks and list-presence validation without scenario-specific pollution.", "duration_ms": 11363, "findings": [], "path": "backend/app/core/steps/_evidence_helpers.py", "scan_kind": "python", "sha256": "1b11a4a10b12e90373ed92fd688d5eb5db3a49220fc3c31d94987b7fdf77b9aa"}
{"candidate_reason": "python scope discovery", "chunk_end": 166, "chunk_start": 1, "chunk_summary": "The file manages the injection of planning document context into prompts, but contains a hardcoded routing rule that restricts character and relationship information to the first episode only.", "duration_ms": 30580, "findings": [{"category": "scenario_dependent_code", "evidence": "if section == \"characters_text\" and not self.is_first_episode: return \"\"", "line_end": 47, "line_start": 44, "recommended_fix": "Remove the hardcoded episode-based filtering or move it to a configurable context-management policy within the pipeline's structured world/rule SOT.", "severity": "P1", "why_problematic": "This hardcodes a semantic routing decision that assumes character descriptions and visual traits are only necessary for the first episode. In a multi-episode pipeline, this leads to visual and narrative drift as subsequent episodes lose access to the foundational planning context."}], "path": "backend/app/core/planning_doc_context.py", "scan_kind": "python", "sha256": "96a5e66e6ef2bd8f932a78d98da7cf04cc0bb01723a449a16a4d79929afbe7ea"}
{"candidate_reason": "python scope discovery", "chunk_end": 400, "chunk_start": 1, "chunk_summary": "The file contains technical validation helpers for hashing, normalization, and schema enforcement of metadata sentinels, with no actionable findings regarding open-world semantic judgment or scenario pollution.", "duration_ms": 8552, "findings": [], "path": "backend/app/core/steps/_owned_helpers.py", "scan_kind": "python", "sha256": "b9b4d7f230a479d642279017c5296d7a471f7e09c4e32cf0a9a6dcb1fc915dec"}
{"candidate_reason": "python scope discovery", "chunk_end": 1154, "chunk_start": 1, "chunk_summary": "The file is a structural manifest defining the pipeline steps, dependencies, and technical metadata; it contains no actionable scenario-specific pollution or string-based routing logic.", "duration_ms": 21854, "findings": [], "path": "backend/app/core/step_manifest.py", "scan_kind": "python", "sha256": "ca41b2e1efde1513640c9b57ce37a6fc42665ec7a0b111f849ba847a76fba548"}
{"candidate_reason": "python scope discovery", "chunk_end": 116, "chunk_start": 1, "chunk_summary": "The code is a clean wrapper for an LLM-based judge that validates T2I prompts against a list of owned objects, with no hardcoded semantic heuristics or scenario-specific pollution.", "duration_ms": 12178, "findings": [], "path": "backend/app/core/steps/_owned_judge.py", "scan_kind": "python", "sha256": "6280d7a602b422b4d3a0815310a128f83cc6eacf7b0ab3ba4944eb703268fdcb"}
{"candidate_reason": "python scope discovery", "chunk_end": 264, "chunk_start": 1, "chunk_summary": "The file is a standard step runner that aggregates location and entity data for background classification, correctly delegating semantic judgments to the LLM and avoiding hardcoded scenario-specific logic.", "duration_ms": 9098, "findings": [], "path": "backend/app/core/steps/background_classify_step.py", "scan_kind": "python", "sha256": "1ffb71738766db06c062a8702c057a161718c17d4b721d15138ca50a742f33eb"}
{"candidate_reason": "python scope discovery", "chunk_end": 629, "chunk_start": 1, "chunk_summary": "The file is a StepRunner implementation for background chain rendering that orchestrates data between checkpoints and the database without performing semantic string judgments or containing scenario-specific pollution.", "duration_ms": 14130, "findings": [], "path": "backend/app/core/steps/background_chain_render_step.py", "scan_kind": "python", "sha256": "db955002c4caf6db1a7f2927358a8e72e4d761f4dfa4bec668d8a4c36376f52f"}
{"candidate_reason": "python scope discovery", "chunk_end": 995, "chunk_start": 1, "chunk_summary": "The file defines legacy analysis steps, with specific scenario-dependent logic found in the SceneDirector and EntityReview steps.", "duration_ms": 22223, "findings": [{"category": "scenario_dependent_prompt", "evidence": "인물: 자기 물리적 몸으로 존재하는 인물만. 대사를 하더라도 빙의/원격접속 중이면 제외... 인물A가 인물B의 몸에 접속/빙의/라이드했다면", "line_end": 817, "line_start": 810, "recommended_fix": "Move these specific examples into a 'World Rules' or 'Presence Logic' section of the SOT (Source of Truth) rather than hardcoding them in the pipeline step's prompt template.", "severity": "P1", "why_problematic": "The prompt hardcodes specific sci-fi/fantasy tropes (possession, remote access, riding) as the primary logic for determining physical presence. This biases the LLM toward these specific scenarios and may lead to incorrect reasoning in stories with different metaphysical rules (e.g., ghosts, projections, or simple off-screen dialogue)."}, {"category": "semantic_string_judgment", "evidence": "low_importance = { e[\"name\"] for e in entities_review if int(e.get(\"importance\", 50)) < 10 and int(e.get(\"appearances\", 0)) < 2 }", "line_end": 132, "line_start": 129, "recommended_fix": "Allow the LLM to explicitly flag entities for exclusion based on context, or move these thresholds to a configurable project-level setting.", "severity": "P2", "why_problematic": "The code uses hardcoded numeric thresholds (importance < 10 and appearances < 2) to prune entities from the story world. This is a semantic judgment that can lead to the accidental removal of rare but critical plot elements (e.g., a unique artifact that appears once)."}], "path": "backend/app/core/steps/analysis_steps_legacy.py", "scan_kind": "python", "sha256": "5309486c802bcbd8c46d563320b1b652467837e59f9414993412e25513d9e3a3"}
{"candidate_reason": "python scope discovery", "chunk_end": 225, "chunk_start": 1, "chunk_summary": "The file defines the Step Catalog, merging manifest data with runner classes, but contains a pattern-based applicability field and documentation suggesting hardcoded visual semantic tokens.", "duration_ms": 41768, "findings": [{"category": "semantic_string_judgment", "evidence": "applicability: str       # always | disabled | on_demand | if_*", "line_end": 49, "line_start": 49, "recommended_fix": "Replace the string-pattern applicability with a structured condition object or an explicit enum of supported scenario conditions.", "severity": "P1", "why_problematic": "The use of an 'if_*' string pattern for step applicability suggests that the pipeline routes story or visual steps by parsing string prefixes against scenario attributes. This is a pattern-based semantic judgment that couples step execution to arbitrary scenario-state strings rather than a structured rule system."}, {"category": "scenario_dependent_code", "evidence": "(zoom_in_detail 등)를 읽어 user_prompt에 주입", "line_end": 62, "line_start": 59, "recommended_fix": "Use a structured visual State of Truth (SOT) or standardized attribute keys instead of hardcoding specific visual concept names in step-to-step dependencies.", "severity": "P2", "why_problematic": "The documentation for 'consumes_downstream' describes a mechanism where steps have hardcoded knowledge of specific visual semantic tokens (like 'zoom_in_detail') produced by other steps to mutate prompts. This creates tight coupling between steps based on open-world visual concepts."}], "path": "backend/app/core/step_catalog.py", "scan_kind": "python", "sha256": "a9349acfefc4619ad2fbd259fab29f7803b2677237d2b146736d9687bef7ef3d"}
{"candidate_reason": "python scope discovery", "chunk_end": 519, "chunk_start": 1, "chunk_summary": "The file serves as a technical coordinator for the background master plan step, handling checkpointing, parallel execution, and ID assignment without containing embedded prompts or semantic string judgments.", "duration_ms": 20498, "findings": [], "path": "backend/app/core/steps/background_master_plan_step.py", "scan_kind": "python", "sha256": "f316adda85aac755b904d1cc15c8d3ff7ed749c8c9584a6289f4d9cd457d646c"}
{"candidate_reason": "python scope discovery", "chunk_end": 366, "chunk_start": 1, "chunk_summary": "No actionable findings; the file serves as a technical orchestrator for background prompt generation using structured IDs and context blocks without performing semantic string judgment or containing scenario-specific pollution.", "duration_ms": 15499, "findings": [], "path": "backend/app/core/steps/background_prompt_step.py", "scan_kind": "python", "sha256": "9318a00456c3f8bb0eaf22772efac3dc477b8daba55892adea74588c6be52359"}
{"candidate_reason": "python scope discovery", "chunk_end": 369, "chunk_start": 1, "chunk_summary": "The file is a pipeline step runner that orchestrates data gathering and formatting for the background planner LLM, using structured IDs and checkpoint data without containing scenario-specific pollution or semantic string judgments.", "duration_ms": 17960, "findings": [], "path": "backend/app/core/steps/background_planner_step.py", "scan_kind": "python", "sha256": "53d33dcd02ffd8685de2d501c41a75e5556ef64a21aa374b9bfa3ed61ecdbfb8"}
{"candidate_reason": "python scope discovery", "chunk_end": 766, "chunk_start": 1, "chunk_summary": "The file is a pipeline step runner for background rendering that handles data orchestration, ID validation, and database synchronization without making semantic story or visual decisions based on string patterns.", "duration_ms": 14001, "findings": [], "path": "backend/app/core/steps/background_render_step.py", "scan_kind": "python", "sha256": "61f88d19935e0b1efe05d6cdf48d004f8901bd7705a8577ad4c8f9516bf5d7b9"}
{"candidate_reason": "python scope discovery", "chunk_end": 214, "chunk_start": 1, "chunk_summary": "The step runner orchestrates background planning by prepending string markers to influence scene skipping logic and uses scenario-specific examples in its documentation.", "duration_ms": 29238, "findings": [{"category": "semantic_string_judgment", "evidence": "FLOOR PLAN 블록 있으면 outdoor skip 금지 ... [FLOOR PLAN] 블록이 prepend되어 outdoor skip 룰 회피", "line_end": 93, "line_start": 18, "recommended_fix": "Replace the string-based trigger with a structured boolean or enum in the location/scene schema (e.g., 'has_floor_plan_context') to drive the skip logic.", "severity": "P1", "why_problematic": "The pipeline's visual routing (skipping outdoor scenes) is controlled by the presence of a specific string marker '[FLOOR PLAN]'. This is a pattern-based semantic judgment that should be handled via structured metadata rather than string-based triggers."}, {"category": "scenario_dependent_code", "evidence": "fp_rooftop_unit", "line_end": 91, "line_start": 91, "recommended_fix": "Use generic placeholders (e.g., 'fp_group_01') in comments and documentation to maintain scenario-agnostic logic.", "severity": "P2", "why_problematic": "The documentation uses a scenario-specific place/prop name ('rooftop_unit') as a concrete example for logic, which indicates domain-specific pollution in the pipeline's design documentation."}], "path": "backend/app/core/steps/background_chain_planning_step.py", "scan_kind": "python", "sha256": "0fed58a03fae448319826f84ba117fe61266792824f6f7500ea105d649ad5d39"}
{"candidate_reason": "python scope discovery", "chunk_end": 107, "chunk_start": 1, "chunk_summary": "The file is a standard pipeline step runner for character extraction and does not contain hardcoded scenario logic, semantic string judgments, or prompt pollution.", "duration_ms": 8833, "findings": [], "path": "backend/app/core/steps/character_list_step.py", "scan_kind": "python", "sha256": "ee4727eab61e855b22a5898064a08f163d1b34b4b45a0d79472a6489ae8b5254"}
{"candidate_reason": "python scope discovery", "chunk_end": 95, "chunk_start": 1, "chunk_summary": "The EntityRelationStep runner correctly handles data aggregation and context assembly for entity relation extraction without using hardcoded scenario-specific logic or semantic string judgments.", "duration_ms": 12008, "findings": [], "path": "backend/app/core/steps/entity_relation_step.py", "scan_kind": "python", "sha256": "b1a46b315c5130b07a2b6a7569645a2432bfda4bcba2a1d7a27a110c321ebe71"}
{"candidate_reason": "python scope discovery", "chunk_end": 304, "chunk_start": 1, "chunk_summary": "The FloorPlanPromptStep orchestrates the generation of floor plan prompts using structured checkpoint data and technical ID validation, with no actionable findings regarding open-world semantic judgment or scenario pollution.", "duration_ms": 11252, "findings": [], "path": "backend/app/core/steps/floor_plan_prompt_step.py", "scan_kind": "python", "sha256": "3d0f71b1f1d384eeb6b46210236a9910106809dec6aed137cf941ee4f45ab8be"}
{"candidate_reason": "python scope discovery", "chunk_end": 561, "chunk_start": 1, "chunk_summary": "The code extracts beats and shots from scenes, using hardcoded story tropes to filter visual rules and injecting character lists into LLM prompts.", "duration_ms": 19025, "findings": [{"category": "scenario_dependent_code", "evidence": "if r.get(\"rule_type\") in (\"possession\", \"projection\", \"ghost\"):", "line_end": 115, "line_start": 114, "recommended_fix": "Replace the hardcoded list with a boolean flag in the rule schema (e.g., 'affects_physical_presence') or move the trope list to a centralized world-building configuration.", "severity": "P1", "why_problematic": "Hardcodes specific story tropes ('possession', 'projection', 'ghost') to filter visual guidelines. This prevents the pipeline from correctly handling other metaphysical or physical rules (e.g., holograms, illusions) that might be defined in the world rules SOT."}, {"category": "scenario_dependent_code", "evidence": "if r.get(\"rule_type\") in (\"possession\", \"projection\", \"ghost\"):", "line_end": 324, "line_start": 323, "recommended_fix": "Unify the rule filtering logic and drive it via structured metadata in the world rules rather than hardcoded string matching.", "severity": "P1", "why_problematic": "Duplicate of the hardcoded trope filtering logic in the shot extraction step. It assumes only these specific tropes are relevant for determining physical presence in visual descriptions."}], "path": "backend/app/core/steps/beat_shot_steps.py", "scan_kind": "python", "sha256": "c25b9c5afa08d9056c9af9387bfc34788f5960423bb426df0b7445ce8a2d8321"}
{"candidate_reason": "python scope discovery", "chunk_end": 537, "chunk_start": 1, "chunk_summary": "The file is a technical orchestrator for floor plan rendering and ImageAsset database synchronization, using structured IDs and status constants without open-world semantic judgments.", "duration_ms": 11442, "findings": [], "path": "backend/app/core/steps/floor_plan_render_step.py", "scan_kind": "python", "sha256": "95bc28000e5f70e5ac3f3830e7679e68d6c937b7ce401cc96a21bafcc17a6b06"}
{"candidate_reason": "python scope discovery", "chunk_end": 329, "chunk_start": 1, "chunk_summary": "The SceneDirectorStep contains hardcoded story tropes for rule filtering and embedded prompt instructions that should be managed via templates.", "duration_ms": 27065, "findings": [{"category": "scenario_dependent_code", "evidence": "if r.get(\"rule_type\") in (\"possession\", \"projection\", \"ghost\")", "line_end": 127, "line_start": 125, "recommended_fix": "Replace the hardcoded list with a generic check for the presence of a 'visual_guideline' field or use a metadata flag in the rules SOT to indicate director relevance.", "severity": "P1", "why_problematic": "The step runner filters visual guidelines based on a hardcoded list of story-specific tropes ('possession', 'projection', 'ghost'). This is scenario-dependent logic that prevents the pipeline from supporting other visual rule types (e.g., 'hologram', 'disguise', 'magic') without code changes."}, {"category": "scenario_dependent_prompt", "evidence": "\"시각적 존재 판단 참고사항 (단, 카메라에 보이면 무조건 포함):\\n\"", "line_end": 121, "line_start": 121, "recommended_fix": "Move this instruction into the 'scene_director' prompt template or a structured SOT.", "severity": "P2", "why_problematic": "Hardcoded prompt instructions in the code logic instead of the prompt management system. This makes it difficult to localize or adjust instructions for different scenario types."}], "path": "backend/app/core/steps/director_steps.py", "scan_kind": "python", "sha256": "4832353f84c57b443d43af643af033dcd71d175ad607caeb2853e389bd1c3265"}
{"candidate_reason": "python scope discovery", "chunk_end": 781, "chunk_start": 1, "chunk_summary": "The step uses a string-splitting heuristic to extract semantic summaries for multi-turn visual consistency, which risks losing critical spatial constraints.", "duration_ms": 16122, "findings": [{"category": "semantic_string_judgment", "evidence": "for sep in (\". \", \".\\n\", \"\\n\\n\"): idx = text.find(sep) ... return text[:idx + 1].strip()", "line_end": 734, "line_start": 714, "recommended_fix": "Require the LLM to provide an explicit 'spatial_summary' field in its structured response, or use a dedicated summarization step that preserves key entities and layout constraints instead of relying on punctuation-based slicing.", "severity": "P1", "why_problematic": "The code performs a blind truncation of visual prompt text based on punctuation patterns to create a 'summary' used as a spatial reference for subsequent generations. This assumes the first sentence captures all necessary consistency constraints, which is an unreliable semantic judgment that can lead to visual drift in multi-room floor plans."}], "path": "backend/app/core/steps/location_floor_plan_step.py", "scan_kind": "python", "sha256": "86bc164f3624c24cfe7edc1704db823d4f3d9122c7f53fd39106b85d11dcb146"}
{"candidate_reason": "python scope discovery", "chunk_end": 553, "chunk_start": 1, "chunk_summary": "The file orchestrates the multi-phase outlook extraction process, handling character-to-outlook mapping and technical ID management (O##) without containing scenario-specific pollution or pattern-based semantic judgments.", "duration_ms": 24143, "findings": [], "path": "backend/app/core/steps/outlook_steps.py", "scan_kind": "python", "sha256": "7cff875a4cc7dd2b8d2a3bc0961d812f257d97eba72e149a570f06b4e35548d2"}
{"candidate_reason": "python scope discovery", "chunk_end": 217, "chunk_start": 1, "chunk_summary": "The file implements a structured extraction step for planning documents using LLM multimodal or text fallback, with no actionable findings regarding scenario-specific pollution or pattern-based semantic routing.", "duration_ms": 16164, "findings": [], "path": "backend/app/core/steps/planning_doc_step.py", "scan_kind": "python", "sha256": "30736eedb414dddb5c432e9cde26f18ac1a90b52404ba4abdd013f8df3485131"}
{"candidate_reason": "python scope discovery", "chunk_end": 920, "chunk_start": 1, "chunk_summary": "The chunk contains hardcoded semantic logic for entity filtering and a hardcoded LLM prompt for entity merging that includes domain-specific heuristics.", "duration_ms": 44639, "findings": [{"category": "scenario_dependent_code", "evidence": "max_scenes=2", "line_end": 328, "line_start": 328, "recommended_fix": "Move the frequency threshold to project configuration or a structured world-rule SOT.", "severity": "P1", "why_problematic": "Hardcoded threshold for filtering entities based on scene frequency. This is a semantic judgment on entity importance (story membership) that should be configurable or derived from project-specific rules rather than fixed in the StepRunner."}, {"category": "scenario_dependent_prompt", "evidence": "user_prompt = ( ... \"인물(character)은 다른 타입과 중복될 가능성이 거의 없으니 주로 배경/소품 간 중복을 확인하세요.\" )", "line_end": 486, "line_start": 453, "recommended_fix": "Externalize the prompt to a template file and move domain heuristics to a structured world-rule SOT.", "severity": "P1", "why_problematic": "The entity merging prompt is hardcoded in the StepRunner and contains a closed-list semantic heuristic ('characters don't overlap with props') that biases the LLM's judgment of open-world story entities. This violates the principle of keeping prompts in managed templates and keeping domain logic in SOTs."}], "path": "backend/app/core/steps/entity_steps.py", "scan_kind": "python", "sha256": "32107108f11ad489695d7bb3e6f6880af8f83bb4e46899ac45c1a5ae01e5637e"}
{"candidate_reason": "python scope discovery", "chunk_end": 3146, "chunk_start": 1, "chunk_summary": "The file contains several instances of semantic judgment based on string patterns, including hardcoded color tropes in prompts, regex-based entity grouping, and keyword-based routing for character state references.", "duration_ms": 52277, "findings": [{"category": "semantic_string_judgment", "evidence": "_STATE_VARIANT_GAZE_VALUES = (\"unconscious\", \"dead\", \"severely_injured\")", "line_end": 252, "line_start": 252, "recommended_fix": "Introduce a structured 'character_state' or 'visual_variant' enum in the staging schema and use it to drive reference attachment logic instead of hijacking the gaze_target string.", "severity": "P1", "why_problematic": "The pipeline determines if a character requires a 'state variant' reference (e.g., a corpse model) by checking for specific string patterns in the open-world 'gaze_target' field. This semantic judgment routes reference attachment and validation logic based on hardcoded keywords rather than a structured state SOT."}, {"category": "semantic_string_judgment", "evidence": "re.split(r'\\s*[\\(（]', name)[0].strip()", "line_end": 1940, "line_start": 1940, "recommended_fix": "Use a structured 'parent_entity_id' or 'is_variant_of' field in the EntityCanon model to define relationships explicitly.", "severity": "P2", "why_problematic": "The code determines character variant relationships by parsing entity names for parentheses. This relies on a naming convention in open-world story text to decide entity membership and variant grouping, which affects LLM instructions for ID selection."}, {"category": "scenario_dependent_prompt", "evidence": "긴장=어둡고 대비 강한, 슬픔=탈색/청색, 분노=적색 등", "line_end": 2289, "line_start": 2289, "recommended_fix": "Move color-emotion mappings to a project-level visual style configuration or world rule SOT.", "severity": "P2", "why_problematic": "The prompt contains hardcoded domain tropes for color theory (e.g., sadness = blue, anger = red). These specific visual mappings should be emitted by a structured world/style SOT to allow for different artistic directions across scenarios."}, {"category": "blind_string_mutation", "evidence": "re.sub(r\"focus on\\s+'s\", \"focus on the figure's\", prompt)", "line_end": 2869, "line_start": 2867, "recommended_fix": "Improve the ID removal logic to handle possessives contextually or use the entity's type (e.g., 'the prop's', 'the character's') from the context if a replacement is necessary.", "severity": "P2", "why_problematic": "The code performs blind string replacement to fix broken possessives in generated prompts, assuming the missing entity is always a 'figure'. This is a semantic visual decision made via regex that may be incorrect for non-human entities."}], "path": "backend/app/core/steps/detail_steps.py", "scan_kind": "python", "sha256": "13d5494eabda57fd91fc817a7b5df837146b46e1ba33ed168da309d019eb88ed"}
{"candidate_reason": "python scope discovery", "chunk_end": 315, "chunk_start": 1, "chunk_summary": "The audit identified several instances of pattern-based semantic judgment, including substring matching for location-scene mapping, string-prefix-based failure logic, and hardcoded LLM extraction rules.", "duration_ms": 40078, "findings": [{"category": "semantic_string_judgment", "evidence": "if name in heading:", "line_end": 104, "line_start": 104, "recommended_fix": "Enforce the use of structured IDs (present_entity_ids) from the director step. If a fallback is necessary, use regex with word boundaries and ensure the name is not a substring of other entities.", "severity": "P1", "why_problematic": "Determines location-scene membership (story routing) via substring match on natural language headings. This is prone to false positives (e.g., 'Hall' matching 'Hallway') and directly affects the context provided to the LLM for visual consistency extraction."}, {"category": "semantic_string_judgment", "evidence": "if summary.startswith(\"실패\"):", "line_end": 179, "line_start": 179, "recommended_fix": "Introduce a structured 'status' enum field in the location result schema to explicitly track success/failure states.", "severity": "P2", "why_problematic": "Uses a specific Korean string prefix ('실패' meaning 'Failure') within a natural language summary field to drive failure counting and resume logic. This couples control flow to localized UI/summary text."}, {"category": "semantic_string_judgment", "evidence": "if k.startswith(f\"{name}:\") and isinstance(v, dict):", "line_end": 226, "line_start": 223, "recommended_fix": "Use unique entity IDs (L##) as keys in the entity_details dictionary instead of relying on name-based string heuristics.", "severity": "P2", "why_problematic": "Resolves entity identity by matching names against dictionary keys with a prefix heuristic. This is brittle if entity names are substrings of each other (e.g., 'Room' vs 'Room 101')."}, {"category": "llm_closed_list_instruction", "evidence": "user_prompt += ( \"- 포함: 크기·형태·재질·색상·구조적 디테일·고정 소품\" )", "line_end": 266, "line_start": 258, "recommended_fix": "Move these extraction rules and category lists into the externalized system_prompt file.", "severity": "P2", "why_problematic": "Hardcodes a closed list of semantic categories for the LLM to include or exclude when extracting visual descriptions. This defines the 'visual consistency' logic in code rather than in a structured SOT or externalized prompt."}], "path": "backend/app/core/steps/location_consistency_step.py", "scan_kind": "python", "sha256": "6dadf83395598ee2fa477e1a5d0b06313b910f0a9baf0707c6dafd727dde1dab"}
{"candidate_reason": "python scope discovery", "chunk_end": 242, "chunk_start": 1, "chunk_summary": "The SceneCameraFlowStep runner is clean and follows the pipeline's architectural patterns for data preparation and LLM orchestration without hardcoded story logic or scenario pollution.", "duration_ms": 14190, "findings": [], "path": "backend/app/core/steps/scene_camera_flow_step.py", "scan_kind": "python", "sha256": "657e39ab6fa5b6c7e0a3f31c562ee529d72342fdf1be7e23ac81d058dbcef351"}
{"candidate_reason": "python scope discovery", "chunk_end": 978, "chunk_start": 1, "chunk_summary": "The file defines image generation steps, with a notable semantic judgment in CharacterStateVariantStep where visual descriptions for character states are hardcoded in a dictionary.", "duration_ms": 46843, "findings": [{"category": "semantic_string_judgment", "evidence": "STATE_DESCRIPTIONS = { \"dead\": \"...\", ... } and if gaze in self.STATE_DESCRIPTIONS:", "line_end": 666, "line_start": 638, "recommended_fix": "Move character state visual definitions to a structured World SOT or Rulebook. The scenario analysis step should provide the state description or a reference to a rulebook entry rather than relying on hardcoded strings in the step runner.", "severity": "P1", "why_problematic": "The code performs semantic classification of character states by matching strings in the 'gaze_target' field against a hardcoded dictionary. This dictionary contains fixed visual tropes ('pale/ashen skin', 'bruises and cuts') that are injected into image prompts, bypassing the structured world SOT and forcing specific visual interpretations of open-world story states."}], "path": "backend/app/core/steps/image_steps.py", "scan_kind": "python", "sha256": "a1404a37cdd9b2ef5529d5936f0663a5a51e07a44f5c6ed057442bd14ce2491c"}
{"candidate_reason": "python scope discovery", "chunk_end": 779, "chunk_start": 1, "chunk_summary": "The file uses hardcoded keyword lists and regex to perform semantic classification of visual framing, which triggers pipeline-blocking validation errors, and contains scenario-specific tropes in prompt instructions.", "duration_ms": 22590, "findings": [{"category": "semantic_string_judgment", "evidence": "_ELEMENT_ID_CLOSE_REGEX and _DESCRIPTION_CLOSE_KEYWORDS", "line_end": 80, "line_start": 65, "recommended_fix": "Move framing classification to the LLM extraction phase as a structured field in the schema, or use a dedicated visual classifier instead of regex on natural language strings.", "severity": "P1", "why_problematic": "Hardcoded lists of body parts (wrist, eye, etc.) and framing keywords are used to determine if a visual element is a 'close-up'. This semantic judgment is used to block the pipeline if a conflict is detected, replacing flexible LLM understanding with rigid string matching on open-world descriptions."}, {"category": "semantic_string_judgment", "evidence": "def _classify_framing(element: Dict[str, Any]) -> str:", "line_end": 121, "line_start": 103, "recommended_fix": "Deprecate this function in favor of a structured 'framing_type' field emitted by the LLM during the scene_consistency extraction step.", "severity": "P1", "why_problematic": "This function implements the logic that maps arbitrary element descriptions and IDs to a 'close' vs 'full' framing category using the forbidden regex/keyword patterns. This drives the deterministic validator that can fail the entire scene."}, {"category": "scenario_dependent_prompt", "evidence": "사망/부상/의식불명 인물의 자세와 위치... 깨진 창문, 열린 문, 혈흔 등", "line_end": 751, "line_start": 749, "recommended_fix": "Replace specific trope examples with generic categories of visual consistency (e.g., 'character physical state', 'environmental damage', 'static prop placement').", "severity": "P2", "why_problematic": "The prompt contains specific scenario tropes (death, injury, bloodstains) as examples. This pollutes the LLM's context with specific imagery that may not be relevant to the current story, potentially biasing the extraction of fixed elements toward these tropes."}], "path": "backend/app/core/steps/scene_consistency_step.py", "scan_kind": "python", "sha256": "a07ea382bb71f5f22aa07c2f67ccd3ca32b598675d75e6e1b8731e0664ec9267"}
{"candidate_reason": "python scope discovery", "chunk_end": 312, "chunk_start": 1, "chunk_summary": "The scene segmentation step contains hardcoded screenplay formatting assumptions used to validate and guide LLM-generated regex patterns.", "duration_ms": 15602, "findings": [{"category": "semantic_string_judgment", "evidence": "f\"씬 내부의 장소 전환('- 장소명')이 아니라 씬 번호('숫자.') 패턴으로 분리해야 합니다.\"", "line_end": 134, "line_start": 127, "recommended_fix": "Abstract screenplay formatting rules into a structured 'Script Style' SOT or project configuration. The validation logic should check against these configured rules rather than hardcoded string examples.", "severity": "P1", "why_problematic": "The pipeline makes a semantic judgment about story structure (distinguishing between scene headings and place transitions) based on hardcoded string patterns ('- 장소명', '숫자.'). This logic is used to trigger retries and provide feedback to the LLM, which forces a specific screenplay format and prevents the system from correctly handling scenarios with alternative formatting conventions."}], "path": "backend/app/core/steps/scene_steps.py", "scan_kind": "python", "sha256": "3aa185bd3a049018d749c91b437e39ae0ace024d800f64d0e2fab32a510d9015"}
{"candidate_reason": "python scope discovery", "chunk_end": 126, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 10799, "findings": [], "path": "backend/app/core/steps/shot_director_step.py", "scan_kind": "python", "sha256": "9a337c33f08a7b50b1b2344fde61ef56d39e90922639effa8e06e34012114abe"}
{"candidate_reason": "python scope discovery", "chunk_end": 3657, "chunk_start": 1, "chunk_summary": "The file defines the RenderPromptCard structure and contains multiple hardcoded string lists used for semantic classification of story text and scenario-specific tropes in prompt instructions.", "duration_ms": 46836, "findings": [{"category": "semantic_string_judgment", "evidence": "_ID_BODY_PART_TRIGGERS, _CONTINUITY_GENERIC_PERSON_NOUNS, _SPATIAL_CAMERA_LOW_TOKENS", "line_end": 408, "line_start": 114, "recommended_fix": "Move semantic classification logic to a dedicated LLM-based validator or drive it from structured SOT metadata (e.g., framing_scale enums or entity-specific spatial rules) rather than hardcoded substring lists.", "severity": "P1", "why_problematic": "These constants define closed lists of natural language phrases (including mixed English/Korean patterns) used as ground-truth for detecting open-world story and visual meaning (e.g., body part focus, double descriptions, or spatial inconsistencies). This logic drives visual routing and validation via pattern matching rather than structured metadata or LLM-based semantic analysis."}, {"category": "scenario_dependent_prompt", "evidence": "\"role_hint_from_outfit\": [\"in worker uniform\", \"in fisher workwear\", \"in detective coat\", \"in business suit\"]", "line_end": 1146, "line_start": 1141, "recommended_fix": "Inject these role hints from a structured world-building SOT or character-specific metadata field rather than hardcoding them in the prompt builder.", "severity": "P2", "why_problematic": "These are scenario-specific tropes and outfit examples hardcoded into the prompt builder. They pollute the generic prompt card logic with work-specific nomenclature that should be emitted by a structured world/rule SOT or character metadata."}, {"category": "blind_string_mutation", "evidence": "\"replace the common-noun person reference inside fixed_elements[i].description (e.g. 'An Asian man' / 'a woman' / 'a figure') with the matched C## or C##O##\"", "line_end": 1498, "line_start": 1495, "recommended_fix": "Provide the LLM with structured entity mappings and instruct it to rewrite the description to incorporate the correct IDs semantically, rather than performing blind substitution.", "severity": "P1", "why_problematic": "This instructs the LLM to perform blind string replacement of natural language descriptions based on pattern matching. This approach is prone to errors, ignores semantic context, and relies on a closed list of nouns to identify entities in open-world text."}], "path": "backend/app/core/steps/render_prompt_card.py", "scan_kind": "python", "sha256": "d7960bcbc097897cfdc1205fc20d0a448feb49c786901023e7461f33438f221d"}
{"candidate_reason": "python scope discovery", "chunk_end": 46, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 3607, "findings": [], "path": "backend/app/core/steps/shot_staging_step.py", "scan_kind": "python", "sha256": "e86b746584f044e566326671dc8be66843ca343ea2d8b7e09356a77dcf07d935"}
{"candidate_reason": "python scope discovery", "chunk_end": 162, "chunk_start": 1, "chunk_summary": "The file implements shot cinematography selection but includes a hardcoded visual diversity rule in the prompt construction logic.", "duration_ms": 30419, "findings": [{"category": "scenario_dependent_prompt", "evidence": "user_prompt += (\"\\n[다양성 규칙] 같은 씬의 연속 shot에 동일한 촬영 기법을 배정하지 마세요. ...\")", "line_end": 134, "line_start": 131, "recommended_fix": "Relocate the diversity rule and any visual style constraints to the 'shot_cinematography' prompt template or a style-specific SOT.", "severity": "P1", "why_problematic": "A visual diversity heuristic is hardcoded in the pipeline logic rather than being part of a structured SOT or the prompt template. This enforces a specific cinematic style (avoiding repetition) across all scenarios, which limits artistic flexibility and pollutes the code with domain-specific rules."}], "path": "backend/app/core/steps/shot_cinematography_step.py", "scan_kind": "python", "sha256": "553ac84f1a94ced477d79e1c148187e782717b8332a723c27413affb05b1d128"}
{"candidate_reason": "python scope discovery", "chunk_end": 180, "chunk_start": 1, "chunk_summary": "The shot dependency logic uses exact string matching on LLM-generated location names to route visual references and employs a hardcoded heuristic for entity importance.", "duration_ms": 31038, "findings": [{"category": "semantic_string_judgment", "evidence": "if prev[\"location\"] != cur_loc:", "line_end": 141, "line_start": 141, "recommended_fix": "Resolve the location name to a unique ID (L##) using the name_matcher and the entity_t2i manifest before comparison.", "severity": "P1", "why_problematic": "This performs exact string comparison on 'primary_location' values which are natural-language strings from the scene_director LLM output. This drives visual reference attachment (routing), and will fail to link shots if the LLM produces minor variations in the location name (e.g., 'Living Room' vs 'Living room')."}, {"category": "scenario_dependent_code", "evidence": "score = len(intersection) - len(char_complement) * 3 - len(non_char_complement)", "line_end": 149, "line_start": 149, "recommended_fix": "Externalize weighting factors to a configuration or a visual rule SOT.", "severity": "P2", "why_problematic": "The scoring logic uses a hardcoded heuristic to prioritize character consistency (3x weight) over other entities. This is a semantic visual rule that should be part of a structured visual strategy or SOT rather than embedded in the step implementation."}], "path": "backend/app/core/steps/shot_dependency_step.py", "scan_kind": "python", "sha256": "6db76375617c27cd5402dc6c8b9a6177fc84261bf73fe26f54e2293104acf226"}
{"candidate_reason": "python scope discovery", "chunk_end": 287, "chunk_start": 1, "chunk_summary": "The shot selection step implementation is clean, using numerical heuristics and LLM delegation for semantic decisions without hardcoded string patterns or scenario-specific pollution.", "duration_ms": 15324, "findings": [], "path": "backend/app/core/steps/shot_selection_step.py", "scan_kind": "python", "sha256": "0b3d7f87247c5760f000b0ed7d6031a2ed5722df3d4e2c087fc2ef055d16a254"}
{"candidate_reason": "python scope discovery", "chunk_end": 889, "chunk_start": 1, "chunk_summary": "The loader aggregates multiple checkpoints into a context, but contains logic that performs semantic judgment on natural language strings for drift detection and context filtering.", "duration_ms": 44431, "findings": [{"category": "semantic_string_judgment", "evidence": "if summary.startswith(\"실패\"):", "line_end": 266, "line_start": 266, "recommended_fix": "Use a structured status field (e.g., 'status': 'failed') in the location_consistency checkpoint instead of parsing the summary string.", "severity": "P2", "why_problematic": "Uses a natural language prefix ('실패' for failure) in a summary field to decide whether to filter out visual context. This is a pattern-based semantic judgment on open-world text."}, {"category": "semantic_string_judgment", "evidence": "detect_offscreen_drift(char_visible, cam, ctx.name_by_short_id, ...)", "line_end": 478, "line_start": 468, "recommended_fix": "The staging step should output structured visibility metadata (e.g., a list of off-screen entity IDs) to be used for drift detection, rather than parsing the 'camera_direction' NL string in the loader or validator.", "severity": "P1", "why_problematic": "The loader triggers a fail-fast error (VisibleStagingDriftError) based on semantic analysis of the 'camera_direction' natural language string (cam). This makes validation and routing decisions based on open-world text patterns rather than structured SOT data."}], "path": "backend/app/core/steps/scene_context_loader.py", "scan_kind": "python", "sha256": "1cd6a7d7b27f853057101287ef0c718d2337d8e7e89a3f65096e6395b01ed410"}
{"candidate_reason": "python scope discovery", "chunk_end": 258, "chunk_start": 1, "chunk_summary": "The T2iReviewStep implementation focuses on high-level orchestration, checkpoint management, and data integrity (hash/sentinel validation) without containing scenario-specific logic or string-based semantic judgments.", "duration_ms": 7543, "findings": [], "path": "backend/app/core/steps/t2i_review_step.py", "scan_kind": "python", "sha256": "7f44d1520245d3690182a66bd7e2d6892be7b59cc8939e0b4c85abeb75ae6baf"}
{"candidate_reason": "python scope discovery", "chunk_end": 54, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 2758, "findings": [], "path": "backend/app/core/steps/text_steps.py", "scan_kind": "python", "sha256": "dee0d749567714398fc791817e5732c769049f44dd42787e16593f185023fd08"}
{"candidate_reason": "python scope discovery", "chunk_end": 40, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 2812, "findings": [], "path": "backend/app/core/task_registry.py", "scan_kind": "python", "sha256": "ff6afe0ab1644dfaa038b42db7fadb121b972c02662ff83b685bfd4aa28ff348"}
{"candidate_reason": "python scope discovery", "chunk_end": 197, "chunk_start": 1, "chunk_summary": "The file serves as an orchestration layer for summary-related pipeline steps, handling data retrieval from checkpoints and database, and passing it to specialized LLM modules without performing semantic string-based routing or containing scenario-specific pollution.", "duration_ms": 10014, "findings": [], "path": "backend/app/core/steps/summary_steps.py", "scan_kind": "python", "sha256": "68cadacda2b891546478fce5e24ebdc5117e38140cbe27bd27070780fcb4a949"}
{"candidate_reason": "python scope discovery", "chunk_end": 20, "chunk_start": 1, "chunk_summary": "No actionable findings; the file contains standard internationalization (i18n) infrastructure for loading and retrieving localized strings.", "duration_ms": 2457, "findings": [], "path": "backend/app/i18n/loader.py", "scan_kind": "python", "sha256": "1df58ae74fe67baf31a49079fd1cbddf2dabf03081e7ba321cd802e024319af9"}
{"candidate_reason": "python scope discovery", "chunk_end": 42, "chunk_start": 1, "chunk_summary": "No actionable findings; the file contains standard infrastructure for activity logging with no semantic string judgment or scenario-specific logic.", "duration_ms": 2558, "findings": [], "path": "backend/app/logging/activity_logger.py", "scan_kind": "python", "sha256": "997d9bc02147260f7d5770a934833ee80b3a205db9e22867aa632dd587764d10"}
{"candidate_reason": "python scope discovery", "chunk_end": 16, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 2937, "findings": [], "path": "backend/app/logging/models.py", "scan_kind": "python", "sha256": "5e479a106bc17dc09334a3b3871991ec6787e18bdf9d372fe805dc4c9a19d6c8"}
{"candidate_reason": "python scope discovery", "chunk_end": 524, "chunk_start": 1, "chunk_summary": "The code correctly uses structured LLM calls and validates character IDs using closed-world regex patterns, with no evidence of open-world semantic judgment or scenario-specific pollution in the logic.", "duration_ms": 20378, "findings": [], "path": "backend/app/core/steps/shot_validator_step.py", "scan_kind": "python", "sha256": "4c28fc69a4a9e706c558d73f8bae3e411531373f1529fa9d2b553333ec3a1b86"}
{"candidate_reason": "python scope discovery", "chunk_end": 51, "chunk_start": 1, "chunk_summary": "No actionable findings; the file contains standard database models for user accounts, sessions, and project registries without semantic logic or scenario pollution.", "duration_ms": 3007, "findings": [], "path": "backend/app/models/catalog.py", "scan_kind": "python", "sha256": "9d4a647c9247795de8bc255e2c91bbe888ea3fb924797258c1032c869d7f5ac7"}
{"candidate_reason": "python scope discovery", "chunk_end": 130, "chunk_start": 1, "chunk_summary": "The file contains standard FastAPI application setup, including lifespan management, router registration, and health check endpoints, with no actionable findings regarding semantic string judgment or scenario pollution.", "duration_ms": 6589, "findings": [], "path": "backend/app/main.py", "scan_kind": "python", "sha256": "49472efd68728a06703b1264499b0c8c0dc8dc57e7b020a1fec14e155b4587bc"}
{"candidate_reason": "python scope discovery", "chunk_end": 302, "chunk_start": 1, "chunk_summary": "The file implements a shot dependency analysis step using LLM to determine background references, but contains fragile schema navigation for previous checkpoint data.", "duration_ms": 46464, "findings": [{"category": "schema_or_enum_drift", "evidence": "detail_cp.get(\"data\", detail_cp).get(\"scenes\", detail_cp.get(\"scenes\", []))", "line_end": 187, "line_start": 187, "recommended_fix": "Standardize the checkpoint schema for scene_detail and use a direct, validated access path (e.g., detail_cp['data']['scenes']).", "severity": "P2", "why_problematic": "The code uses multiple fallback attempts to locate the 'scenes' list within the checkpoint, indicating an unstable or poorly defined schema for the scene_detail output. This makes the pipeline fragile to changes in upstream data structures."}, {"category": "schema_or_enum_drift", "evidence": "shot_idx = s.get(\"_shot_index\")", "line_end": 189, "line_start": 189, "recommended_fix": "Ensure the upstream step (scene_detail) promotes the required index to a stable, public field name (e.g., 'shot_index') and update this consumer to use it.", "severity": "P2", "why_problematic": "The use of a leading-underscore field name ('_shot_index') suggests reliance on internal or non-standard implementation details of an upstream step rather than a stable, public SOT schema."}], "path": "backend/app/core/steps/shot_dependency_t2i_step.py", "scan_kind": "python", "sha256": "4e5bf81c1d9040583870f1e8f14636e453dad73093f557bbbaf9b1511ec9cc8a"}
{"candidate_reason": "python scope discovery", "chunk_end": 156, "chunk_start": 1, "chunk_summary": "The file is a technical version registry and metadata store for pipeline modules and prompts, documenting the transition from hardcoded scenario examples to neutral, structured SOT-driven logic.", "duration_ms": 18585, "findings": [], "path": "backend/app/core/version_registry.py", "scan_kind": "python", "sha256": "b4454265a347ae52a317b1277af5b517365c83f12e58fc952e6630c916bda0c1"}
{"candidate_reason": "python scope discovery", "chunk_end": 309, "chunk_start": 1, "chunk_summary": "The ShotEssenceExtractionStep performs semantic classification of shot descriptions into essence, peripheral, and atmospheric categories, but contains hardcoded classification instructions and scenario-specific logic guards.", "duration_ms": 46725, "findings": [{"category": "scenario_dependent_code", "evidence": "(전체 처리 X — Codex H1 회귀 가드)", "line_end": 88, "line_start": 78, "recommended_fix": "Move routing policies (e.g., how to handle scenes missing from selection) to a project-agnostic configuration or a structured SOT that defines pipeline behavior for different project types.", "severity": "P1", "why_problematic": "The routing logic that filters scenes based on selection is explicitly justified by a project-specific ID ('Codex H1') in the comments. This suggests the pipeline's behavior for handling missing selections is being tuned for specific scenario regressions rather than following a universal world-rule SOT or configuration."}, {"category": "llm_closed_list_instruction", "evidence": "\"아래 샷들의 description을 essence/peripheral/atmospheric 3분류로 나누세요.\"", "line_end": 192, "line_start": 191, "recommended_fix": "Move the classification instructions and category definitions into the system_prompt template or a structured SOT, and use the schema to drive the keys dynamically.", "severity": "P1", "why_problematic": "The code hardcodes a semantic classification task for open-world story text ('description') into a closed list of categories ('essence/peripheral/atmospheric'). This nomenclature is specific to the Phase 1b prompt strategy and directly drives visual routing (deciding what is prepended to the image prompt), but it is embedded in the Python logic rather than a structured prompt template or SOT."}, {"category": "schema_or_enum_drift", "evidence": "\"essence\": list(r.get(\"essence\", [])), \"peripheral\": list(r.get(\"peripheral\", [])), \"atmospheric\": list(r.get(\"atmospheric\", []))", "line_end": 286, "line_start": 284, "recommended_fix": "Iterate over the keys defined in the response_schema or the LLM response dynamically instead of hardcoding the category names.", "severity": "P2", "why_problematic": "The extraction logic is hardcoded to specific semantic keys. If the analysis schema or the prompt strategy evolves (e.g., adding a 'lighting' or 'character_focus' category), this code will silently ignore the new data, creating a drift between the LLM output and the stored checkpoint."}], "path": "backend/app/core/steps/shot_essence_extraction_step.py", "scan_kind": "python", "sha256": "bd3cf91c9b396438817a9061f82d5b2f1d5414d825f17ae6641c171361bf1820"}
{"candidate_reason": "python scope discovery", "chunk_end": 351, "chunk_start": 1, "chunk_summary": "The module provides technical infrastructure for Gemini-based image-to-image editing, including camera diagram generation and multimodal API orchestration, with no actionable semantic or scenario-specific findings.", "duration_ms": 8387, "findings": [], "path": "backend/app/modules/gemini_i2i_editor.py", "scan_kind": "python", "sha256": "3ecd9be0d08929461578a029b148fa228612db99edd966f28d8d46d44b5d3a8a"}
{"candidate_reason": "python scope discovery", "chunk_end": 341, "chunk_start": 1, "chunk_summary": "The file defines the SQLAlchemy schema for project-related entities, scenes, and assets, using structured enums for pipeline states and cinematic metadata without scenario-specific pollution.", "duration_ms": 13996, "findings": [], "path": "backend/app/models/project.py", "scan_kind": "python", "sha256": "c31a4345928225a45b84f3d64938a3481dd19f3858014ef6700b16e2db71a1dd"}
{"candidate_reason": "python scope discovery", "chunk_end": 122, "chunk_start": 1, "chunk_summary": "No actionable findings; this file provides technical infrastructure for image generation checkpointing using technical IDs and stage enums.", "duration_ms": 3912, "findings": [], "path": "backend/app/modules/image_checkpoint.py", "scan_kind": "python", "sha256": "b253475dfa2921c3c105af37d0654414f3438c8f17adef04d4f4e31fcc8081a4"}
{"candidate_reason": "python scope discovery", "chunk_end": 139, "chunk_start": 1, "chunk_summary": "The generation tracker module is a standard logging and diagnostic utility that handles technical metadata and status constants without performing semantic string judgment or containing scenario-specific pollution.", "duration_ms": 4590, "findings": [], "path": "backend/app/modules/generation_tracker.py", "scan_kind": "python", "sha256": "635516c04a47c0e75bbe854a51872482c73a7b9b55195c7d16f4df442b04c6fa"}
{"candidate_reason": "python scope discovery", "chunk_end": 1, "chunk_start": 1, "chunk_summary": "No actionable findings; the file contains only a module docstring.", "duration_ms": 2443, "findings": [], "path": "backend/app/modules/llm/__init__.py", "scan_kind": "python", "sha256": "154c2f746a44ce90bdb76dee3da6fbcef2f58bd62941312a6fdb533cc3f4882d"}
{"candidate_reason": "python scope discovery", "chunk_end": 18, "chunk_start": 1, "chunk_summary": "No actionable findings; this file defines a standard abstract base class for LLM clients without any scenario-specific logic or semantic string judgment.", "duration_ms": 2352, "findings": [], "path": "backend/app/modules/llm/base.py", "scan_kind": "python", "sha256": "e80908ebc287a538add83673361d6a5652e7508a279e0c95d3940885d1c8b3a9"}
{"candidate_reason": "python scope discovery", "chunk_end": 282, "chunk_start": 1, "chunk_summary": "The entity extraction module uses structured JSON schemas and enums for technical categorization of entities and relations, with no evidence of scenario-specific pollution or blind string-based semantic logic.", "duration_ms": 16006, "findings": [], "path": "backend/app/modules/entity_extractor_legacy.py", "scan_kind": "python", "sha256": "9edba4cc7829246a732320b6db3828ad8c1692f47fd691cf57b98eb2994998ed"}
{"candidate_reason": "python scope discovery", "chunk_end": 90, "chunk_start": 1, "chunk_summary": "No actionable findings; the file contains standard infrastructure for API key management and round-robin rotation.", "duration_ms": 3492, "findings": [], "path": "backend/app/modules/llm/gemini_key_pool.py", "scan_kind": "python", "sha256": "b0eb3589a24814832578ac71eada7146f061dfa877735336bc58949c7976e48b"}
{"candidate_reason": "python scope discovery", "chunk_end": 953, "chunk_start": 1, "chunk_summary": "The validator uses hardcoded keyword regex and substring matching on generated prompts to classify visual framing and decide whether to enforce character ID requirements.", "duration_ms": 31604, "findings": [{"category": "semantic_string_judgment", "evidence": "_FACE_CLOSE_UP_PATTERNS = [ ... ]", "line_end": 161, "line_start": 139, "recommended_fix": "Visual framing classification (e.g., 'is_face_closeup') should be a structured boolean field emitted by the scenario analyzer or prompt generator, rather than being inferred from the final prompt string via regex.", "severity": "P1", "why_problematic": "The validator uses a hardcoded list of English keywords ('face', 'eye', 'expression', 'gaze', 'stare') to classify the visual framing of a prompt. This semantic judgment on open-world text determines whether character ID validation is enforced or exempted, making it fragile to synonyms, phrasing variations, and different languages."}, {"category": "semantic_string_judgment", "evidence": "t.lower() in prompt_lower", "line_end": 217, "line_start": 216, "recommended_fix": "The decision to skip ID enforcement should be driven by a structured flag in the render_prompt_card (e.g., 'id_enforcement_mode') determined during the planning phase, rather than searching for keywords in the final prompt.", "severity": "P1", "why_problematic": "The code performs a substring check of 'trigger phrases' (e.g., 'focus on', 'detail on') within the generated prompt to decide if character ID enforcement should be skipped. This is a pattern-based semantic judgment used to mutate validation pass/fail behavior."}, {"category": "semantic_string_judgment", "evidence": "prompt_lower.find(name_lower, offset)", "line_end": 572, "line_start": 553, "recommended_fix": "Transition to a system where the LLM explicitly tags entities in its output or provides a structured mapping of entities to prompt segments, rather than relying on name-string matching in the final prompt.", "severity": "P2", "why_problematic": "The validator uses dynamic entity names to perform semantic judgment on whether a character is being referenced in the prompt. This window-based heuristic is used to enforce ID presence and is prone to false positives/negatives based on how names are used in natural language."}], "path": "backend/app/core/visible_entities_validator.py", "scan_kind": "python", "sha256": "366e2185c5df853112075146a74dc8d81d4c36e5fe4441689b7cc81833b80485"}
{"candidate_reason": "python scope discovery", "chunk_end": 221, "chunk_start": 1, "chunk_summary": "The GeminiTextClient is a generic infrastructure component for API communication and contains no scenario-specific logic or semantic string judgments.", "duration_ms": 7173, "findings": [], "path": "backend/app/modules/llm/gemini_text_client.py", "scan_kind": "python", "sha256": "ab01305191af5c3df4f4b3f5085b038ead3cc5c3a2e918c810577467921fc89b"}
{"candidate_reason": "python scope discovery", "chunk_end": 214, "chunk_start": 1, "chunk_summary": "The file provides utility functions for building and sorting dependency graphs for entities and scenes based on structured metadata, with no actionable findings regarding string-pattern-based semantic judgment or scenario pollution.", "duration_ms": 23565, "findings": [], "path": "backend/app/modules/entity_dependency.py", "scan_kind": "python", "sha256": "d7d1dc91f1acdd43734d0097877c1e5646006e307759d8e080654f80375d5ab3"}
{"candidate_reason": "python scope discovery", "chunk_end": 289, "chunk_start": 1, "chunk_summary": "The module implements image validation using OpenAI Vision, but includes a heuristic that blindly treats all string values in entity metadata as visual requirements.", "duration_ms": 16038, "findings": [{"category": "semantic_string_judgment", "evidence": "for _k, v in traits_data.items(): if isinstance(v, str): visual_traits.append(v)", "line_end": 160, "line_start": 158, "recommended_fix": "Enforce a strict schema for visual traits (e.g., requiring the 'visual_anchor_traits' key) and remove the blind iteration fallback that treats arbitrary metadata as visual requirements.", "severity": "P2", "why_problematic": "This fallback logic assumes any string value within the entity's stable traits dictionary is a visual anchor. It pollutes the vision validation prompt with non-visual metadata (such as personality traits, roles, or internal story notes), which can bias the Vision LLM or cause false validation failures when the model attempts to verify abstract or non-visual concepts in an image."}], "path": "backend/app/modules/image_validator.py", "scan_kind": "python", "sha256": "e6401c59a6af4492ce33f2619f42f239905bc5551008b0b4e4591a93cfe7948b"}
{"candidate_reason": "python scope discovery", "chunk_end": 216, "chunk_start": 1, "chunk_summary": "The image_tracer.py module provides a utility for observability and logging of image generation calls to Opik, and it contains no actionable findings related to semantic string judgment or scenario-specific pollution.", "duration_ms": 10807, "findings": [], "path": "backend/app/modules/llm/image_tracer.py", "scan_kind": "python", "sha256": "0ebe23c2d9b90987dfc52fac1097d9edc98d866707618f5e881a6d5fece24a91"}
{"candidate_reason": "python scope discovery", "chunk_end": 169, "chunk_start": 1, "chunk_summary": "The file provides a generic OpenAI API client implementation using urllib and includes standard structured output handling and logging without scenario-specific logic.", "duration_ms": 5724, "findings": [], "path": "backend/app/modules/llm/openai_client.py", "scan_kind": "python", "sha256": "b09b7d78ae5185fd4ffc7c1a080f9c8f4bb45efeca66da594fef3bdfe7212d2f"}
{"candidate_reason": "python scope discovery", "chunk_end": 82, "chunk_start": 1, "chunk_summary": "The file provides a standard LLM call logging utility with no scenario-specific logic or semantic string judgments.", "duration_ms": 9012, "findings": [], "path": "backend/app/modules/llm/llm_logger.py", "scan_kind": "python", "sha256": "bc280499bbdb46679b12250b3904c4c770a5cf5128a42d9172beff71e0d09c30"}
{"candidate_reason": "python scope discovery", "chunk_end": 369, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 20763, "findings": [], "path": "backend/app/modules/llm/gemini_image_client.py", "scan_kind": "python", "sha256": "da5180d7d8c0c04163c45e1c6f95e1d82d0243af4597aefb939e2dfd6baf3162"}
{"candidate_reason": "python scope discovery", "chunk_end": 361, "chunk_start": 1, "chunk_summary": "The PDF renderer module is a technical utility for layout and file generation and contains no actionable findings regarding semantic string judgment or scenario pollution.", "duration_ms": 8308, "findings": [], "path": "backend/app/modules/pdf_renderer.py", "scan_kind": "python", "sha256": "24d6b3c7ccf5da2095f93686ae6c526580f18ac2e3bb0a756c255f7a6b00f5ce"}
{"candidate_reason": "python scope discovery", "chunk_end": 58, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 3393, "findings": [], "path": "backend/app/modules/pipeline/_dag_levels.py", "scan_kind": "python", "sha256": "50b9da1dd402a115f0a6951f0b978e3ed43213794210fbeec653b06882cc504a"}
{"candidate_reason": "python scope discovery", "chunk_end": 36, "chunk_start": 1, "chunk_summary": "No actionable findings; this file contains infrastructure code for resolving worker counts from environment variables.", "duration_ms": 2748, "findings": [], "path": "backend/app/modules/pipeline/_workers.py", "scan_kind": "python", "sha256": "022738fed30d0efce3ee58a0a4ef4bac167dcd1e61c1257148162d97ea593559"}
{"candidate_reason": "python scope discovery", "chunk_end": 35, "chunk_start": 1, "chunk_summary": "The module provides standard PDF text extraction and a basic language detection utility; no actionable scenario-specific pollution or semantic routing logic was found.", "duration_ms": 12204, "findings": [], "path": "backend/app/modules/pdf_parser.py", "scan_kind": "python", "sha256": "6dae8e6cd873a2b8f8b6bcf8de055862e1c3c0105bbeefe6eff5d75ffc091a79"}
{"candidate_reason": "python scope discovery", "chunk_end": 236, "chunk_start": 1, "chunk_summary": "The module implements a safety bypass mechanism using hardcoded string replacements and a scenario-polluted prompt suffix to frame content as movie set props.", "duration_ms": 17052, "findings": [{"category": "blind_string_mutation", "evidence": "_SAFETY_REPLACEMENTS_KO and _SAFETY_REPLACEMENTS_EN", "line_end": 73, "line_start": 26, "recommended_fix": "Move safety-related semantic transformations to a structured world-rule SOT or use an LLM-based rephrasing step that preserves the intended atmosphere without triggering filters, rather than using static string mapping.", "severity": "P1", "why_problematic": "Hardcoded word-for-word replacement of story-significant terms (e.g., 'blood' to 'red paint', 'corpse' to 'motionless figure') forces a specific visual interpretation and story meaning regardless of the actual scenario context, bypassing safety filters via blind mutation."}, {"category": "scenario_dependent_prompt", "evidence": "SAFETY_SYSTEM_SUFFIX", "line_end": 102, "line_start": 94, "recommended_fix": "Abstract the framing instructions to a higher-level rule set and provide examples dynamically based on the scenario's genre or style metadata.", "severity": "P1", "why_problematic": "The prompt contains concrete scenario-specific examples ('dark red stage paint pool', 'motionless figure in character', 'aged photograph prop') that bias the LLM towards a specific 'movie set' framing, which may conflict with the intended genre or style of arbitrary scenarios."}], "path": "backend/app/modules/llm/safety.py", "scan_kind": "python", "sha256": "bf4dadd9df7fe27d183af62dc19d91d9f173c086e3e9705dac55bce4b42e2b46"}
{"candidate_reason": "python scope discovery", "chunk_end": 224, "chunk_start": 1, "chunk_summary": "The file handles background classification and clustering using an LLM, including validation logic for the resulting groups.", "duration_ms": 4233, "findings": [{"category": "semantic_string_judgment", "evidence": "if kind == \"chain_bg\": ... total_shots < 3 ... if not has_indoor:", "line_end": 168, "line_start": 150, "recommended_fix": "Move these heuristic constraints into the LLM system prompt as guidelines or into a configurable 'visual_world_rules' validator rather than hard-coding them in the pipeline logic.", "severity": "P1", "why_problematic": "The code enforces a hard-coded semantic rule that a 'chain_bg' must have at least 3 shots and at least one indoor location. This is a story/visual heuristic embedded in the validation logic rather than being driven by the world rules or schema, which can lead to unexpected failures for valid but small-scale or outdoor-only scenarios."}], "path": "backend/app/modules/pipeline/background_classify.py", "scan_kind": "python", "sha256": "49b9985cf8fb46be2e33e57cd8ed86814808df13e625a334b417f431d1bfeea4"}
{"candidate_reason": "python scope discovery", "chunk_end": 281, "chunk_start": 1, "chunk_summary": "The PDF validation module is clean and focuses on technical infrastructure, using structured schemas and a prompt loader for vision-based quality checks without scenario-specific pollution.", "duration_ms": 12922, "findings": [], "path": "backend/app/modules/pdf_validator.py", "scan_kind": "python", "sha256": "5cf00222ec7f7687470cb6a65aa529f7ddb6a29be7cc8e0c2464fdd5518ffaaf"}
{"candidate_reason": "python scope discovery", "chunk_end": 51, "chunk_start": 1, "chunk_summary": "The utility performs character identity resolution using regex-based name normalization and substring matching, which are prone to false positives in open-world story contexts.", "duration_ms": 23548, "findings": [{"category": "semantic_string_judgment", "evidence": "if shot_name == base_name(entity_name): ... if len(shot_name) >= 2 and entity_name.startswith(shot_name):", "line_end": 30, "line_start": 27, "recommended_fix": "Replace fuzzy name matching with a structured entity resolution system using unique IDs or explicit name-variant mappings defined in the world SOT.", "severity": "P1", "why_problematic": "Uses fuzzy string matching and blind substring checks to decide visible entity membership. This logic makes semantic assumptions about character identity based on name prefixes and parenthetical suffixes, which can lead to incorrect routing or reference attachment in complex scenarios."}, {"category": "blind_string_mutation", "evidence": "return _PAREN_RE.sub('', name).strip()", "line_end": 13, "line_start": 11, "recommended_fix": "Store normalized base names as a separate field in the entity schema instead of performing regex-based mutation during matching.", "severity": "P2", "why_problematic": "Heuristic removal of parentheses to find a 'base name' for identity matching. This assumes a specific naming convention for character variants that should be handled via structured metadata rather than runtime string manipulation."}], "path": "backend/app/modules/name_matcher.py", "scan_kind": "python", "sha256": "431470212b80e7a3bd4b33fcb142e5499adc75515995ec4e849041ce8a75e34e"}
{"candidate_reason": "python scope discovery", "chunk_end": 921, "chunk_start": 1, "chunk_summary": "The file contains logic for entity resolution and T2I prompt translation, with some reliance on regex patterns in natural language and hardcoded style examples in prompts.", "duration_ms": 265967, "findings": [{"category": "semantic_string_judgment", "evidence": "_re.finditer(r'\\[\\[([^\\]]+)\\]\\+\\[([^\\]]+)\\]\\]', t2i_text)", "line_end": 434, "line_start": 433, "recommended_fix": "Deprecate the name-based bracket pattern in favor of the ID-based pattern (C##O##) and ensure the LLM generates structured entity references.", "severity": "P1", "why_problematic": "Extracts character and outlook names from natural language prompt text using a specific bracket pattern. This makes entity resolution and reference attachment dependent on string formatting within open-world prose rather than structured metadata."}, {"category": "scenario_dependent_prompt", "evidence": "\"'Photorealistic cinematic still.' 같은 스타일 접두어도 그대로 유지하세요.\"", "line_end": 792, "line_start": 792, "recommended_fix": "Inject style preservation rules and examples from the project's style settings (ProjectSettings.style_rules_json) instead of hardcoding them in the system prompt.", "severity": "P2", "why_problematic": "Hardcodes a specific visual style example ('Photorealistic cinematic still') in the translation prompt. This biases the LLM and should be part of a project-level style SOT."}, {"category": "scenario_dependent_prompt", "evidence": "\"'Photorealistic cinematic still.' 같은 스타일 접두어도 그대로 유지하세요.\"", "line_end": 818, "line_start": 818, "recommended_fix": "Inject style preservation rules and examples from the project's style settings (ProjectSettings.style_rules_json) instead of hardcoding them in the system prompt.", "severity": "P2", "why_problematic": "Hardcodes a specific visual style example ('Photorealistic cinematic still') in the translation prompt. This biases the LLM and should be part of a project-level style SOT."}], "path": "backend/app/api/v1/entities.py", "scan_kind": "python", "sha256": "e5f92eef6cfdc114ebcc82cef44fd9975cb444244f497a6c11c87c707a1717fe"}
{"candidate_reason": "python scope discovery", "chunk_end": 166, "chunk_start": 1, "chunk_summary": "The background rendering logic contains hardcoded visual style reinforcements and content restrictions that bias the output towards photoreal architectural stills.", "duration_ms": 9406, "findings": [{"category": "scenario_dependent_prompt", "evidence": "_BACKGROUND_ONLY_REINFORCEMENT = ( \"BACKGROUND-ONLY architectural still — empty space, NO people, NO faces, NO body posture, NO action, NO weapons, NO blood. Photoreal scene without any human figures.\\n\\n\" )", "line_end": 26, "line_start": 22, "recommended_fix": "Move these visual constraints and negative prompts to a structured style/rule SOT or a configuration object that can be overridden per scenario or project.", "severity": "P1", "why_problematic": "This reinforcement string hardcodes specific visual styles ('architectural still', 'photoreal') and content exclusions ('NO weapons', 'NO blood') into the pipeline. This biases the generator against non-photoreal styles or scenarios requiring specific environmental storytelling elements (e.g., a battle-scarred background) and should not be hardcoded in the renderer."}], "path": "backend/app/modules/pipeline/background_render.py", "scan_kind": "python", "sha256": "497a49b7050919807a148e8fa32be91353e756dea2991ba82b21f4691213d15d"}
{"candidate_reason": "python scope discovery", "chunk_end": 778, "chunk_start": 1, "chunk_summary": "The LLM client manages model routing and a 3-tier fallback system, but it contains hardcoded step extensions that drift from the manifest and a biased safety-recovery framing strategy.", "duration_ms": 42515, "findings": [{"category": "schema_or_enum_drift", "evidence": "_PIPELINE_STEP_EXTENSIONS", "line_end": 304, "line_start": 278, "recommended_fix": "Migrate all sub-steps and legacy steps into the central STEP_MANIFEST and remove the local extension dictionary.", "severity": "P1", "why_problematic": "Hardcodes pipeline steps, labels, and model assignments outside of the STEP_MANIFEST SOT. This creates a secondary, scattered source of truth for pipeline logic and results in 'dead' entries that the code itself identifies as problematic (line 330)."}, {"category": "scenario_dependent_prompt", "evidence": "safe_system = system_prompt + SAFETY_SYSTEM_SUFFIX", "line_end": 553, "line_start": 551, "recommended_fix": "Move the safety framing instruction to the STEP_MANIFEST or project configuration so it can be tailored to the specific scenario type (e.g., 'fictional novel' vs 'movie script').", "severity": "P1", "why_problematic": "The Tier 2 fallback logic blindly appends a 'movie framing' suffix (SAFETY_SYSTEM_SUFFIX) to bypass safety filters. This forces a cinematic semantic bias onto arbitrary scenarios (e.g., novels, webtoons) that may not fit the 'movie' trope, potentially altering LLM reasoning and terminology."}, {"category": "scenario_dependent_prompt", "evidence": "first[\"content\"] = sys_content + SAFETY_SYSTEM_SUFFIX", "line_end": 766, "line_start": 759, "recommended_fix": "Parameterize the safety framing suffix based on the scenario's actual medium/type provided by the SOT.", "severity": "P1", "why_problematic": "In multi-turn calls, the system blindly appends a 'movie framing' suffix to the system message to bypass safety filters. This hardcodes a cinematic context for all multi-turn analysis, biasing the LLM's interpretation of characters and scenes toward movie tropes."}], "path": "backend/app/modules/llm/llm_client.py", "scan_kind": "python", "sha256": "16dda2eae6b7463c05729ddb95db0d5fbc4a5bacf78e9769c2f11af368df8340"}
{"candidate_reason": "python scope discovery", "chunk_end": 1240, "chunk_start": 1, "chunk_summary": "The file implements a background image generation pipeline using a chaining approach, but contains hardcoded visual style constraints and architectural assumptions within the prompt assembly logic.", "duration_ms": 26779, "findings": [{"category": "scenario_dependent_prompt", "evidence": "_BACKGROUND_ONLY_REINFORCEMENT = ( \"BACKGROUND-ONLY architectural still — empty space, NO people, NO faces, NO body posture, NO action, NO weapons, NO blood. Photoreal scene without any human figures.\\n\\n\" )", "line_end": 61, "line_start": 57, "recommended_fix": "Move these visual constraints into the system prompt or a structured style SOT (Source of Truth) that can be configured per scenario or project.", "severity": "P1", "why_problematic": "This constant hardcodes a specific visual style ('Photoreal scene', 'architectural still') and a list of forbidden tropes ('NO weapons') into every background prompt. This biases the output against non-photoreal art styles or scenarios that might require specific props like weapons in the background (e.g., a fantasy armory)."}, {"category": "scenario_dependent_prompt", "evidence": "\"Thoroughly describe wall/floor/ceiling/lighting/palette since later children inherit from this rendered photo.\"", "line_end": 92, "line_start": 89, "recommended_fix": "Generalize the instruction to 'surfaces and boundaries' or move it to the user_template where it can be adjusted based on the location's 'kind' (e.g., interior vs. exterior).", "severity": "P2", "why_problematic": "The prompt instruction hardcodes architectural elements ('wall/floor/ceiling'), assuming the location is an interior space. This biases the LLM's description for outdoor or abstract locations where these terms are inappropriate."}], "path": "backend/app/modules/pipeline/background_chain_render.py", "scan_kind": "python", "sha256": "f68591b10e7661b59fffffffde393e9c9208fba64dbe4c7d8e6b3c69116b4da6"}
{"candidate_reason": "python scope discovery", "chunk_end": 280, "chunk_start": 1, "chunk_summary": "The file handles background prompt generation and validation, including schema injection and prompt assembly, but contains hardcoded semantic constraints and project-specific pollution in the validation logic.", "duration_ms": 33214, "findings": [{"category": "semantic_string_judgment", "evidence": "item.encode(\"ascii\") ... \"owned MUST be English canonical common nouns (round 4 Q2=B / round 6 BLOCKING 3).\"", "line_end": 210, "line_start": 196, "recommended_fix": "Move the language and content constraints to the system prompt or a structured visual SOT. Remove project-specific 'round' references from the code and use a more flexible validation approach if non-ASCII characters are required for specific scenarios.", "severity": "P1", "why_problematic": "Uses a technical ASCII check to enforce a semantic language constraint (English common nouns) on open-world story entities (objects_owned_by_background). It also includes project-specific internal nomenclature ('round 4 Q2=B') which pollutes the validator and prevents the pipeline from supporting non-English or specialized scenario content."}], "path": "backend/app/modules/pipeline/background_prompt.py", "scan_kind": "python", "sha256": "de5f48a96c5a19b9b07b12506ddaa30556c2053f398f2284c175be142c76a3b2"}
{"candidate_reason": "python scope discovery", "chunk_end": 116, "chunk_start": 1, "chunk_summary": "The entity extraction logic is structural and generic, using externalized prompts and schemas without hardcoded scenario-specific pollution or semantic string judgments.", "duration_ms": 18322, "findings": [], "path": "backend/app/modules/pipeline/entity_extractor_v4.py", "scan_kind": "python", "sha256": "e13e19f1e6b9079f28d905440e6d106f69367d417d47349add85469ee51e11bb"}
{"candidate_reason": "python scope discovery", "chunk_end": 473, "chunk_start": 1, "chunk_summary": "The background master plan pipeline uses open-world string hints and sub-location labels from LLM outputs to enforce structural consistency and routing (fail/pass) via string normalization and comparison.", "duration_ms": 41224, "findings": [{"category": "semantic_string_judgment", "evidence": "normalize_space_key(loc_id, bg[\"space_key_hint\"], bg_profile)", "line_end": 231, "line_start": 169, "recommended_fix": "Require the LLM to use explicit, stable identifiers for spaces/sub-locations defined in the location profile, or derive the space membership directly from the floor plan reference (depends_on_fp) without redundant string-based cross-checks.", "severity": "P1", "why_problematic": "The pipeline validates the structural link between backgrounds and floor plans by normalizing and comparing open-world string hints ('space_key_hint'). This makes the validation (fail/pass) dependent on pattern-based semantic interpretation of LLM-generated labels rather than stable IDs."}, {"category": "semantic_string_judgment", "evidence": "sub_to_fp[sub] != first_fp", "line_end": 385, "line_start": 366, "recommended_fix": "Migrate legacy logic to use structured space IDs from a canonical SOT instead of relying on LLM-generated sub_location strings for grouping and consistency checks.", "severity": "P1", "why_problematic": "In the legacy validation path, the code uses the 'sub_location' string (an open-world label) as a key to enforce that all backgrounds in the same area reference the same floor plan. This relies on the LLM providing perfectly consistent string labels to pass validation."}], "path": "backend/app/modules/pipeline/background_master_plan.py", "scan_kind": "python", "sha256": "d98a2853ffce308c5404b5652147816a637a2cabd6f9acb6847a521675c00cbe"}
{"candidate_reason": "python scope discovery", "chunk_end": 1136, "chunk_start": 1, "chunk_summary": "The pipeline uses substring matching for location entity resolution and regex-based character detection for semantic validation of generated story content.", "duration_ms": 44641, "findings": [{"category": "semantic_string_judgment", "evidence": "if len(ename) >= 2 and (loc_raw in ename or ename in loc_raw):", "line_end": 154, "line_start": 152, "recommended_fix": "Use exact ID matching from the scene director or a structured mapping. If fuzzy matching is required, use a dedicated entity resolution step or LLM-based disambiguation.", "severity": "P1", "why_problematic": "Uses a blind substring check to resolve location IDs from raw scenario text. This is a pattern-based heuristic for entity membership that can lead to incorrect shot grouping (routing) if names are similar or ambiguous."}, {"category": "semantic_string_judgment", "evidence": "if _NON_ASCII_TEXT_RE.search(summary):", "line_end": 501, "line_start": 390, "recommended_fix": "Enforce linguistic constraints through system prompt instructions and few-shot examples. If validation is necessary, use a dedicated language detection library or allow a threshold/exception list for proper names.", "severity": "P2", "why_problematic": "Uses regex to detect non-ASCII characters in natural language fields (rationale, description, etc.) to enforce a 'universal noun' rule. This is a pattern-based semantic judgment that causes validation failure. It is brittle and may fail on valid technical or proper name edge cases."}], "path": "backend/app/modules/pipeline/background_chain_planning.py", "scan_kind": "python", "sha256": "0f30de23db87c06e6e9c30c8344679eeb02c49a6348e0f9df6dd19984af8714d"}
{"candidate_reason": "python scope discovery", "chunk_end": 101, "chunk_start": 1, "chunk_summary": "The entity filtering logic relies on regex-based string stripping and name-based matching to determine which entities to remove from the scenario, which is fragile and prone to collisions.", "duration_ms": 20923, "findings": [{"category": "blind_string_mutation", "evidence": "stripped = re.sub(r'^[CLP]\\d{2,3}\\s*', '', raw_name).strip()", "line_end": 83, "line_start": 71, "recommended_fix": "Modify the LLM response schema to explicitly return the 'short_id' for each decision, and use that ID for direct lookup instead of regex-based name normalization.", "severity": "P1", "why_problematic": "The code uses regex to guess the original entity name from LLM output by stripping potential ID prefixes. This is a fragile heuristic used to drive entity membership (filtering) decisions in the story pipeline."}, {"category": "semantic_string_judgment", "evidence": "if e[\"name\"] not in rnames", "line_end": 91, "line_start": 84, "recommended_fix": "Perform filtering based on unique 'short_id' keys rather than name strings.", "severity": "P1", "why_problematic": "Entity removal is performed by matching natural language name strings. This is unreliable in open-world scenarios where multiple entities might share the same name (e.g., 'Villager') or where the LLM might slightly vary the name string."}], "path": "backend/app/modules/pipeline/entity_filter.py", "scan_kind": "python", "sha256": "6942f826c21f51b159a159a2e14e22d2dd3826fee9b826bf1a8623cadca757d3"}
{"candidate_reason": "python scope discovery", "chunk_end": 37, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 6125, "findings": [], "path": "backend/app/modules/pipeline/episode_summarizer.py", "scan_kind": "python", "sha256": "ab7011132784352e2ada55950c411304521d1c9cde4bb6212c2f263baedef8b5"}
{"candidate_reason": "python scope discovery", "chunk_end": 499, "chunk_start": 1, "chunk_summary": "The file implements a background planning step with structured LLM calls and semantic invariant validation, including a hard-coded heuristic for shot frequency.", "duration_ms": 48989, "findings": [{"category": "scenario_dependent_code", "evidence": "invariant 6: frequency rule: floor_plans[].shot_count ≥ 3", "line_end": 268, "line_start": 261, "recommended_fix": "Move this frequency threshold to a configuration file or a structured 'World Rules' SOT so it can be adjusted per-project or per-scenario.", "severity": "P1", "why_problematic": "This is a hard-coded semantic heuristic that forbids floor plan generation for locations with fewer than 3 shots. This magic number dictates story/visual structure and may not apply to all scenarios (e.g., a critical 2-shot location)."}], "path": "backend/app/modules/pipeline/background_planner.py", "scan_kind": "python", "sha256": "647640786fa18df4962693aba3275f4d1a2c69b11d1cb8821117c14f74bb1d32"}
{"candidate_reason": "python scope discovery", "chunk_end": 115, "chunk_start": 1, "chunk_summary": "The code provides a technical utility for rendering floor plans via OpenAI's image generation and editing APIs without any scenario-specific logic or semantic string judgments.", "duration_ms": 4983, "findings": [], "path": "backend/app/modules/pipeline/floor_plan_render.py", "scan_kind": "python", "sha256": "ec4b73480bd0a2ebd76fd42e029f2144bc5201052901c84bd988f77964836551"}
{"candidate_reason": "python scope discovery", "chunk_end": 150, "chunk_start": 1, "chunk_summary": "The module uses name-based string heuristics and ID-length sorting to pre-determine entity variant relationships, which are then used to bias LLM analysis.", "duration_ms": 21768, "findings": [{"category": "semantic_string_judgment", "evidence": "bn = base_name(name); if bn: groups.setdefault(bn, []).append((sid, name))", "line_end": 32, "line_start": 30, "recommended_fix": "Shift variant detection to the LLM using the full entity descriptions and context, or rely on a structured SOT where these relationships are explicitly defined by the user/creator rather than inferred from name strings.", "severity": "P1", "why_problematic": "The pipeline uses a string-pattern heuristic (base_name) to group entities as variants. This logic decides entity membership and reference attachment based on name substrings, which is an open-world semantic decision made through blind string matching."}, {"category": "scenario_dependent_code", "evidence": "members.sort(key=lambda x: (len(x[0]), x[0])); base_sid, base_nm = members[0]", "line_end": 40, "line_start": 39, "recommended_fix": "Allow the LLM or the structured input to designate which entity is the 'base' reference, rather than relying on ID length as a proxy for semantic priority.", "severity": "P2", "why_problematic": "The code hardcodes a rule that the 'base' entity of a variant group is determined by the shortest ID string. This is a scenario-dependent heuristic for visual/story routing that ignores the actual semantic hierarchy described in the text."}], "path": "backend/app/modules/pipeline/entity_relation.py", "scan_kind": "python", "sha256": "702fe956160167b22f8c13170e231f0b3e61c7c143a8d691b9f574bd4f20209b"}
{"candidate_reason": "python scope discovery", "chunk_end": 522, "chunk_start": 1, "chunk_summary": "The file is a structured pipeline for entity extraction and T2I prompt generation using JSON schemas and multi-step LLM calls, and it does not contain actionable semantic string judgments or scenario-specific pollution.", "duration_ms": 41467, "findings": [], "path": "backend/app/modules/pipeline/entity_extractor_v3.py", "scan_kind": "python", "sha256": "c986035718b7f91b3dc9915305b09b38345443d8f0dfc9fcb7f037ea64709b33"}
{"candidate_reason": "python scope discovery", "chunk_end": 284, "chunk_start": 1, "chunk_summary": "The code handles floor plan prompt generation and validation using structured ID sets and schema-based constraints, with no actionable findings regarding semantic string judgment or scenario pollution.", "duration_ms": 15265, "findings": [], "path": "backend/app/modules/pipeline/floor_plan_prompt.py", "scan_kind": "python", "sha256": "2b5573a261a1a27f638ee9a2d6e993d0b343f3e50ac66ccf20fdf19f37421029"}
{"candidate_reason": "python scope discovery", "chunk_end": 205, "chunk_start": 1, "chunk_summary": "The code provides infrastructure for assembling floor plan prompts and calling LLM/Image APIs without hardcoded scenario-specific logic or semantic string-based routing.", "duration_ms": 11816, "findings": [], "path": "backend/app/modules/pipeline/location_floor_plan.py", "scan_kind": "python", "sha256": "ed1c1f785630980449d2de23bce336c12221b32c106d6ff80b5881dab1eb6551"}
{"candidate_reason": "python scope discovery", "chunk_end": 402, "chunk_start": 1, "chunk_summary": "The entity lister uses blind string replacement and manual schema patching to adapt prompts from scene-based to shot-based analysis, creating a risk of instruction-schema mismatch.", "duration_ms": 28746, "findings": [{"category": "blind_string_mutation", "evidence": ".replace(\"scene_count\", \"shot_count\").replace(\"등장하는 씬 수\", \"등장하는 샷(스틸컷) 수\")", "line_end": 240, "line_start": 199, "recommended_fix": "Use separate prompt templates for shot-based analysis or use a templating engine with variables for 'scene/shot' terminology.", "severity": "P1", "why_problematic": "The code performs blind string replacement and manual concatenation on natural language prompt text to change semantic instructions (lines 199, 238-240). This is fragile as it depends on exact phrasing in the base prompt. If the base prompt is updated, the replacement may fail silently while the schema is still patched, leading to LLM hallucination or validation failure."}, {"category": "schema_or_enum_drift", "evidence": "def _patch_schema_shot_count(schema: Dict) -> Dict:", "line_end": 371, "line_start": 354, "recommended_fix": "Define a separate schema file for shot-based entity extraction instead of patching the scene-based schema in code.", "severity": "P2", "why_problematic": "Manually mutating the JSON schema at runtime to rename keys (scene_count to shot_count) creates a drift between the source-of-truth schema files and the actual validation logic. This makes it difficult to maintain and audit the expected LLM output structure."}, {"category": "llm_closed_list_instruction", "evidence": "\"위 목록에 없는 새로운 요소만 추가하세요.\"", "line_end": 303, "line_start": 96, "recommended_fix": "Move the chaining/deduplication instructions into a dedicated prompt template or a system message fragment managed by the prompt loader.", "severity": "P2", "why_problematic": "Hardcoded natural language instructions for LLM deduplication behavior (lines 96-99, 299-303) are embedded in the Python logic. This bypasses the prompt management system and makes it harder to tune the chaining behavior across different models or languages."}], "path": "backend/app/modules/pipeline/entity_lister.py", "scan_kind": "python", "sha256": "a0c86dcd35b83d29571024e2362155f34e605e48919512678f9fce63f7a693fb"}
{"candidate_reason": "python scope discovery", "chunk_end": 255, "chunk_start": 1, "chunk_summary": "The outlook extraction pipeline correctly uses structured IDs and generic prompt labels without scenario-specific pollution or pattern-based semantic routing.", "duration_ms": 13144, "findings": [], "path": "backend/app/modules/pipeline/outlook_extractor_v2.py", "scan_kind": "python", "sha256": "5171f914c84b3f5138ec04a16502840b8783021d06d71fee74857d344eabf905"}
{"candidate_reason": "python scope discovery", "chunk_end": 84, "chunk_start": 1, "chunk_summary": "The code is a clean pipeline component that delegates scene dependency analysis to an LLM using versioned prompts and structured output, with no hardcoded semantic logic or scenario pollution.", "duration_ms": 12219, "findings": [], "path": "backend/app/modules/pipeline/scene_dependency_extractor.py", "scan_kind": "python", "sha256": "6383ce4de75a8cc7f349689891e01fd0dd52d72da8aafe6f8f966a9f413795b4"}
{"candidate_reason": "python scope discovery", "chunk_end": 63, "chunk_start": 1, "chunk_summary": "The code provides infrastructure for scene dependency analysis by formatting entity and scene data for an LLM call without making hardcoded semantic judgments.", "duration_ms": 5684, "findings": [], "path": "backend/app/modules/pipeline/scene_dependency_v2.py", "scan_kind": "python", "sha256": "621ea80cec9ecf872356bf7abbca36077cc221d644290becd497ae6faa203cfe"}
{"candidate_reason": "python scope discovery", "chunk_end": 85, "chunk_start": 1, "chunk_summary": "The code implements a scene director module that uses structured LLM calls to identify physical entity presence in scenes using dynamic schema constraints.", "duration_ms": 2005, "findings": [], "path": "backend/app/modules/pipeline/scene_director_v2.py", "scan_kind": "python", "sha256": "a6511cb91674a8bce17425e8c5e5ae9c33f4e3faf7e4df02c2dcef641a50c5a6"}
{"candidate_reason": "python scope discovery", "chunk_end": 43, "chunk_start": 1, "chunk_summary": "The entity reviewer module hardcodes entity categories and prompt instructions, creating a rigid dependency on a specific schema and language.", "duration_ms": 39348, "findings": [{"category": "scenario_dependent_prompt", "evidence": "f\"추출된 인물: ... 추출된 배경: ... 추출된 소품: ... \"위 요소 목록을 검토하여...\"", "line_end": 32, "line_start": 26, "recommended_fix": "Externalize the user prompt to a template and iterate over entity categories dynamically based on the input schema or a central SOT definition.", "severity": "P2", "why_problematic": "The user prompt assembly hardcodes a closed list of entity categories (characters, locations, props) and Korean instructions. This makes the pipeline rigid to schema changes (e.g., adding new entity types) and scatters domain nomenclature that should be managed via structured templates or SOT-driven logic."}], "path": "backend/app/modules/pipeline/entity_reviewer.py", "scan_kind": "python", "sha256": "fcef947cadd9d7c4eb00bbed3df22fa77435056e08c2d59951dbad87a87a800e"}
{"candidate_reason": "python scope discovery", "chunk_end": 363, "chunk_start": 1, "chunk_summary": "The file is a clean pipeline orchestrator for reference image generation and validation, using external prompt templates and structured JSON schemas for LLM communication without hardcoded scenario-specific logic or semantic string parsing.", "duration_ms": 17663, "findings": [], "path": "backend/app/modules/pipeline/ref_image_pipeline.py", "scan_kind": "python", "sha256": "f7f720c3c3d0c4e71f2b19e9013ad8600d8bc0b5b33b035f89d34a2caefd0387"}
{"candidate_reason": "python scope discovery", "chunk_end": 534, "chunk_start": 1, "chunk_summary": "The file implements outlook (outfit) deduplication and merging logic, containing scenario-specific prompt pollution and blind string mutations on T2I prompts.", "duration_ms": 30372, "findings": [{"category": "blind_string_mutation", "evidence": "re.sub(r'C\\d{2,3}O\\d{2,3}', _replace_sid, text)", "line_end": 83, "line_start": 65, "recommended_fix": "Avoid mutating natural language strings via regex for semantic cleanup. If deduplication is necessary, it should be performed on structured scene data before prompt assembly.", "severity": "P2", "why_problematic": "Blindly removes duplicate markers from natural language T2I prompts. This can corrupt sentence structure (e.g., 'Character A and Character A' becomes 'Character A and ') and forces a semantic decision that duplicates are never intentional based solely on string patterns."}, {"category": "scenario_dependent_prompt", "evidence": "(예: \"검은정장1\"과 \"검은정장2\"는 다를 수 있음)", "line_end": 140, "line_start": 140, "recommended_fix": "Remove specific naming examples or move them to a structured 'rules' or 'examples' section provided by the project SOT.", "severity": "P1", "why_problematic": "The prompt contains scenario-specific naming examples ('Black Suit 1', 'Black Suit 2') to instruct the LLM on merging logic. This biases the model's judgment for arbitrary future scenarios and pollutes the pipeline with domain-specific nomenclature."}, {"category": "blind_string_mutation", "evidence": "remove_marker = f\"[{remove_name}]\" ... t2i_cin.replace(remove_marker, keep_marker)", "line_end": 301, "line_start": 271, "recommended_fix": "Use structured IDs (e.g., C01O02) for all internal prompt references and only resolve to names at the final rendering stage, or use a proper parser to identify and replace markers.", "severity": "P1", "why_problematic": "Performs blind string replacement of entity names within natural language T2I prompts (cinematic and closeup). This risks accidental corruption if entity names are common words or if the marker syntax appears in non-marker contexts within the prompt prose."}], "path": "backend/app/modules/pipeline/outlook_dedup.py", "scan_kind": "python", "sha256": "de7e28e35db0549f0b523c81eed8fc32f15884268d1ae726dfda7ef43a8d966f"}
{"candidate_reason": "python scope discovery", "chunk_end": 134, "chunk_start": 1, "chunk_summary": "The outlook extractor module correctly uses structured data (IDs, world rules, and character lists) to drive LLM-based extraction without hardcoded scenario-specific logic or blind string mutations.", "duration_ms": 25998, "findings": [], "path": "backend/app/modules/pipeline/outlook_extractor.py", "scan_kind": "python", "sha256": "06b9ac1042d32428b3d8c26caa1da8e0be00760eded0d9c3c60abfe756ee8387"}
{"candidate_reason": "python scope discovery", "chunk_end": 125, "chunk_start": 1, "chunk_summary": "The scene summarizer module provides a clean orchestration layer for parallel LLM-based scene summarization without hardcoded scenario logic or semantic string patterns.", "duration_ms": 8253, "findings": [], "path": "backend/app/modules/pipeline/scene_summarizer.py", "scan_kind": "python", "sha256": "98d3e551a2a11f10bc389764409c065358a34de89f1d5b5bee1128421524c7eb"}
{"candidate_reason": "python scope discovery", "chunk_end": 111, "chunk_start": 1, "chunk_summary": "The outlook merger performs blind string replacement on visual prompts to unify outlook names, which is a fragile pattern-based mutation of story semantics.", "duration_ms": 27074, "findings": [{"category": "blind_string_mutation", "evidence": "t2i.replace(f\"[{old_name}]\", f\"[{new_name}]\")", "line_end": 97, "line_start": 97, "recommended_fix": "Perform name unification on the structured scene/outlook data before the T2I prompt is generated, or use a robust tokenization system for entity references in prompts.", "severity": "P1", "why_problematic": "This performs a blind substring replacement on the generated t2i_prompt using names derived from open-world scenario text. It assumes a specific bracketed format and can lead to incorrect visual prompts if names overlap or if the LLM output format is inconsistent."}, {"category": "blind_string_mutation", "evidence": "vt2i.replace(f\"[{old_name}]\", f\"[{new_name}]\")", "line_end": 104, "line_start": 104, "recommended_fix": "Ensure all outlook name mapping is resolved at the data level before natural language prompt assembly.", "severity": "P1", "why_problematic": "Similar to line 97, this mutates variation prompts using blind string replacement, which is a high-risk way to manage visual entity consistency in open-world stories."}], "path": "backend/app/modules/pipeline/outlook_merger.py", "scan_kind": "python", "sha256": "5efbf5429fc2cd12e1d25c9407ccad251840f279c826c7935df59bce83238a76"}
{"candidate_reason": "python scope discovery", "chunk_end": 242, "chunk_start": 1, "chunk_summary": "The scene validator contains scenario-specific character names in its verification prompt and uses brittle regex-based name replacement to modify visual prompts.", "duration_ms": 18821, "findings": [{"category": "scenario_dependent_prompt", "evidence": "\"동녘(강의원)\" 같은 표현 → 동녘의 몸만 있고, 강의원은 원격에서 조종 중이므로 강의원은 false", "line_end": 144, "line_start": 144, "recommended_fix": "Use abstract examples (e.g., 'Character A (Character B)') or move scenario-specific logic to a dynamic context provided by the world-building SOT.", "severity": "P1", "why_problematic": "The prompt includes specific character names ('동녘', '강의원') and a specific plot context ('remote control') as examples. This pollutes the general-purpose pipeline with scenario-specific logic and can bias the LLM when processing unrelated stories."}, {"category": "blind_string_mutation", "evidence": "re.sub(rf'\\[\\[{escaped}\\]\\+\\[[^\\]]*\\]\\]', '', prompt)", "line_end": 235, "line_start": 232, "recommended_fix": "Transition to a fully structured prompt assembly where the T2I prompt is generated from a list of active entity IDs rather than post-processing a string with name-based regex.", "severity": "P2", "why_problematic": "The code uses regex to remove entities from the 't2i_prompt' based on their natural-language names. This is a blind string mutation that can cause unintended side effects if names are substrings of other words or if the prompt structure varies."}], "path": "backend/app/modules/pipeline/scene_validator.py", "scan_kind": "python", "sha256": "8e27a9499877233d3a1e9ece29fbd4dd3aa5656c9d29dfbaa4b82f4e4671d42d"}
{"candidate_reason": "python scope discovery", "chunk_end": 297, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 15081, "findings": [], "path": "backend/app/modules/pipeline/shot_staging.py", "scan_kind": "python", "sha256": "2e103d7cf3b31422d96abcbbe9730debfb96d88b64252c5544feab66e91171fb"}
{"candidate_reason": "python scope discovery", "chunk_end": 337, "chunk_start": 1, "chunk_summary": "The pipeline uses a deterministic post-process to mutate visible entity lists based on shot description patterns, which conflicts with the requirement for LLM-only open-world semantic judgment.", "duration_ms": 18608, "findings": [{"category": "semantic_string_judgment", "evidence": "excluded_map = detect_gaze_pattern_exclusions(desc, name_to_char_id)", "line_end": 199, "line_start": 182, "recommended_fix": "Integrate gaze and off-screen detection into the LLM's structured output instructions. If a deterministic check is required for safety, it should be used as a validation flag or audit field rather than silently mutating the primary visibility SOT.", "severity": "P1", "why_problematic": "The code uses a deterministic heuristic (detect_gaze_pattern_exclusions) to analyze natural language shot descriptions and remove entities from the 'visible_entity_ids' list. This is a pattern-based semantic judgment that overrides the LLM's open-world visibility determination, potentially leading to incorrect rendering contracts if the description contains complex or non-standard phrasing."}], "path": "backend/app/modules/pipeline/shot_director.py", "scan_kind": "python", "sha256": "becac71f7b5224ed6be94088c15448f827b6229f53f731ee955c604ab8db9d6d"}
{"candidate_reason": "python scope discovery", "chunk_end": 48, "chunk_start": 1, "chunk_summary": "No actionable findings; the module correctly delegates visual rule extraction to structured LLM calls using externalized prompts and schemas.", "duration_ms": 3596, "findings": [], "path": "backend/app/modules/pipeline/visual_world_rules.py", "scan_kind": "python", "sha256": "d175b0ca2f77e250eb3e5f62c48a7af863d5ea6426c80c7c7a03b630a4b1c411"}
{"candidate_reason": "python scope discovery", "chunk_end": 47, "chunk_start": 1, "chunk_summary": "No actionable findings; this file is a technical utility for embedding metadata into PNG files and does not perform semantic analysis or scenario-dependent routing.", "duration_ms": 3024, "findings": [], "path": "backend/app/modules/png_metadata.py", "scan_kind": "python", "sha256": "b11942c89529fb36b00d1f2b737d9343b53835d5fbe6dfd85e72b69ee578f1b9"}
{"candidate_reason": "python scope discovery", "chunk_end": 86, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 6442, "findings": [], "path": "backend/app/modules/progress_tracker.py", "scan_kind": "python", "sha256": "668fae07268d57f39931347c5ce69298e415a505ee85005e39345d4387725908"}
{"candidate_reason": "python scope discovery", "chunk_end": 78, "chunk_start": 1, "chunk_summary": "The text extraction prompt contains scenario-specific name examples which pollute the general-purpose cleaning logic.", "duration_ms": 10839, "findings": [{"category": "scenario_dependent_prompt", "evidence": "예: \"네메\\\\n시스\" → \"네메시스\"", "line_end": 31, "line_start": 31, "recommended_fix": "Replace scenario-specific names with generic placeholders (e.g., '가\\\\n나다' or 'Ex\\\\nample') to ensure the prompt remains independent of any single project's nomenclature.", "severity": "P1", "why_problematic": "The prompt uses a specific story-related name ('Nemesis') as an example for line-break correction. This introduces scenario-specific pollution into a general text-cleaning utility that should be domain-agnostic regarding specific story content."}], "path": "backend/app/modules/pipeline/text_cleaner.py", "scan_kind": "python", "sha256": "c9e826bc21f7993a9b265dd8e989e9f58000b6e44a85c1b4bfa2aec7186db266"}
{"candidate_reason": "python scope discovery", "chunk_end": 403, "chunk_start": 1, "chunk_summary": "The prompt loader module provides infrastructure for loading templates and schemas from DB or file with versioning logic, and contains no actionable semantic or scenario-dependent debt.", "duration_ms": 7541, "findings": [], "path": "backend/app/modules/prompt_loader.py", "scan_kind": "python", "sha256": "4f096399c0a91a5d5bc3adbc065988b68a1ea77178a4d4a8da063de484233a1b"}
{"candidate_reason": "python scope discovery", "chunk_end": 454, "chunk_start": 1, "chunk_summary": "The file implements deterministic visibility and off-screen detection using hardcoded Korean/English lexicons and proximity-based regex heuristics on natural language descriptions.", "duration_ms": 25835, "findings": [{"category": "semantic_string_judgment", "evidence": "_KOREAN_GAZE_STEMS, _BODY_PART_NOUNS, detect_gaze_pattern_exclusions", "line_end": 302, "line_start": 37, "recommended_fix": "Shift visibility determination to a structured LLM output (e.g., a 'visible_entities' list in the shot schema) rather than post-processing natural language with regex heuristics.", "severity": "P1", "why_problematic": "The pipeline determines character visibility by parsing open-world Korean descriptions using hardcoded lists of verbs and body parts. This heuristic-based approach to visual semantics is fragile and scenario-dependent, as it relies on an incomplete list of domain-specific nomenclature to decide which entities are off-camera."}, {"category": "semantic_string_judgment", "evidence": "_OFFSCREEN_PHRASES, detect_offscreen_drift", "line_end": 445, "line_start": 85, "recommended_fix": "Require the staging LLM to provide structured visibility metadata (e.g., an 'is_off_screen' boolean or location enum) per character instead of parsing natural language strings in the pipeline.", "severity": "P1", "why_problematic": "Detects 'off-screen' status by searching for specific phrases in natural language camera directions and checking proximity to character names. This makes visual validation and fail-fast behavior dependent on fragile string patterns and magic proximity windows."}], "path": "backend/app/modules/pipeline/shot_visibility.py", "scan_kind": "python", "sha256": "1b551eb799e33ae1cd96ed94b561fda2b0921cd0a2f8d77e4f2ba515d2af15db"}
{"candidate_reason": "python scope discovery", "chunk_end": 86, "chunk_start": 1, "chunk_summary": "The file is a utility for logging LLM interactions and reference matching results to JSONL files and contains no actionable semantic or scenario-dependent logic.", "duration_ms": 4533, "findings": [], "path": "backend/app/modules/prompt_tracer_legacy.py", "scan_kind": "python", "sha256": "a3de142f72aa3d16ff0c2108ae34640343b3b6be72783f726101a0cbd41f6538"}
{"candidate_reason": "python scope discovery", "chunk_end": 525, "chunk_start": 1, "chunk_summary": "The pipeline contains hardcoded semantic assumptions about scene relationships, closed-list visual improvement categories that drive code routing, and blind string mutations for I2I prompt generation.", "duration_ms": 38303, "findings": [{"category": "llm_closed_list_instruction", "evidence": "\"type\": {\"type\": \"string\", \"description\": \"angle | color | angle+color\"}", "line_end": 68, "line_start": 68, "recommended_fix": "Allow the LVM to provide free-form improvement types or derive valid improvement categories from a structured world-rule SOT.", "severity": "P1", "why_problematic": "Forces the LVM to classify visual improvements into a hardcoded set of categories. This restricts the model's ability to suggest open-world visual improvements and limits the pipeline's flexibility to handle diverse visual styles or world-rules."}, {"category": "semantic_string_judgment", "evidence": "\"Previous scene (same location)\"", "line_end": 243, "line_start": 243, "recommended_fix": "Pass the relationship label as a parameter derived from scenario analysis (e.g., comparing location IDs) rather than hardcoding the 'same location' assumption.", "severity": "P2", "why_problematic": "Hardcodes a semantic assumption that the previous scene is always in the same location. This is a story-level decision that may be incorrect for scenes involving location changes, potentially confusing the T2I model's reference processing."}, {"category": "scenario_dependent_code", "evidence": "if imp_type == \"color\": ... elif imp_type == \"angle\": ...", "line_end": 458, "line_start": 452, "recommended_fix": "Use a more generic I2I editing interface that accepts the improvement type as a hint or parameter without hardcoded branching logic in the pipeline.", "severity": "P1", "why_problematic": "The pipeline performs visual routing based on a closed-list semantic classifier ('imp_type') returned by the LLM. This creates a tight coupling between the code and specific visual categories that should be handled generically."}, {"category": "blind_string_mutation", "evidence": "f\"Camera angle adjustment: {i2i_prompt}\"", "line_end": 455, "line_start": 455, "recommended_fix": "Include the improvement intent in the prompt template or pass it as structured metadata to the editor rather than using string concatenation in the pipeline logic.", "severity": "P1", "why_problematic": "Blindly prepends a hardcoded string to the I2I prompt based on a semantic category. This is a pattern-based visual decision that can pollute or override the LLM's intended descriptive text in the i2i_prompt."}], "path": "backend/app/modules/pipeline/scene_image_pipeline.py", "scan_kind": "python", "sha256": "5d6383246ebb757e1d612256a3abfbc0f964cf92ecc1fd17d0ae09e72357b70d"}
{"candidate_reason": "python scope discovery", "chunk_end": 287, "chunk_start": 1, "chunk_summary": "The provenance module provides technical infrastructure for logging pipeline operations and tracking prompt versions without making semantic story or visual decisions.", "duration_ms": 7275, "findings": [], "path": "backend/app/modules/provenance.py", "scan_kind": "python", "sha256": "449131b46eb16420f309910a745d6435af6627edf44c22e71a3472aba467f1fb"}
{"candidate_reason": "python scope discovery", "chunk_end": 953, "chunk_start": 1, "chunk_summary": "The scene extraction pipeline relies on fragile substring matching for text segmentation and performs blind string mutations on generated T2I prompts and prompt templates.", "duration_ms": 43527, "findings": [{"category": "semantic_string_judgment", "evidence": "scene_text.find(st, ...), fulltext.find(start_text, ...), if split_text in scene_text:", "line_end": 450, "line_start": 214, "recommended_fix": "Request character offsets or line indices from the LLM instead of raw text, or implement fuzzy matching for boundary detection.", "severity": "P1", "why_problematic": "The pipeline determines scene boundaries by performing exact substring matches on text fragments returned by an LLM. This is highly fragile as LLMs often introduce minor variations in whitespace, punctuation, or phrasing when 'copying' text, leading to failed segmentation or incorrect character offsets."}, {"category": "blind_string_mutation", "evidence": "var[\"t2i_prompt\"] = current_t2i.rstrip() + \" \" + suffix", "line_end": 823, "line_start": 808, "recommended_fix": "Include the required entities in the initial prompt instructions or use a second LLM pass to integrate missing elements into the narrative description naturally.", "severity": "P1", "why_problematic": "The code detects missing entities in a generated T2I prompt using substring checks and blindly appends a hardcoded English suffix (e.g., 'visible in the background'). This bypasses the LLM's semantic understanding and can result in contradictory or poorly composed visual prompts."}, {"category": "blind_string_mutation", "evidence": "_re_cine.sub(r'카메라 구도 선택지:.*?주의:', '주의:', turn_msg, flags=_re_cine.DOTALL)", "line_end": 741, "line_start": 736, "recommended_fix": "Use a proper templating engine (like Jinja2) or structured prompt assembly logic to handle conditional sections instead of post-hoc regex modification.", "severity": "P2", "why_problematic": "Modifies the prompt template instructions using regex substitution based on the presence of cinematography data. This is a fragile way to handle conditional prompt logic and makes the system sensitive to minor changes in the prompt text."}, {"category": "scenario_dependent_prompt", "evidence": "f\"  - [[{c['name']}]+[아웃룩이름]]\"", "line_end": 909, "line_start": 909, "recommended_fix": "Use a generic placeholder or move the example to a structured world-rule SOT.", "severity": "P2", "why_problematic": "The prompt contains a hardcoded Korean placeholder '아웃룩이름' (Outlook Name) as an example. This is scenario-specific pollution that should be replaced with a generic instruction or a structured example from the SOT."}, {"category": "schema_or_enum_drift", "evidence": "enum: [\"normal\", \"montage\", \"flashback\", \"dream\", \"voiceover\", \"transition\"]", "line_end": 93, "line_start": 93, "recommended_fix": "Move these categories to a configurable SOT or allow the LLM to provide a 'type' with a 'reasoning' field.", "severity": "P2", "why_problematic": "Hardcoded list of story tropes used to classify scenes. This limits the open-world analysis to a fixed set of categories that may not cover all narrative styles and should ideally be defined in a world-rule SOT."}], "path": "backend/app/modules/pipeline/scene_extractor_v2.py", "scan_kind": "python", "sha256": "9ead4b3967543b38bc6f0d8ec6b108a3f20681a680830b6ad10a8cef99948480"}
{"candidate_reason": "python scope discovery", "chunk_end": 152, "chunk_start": 1, "chunk_summary": "The file implements a SemanticContractRouter that determines pose and state constraints for image generation based on structured SOT fields, but contains a hardcoded list of semantic states used for routing.", "duration_ms": 3050, "findings": [{"category": "semantic_string_judgment", "evidence": "IMMOBILIZED_GAZE: frozenset[str] = frozenset({\"dead\", \"unconscious\", \"severely_injured\"})", "line_end": 22, "line_start": 22, "recommended_fix": "Move these semantic state definitions to a centralized world-rule configuration or ensure the LLM-produced SOT explicitly flags 'immobilized' status as a boolean or enum field (e.g., subject_state.is_immobilized) instead of relying on string matching against 'gaze_target'.", "severity": "P1", "why_problematic": "The code uses a hardcoded list of natural-language state strings ('dead', 'unconscious', etc.) to decide if a character should be 'immobilized'. This is a semantic judgment based on open-world story concepts that should be driven by structured metadata or a world-rule SOT rather than a static list in the router code."}], "path": "backend/app/modules/semantic_contract_router.py", "scan_kind": "python", "sha256": "3eabedd46fc41df8eb486c7c37b479c82096db368111f44188c3cc7912667d56"}
{"candidate_reason": "python scope discovery", "chunk_end": 70, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 3087, "findings": [], "path": "backend/app/modules/short_id.py", "scan_kind": "python", "sha256": "a12da612ad174a03abd3fc704048950edc892d574fbad599ae73f53b5b9a325e"}
{"candidate_reason": "python scope discovery", "chunk_end": 396, "chunk_start": 1, "chunk_summary": "The module contains hardcoded scenario-specific visual biases for character clothing that should be derived from the world setting.", "duration_ms": 13005, "findings": [{"category": "scenario_dependent_code", "evidence": "mapping = { \"character\": [ ..., \"현대 한국/근미래 한국 기준의 현실적 기본 복장을 사용하라.\" ] }", "line_end": 98, "line_start": 61, "recommended_fix": "Remove the hardcoded setting strings from the mapping. These constraints should be passed in via the world_guide (e.g., costume_guardrails) or a dedicated style SOT.", "severity": "P1", "why_problematic": "The reference image generator hardcodes a specific cultural and temporal setting (Modern/Near-future Korea) for all character entities. This biases image generation for scenarios that might be historical, high-fantasy, or set in different geographic locations, violating the open-world requirement."}], "path": "backend/app/modules/reference_image_generator.py", "scan_kind": "python", "sha256": "968475c02cf20d169fef0a67556ee73f3be39cb8ff3f3279f61c1094931e370f"}
{"candidate_reason": "python scope discovery", "chunk_end": 454, "chunk_start": 1, "chunk_summary": "The file implements a T2I prompt review and correction pipeline using LLM-based detection and blind string replacement for applying fixes.", "duration_ms": 40205, "findings": [{"category": "blind_string_mutation", "evidence": "if target in old: c[\"t2i_prompt\"] = old.replace(target, suggestion)", "line_end": 395, "line_start": 394, "recommended_fix": "Use a more robust replacement strategy, such as token-based matching or having the LLM return the full corrected prompt instead of a target/suggestion pair.", "severity": "P1", "why_problematic": "Uses blind substring replacement to modify visual prompts. This lacks token or word-boundary awareness, which can lead to accidental corruption of unrelated words (e.g., replacing 'art' inside 'earth' or 'heart')."}, {"category": "blind_string_mutation", "evidence": "if target in old: v[\"t2i_prompt\"] = old.replace(target, suggestion)", "line_end": 402, "line_start": 401, "recommended_fix": "Switch to full-string replacement or token-aware substitution.", "severity": "P1", "why_problematic": "Identical blind replacement logic applied to the 'completed' entity dictionary, risking prompt corruption."}, {"category": "blind_string_mutation", "evidence": "if target and target in old_prompt: variation[\"t2i_prompt\"] = old_prompt.replace(target, suggestion)", "line_end": 451, "line_start": 450, "recommended_fix": "Request the full corrected prompt from the LLM or implement regex-based word-boundary matching for the target string.", "severity": "P1", "why_problematic": "Blind substring replacement in scene-level T2I prompts. Since these prompts often contain comma-separated tags, a substring match can easily hit unintended parts of the prompt."}], "path": "backend/app/modules/pipeline/t2i_review.py", "scan_kind": "python", "sha256": "e5323a52576aa62eafcd92d24ae73f9667641d7fc4d92cc1e588b23e2239b5b8"}
{"candidate_reason": "python scope discovery", "chunk_end": 171, "chunk_start": 1, "chunk_summary": "The module provides a generic T2I visual prompt conversion pipeline using structured schemas and dynamic entity mapping without hardcoded scenario pollution.", "duration_ms": 10654, "findings": [], "path": "backend/app/modules/t2i_visual_converter.py", "scan_kind": "python", "sha256": "c288f257d1b6d258eea3850beaec967eb2d189a69209f4f25642ea86e9f3249c"}
{"candidate_reason": "python scope discovery", "chunk_end": 63, "chunk_start": 1, "chunk_summary": "The module defines a structured schema for LLM-based style rule generation, but includes specific trope examples in schema descriptions that bias open-world analysis.", "duration_ms": 17418, "findings": [{"category": "llm_closed_list_instruction", "evidence": "\"era\": {\"type\": \"string\", \"description\": \"시대 배경 (현대, 근미래, 중세 등)\"}, \"region\": {\"type\": \"string\", \"description\": \"국가/지역 (한국, 일본, 우주 등)\"}, \"genre_tone\": {\"type\": \"string\", \"description\": \"장르 톤 (리얼리즘, SF, 판타지 등)\"}", "line_end": 15, "line_start": 13, "recommended_fix": "Remove specific trope examples from the schema descriptions to allow for unbiased open-world extraction. If a restricted set of values is intended, use a formal enum or provide the allowed list via a dynamic SOT.", "severity": "P2", "why_problematic": "The schema descriptions contain hardcoded trope examples (Modern, Medieval, Korea, SF, etc.). These function as a closed-list classifier for open-world scenario analysis, biasing the LLM's extraction of story metadata toward these specific categories instead of allowing for arbitrary scenario context."}], "path": "backend/app/modules/style_rules_generator.py", "scan_kind": "python", "sha256": "d371c3250f2dbae4b3655e1b522c6a618ed7cc7b96cbd915a616e1f0c2bb856d"}
{"candidate_reason": "python scope discovery", "chunk_end": 182, "chunk_start": 1, "chunk_summary": "The module is a generic T2I prompt composer that assembles scene and entity data into a structured LLM request without scenario-specific logic or semantic string judgments.", "duration_ms": 16854, "findings": [], "path": "backend/app/modules/t2i_prompt_composer.py", "scan_kind": "python", "sha256": "eb3ec3ea7ab066c510d18ef2ade7cc2449656a9317a31df1201834b0ca025fc7"}
{"candidate_reason": "python scope discovery", "chunk_end": 247, "chunk_start": 1, "chunk_summary": "The module contains hard-coded semantic definitions for character states and brittle string-based heuristics for prompt mutation and truncation.", "duration_ms": 35323, "findings": [{"category": "llm_closed_list_instruction", "evidence": "_STATE_GUIDANCE: Dict[str, str] = { \"dead\": \"Do not rewrite as alive...\", ... }", "line_end": 73, "line_start": 67, "recommended_fix": "Move state-to-instruction mappings to a centralized world-rule SOT or include them in the prompt template metadata rather than hard-coding them in the logic.", "severity": "P1", "why_problematic": "Hard-codes the visual and narrative meaning of character states (dead, unconscious, injured) as negative constraints for the LLM. This creates a maintenance bottleneck and risks semantic inconsistency across the pipeline if these definitions are not synchronized with a central world-rule SOT."}, {"category": "blind_string_mutation", "evidence": "idx = prompt.find(_SEMANTIC_OVERRIDE_MARKER); if idx >= 0: head = prompt[:idx].rstrip(); return head + \"\\n\\n\" + block", "line_end": 150, "line_start": 146, "recommended_fix": "Use structured output fields to separate the LLM's generated prose from system-appended overrides, or use a more unique/non-natural-language delimiter.", "severity": "P1", "why_problematic": "Truncates LLM-generated natural language prompts based on a substring match of a technical marker. If the LLM happens to include the marker text in its response, the prompt will be silently corrupted/truncated, affecting visual output."}, {"category": "blind_string_mutation", "evidence": "if not sanitized.startswith(strategy[\"prefix\"].strip()[:40]): sanitized = strategy[\"prefix\"] + sanitized", "line_end": 230, "line_start": 229, "recommended_fix": "Ensure the strategy prefix is handled via the system prompt instructions or a dedicated structured field rather than post-hoc string matching.", "severity": "P2", "why_problematic": "Uses a brittle 40-character substring check on LLM-generated natural language to decide whether to prepend a strategy prefix. This heuristic is unreliable and can lead to corrupted or redundant prompt text if the LLM output varies slightly."}, {"category": "schema_or_enum_drift", "evidence": "for key in ( \"preserve_pose\", \"preserve_subject_state\", \"forbid_state_polarity_rewrite\", ... ):", "line_end": 104, "line_start": 100, "recommended_fix": "Iterate over the constraints dictionary based on a shared schema or registry of valid semantic flags.", "severity": "P2", "why_problematic": "The list of semantic flags is hard-coded in the rendering logic. This creates a drift risk where new flags added to the semantic contract schema will be silently ignored by the prompt generator."}], "path": "backend/app/modules/prompt_sanitizer.py", "scan_kind": "python", "sha256": "1683afd2c14de05d98cb740416b11672fa98f0049d44330251143670f2538d90"}
{"candidate_reason": "python scope discovery", "chunk_end": 178, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 17870, "findings": [], "path": "backend/app/modules/variation_recommender.py", "scan_kind": "python", "sha256": "69145ad1e970b20fa74035168c091d03c232cc7c5b192b9f3ca0f6c21c4ba7a0"}
{"candidate_reason": "python scope discovery", "chunk_end": 257, "chunk_start": 1, "chunk_summary": "The module relies on hardcoded English screenplay patterns for scene detection and uses a fixed enum for visual shot classification, which limits multi-language support and visual flexibility.", "duration_ms": 29410, "findings": [{"category": "semantic_string_judgment", "evidence": "HEADING_PREFIXES = (\"INT.\", \"EXT.\", \"INT/EXT.\", \"I/E.\")", "line_end": 192, "line_start": 19, "recommended_fix": "Abstract scene heading detection into a configurable SOT that supports multiple languages and screenplay formats (e.g., S#, #Scene, etc.) instead of hardcoded string prefixes.", "severity": "P1", "why_problematic": "Scene boundary detection (a core structural analysis step) is performed using a hardcoded list of English-only screenplay prefixes. This causes the 'heading_catalog' to be empty or incorrect for Korean/Japanese scenarios, breaking the LLM's ability to reference scene indices correctly despite the module claiming support for those languages."}, {"category": "llm_closed_list_instruction", "evidence": "\"still_kind\": { \"type\": \"string\", \"enum\": [ \"establishing\", \"group\", \"dialogue\", \"action\", \"detail\", \"reaction\", \"reveal\", \"insert\", \"climax\", \"aftermath\", \"other\" ] }", "line_end": 75, "line_start": 69, "recommended_fix": "Define visual shot types in a central SOT and inject them into the JSON schema at runtime to allow for genre-specific or project-specific visual vocabularies.", "severity": "P2", "why_problematic": "The LLM is forced to classify open-world visual intent into a closed list of domain tropes hardcoded in the schema. This limits the system's ability to handle diverse visual styles or specific directorial requirements that should be defined in a structured visual SOT."}], "path": "backend/app/modules/scene_still_extractor_legacy.py", "scan_kind": "python", "sha256": "baa63faac463130f5931fae18b7f24ec4d990a1643049af5e823c7ca0267931a"}
{"candidate_reason": "python scope discovery", "chunk_end": 16, "chunk_start": 1, "chunk_summary": "No actionable findings; this file contains standard authentication schemas with no scenario-specific logic or semantic string judgment.", "duration_ms": 2213, "findings": [], "path": "backend/app/schemas/auth.py", "scan_kind": "python", "sha256": "c2a78063e1a4ff91ccb3722ce4b76ae354c44ad3396920e7ecb3f919beb06ab2"}
{"candidate_reason": "python scope discovery", "chunk_end": 20, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 2692, "findings": [], "path": "backend/app/schemas/common.py", "scan_kind": "python", "sha256": "efa97cf6a53a58a07adb5498f1f44e7bdb1ea42e1accf6593cc8128cea8e2b56"}
{"candidate_reason": "python scope discovery", "chunk_end": 29, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 2385, "findings": [], "path": "backend/app/schemas/episode.py", "scan_kind": "python", "sha256": "a72dc87a847d7c558a06f1abcfbcd98dfd41f3e1e40ec2a273018d70ff7c8996"}
{"candidate_reason": "python scope discovery", "chunk_end": 138, "chunk_start": 1, "chunk_summary": "The module provides a structured interface for generating a world guide using an LLM, defining a generic schema and data compaction logic without scenario-specific logic or string-based routing.", "duration_ms": 10170, "findings": [], "path": "backend/app/modules/world_guide_generator.py", "scan_kind": "python", "sha256": "8a0040e8cdf5ce23c74f9a2250f7e6cbc45ad1adc140785b5d420a0bb23fdd27"}
{"candidate_reason": "python scope discovery", "chunk_end": 63, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 5944, "findings": [], "path": "backend/app/schemas/export.py", "scan_kind": "python", "sha256": "30349132c6762b409151f67c5a537f72d87049357a821e4ada65badaa81d0244"}
{"candidate_reason": "python scope discovery", "chunk_end": 316, "chunk_start": 1, "chunk_summary": "The webbook generator module uses structured JSON schemas and generic data passing to transform screenplay text into webbook episodes without scenario-specific logic or semantic string patterns.", "duration_ms": 15212, "findings": [], "path": "backend/app/modules/webbook_generator.py", "scan_kind": "python", "sha256": "9ec93175aa0c2d3159f2896f374778595166dd28f420ea5bc780870523a45941"}
{"candidate_reason": "python scope discovery", "chunk_end": 50, "chunk_start": 1, "chunk_summary": "No actionable findings; the file contains standard Pydantic schemas for operation logging and technical metadata without semantic logic or scenario pollution.", "duration_ms": 3010, "findings": [], "path": "backend/app/schemas/operation.py", "scan_kind": "python", "sha256": "c4dee1d33fc72dfaa6a198d9aa276c3e6689d996005cd164e98dd91b8d4cb7b3"}
{"candidate_reason": "python scope discovery", "chunk_end": 86, "chunk_start": 1, "chunk_summary": "The file defines Pydantic schemas for entity and scene still data structures and is clean of actionable semantic string judgment or scenario-specific pollution.", "duration_ms": 9145, "findings": [], "path": "backend/app/schemas/entity.py", "scan_kind": "python", "sha256": "9ab2573cd9eff34c336c3a09d57d0ff5b1d84d53b976a0c01afd506865a20149"}
{"candidate_reason": "python scope discovery", "chunk_end": 16, "chunk_start": 1, "chunk_summary": "No actionable findings; the file contains standard Pydantic schemas for user management without scenario-specific logic or semantic string judgments.", "duration_ms": 2374, "findings": [], "path": "backend/app/schemas/user.py", "scan_kind": "python", "sha256": "454ee8dcddb1a547cf1b2d44876d36861449a1fb0892266ba0570686ce43e627"}
{"candidate_reason": "python scope discovery", "chunk_end": 47, "chunk_start": 1, "chunk_summary": "No actionable findings; the file contains standard Pydantic schemas for project and membership management without semantic story or visual logic.", "duration_ms": 2803, "findings": [], "path": "backend/app/schemas/project.py", "scan_kind": "python", "sha256": "db325ae49a0a3e2eb855ff3392b7ffa2aa1f5d4963bd2f4a21842a04217c4a02"}
{"candidate_reason": "python scope discovery", "chunk_end": 30, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 3121, "findings": [], "path": "backend/app/schemas/trace.py", "scan_kind": "python", "sha256": "3bab02539298dd74bc98eddae9ed88e8aefb8aed869b53630b49524baed63926"}
{"candidate_reason": "python scope discovery", "chunk_end": 85, "chunk_start": 1, "chunk_summary": "The file defines Pydantic schemas for image-related API responses and updates, containing no actionable semantic judgment or scenario-specific pollution.", "duration_ms": 7994, "findings": [], "path": "backend/app/schemas/image.py", "scan_kind": "python", "sha256": "36fc5caeec3ffedca36d21dbabe52fd31526363862bd65fd022d47d0cd1caca2"}
{"candidate_reason": "python scope discovery", "chunk_end": 26, "chunk_start": 1, "chunk_summary": "No actionable findings; this file is a standard package initialization for checkpoint synchronization services.", "duration_ms": 2711, "findings": [], "path": "backend/app/services/checkpoint_sync/__init__.py", "scan_kind": "python", "sha256": "6950afde87f19ddbf7a7f2ef7501c20cab26b30cf2e3b0d9707d643560377a44"}
{"candidate_reason": "python scope discovery", "chunk_end": 68, "chunk_start": 1, "chunk_summary": "No actionable findings; the file contains standard authentication and session management logic using technical IDs and status constants.", "duration_ms": 3034, "findings": [], "path": "backend/app/services/auth_service.py", "scan_kind": "python", "sha256": "baa838999fa13b569c7daa02f52487f6d17f6303caea0fd3b9eb12c9ec22584f"}
{"candidate_reason": "python scope discovery", "chunk_end": 579, "chunk_start": 1, "chunk_summary": "The module contains blind string mutations and arbitrary truncation of scenario-derived visual context and character traits during prompt assembly.", "duration_ms": 46932, "findings": [{"category": "blind_string_mutation", "evidence": "world_summary = world_summary[:200].rsplit(\".\", 1)[0] + \".\"", "line_end": 64, "line_start": 62, "recommended_fix": "Pass the full summary or use an LLM-based summarizer that preserves key visual anchors if length constraints are required.", "severity": "P1", "why_problematic": "Blindly truncating the world setting summary to 200 characters by splitting on the last period can remove critical semantic context required for consistent visual generation."}, {"category": "blind_string_mutation", "evidence": "brief_traits = \" (\" + \", \".join(anchors[:3]) + \")\"", "line_end": 97, "line_start": 97, "recommended_fix": "Include all visual anchor traits or use a priority-based selection mechanism defined in the character SOT.", "severity": "P2", "why_problematic": "Arbitrarily selecting only the first three visual anchor traits for a character reference label may omit defining features that appear later in the list, leading to identity drift."}, {"category": "blind_string_mutation", "evidence": "brief_traits = \". \" + \", \".join(anchors[:4])", "line_end": 296, "line_start": 296, "recommended_fix": "Standardize trait selection logic and ensure all critical visual anchors are preserved in the prompt.", "severity": "P2", "why_problematic": "Similar to line 97, this arbitrarily selects the first four traits for Gemini reference labels, creating inconsistency and potentially losing identity-defining visual information."}], "path": "backend/app/modules/scene_image_generator.py", "scan_kind": "python", "sha256": "ecdff80635095f8ac3d4b2171cc50a33304e8e36ba0c278b02703a0e849e06ad"}
{"candidate_reason": "python scope discovery", "chunk_end": 182, "chunk_start": 1, "chunk_summary": "The module defines a GPT Vision-based variation recommender using a JSON schema that contains hardcoded visual tropes and pseudo-enums in field descriptions instead of formal schema constraints.", "duration_ms": 26253, "findings": [{"category": "llm_closed_list_instruction", "evidence": "\"description\": \"angle | color | angle+color | none\"", "line_end": 30, "line_start": 30, "recommended_fix": "Use a formal JSON `enum` property for the `type` field: `\"enum\": [\"angle\", \"color\", \"angle+color\", \"none\"]`.", "severity": "P2", "why_problematic": "The variation type is defined as a closed set of semantic categories within a string description rather than a formal JSON enum. This forces the LLM to perform classification based on a text-only list that is not strictly enforced by the schema structure, which can lead to unexpected values that break downstream logic."}, {"category": "llm_closed_list_instruction", "evidence": "\"e.g. 'tight close-up on face', 'wide establishing shot', 'over-shoulder framing'\" ... \"e.g. 'warm golden hour', 'cold blue moonlight'\"", "line_end": 49, "line_start": 45, "recommended_fix": "Inject these examples from a structured visual rulebook or SOT instead of hardcoding them in the schema definition.", "severity": "P2", "why_problematic": "Hardcoded domain trope lists (cinematography and lighting) are embedded directly in the schema descriptions. These examples bias the LLM's visual recommendations and should be managed via a centralized visual SOT to ensure consistency across different modules and scenarios."}, {"category": "schema_or_enum_drift", "evidence": "\"recommended\": {\"type\": \"string\"}", "line_end": 62, "line_start": 62, "recommended_fix": "Update the schema to use `\"enum\": [\"A\", \"B\", \"original\"]`.", "severity": "P2", "why_problematic": "The docstring (line 90) specifies that 'recommended' should be one of 'A', 'B', or 'original', but the JSON schema defines it as a generic string. This allows the LLM to return arbitrary values, violating the contract expected by the calling code."}], "path": "backend/app/modules/variation_recommender_v2.py", "scan_kind": "python", "sha256": "0408b1a87e0733b48fd82e256a86074aaed373f586cee69ce5f12f8df55114c6"}
{"candidate_reason": "python scope discovery", "chunk_end": 105, "chunk_start": 1, "chunk_summary": "No actionable findings; the file provides infrastructure for checkpoint synchronization using technical status constants and schema-based data presence checks.", "duration_ms": 5560, "findings": [], "path": "backend/app/services/checkpoint_sync/_base.py", "scan_kind": "python", "sha256": "63961d4d3b025abc4d5fbcaed4c929ef1250aa9f4c05f8f9f8f6c9f4a8d5c491"}
{"candidate_reason": "python scope discovery", "chunk_end": 78, "chunk_start": 1, "chunk_summary": "No actionable findings; this file defines data contracts and containers for checkpoint synchronization without implementing semantic logic or containing scenario-specific pollution.", "duration_ms": 5238, "findings": [], "path": "backend/app/services/checkpoint_sync/_scene_still_contracts.py", "scan_kind": "python", "sha256": "97663cc81d9af81732e0760ef170dcc3f5ac46cbc24d4b9eefa3e1fbb447714b"}
{"candidate_reason": "python scope discovery", "chunk_end": 153, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 4385, "findings": [], "path": "backend/app/services/checkpoint_sync/orchestrator.py", "scan_kind": "python", "sha256": "2ddbb1e40fcb91e679e13b21f95d97b571430d3503dcf8accc184e668024ffd0"}
{"candidate_reason": "python scope discovery", "chunk_end": 774, "chunk_start": 1, "chunk_summary": "The file is a dispatcher service for orchestrating analysis steps and contains no actionable findings regarding scenario-specific logic or string-based semantic judgment.", "duration_ms": 13812, "findings": [], "path": "backend/app/services/analysis_dispatch_service.py", "scan_kind": "python", "sha256": "9c128dce46be495f153fd8f15a3349a8ca94ad23146bbd68ac57d13747444d1e"}
{"candidate_reason": "python scope discovery", "chunk_end": 260, "chunk_start": 1, "chunk_summary": "The EntitySyncService handles technical synchronization of entity data between checkpoints and the database, using allowed closed-world syntax for ID prefixes and entity types.", "duration_ms": 11429, "findings": [], "path": "backend/app/services/checkpoint_sync/entity_sync_service.py", "scan_kind": "python", "sha256": "d93b0ef98a45c52fe596c45bdb0c0f69aa161af00e7f7c4ec167ba1570200581"}
{"candidate_reason": "python scope discovery", "chunk_end": 108, "chunk_start": 1, "chunk_summary": "The file is a structural data loader for checkpoint synchronization and contains no actionable semantic string judgments or scenario-specific pollution.", "duration_ms": 9102, "findings": [], "path": "backend/app/services/checkpoint_sync/scene_still_checkpoint_loader.py", "scan_kind": "python", "sha256": "7f7f750650e328e72bbb53317eedb31699f08e50e97fb52d864fc211747470a6"}
{"candidate_reason": "python scope discovery", "chunk_end": 175, "chunk_start": 1, "chunk_summary": "The file implements technical hash-based freshness checks for pipeline manifests and contains no actionable findings regarding semantic string judgment or scenario pollution.", "duration_ms": 5529, "findings": [], "path": "backend/app/services/dispatcher_preflight.py", "scan_kind": "python", "sha256": "bb5f7357bcc5c3f9f26ea927115cbe561ab373aa782965d002b82058e6ce4a2e"}
{"candidate_reason": "python scope discovery", "chunk_end": 97, "chunk_start": 1, "chunk_summary": "The SceneStillSyncService orchestrates the synchronization of scene still checkpoints to the database, utilizing helper classes for loading, normalization, and persistence without hardcoded semantic logic.", "duration_ms": 8873, "findings": [], "path": "backend/app/services/checkpoint_sync/scene_still_sync_service.py", "scan_kind": "python", "sha256": "713434e0a55bff3a92581f12cc3044077f046ac52a3c0bd5c798c95749abd83f"}
{"candidate_reason": "python scope discovery", "chunk_end": 213, "chunk_start": 1, "chunk_summary": "The SceneStillWriter service handles technical database synchronization of scene and shot metadata without performing semantic analysis or containing scenario-specific pollution.", "duration_ms": 8463, "findings": [], "path": "backend/app/services/checkpoint_sync/scene_still_writer.py", "scan_kind": "python", "sha256": "1f52aa60a54f0f34744d909cec355179d8d2a900cb87266cc37ff1ae2cd39704"}
{"candidate_reason": "python scope discovery", "chunk_end": 339, "chunk_start": 1, "chunk_summary": "The OutlookSyncService handles synchronization of outlook entities and character-outlook links from checkpoints to the database using structured ID parsing and name matching, with no actionable findings regarding open-world semantic judgment or scenario pollution.", "duration_ms": 17126, "findings": [], "path": "backend/app/services/checkpoint_sync/outlook_sync_service.py", "scan_kind": "python", "sha256": "77f48701691d4b39436443ee782c53617a8784e7c9cd6103f4cb66f8c32f3193"}
{"candidate_reason": "python scope discovery", "chunk_end": 293, "chunk_start": 1, "chunk_summary": "The service manages episode status transitions and calculates entity appearance counts by parsing T2I prompts with regex.", "duration_ms": 20459, "findings": [{"category": "semantic_string_judgment", "evidence": "re.finditer(r'(C\\d{2,3})(O\\d{2,3})', t2i_text)", "line_end": 251, "line_start": 242, "recommended_fix": "Update the T2I generation pipeline to emit a structured list of entity IDs actually used in the shot, and store this in a dedicated metadata field (e.g., in SceneStill) to avoid scraping natural language strings.", "severity": "P1", "why_problematic": "The system determines visual entity membership (appearance counts) by performing regex-based pattern matching on natural language T2I prompts. This is a fragile semantic judgment that cannot distinguish between an entity being present in a scene versus being mentioned in a negative or descriptive context within the prompt, leading to inaccurate visual metadata."}], "path": "backend/app/services/checkpoint_sync/episode_projection_service.py", "scan_kind": "python", "sha256": "09b092c7f0cf9cb4d25f17fe560deed5bdc44e387b9d67359d9482a6071b5cbd"}
{"candidate_reason": "python scope discovery", "chunk_end": 248, "chunk_start": 1, "chunk_summary": "The episode service handles standard CRUD operations, PDF file management, and text extraction without performing semantic string-based routing or containing scenario-specific pollution.", "duration_ms": 5768, "findings": [], "path": "backend/app/services/episode_service.py", "scan_kind": "python", "sha256": "f1eaaedaff9fdc20ef72f00e40125caeb7adef762f13ef365f1eb67d9c1edcdd"}
{"candidate_reason": "python scope discovery", "chunk_end": 198, "chunk_start": 1, "chunk_summary": "The SceneStillNormalizer processes checkpoint data into planned stills, but relies on regex-based extraction from natural language prompts to determine entity visibility.", "duration_ms": 19030, "findings": [{"category": "semantic_string_judgment", "evidence": "used = set(_BARE_ID_RE.findall(text)) ... return [sid for sid in director_ve if sid in used]", "line_end": 76, "line_start": 69, "recommended_fix": "Derive entity visibility from a structured list of IDs provided by the scene/shot analysis step instead of parsing the t2i_prompt string.", "severity": "P1", "why_problematic": "Determines visible entity membership for a shot by scanning natural-language prompt strings for ID patterns (C##/L##/P##). This makes the visual composition of a shot dependent on string-matching within a field intended for image generation instructions, rather than a structured source of truth."}], "path": "backend/app/services/checkpoint_sync/scene_still_normalizer.py", "scan_kind": "python", "sha256": "c0c29435dd7a4a4aafa0fa5d348a19901db4489d5eef09f5904ab3bf52d3e12f"}
{"candidate_reason": "python scope discovery", "chunk_end": 201, "chunk_start": 1, "chunk_summary": "The service implements delta synchronization for entity relations but contains a hardcoded semantic fallback string for visual relationship reasons.", "duration_ms": 22720, "findings": [{"category": "scenario_dependent_code", "evidence": "\"시각적 변형 — 기본 요소에 의존\"", "line_end": 64, "line_start": 62, "recommended_fix": "Move the default relationship reason to a centralized configuration or a localized string table, or ensure the upstream analysis phase always provides a structured reason.", "severity": "P2", "why_problematic": "This hardcoded Korean string provides a default semantic explanation for a 'visual_variant' relationship. Since this value populates the 'continuity_reason' field, it directly affects the natural-language context provided to downstream LLMs or image generation prompts, introducing language-specific and domain-specific bias that should be managed via a structured world-rule SOT or localized configuration."}], "path": "backend/app/services/checkpoint_sync/relation_sync_service.py", "scan_kind": "python", "sha256": "6e92eee3c6bdec60861c5972e32d868f03819c1b7c7efa46cdf47f1c3147694e"}
{"candidate_reason": "python scope discovery", "chunk_end": 248, "chunk_start": 1, "chunk_summary": "The ImageComposerService manages T2I prompt generation and project-level prompt overrides without containing scenario-specific logic or semantic string judgments.", "duration_ms": 6817, "findings": [], "path": "backend/app/services/image_composer_service.py", "scan_kind": "python", "sha256": "3542b129ba7f9899f2936d64d2b65b09fac2c32783ffaf153e3e3cc35d1c3fc7"}
{"candidate_reason": "python scope discovery", "chunk_end": 145, "chunk_start": 1, "chunk_summary": "The ImageUploadService handles technical file management and database record creation for manual image uploads without any open-world semantic judgments or scenario-specific pollution.", "duration_ms": 5183, "findings": [], "path": "backend/app/services/image_upload_service.py", "scan_kind": "python", "sha256": "1d6513ba312bc54256900329b481a3c819d17b80d1790bb7999a8abfdd5846a6"}
{"candidate_reason": "python scope discovery", "chunk_end": 241, "chunk_start": 1, "chunk_summary": "The file provides helper functions for image selection and camera angle recommendation using GPT Vision and fal.ai, with no evidence of hardcoded scenario-specific logic or string-based semantic routing.", "duration_ms": 14644, "findings": [], "path": "backend/app/services/fal_angle_helpers.py", "scan_kind": "python", "sha256": "f77edf941603c41d5c372a5b0f61292ed7ebc77b0fa39e076087e278ebbf247e"}
{"candidate_reason": "python scope discovery", "chunk_end": 379, "chunk_start": 1, "chunk_summary": "The image service contains hardcoded visual style biases in prompt assembly and uses substring matching on natural-language prompt fields for entity routing.", "duration_ms": 17350, "findings": [{"category": "scenario_dependent_prompt", "evidence": "Photorealistic cinematic still.", "line_end": 119, "line_start": 91, "recommended_fix": "Move the default style prefix to a configurable field in ProjectSettings or a global style rule SOT rather than hardcoding it in the service logic.", "severity": "P1", "why_problematic": "The service hardcodes a specific visual style ('Photorealistic cinematic still') as a prefix for all T2I prompts. This imposes a specific aesthetic bias (photorealism) on the visual generation pipeline that should instead be derived from a structured style SOT or project-specific settings."}, {"category": "semantic_string_judgment", "evidence": "ImageAsset.prompt_used.like(f\"%outlook_id:{outlook_id}%\")", "line_end": 144, "line_start": 144, "recommended_fix": "Store outlook_id in a dedicated foreign key column or a structured JSON metadata field on the ImageAsset model instead of parsing it from the prompt text.", "severity": "P1", "why_problematic": "This uses a SQL LIKE substring search on the 'prompt_used' field (which contains the generated natural-language T2I prompt) to determine entity membership for 'outlook_id'. Relying on technical tags embedded in natural language strings for routing or filtering is fragile and violates the separation of technical metadata from generated content."}], "path": "backend/app/services/image_service.py", "scan_kind": "python", "sha256": "3e95506e2df29531254df2f0517a140a55c86dd835853b8c6436851b6578f045"}
{"candidate_reason": "python scope discovery", "chunk_end": 515, "chunk_start": 1, "chunk_summary": "The file provides standard project export and import services, handling database serialization and ID remapping without any actionable semantic string judgments or scenario-specific pollution.", "duration_ms": 12220, "findings": [], "path": "backend/app/services/project_export_service.py", "scan_kind": "python", "sha256": "ca89ee0c105ac860374f4ee5515554799004ff1ef9c59c96213158c54879d8b4"}
{"candidate_reason": "python scope discovery", "chunk_end": 339, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 27667, "findings": [], "path": "backend/app/services/image_review_service.py", "scan_kind": "python", "sha256": "7f8ea4ae1778bd448c530d21e51550fce37f1329d8e0c5721abe11dbed3e2d46"}
{"candidate_reason": "python scope discovery", "chunk_end": 874, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 21698, "findings": [], "path": "backend/app/services/planning_doc_analysis_service.py", "scan_kind": "python", "sha256": "a99dd956a14efe6da51185101b99cb2579aaf8c509209bbeb6f7e5182630df3e"}
{"candidate_reason": "python scope discovery", "chunk_end": 441, "chunk_start": 1, "chunk_summary": "The project service includes a name generation utility with domain-specific prompt pollution and a destructive regex fallback for non-ASCII titles.", "duration_ms": 14980, "findings": [{"category": "scenario_dependent_prompt", "evidence": "The input is a Korean film/drama project name.", "line_end": 33, "line_start": 33, "recommended_fix": "Inject the project domain as a variable or use a more generic description of the input text.", "severity": "P2", "why_problematic": "The prompt hardcodes the 'film/drama' domain, which biases the LLM's translation/transliteration logic toward specific industry naming conventions rather than remaining domain-agnostic."}, {"category": "blind_string_mutation", "evidence": "re.sub(r'[^a-zA-Z0-9 ]', '', korean_name).strip() or \"Project\"", "line_end": 45, "line_start": 45, "recommended_fix": "Use a romanization library for the fallback to preserve the phonetic identity of the title.", "severity": "P2", "why_problematic": "This fallback logic blindly strips all non-ASCII characters to create an 'English' name. For Korean titles, this results in a total loss of semantic identity, defaulting to the generic string 'Project'."}], "path": "backend/app/services/project_service.py", "scan_kind": "python", "sha256": "30015de0bd5b291a8723078b28a977564db4c113f58227d83f1e03bb063668da"}
{"candidate_reason": "python scope discovery", "chunk_end": 398, "chunk_start": 1, "chunk_summary": "The file contains helper functions for image asset management and T2I prompt population, with some brittle semantic mappings from LLM outputs and positional list assumptions.", "duration_ms": 24109, "findings": [{"category": "semantic_string_judgment", "evidence": "still_data[\"t2i_prompt_cinematic\"] = t2i.get(\"a\", \"\"); still_data[\"t2i_prompt_closeup\"] = t2i.get(\"b\", \"\")", "line_end": 105, "line_start": 104, "recommended_fix": "Use a structured schema (e.g., Pydantic) for the LLM output with explicit fields like 'cinematic_prompt' and 'closeup_prompt'.", "severity": "P1", "why_problematic": "The code relies on arbitrary keys 'a' and 'b' from an LLM-generated dictionary to assign specific visual shot types (cinematic vs. closeup). This creates a brittle, implicit contract between the LLM prompt and the service logic."}, {"category": "semantic_string_judgment", "evidence": "still_data[\"t2i_prompt_cinematic\"] = t2i_vars[0].get(\"t2i_prompt\", \"\"); still_data[\"t2i_prompt_closeup\"] = t2i_vars[1].get(\"t2i_prompt\", \"\")", "line_end": 129, "line_start": 127, "recommended_fix": "Store variations with explicit type labels (e.g., 'shot_type': 'cinematic') and filter by label instead of relying on list index.", "severity": "P1", "why_problematic": "The code assumes the order of variations in a list (index 0 and 1) determines their visual semantic role (cinematic vs. closeup). This positional dependency is fragile and lacks explicit semantic labeling."}, {"category": "blind_string_mutation", "evidence": "still_data[\"t2i_prompt_cinematic\"] = still_data.get(\"still_frame_prompt\", \"\")", "line_end": 133, "line_start": 131, "recommended_fix": "Ensure all T2I prompts pass through a visual converter or use a more descriptive fallback that indicates it is a raw scene description.", "severity": "P2", "why_problematic": "It promotes raw story/scene text ('still_frame_prompt') directly to a T2I prompt field without visual transformation. Story text often contains narrative elements that are unsuitable for direct T2I generation."}], "path": "backend/app/services/image_service_helpers.py", "scan_kind": "python", "sha256": "4cb95f5c43c7fe4de43a78c55da9f78f7710f90e18f15ada0aa380675e73d540"}
{"candidate_reason": "python scope discovery", "chunk_end": 1098, "chunk_start": 1, "chunk_summary": "The export service handles webbook generation and PDF/HTML rendering, including a logic for attaching reference images based on regex patterns found in generated prompt text.", "duration_ms": 33475, "findings": [{"category": "semantic_string_judgment", "evidence": "co_combos = set(_re.findall(r'C\\d{2,3}O\\d{2,3}', t2i_text))", "line_end": 850, "line_start": 850, "recommended_fix": "Store the specific outfit or composite IDs used for a shot in a structured field (e.g., within SceneStill or ImageAsset metadata) during the generation phase, and use that field for lookup instead of regexing the prompt string.", "severity": "P1", "why_problematic": "This logic extracts character-outfit combinations (C##O##) from the natural-language T2I prompt text to decide which composite reference images to display in the export. This creates a brittle dependency on the LLM's prose output and bypasses structured metadata for visual entity membership."}], "path": "backend/app/services/export_service.py", "scan_kind": "python", "sha256": "1eda78af58ad6847382d0cd6c5301196c7d501861ca524ee0689659f3585d2c9"}
{"candidate_reason": "python scope discovery", "chunk_end": 180, "chunk_start": 1, "chunk_summary": "The ReferenceEntityService manages the orchestration of single entity image generation and metadata persistence without implementing semantic string-based routing or scenario-specific logic.", "duration_ms": 5846, "findings": [], "path": "backend/app/services/reference_entity_service.py", "scan_kind": "python", "sha256": "bdc38e95c20fd1a9a3ea6886b7db7c8d2d2e18b05f449cfa0e6aa2c2cf911848"}
{"candidate_reason": "python scope discovery", "chunk_end": 52, "chunk_start": 1, "chunk_summary": "The file defines a dataclass for managing pipeline state and counters, containing no actionable semantic string judgments or scenario-specific pollution.", "duration_ms": 7190, "findings": [], "path": "backend/app/services/reference_pipeline_context.py", "scan_kind": "python", "sha256": "a97061282cf5286d5b5845ba0766e18973ef220d57a0afed94db2fd0571c0f4c"}
{"candidate_reason": "python scope discovery", "chunk_end": 188, "chunk_start": 1, "chunk_summary": "The file is a service facade for reference and composite image generation, delegating logic to specialized orchestrators and services without containing scenario-specific logic or string-based semantic judgments.", "duration_ms": 13076, "findings": [], "path": "backend/app/services/reference_image_service.py", "scan_kind": "python", "sha256": "25f234aab96453b4ee319adb98b5c863aabe2d4f0cc365ea860f28a6e5f6de20"}
{"candidate_reason": "python scope discovery", "chunk_end": 462, "chunk_start": 1, "chunk_summary": "The prompt service contains multiple instances of semantic string judgment for reference image routing, blind string mutations that strip visual information, and hardcoded style/logic biases in prompt assembly.", "duration_ms": 27553, "findings": [{"category": "semantic_string_judgment", "evidence": "if \"previous shot\" in label_lower ... if \"wearing\" in label_lower ... if \"prop\" in label_lower", "line_end": 116, "line_start": 64, "recommended_fix": "Use a structured enum or metadata field for reference types instead of parsing natural language labels.", "severity": "P1", "why_problematic": "Uses substring matching on natural language labels (which may be LLM-generated) to determine the semantic role and routing of reference images (e.g., character vs. background vs. outfit)."}, {"category": "blind_string_mutation", "evidence": "re.sub(r\"In a (low angle|dutch angle|high angle|bird eye|wide|tracking|over the shoulder)\\s*(frame|composition|shot|view)\\s*\", \"\", cleaned)", "line_end": 301, "line_start": 296, "recommended_fix": "Handle camera angles as structured metadata or allow them to persist if they are part of the intended scene description.", "severity": "P1", "why_problematic": "Blindly removes camera angle descriptions from the prompt using a hardcoded list of keywords. This mutates the visual semantics of the scene description without context."}, {"category": "llm_closed_list_instruction", "evidence": "'from the reference', 'from Reference image N' 같은 표현은 절대 새로 만들지 마세요 (phantom guard 충돌).", "line_end": 370, "line_start": 365, "recommended_fix": "Move phrase prohibitions to a centralized prompt configuration or improve the downstream validator to be more context-aware.", "severity": "P2", "why_problematic": "Hardcodes specific phrase prohibitions in a system prompt to work around a downstream regex-based validator ('phantom guard'). This pollutes the translation logic with implementation-specific constraints."}, {"category": "scenario_dependent_prompt", "evidence": "\"Photorealistic cinematic still.\" ... \"If only a body part is shown, do NOT add the face.\"", "line_end": 421, "line_start": 415, "recommended_fix": "Move style and rendering constraints to a structured style SOT or a configurable prompt template.", "severity": "P1", "why_problematic": "Hardcodes specific style ('Photorealistic cinematic still') and rendering logic ('do NOT add the face') directly in the assembly code, biasing all generated prompts regardless of the actual scenario or style requirements."}, {"category": "semantic_string_judgment", "evidence": "if \"keep\" in lower or \"ignore\" in lower:", "line_end": 169, "line_start": 153, "recommended_fix": "Use structured metadata to flag specific instructions or 'keep/ignore' logic instead of parsing strings.", "severity": "P2", "why_problematic": "Uses substring checks on label sentences to decide whether to include them as instructions, which is a fragile way to handle semantic intent from LLM-generated text."}], "path": "backend/app/services/prompt_service.py", "scan_kind": "python", "sha256": "0e1f2edfaf73d969c61bd4c340dce41dfe55b883e8e1a1635deb6777e8ed60cc"}
{"candidate_reason": "python scope discovery", "chunk_end": 248, "chunk_start": 1, "chunk_summary": "No actionable findings; the service performs technical orchestration for re-running specific shot analysis using structured IDs and manifest manipulation.", "duration_ms": 5149, "findings": [], "path": "backend/app/services/scene_detail_redo_service.py", "scan_kind": "python", "sha256": "05995a6cafe7b8188b9a6955c53706071f6bc727f0cc044995d69a282689012b"}
{"candidate_reason": "python scope discovery", "chunk_end": 194, "chunk_start": 1, "chunk_summary": "The service manages composite image generation but relies on brittle string pattern matching within the 'prompt_used' field for asset routing and contains hardcoded visual style instructions.", "duration_ms": 33549, "findings": [{"category": "semantic_string_judgment", "evidence": "~ImageAsset.prompt_used.like(\"[composite:%\")", "line_end": 78, "line_start": 78, "recommended_fix": "Introduce a structured 'asset_subtype' or 'is_composite' column in the ImageAsset model to handle this classification.", "severity": "P1", "why_problematic": "Uses a substring check on the 'prompt_used' field to distinguish between base reference images and generated composites. This is a brittle routing decision based on a string pattern in a field that should contain natural language prompts."}, {"category": "scenario_dependent_prompt", "evidence": "\"Full body shot, standing pose, plain neutral background. Dress the character in the outfit shown in the reference images.\"", "line_end": 103, "line_start": 103, "recommended_fix": "Move the fallback prompt to a template configuration or the SOT.", "severity": "P2", "why_problematic": "Hardcodes specific visual style and pose instructions ('Full body shot', 'standing pose', 'plain neutral background') as a fallback. This pollutes the code with visual decisions that should be managed via a structured SOT or template system to maintain project-wide style consistency."}, {"category": "semantic_string_judgment", "evidence": "prompt_used LIKE :key", "line_end": 135, "line_start": 135, "recommended_fix": "Use a dedicated foreign key or metadata field to identify related composite assets for deactivation.", "severity": "P1", "why_problematic": "Performs a database update based on a string pattern match in the 'prompt_used' field. This couples business logic (deactivating old composites) to a specific string prefix convention rather than structured metadata."}], "path": "backend/app/services/reference_composite_service.py", "scan_kind": "python", "sha256": "0808de0b8cef16a31e727d1b4a2e72faa5c170483b4473497546bad8a20b282b"}
{"candidate_reason": "python scope discovery", "chunk_end": 350, "chunk_start": 1, "chunk_summary": "The file contains hardcoded semantic labels for background matching that include specific architectural elements, potentially biasing visual generation across arbitrary scenarios.", "duration_ms": 16413, "findings": [{"category": "scenario_dependent_prompt", "evidence": "\"label\": (f\"background chain ref ({bg_id} for {loc_id}) — match wall/floor/ceiling/lighting\")", "line_end": 179, "line_start": 176, "recommended_fix": "Move the descriptive matching criteria to a structured SOT or configuration, or use a generic label that does not assume specific prop categories.", "severity": "P1", "why_problematic": "Hardcoding specific architectural elements ('wall/floor/ceiling/lighting') into a reference label biases the visual generation pipeline. If the scenario is an outdoor or non-architectural setting, these terms act as prompt pollution that forces the model to consider interior architectural components."}, {"category": "scenario_dependent_prompt", "evidence": "\"label\": (f\"background chain ref ({node_id} for {loc_id}) — match wall/floor/ceiling/lighting\")", "line_end": 276, "line_start": 273, "recommended_fix": "Use a generic reference label or derive the matching criteria from the scene's metadata or a centralized rule set.", "severity": "P1", "why_problematic": "This legacy fallback path repeats the hardcoded architectural tropes, ensuring that even older data structures inject biased semantic instructions into the visual pipeline."}], "path": "backend/app/services/scene_checkpoint_loaders.py", "scan_kind": "python", "sha256": "8ea0144cf6f32b7a4bad899852e7ab110b4b92beae3471502a886f692dcf8079"}
{"candidate_reason": "python scope discovery", "chunk_end": 221, "chunk_start": 1, "chunk_summary": "The service orchestrates standalone outfit reference generation but contains hardcoded visual style defaults and language-specific assumptions in its LLM prompts.", "duration_ms": 32428, "findings": [{"category": "scenario_dependent_code", "evidence": "\"Photorealistic cinematic still.\"", "line_end": 79, "line_start": 61, "recommended_fix": "Retrieve the base style prompt from ProjectSettings or a style-specific SOT instead of hardcoding it in the service logic.", "severity": "P1", "why_problematic": "The visual style 'Photorealistic cinematic still' is hardcoded as a default context for translation and potentially visual generation. This biases the LLM's interpretation of costume descriptions toward a specific aesthetic regardless of the project's actual style requirements, which should be driven by a structured SOT."}, {"category": "scenario_dependent_prompt", "evidence": "\"Translate the Korean costume description to English\", \"세계관:\", \"의상:\"", "line_end": 156, "line_start": 155, "recommended_fix": "Use localized templates or generic instructions that do not assume a specific source language.", "severity": "P2", "why_problematic": "The translation prompt hardcodes the source language as Korean and uses Korean labels. This prevents the pipeline from being used for scenarios written in other languages without code changes."}], "path": "backend/app/services/reference_phase2_service.py", "scan_kind": "python", "sha256": "6afb9ffdd066966fc9941807d3278079047521e72dcf73d4c4231b0f9611ee0e"}
{"candidate_reason": "python scope discovery", "chunk_end": 221, "chunk_start": 1, "chunk_summary": "The service contains hardcoded visual consistency instructions for character variants and performs semantic entity type mapping based on technical ID lists.", "duration_ms": 32807, "findings": [{"category": "scenario_dependent_prompt", "evidence": "variant_instruction = ( ... \"Keep the EXACT same face, bone structure, skin tone, and identity.\" ... )", "line_end": 117, "line_start": 98, "recommended_fix": "Move visual consistency rules to a structured rule SOT or a prompt template system that can be configured per project or entity type.", "severity": "P1", "why_problematic": "Hardcoded visual consistency rules for character variants are embedded in the service logic. These instructions assume humanoid features and identity-based consistency which may not apply to all scenarios (e.g., abstract or non-humanoid projects)."}, {"category": "scenario_dependent_code", "evidence": "ref_entity_type = \"character_nonhuman\" if is_null_outlook else entity.get(\"entity_type\", \"character\")", "line_end": 119, "line_start": 95, "recommended_fix": "Explicitly define entity sub-types (like 'nonhuman') in the entity metadata or SOT instead of inferring them from ID patterns.", "severity": "P2", "why_problematic": "Semantic classification of an entity as 'nonhuman' is derived from a technical ID list (is_null_outlook / _o00_char_ids) rather than being an explicit attribute of the entity. This couples visual routing and prompt generation to ID naming conventions."}], "path": "backend/app/services/reference_phase1_service.py", "scan_kind": "python", "sha256": "2a1d55ccad09abddd63606381b8339bf867b25cf8ce9b0068350441eb69568a7"}
{"candidate_reason": "python scope discovery", "chunk_end": 142, "chunk_start": 1, "chunk_summary": "The file provides a service for embedding technical provenance metadata into PNG images and contains no semantic string judgments or scenario-specific pollution.", "duration_ms": 7095, "findings": [], "path": "backend/app/services/scene_provenance_service.py", "scan_kind": "python", "sha256": "2b9a4ed11b13c486c31e7f93e7581e4b83249650a34589be0d6dc2f71175870f"}
{"candidate_reason": "python scope discovery", "chunk_end": 212, "chunk_start": 1, "chunk_summary": "The service handles Phase 3 composite image generation but relies on hardcoded visual style fallbacks and string-pattern-based filtering of database assets to route reference images.", "duration_ms": 38600, "findings": [{"category": "semantic_string_judgment", "evidence": "ImageAsset.prompt_used.like(f\"%{composite_key}%\"), ~ImageAsset.prompt_used.like(\"[composite:%\")", "line_end": 114, "line_start": 98, "recommended_fix": "Introduce a structured 'asset_subtype' or 'origin_type' column in the ImageAsset model to explicitly track whether an image is a base reference, a composite, or an outlook-specific variant, rather than parsing the prompt string.", "severity": "P1", "why_problematic": "The service uses substring matching on the 'prompt_used' field to identify existing composites and to filter out non-base references. This drives reference attachment and generation routing based on string prefixes in a field that also contains natural language, which is brittle and bypasses structured metadata."}, {"category": "scenario_dependent_prompt", "evidence": "composite_prompt = \"Full body shot, standing pose, plain neutral background. Dress the character in the outfit shown in the reference images.\"", "line_end": 162, "line_start": 162, "recommended_fix": "Move the fallback prompt to a centralized configuration or template system that can be adjusted per-project or per-style.", "severity": "P1", "why_problematic": "Hardcodes specific visual composition (full body, standing pose) and style (plain neutral background) as a fallback. These visual decisions should be driven by a style SOT or a configurable template rather than being embedded in the service logic, as they bias the output of all composite generations to a specific pose/background."}], "path": "backend/app/services/reference_phase3_service.py", "scan_kind": "python", "sha256": "65ab25d190edfa3da7822ea16b37be88494cad9d4717c445bbd0ec0c6b1b8458"}
{"candidate_reason": "python scope discovery", "chunk_end": 975, "chunk_start": 1, "chunk_summary": "No actionable findings; the service acts as a facade and coordinator, delegating semantic logic to specialized modules and using technical metadata for routing.", "duration_ms": 17793, "findings": [], "path": "backend/app/services/scene_image_service.py", "scan_kind": "python", "sha256": "3ad11a1143a4a45f872c2d94089db0ad5de8b64de34f1fcddf73f12d1994a4b0"}
{"candidate_reason": "python scope discovery", "chunk_end": 222, "chunk_start": 1, "chunk_summary": "The ShotSelectionService manages shot selection state and checkpoint updates using structured indices and technical metadata with no actionable findings.", "duration_ms": 8285, "findings": [], "path": "backend/app/services/shot_selection_service.py", "scan_kind": "python", "sha256": "949ccd4bffcdf1831d462528144038395e6cadd0528a395e37518505d2b3ac86"}
{"candidate_reason": "python scope discovery", "chunk_end": 102, "chunk_start": 1, "chunk_summary": "The file implements a scene validation service that uses an external LVM to verify if generated images contain the required entities, using a hardcoded score threshold to mutate scene status.", "duration_ms": 15041, "findings": [{"category": "semantic_string_judgment", "evidence": "if score < 60: ... status = \"needs_fix\"", "line_end": 97, "line_start": 93, "recommended_fix": "Move the validation threshold to a project-level configuration or a structured validation policy SOT.", "severity": "P1", "why_problematic": "A hardcoded numeric threshold (60) is used to decide the semantic 'needs_fix' status of a scene. This logic forces a specific quality judgment across all projects and scenarios without allowing for project-specific quality standards or world-rule sensitivity."}], "path": "backend/app/services/scene_validation_service.py", "scan_kind": "python", "sha256": "20fc23378e4105db86ea78ec23e616b951d01734bba5094647e060779a1eae9f"}
{"candidate_reason": "python scope discovery", "chunk_end": 201, "chunk_start": 1, "chunk_summary": "The SnapshotService handles technical checkpoint versioning and state restoration without any scenario-specific logic or semantic string judgment.", "duration_ms": 4919, "findings": [], "path": "backend/app/services/snapshot_service.py", "scan_kind": "python", "sha256": "c63bfd39afaf8532eedaf1a5265d07c484d69e6b35868363721b53e16b9cf503"}
{"candidate_reason": "python scope discovery", "chunk_end": 211, "chunk_start": 1, "chunk_summary": "No actionable findings; the service handles technical orchestration, task locking, and schema versioning without making semantic story or visual decisions.", "duration_ms": 6231, "findings": [], "path": "backend/app/services/step_execution_service.py", "scan_kind": "python", "sha256": "4041e2063fde5752e15e0cef31152028a2fa0a25dfd62db7100f88d9d5d0ab2e"}
{"candidate_reason": "python scope discovery", "chunk_end": 155, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 3062, "findings": [], "path": "backend/app/services/user_service.py", "scan_kind": "python", "sha256": "5ecb98097bdc112cf9cc8692a1822e3c383e9578b7b925a59b7d71b047aa933e"}
{"candidate_reason": "python scope discovery", "chunk_end": 135, "chunk_start": 1, "chunk_summary": "The service provides a read-model for pipeline steps, handling technical status routing and metadata aggregation without scenario-specific logic or semantic string judgments.", "duration_ms": 6336, "findings": [], "path": "backend/app/services/step_readmodel_service.py", "scan_kind": "python", "sha256": "b5a855b0ed4d02835ae020c4bbde363f6546a9ae5095af948e6d0a2ce55a2051"}
{"candidate_reason": "python scope discovery", "chunk_end": 61, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 4034, "findings": [], "path": "backend/app/startup/default_users.py", "scan_kind": "python", "sha256": "be84724df19a13f57579bd6f5ecf50a68c89cf7a07e11ca22e64e0bc6336f825"}
{"candidate_reason": "python scope discovery", "chunk_end": 3, "chunk_start": 1, "chunk_summary": "No actionable findings; the file contains only a standard technical version string.", "duration_ms": 2406, "findings": [], "path": "backend/app/version.py", "scan_kind": "python", "sha256": "8a74b49cf200d288fd2e6ee89692f5efa767192e7a461fbd9b84fd4410ec70ff"}
{"candidate_reason": "python scope discovery", "chunk_end": 170, "chunk_start": 1, "chunk_summary": "The file is a utility for serializing structured visual context data into markdown for LLM prompts and includes a language detection helper based on character ranges; no actionable findings were identified.", "duration_ms": 14086, "findings": [], "path": "backend/app/services/visual_context_helper.py", "scan_kind": "python", "sha256": "f8775f56fa6cf6eaee7a434885d8586928b4e0e5f2eb0bfa31fa815ddb2a7749"}
{"candidate_reason": "python scope discovery", "chunk_end": 1027, "chunk_start": 1, "chunk_summary": "The service handles reference image resolution and prompt rewriting, but contains legacy name-based parsing, hardcoded semantic state checks for character status, and scenario-specific prompt instructions for handling dead or unconscious bodies.", "duration_ms": 46112, "findings": [{"category": "semantic_string_judgment", "evidence": "for match in _re.finditer(r'\\[\\[([^\\]]+)\\]\\+\\[([^\\]]+)\\]\\]', t2i_prompt):", "line_end": 426, "line_start": 425, "recommended_fix": "Deprecate the legacy bracketed name pattern in favor of the structured C##O## ID system or a dedicated reference attachment SOT.", "severity": "P1", "why_problematic": "This legacy pattern extracts character and outlook names directly from the prompt string to resolve references. This is a pattern-based semantic judgment on open-world story text that bypasses structured IDs."}, {"category": "semantic_string_judgment", "evidence": "if outlook_name == \"미지정\":", "line_end": 444, "line_start": 444, "recommended_fix": "Use a null value or a specific enum constant from the outlook SOT instead of a natural language string check.", "severity": "P1", "why_problematic": "Hardcoded Korean string check ('unspecified') used to route reference resolution logic. This is a domain-specific semantic classifier embedded in code."}, {"category": "blind_string_mutation", "evidence": "text_map[ck] = f\"{char_desc}, wearing {outfit_desc}\"", "line_end": 557, "line_start": 557, "recommended_fix": "Move relationship description to a template driven by the entity type or a structured world-rule SOT.", "severity": "P2", "why_problematic": "Blindly assumes the relationship between a character and an outlook is always 'wearing'. This is a visual semantic decision made via string concatenation."}, {"category": "semantic_string_judgment", "evidence": "in (\"unconscious\", \"dead\", \"severely_injured\")", "line_end": 989, "line_start": 932, "recommended_fix": "Define character states in a central registry or enum and use those constants to drive reference selection.", "severity": "P1", "why_problematic": "Hardcoded list of semantic character states used to drive visual routing (attaching state variants) and prompt labeling. These are domain tropes that should be defined in a structured SOT."}, {"category": "scenario_dependent_prompt", "evidence": "Keep motionless figures (dead/unconscious bodies) exactly as they are.", "line_end": 938, "line_start": 936, "recommended_fix": "Abstract background interpretation rules into a structured prompt-template system driven by the scene's semantic metadata.", "severity": "P1", "why_problematic": "The prompt instructions contain specific logic for handling 'dead/unconscious bodies' and 'human silhouettes' based on hardcoded story-state branches. This couples the service to specific scenario tropes."}], "path": "backend/app/services/scene_reference_service.py", "scan_kind": "python", "sha256": "053a42a8eb51b29dd818ab455f9c8589589f247774cc7050a428f2ba7d305a66"}
{"candidate_reason": "python scope discovery", "chunk_end": 768, "chunk_start": 1, "chunk_summary": "The file implements scene variation services, including variant selection, recommendation, and generation using i2i editors and fal.ai, with no actionable semantic string judgment or scenario pollution found.", "duration_ms": 40056, "findings": [], "path": "backend/app/services/scene_variation_service.py", "scan_kind": "python", "sha256": "f4b1b2cf9b8c20659fbf47b577739901ff318e0dd6f28a546429a564772354d9"}
{"candidate_reason": "python scope discovery", "chunk_end": 99, "chunk_start": 1, "chunk_summary": "No actionable findings; the script is a technical utility for managing prompt file versions using directory structures and git commands without semantic logic.", "duration_ms": 3213, "findings": [], "path": "backend/scripts/archive_prompts.py", "scan_kind": "python", "sha256": "68f7087ca8084f080df87bee035a9ebd4f3537bffa0399974b041ec08ebce046"}
{"candidate_reason": "python scope discovery", "chunk_end": 526, "chunk_start": 1, "chunk_summary": "The file implements a multi-turn entity extraction pipeline using Gemini and GPT, but contains hardcoded semantic pruning logic and embedded prompt instructions.", "duration_ms": 274839, "findings": [{"category": "semantic_string_judgment", "evidence": "e.get(\"importance\") == \"none\" and int(e.get(\"appearances\", 0)) < 2", "line_end": 196, "line_start": 193, "recommended_fix": "Move the pruning logic into the LLM prompt instructions or use a structured importance score (integer) with a configurable threshold in the system settings.", "severity": "P1", "why_problematic": "This logic prunes entities from the visual generation pipeline based on a hardcoded string literal ('none') and a count heuristic. It makes a critical decision about story membership and visual presence using a semantic label returned by an LLM, which is fragile and should be handled by structured rules or LLM-driven filtering rather than hardcoded Python gates."}, {"category": "scenario_dependent_prompt", "evidence": "기존 요소가 이번 에피소드에도 등장하면 이름을 동일하게 유지하세요.", "line_end": 289, "line_start": 286, "recommended_fix": "Move this instruction into the base system prompt or the specific turn templates in the prompts directory.", "severity": "P2", "why_problematic": "This is a hardcoded story continuity instruction embedded directly in the Python logic. It bypasses the externalized prompt system (PROMPT_DIR) and pollutes the code with scenario-specific rules about naming and episode consistency."}, {"category": "scenario_dependent_prompt", "evidence": "system_prompt=\"시나리오 분석 전문가. 요소별 시각적 상세 정보(즉, 외모 외형 보이는 부분 중심)를 관련성 있는 부분을 최대한 많이 추출한다.\"", "line_end": 370, "line_start": 370, "recommended_fix": "Externalize this system prompt into a markdown file in the PROMPT_DIR and load it using the existing _load_turn_prompt or _load_system_prompt utilities.", "severity": "P2", "why_problematic": "The system prompt for the entity detail batch extraction is hardcoded in the Python call. This bypasses the versioned prompt management system used for other turns in the same file, making it harder to tune extraction behavior without code changes."}], "path": "backend/app/modules/pipeline/entity_extractor_v2_legacy.py", "scan_kind": "python", "sha256": "491a07d32324e43bc3d0823cf4b20d94b9635a232efd731ff7f180a324f8c123"}
{"candidate_reason": "python scope discovery", "chunk_end": 95, "chunk_start": 1, "chunk_summary": "No actionable findings; the script is a technical maintenance utility for monitoring and resetting stale job statuses using infrastructure metadata.", "duration_ms": 3867, "findings": [], "path": "backend/scripts/audit_stale_running.py", "scan_kind": "python", "sha256": "0bfb86be58d0540df97cb4c06c7a87e6335f95f3db82daf487e5138552341049"}
{"candidate_reason": "python scope discovery", "chunk_end": 117, "chunk_start": 1, "chunk_summary": "The script is a maintenance utility for force-resuming a specific project dispatch and contains no actionable semantic string judgments or prompt pollution.", "duration_ms": 8372, "findings": [], "path": "backend/scripts/_quarantined/dispatch_pid_80f62523.py", "scan_kind": "python", "sha256": "1731f4c6ff8e6c2370f40ab3478e09e6d745f93b5632e8cfe9386e54b5f8ec9f"}
{"candidate_reason": "python scope discovery", "chunk_end": 63, "chunk_start": 1, "chunk_summary": "No actionable findings; this is a standard infrastructure utility for bootstrapping default user accounts and does not interact with scenario analysis or visual generation logic.", "duration_ms": 4349, "findings": [], "path": "backend/scripts/bootstrap_default_users.py", "scan_kind": "python", "sha256": "3d9c2dc63255eacaecfd529b3fbee085d5b7afbf07eb6374f1a6df913a9ebcac"}
{"candidate_reason": "python scope discovery", "chunk_end": 90, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 2822, "findings": [], "path": "backend/scripts/cleanup_checkpoint_archives.py", "scan_kind": "python", "sha256": "2e48a037ad73ad7a65fb789bfee90c6ba78a23b93d725fd63aeb5cd78ff6307f"}
{"candidate_reason": "python scope discovery", "chunk_end": 177, "chunk_start": 1, "chunk_summary": "The script is a technical utility for documenting and validating the pipeline's step manifest and contains no actionable findings regarding scenario pollution or open-world semantic judgment.", "duration_ms": 6535, "findings": [], "path": "backend/scripts/dump_step_manifest.py", "scan_kind": "python", "sha256": "10ca16329cb26bc26991e55a379d4118da356601fe1628332af50fd7f4e9be34"}
{"candidate_reason": "python scope discovery", "chunk_end": 167, "chunk_start": 1, "chunk_summary": "The script contains hardcoded world-building attribute keys and scenario-specific prop/lighting instructions in the image generation prompt.", "duration_ms": 16767, "findings": [{"category": "scenario_dependent_code", "evidence": "for k in (\"stories\", \"primary_material\", ..., \"lighting_fixtures\", \"general_clutter_level\")", "line_end": 50, "line_start": 37, "recommended_fix": "Iterate over all keys in the canon object or use a schema-driven extraction method instead of a hardcoded list of strings.", "severity": "P1", "why_problematic": "Hardcodes specific architectural and interior attribute keys for extraction. This creates a maintenance burden and causes the script to ignore new or modified attributes in the environment canon SOT."}, {"category": "scenario_dependent_prompt", "evidence": "(weak floor lamp, faint old television glow if visible)", "line_end": 86, "line_start": 85, "recommended_fix": "Move specific prop and lighting descriptions to the environment canon or a separate style SOT rather than hardcoding them in the base prompt template.", "severity": "P1", "why_problematic": "Injects specific domestic props and lighting effects into the prompt regardless of the actual room type or canon description, biasing the visual generation toward a specific 'lived-in domestic' trope."}, {"category": "scenario_dependent_prompt", "evidence": "opposite the entry", "line_end": 62, "line_start": 62, "recommended_fix": "Remove specific spatial assumptions from the direction descriptions or derive them from the floor plan analysis.", "severity": "P2", "why_problematic": "Hardcodes a spatial relationship (South = opposite entry) that is scenario-dependent and may conflict with the actual floor plan reference provided."}], "path": "backend/scripts/experiment_360_interior.py", "scan_kind": "python", "sha256": "73fa4adf88bb3207f3e43d30885de503180089d563cb4ba3b8b43248770e1382"}
{"candidate_reason": "python scope discovery", "chunk_end": 181, "chunk_start": 1, "chunk_summary": "The script is a regression canary for reference contracts, but contains scenario-specific logic branching for 'prop carry' cases using hardcoded key suffixes.", "duration_ms": 21626, "findings": [{"category": "scenario_dependent_code", "evidence": "entry.get(\"expected_actual_ref_labels_p0\")", "line_end": 154, "line_start": 149, "recommended_fix": "Standardize the fixture schema to use a single field for expected references, or use a generic metadata field to indicate the state/phase instead of encoding it into the JSON key name.", "severity": "P2", "why_problematic": "The validation logic branches on a scenario-specific key suffix ('_p0') to handle 'prop carry' logic for specific scenes (S21), indicating that the test fixture schema and the validator are not scenario-agnostic."}], "path": "backend/scripts/canary_single_vs_batch_refs.py", "scan_kind": "python", "sha256": "b93a69efb195a1ec7c3db5cac5cfcfc5f3d489db9be04832dcd866cb9a6f7cec"}
{"candidate_reason": "python scope discovery", "chunk_end": 113, "chunk_start": 1, "chunk_summary": "The script contains hardcoded scenario-specific location descriptions, spatial layouts, and style instructions for 'L05' that should be externalized to a structured Source of Truth.", "duration_ms": 18117, "findings": [{"category": "scenario_dependent_prompt", "evidence": "LOCATION_DESC = (...) DIRECTIONS = { ... } (...) STYLE = (...)", "line_end": 64, "line_start": 19, "recommended_fix": "Move location descriptions, directional layouts, and scene-specific style parameters into a structured SOT (e.g., a JSON or DB-backed location registry) and parameterize the script to accept a location ID.", "severity": "P1", "why_problematic": "The script hardcodes specific story details for 'L05' (rooftop apartment), including its internal spatial layout (e.g., mapping 'shoe rack', 'television', and 'sink' to specific compass directions) and scene-specific lighting/style choices. This scenario-specific pollution biases the generation logic and should be managed in a structured World/Location SOT rather than being embedded in code."}], "path": "backend/scripts/experiment_bg_angles.py", "scan_kind": "python", "sha256": "49fe1f07654271bafb116d0315832cb0d381da90c99a3d36827defec1b89e3f9"}
{"candidate_reason": "python scope discovery", "chunk_end": 268, "chunk_start": 1, "chunk_summary": "The script contains hardcoded prompts with extensive scenario-specific visual and story details, including character IDs, specific props, and architectural layouts that should be managed via a structured Source of Truth.", "duration_ms": 17576, "findings": [{"category": "scenario_dependent_prompt", "evidence": "NEW_CHAIN_BG_PROMPT = ( ... \"single rooftop room (옥탑방)\" ... \"ONE small old CRT television\" ... )", "line_end": 79, "line_start": 55, "recommended_fix": "Move scenario-specific descriptions into a structured configuration or database (SOT) and use templates to assemble the prompt dynamically.", "severity": "P1", "why_problematic": "The prompt contains hardcoded, scenario-specific visual details such as specific props (CRT television), architectural types (옥탑방), and lighting styles. This pollutes the generation logic with specific story elements that should be dynamically injected from a structured world-state or SOT to ensure the pipeline remains scenario-agnostic."}, {"category": "scenario_dependent_prompt", "evidence": "PROMPT_A_ORIGINAL = ( ... \"[L05: A cramped modern Korean 옥탑방 ...\" ... \"C04O06 in a plain apron\" ... \"P06 rests rinsed beside the sink\" ... )", "line_end": 98, "line_start": 82, "recommended_fix": "Parameterize the prompt to accept character/prop descriptions and scene context from a structured scenario analysis output rather than hardcoding them in the script.", "severity": "P1", "why_problematic": "The prompt contains hardcoded character IDs (C04O06), prop IDs (P06), and specific scene actions/descriptions. This creates a tight coupling between the generation script and a specific scenario, which is a form of prompt pollution that biases the pipeline toward specific story instances."}], "path": "backend/scripts/experiment_chain_bg_floorplan_rebuild.py", "scan_kind": "python", "sha256": "86dd23714d3eb654d63a5eb58ae0f62df7e3a6350e6987284b6e35cc5f94f7e9"}
{"candidate_reason": "python scope discovery", "chunk_end": 291, "chunk_start": 1, "chunk_summary": "The script extracts locations and props from screenplays using a chaining LLM approach, but relies on exact string matching for entity identity and contains genre-specific prompt pollution.", "duration_ms": 41011, "findings": [{"category": "scenario_dependent_prompt", "evidence": "(아머+헬멧→아머), UI 화면, 에피소드당 5~10개 목표", "line_end": 58, "line_start": 52, "recommended_fix": "Move extraction heuristics and genre-specific examples to a project-level configuration or a structured rule SOT rather than hard-coding them in the base prompt.", "severity": "P1", "why_problematic": "The prompt contains hard-coded genre-specific examples (Armor/Helmet), specific prop exclusions (UI screens), and arbitrary heuristic constraints (3+ shots, 5-10 items). These bias the extraction process toward specific story types and may exclude valid elements in other genres."}, {"category": "llm_closed_list_instruction", "evidence": "위 목록에 없는 새로운 요소만 추가하세요.", "line_end": 190, "line_start": 190, "recommended_fix": "Extract all entities and perform deduplication in a post-processing step using an entity registry or a dedicated resolution prompt.", "severity": "P2", "why_problematic": "Instructs the LLM to perform semantic deduplication against a closed list of strings, which is unreliable for open-world entity discovery and should be handled by structured logic."}, {"category": "semantic_string_judgment", "evidence": "if name in existing_names: ... existing[\"shot_count\"] += new_sc", "line_end": 235, "line_start": 229, "recommended_fix": "Implement a canonical entity resolution step using fuzzy matching or a secondary LLM pass to unify entities before aggregating counts.", "severity": "P1", "why_problematic": "Entity identity and shot count aggregation are determined by exact string matching of names generated by the LLM. This is fragile in open-world scenarios where the LLM might use synonyms, different casing, or formatting variations for the same entity across different chunks."}], "path": "backend/experiments/entity_loc_prop_shots.py", "scan_kind": "python", "sha256": "511b0d53a6b0b1e26889771be6e99823762f4cef29c1e7c7b543564a4578c00e"}
{"candidate_reason": "python scope discovery", "chunk_end": 329, "chunk_start": 1, "chunk_summary": "The script contains hardcoded scenario-specific prompts and labels with embedded character/prop IDs and detailed visual descriptions that should be externalized to a structured SOT.", "duration_ms": 26643, "findings": [{"category": "scenario_dependent_prompt", "evidence": "FLOORPLAN_V2_PROMPT, CHAIN_BG_V2_PROMPT, PROMPT_A_ORIGINAL", "line_end": 138, "line_start": 56, "recommended_fix": "Refactor prompts into templates that accept parameters from a structured scenario-of-truth (SOT) or world-rule definition.", "severity": "P1", "why_problematic": "Prompts contain hardcoded scenario-specific details such as '옥탑방', specific furniture placement ('TV on left wall'), lighting styles ('muted yellow-gray'), and character/prop IDs ('C04O06', 'P06'). This couples the generation logic to a specific scene and should instead be driven by a structured SOT."}, {"category": "scenario_dependent_prompt", "evidence": "input_images labels", "line_end": 280, "line_start": 264, "recommended_fix": "Generate reference labels dynamically based on the same structured SOT used for the main prompts.", "severity": "P1", "why_problematic": "The labels provided to the Gemini model for reference images contain hardcoded semantic descriptions of the scene layout ('TV on left wall, sofa on right wall'), which duplicates scenario-specific logic and biases the model's interpretation of the references."}], "path": "backend/scripts/experiment_chain_bg_floorplan_v2.py", "scan_kind": "python", "sha256": "f9efd06f2f67ad427d826f22e51c52ba9755a92db1e12685852c6a8ba068dedb"}
{"candidate_reason": "python scope discovery", "chunk_end": 257, "chunk_start": 1, "chunk_summary": "The script contains hardcoded scenario-specific prompts and spatial layout descriptions for image generation, bypassing structured world-building data.", "duration_ms": 24261, "findings": [{"category": "scenario_dependent_prompt", "evidence": "FLOOR_PLAN_PROMPT = ( \"Top-down architectural floor plan diagram... Korean apartment... Left wall: a small CRT television... labeled 'TV'... )", "line_end": 75, "line_start": 55, "recommended_fix": "Define the floor plan layout in a structured format (e.g., JSON or a dedicated layout SOT) and generate the prompt programmatically from that data.", "severity": "P1", "why_problematic": "The spatial layout and object labeling are hardcoded as a natural language string. This creates a 'hidden' source of truth for the scene geometry that is not synchronized with the actual scenario or world-building database."}, {"category": "scenario_dependent_prompt", "evidence": "PROMPT_A_ORIGINAL = ( \"Photorealistic cinematic still. [L05: A cramped modern Korean 옥탑방... C04O06 in a plain apron... P06 rests rinsed beside the sink...\" )", "line_end": 94, "line_start": 78, "recommended_fix": "Use a template-based prompt generator that pulls character, prop, and location descriptions from a centralized SOT based on the provided IDs.", "severity": "P1", "why_problematic": "This prompt contains hardcoded character IDs (C04O06), prop IDs (P06), and location IDs (L05) along with specific narrative details. This is scenario pollution that should be handled by a prompt assembly pipeline using structured entity data."}, {"category": "scenario_dependent_prompt", "evidence": "\"spatial layout reference (floor plan, top-down) — use this to understand the room layout...\", \"background chain ref (interior_living_kitchen_day_normal for L05)\"", "line_end": 213, "line_start": 203, "recommended_fix": "Derive reference labels from the metadata of the attached assets (e.g., asset type, entity ID, and variant name).", "severity": "P2", "why_problematic": "Semantic labels for reference images are hardcoded with scenario-specific IDs (L05) and instructions. This logic should be part of the model's reference-handling protocol rather than hardcoded in the execution script."}], "path": "backend/scripts/experiment_chain_bg_with_floorplan.py", "scan_kind": "python", "sha256": "913e13f38e54ec971501c6a3161ad4df1e55970d63df39d4aaf271830aedea49"}
{"candidate_reason": "python scope discovery", "chunk_end": 441, "chunk_start": 1, "chunk_summary": "The script contains scenario-specific architectural examples in the LLM system prompt and hardcoded scenario IDs in the CLI help text, which biases the chain planner toward a specific 'rooftop room' context.", "duration_ms": 20399, "findings": [{"category": "llm_closed_list_instruction", "evidence": "\"small bedroom interior\", \"living-kitchen entry corner\", \"rooftop terrace overlook\", \"small bedroom doorway\", \"interior vs. rooftop terrace exterior\"", "line_end": 84, "line_start": 68, "recommended_fix": "Replace scenario-specific examples with abstract placeholders or move them to a scenario-specific 'guidance' field in the input context that is injected into the prompt dynamically.", "severity": "P1", "why_problematic": "The system prompt uses specific architectural and domestic tropes as examples to guide the LLM's shot clustering and anchor selection logic. This biases the model toward residential/rooftop scenarios and may result in poor performance or 'hallucinated' domestic anchors when processing non-residential environments (e.g., industrial, natural, or sci-fi)."}, {"category": "scenario_dependent_code", "evidence": "help=\"콤마 구분, 옥탑방 관련만: 'small_rooftop_room_interior,rooftop_terrace_and_entry'\"", "line_end": 346, "line_start": 346, "recommended_fix": "Use generic ID examples in the help text (e.g., 'plan_id_1,plan_id_2') to maintain the script's utility as a general-purpose planner.", "severity": "P2", "why_problematic": "The CLI help text contains hardcoded scenario-specific IDs and Korean labels ('옥탑방' - rooftop room), indicating the script is coupled to a specific project's data structure rather than being a generic pipeline tool."}], "path": "backend/scripts/experiment_chain_structure_planning.py", "scan_kind": "python", "sha256": "da1c366554fcad7497a7efc61e84642a7401440e0f93885db20a65f5ae2ae82e"}
{"candidate_reason": "python scope discovery", "chunk_end": 288, "chunk_start": 1, "chunk_summary": "The script's T2I system prompt contains hardcoded scenario-specific character/location examples and a closed list of semantic visual constraints that bias and restrict image generation.", "duration_ms": 25916, "findings": [{"category": "scenario_dependent_prompt", "evidence": "\"a Korean woman in her early 20s, slim, mid-length black hair, casual student look with a backpack\", \"rooftop dwelling\", \"rear courtyard\"", "line_end": 51, "line_start": 50, "recommended_fix": "Use generic placeholders for examples or move scenario-specific guidance to a structured world-rule SOT.", "severity": "P1", "why_problematic": "The prompt uses concrete character and location examples which pollute the LLM's context with specific story tropes, potentially biasing generation for unrelated scenarios towards these specific archetypes."}, {"category": "llm_closed_list_instruction", "evidence": "NO blood, NO broken glass, NO gore, NO explicit violence.", "line_end": 59, "line_start": 59, "recommended_fix": "Externalize visual content policies into a configurable SOT or style profile that can be adjusted per project.", "severity": "P1", "why_problematic": "Hardcoded negative constraints for visual elements act as a rigid semantic filter, preventing the pipeline from supporting scenarios that require these elements (e.g., action or thriller genres) without manual prompt editing."}], "path": "backend/scripts/experiment_chain_shot_render_temp.py", "scan_kind": "python", "sha256": "d3feaf4a136b36a1566e869d712f21a9d072dcbe619aeda373850e16e438344d"}
{"candidate_reason": "python scope discovery", "chunk_end": 373, "chunk_start": 1, "chunk_summary": "The script contains hardcoded scenario-specific prompts and multi-modal input labels that define location layouts, room names, and prop descriptions, bypassing structured world-building data.", "duration_ms": 37339, "findings": [{"category": "scenario_dependent_prompt", "evidence": "MAIN BEDROOM (안방 — mother's room...), DAUGHTER'S BEDROOM (수리영 방...), C04O06 in a plain apron, P01 clenched low at her side", "line_end": 184, "line_start": 54, "recommended_fix": "Move location layouts, room definitions, and character/prop states to a structured SOT (e.g., a YAML or JSON world-state) and generate these prompts using templates that pull from that data.", "severity": "P1", "why_problematic": "These prompts hardcode specific location layouts (L05), room names, character actions, and prop states. This bypasses the structured world-building and scenario analysis SOT, making the pipeline dependent on manual string updates for specific scenes and locations rather than using a generalized layout engine or structured data."}, {"category": "scenario_dependent_prompt", "evidence": "object P01 (small bloodstained photograph), object P04 (backpack with doll)", "line_end": 337, "line_start": 309, "recommended_fix": "Retrieve entity descriptions and labels from a centralized entity database or SOT using the entity IDs (C##, P##) instead of hardcoding them in the script.", "severity": "P1", "why_problematic": "The labels passed to the LLM as part of the multi-modal input contain hardcoded semantic descriptions of props and characters. This couples the pipeline logic to specific story details and prevents the system from scaling to arbitrary scenarios without code changes."}], "path": "backend/scripts/experiment_chain_bg_floorplan_v3_tworoom.py", "scan_kind": "python", "sha256": "42a42787d1aee150c674d15e606ed4731dcd10a0dc8205483020a81196b41c1a"}
{"candidate_reason": "python scope discovery", "chunk_end": 352, "chunk_start": 1, "chunk_summary": "The script contains hardcoded scenario-specific scene/location IDs and a system prompt heavily polluted with concrete story names, room layouts, and event-driven logic.", "duration_ms": 15686, "findings": [{"category": "scenario_dependent_code", "evidence": "OKTAP_SCENES = [4, 5, 10, 11, 12, 13, 14, 17, 18, 25, 27]", "line_end": 48, "line_start": 47, "recommended_fix": "Pass scene and location filters as parameters or fetch them from a structured scenario manifest.", "severity": "P1", "why_problematic": "Hardcoding specific scene and location indices for a single scenario ('옥탑방') prevents the script from being used as a generic floor-plan generation tool for other story segments."}, {"category": "scenario_dependent_prompt", "evidence": "SYSTEM_PROMPT = \"...Suriyoung · 수리영... 옥탑방 실내(거실·주방·민숙 방·수리영 방·안방)... S12 (엄마 시신 발견)...\"", "line_end": 204, "line_start": 170, "recommended_fix": "Generalize the system prompt to handle arbitrary locations and characters, and move story-specific selection logic (like prioritizing murder scenes) into a configuration or a separate analysis step.", "severity": "P1", "why_problematic": "The system prompt contains concrete character names, specific room layouts, and hardcoded story logic (e.g., identifying S12 as a murder scene). This pollutes the LLM's reasoning with scenario-specific knowledge that should be derived from the provided context."}, {"category": "scenario_dependent_prompt", "evidence": "\"## 옥탑방 관련 전체 컨텍스트 (금월도 1부)\\n\\n\"", "line_end": 212, "line_start": 212, "recommended_fix": "Inject the project/scenario title from the metadata provided in the context object.", "severity": "P2", "why_problematic": "Hardcoded project name and scenario part in the user prompt assembly."}], "path": "backend/scripts/experiment_floor_plan.py", "scan_kind": "python", "sha256": "dc8f469fa610967f3a2c40209052afc37b5435890fc8a887831572101c2054ed"}
{"candidate_reason": "python scope discovery", "chunk_end": 637, "chunk_start": 1, "chunk_summary": "The script contains hardcoded scenario-specific keywords for scene filtering and significant prompt pollution with 'Rooftop' scenario examples and labels.", "duration_ms": 25479, "findings": [{"category": "semantic_string_judgment", "evidence": "extra_keywords = extra_keywords or [\"옥탑\", \"옥상\", \"rooftop\"]", "line_end": 189, "line_start": 189, "recommended_fix": "Pass the scope keywords as an argument from a configuration file or use structured location IDs/tags from the scenario SOT to determine scope.", "severity": "P1", "why_problematic": "Hardcoded scenario-specific keywords are used to filter scenes into the analysis scope via substring matching. This makes the logic dependent on specific story vocabulary rather than structured metadata or IDs."}, {"category": "scenario_dependent_prompt", "evidence": "[\"heavily-ransacked\", \"water-tank corner\", \"rooftop_terrace_night\", \"courtyard_stairs_approach\"]", "line_end": 115, "line_start": 45, "recommended_fix": "Replace scenario-specific examples with generic placeholders or move them to the dynamic user prompt as 'few-shot' examples derived from the current scenario's SOT.", "severity": "P1", "why_problematic": "The system prompt contains numerous concrete examples of rooms, props, and plot-specific states (e.g., 'ransacked') that are specific to the 'Rooftop' scenario. This pollutes the LLM's context and biases it toward specific tropes or layouts that may not apply to other scenarios."}, {"category": "scenario_dependent_prompt", "evidence": "\"== SHOTS (rooftop-related, full inventory) ==\"", "line_end": 334, "line_start": 333, "recommended_fix": "Use generic labels like 'SHOTS IN SCOPE' or inject the location name dynamically from the context metadata.", "severity": "P2", "why_problematic": "The user prompt assembly uses hardcoded labels that assume the scenario is 'rooftop-related', which is scenario-specific pollution in the prompt structure."}], "path": "backend/scripts/experiment_chain_structure_planning_gpt.py", "scan_kind": "python", "sha256": "cb849b35582d1846db72e923420761502445698e021884938156497cad179286"}
{"candidate_reason": "python scope discovery", "chunk_end": 262, "chunk_start": 1, "chunk_summary": "The script contains significant scenario-specific pollution in the system prompt and hardcoded scene/location filters for a specific story context.", "duration_ms": 17066, "findings": [{"category": "scenario_dependent_code", "evidence": "OKTAP_SCENES = [4, 5, 10, 11, 12, 13, 14, 17, 18, 25, 27]", "line_end": 52, "line_start": 51, "recommended_fix": "Parameterize the scene and location filters or derive them from the input context metadata.", "severity": "P2", "why_problematic": "Hardcoded scene and location IDs are used to filter context for analysis, which couples the script logic to a specific story episode and prevents reuse for other scenarios."}, {"category": "scenario_dependent_prompt", "evidence": "SYSTEM_PROMPT = \"\"\"... 민숙 방 ... 수리영 방 ... 시체 발견 위치 ... 찻잔 2개, 하나 엎어짐 ...\"\"\"", "line_end": 165, "line_start": 114, "recommended_fix": "Move scenario-specific details into the structured context (ctx) and keep the system prompt focused on the task of architectural translation and layout rules.", "severity": "P1", "why_problematic": "The system prompt and user message assembly contain hardcoded character names, specific props (e.g., 'overturned teacup'), and plot-specific spatial details (e.g., 'body discovery location'). This pollution biases the LLM and prevents the prompt from being used as a generic architectural analyzer for different scenarios."}], "path": "backend/scripts/experiment_floor_plan_compare.py", "scan_kind": "python", "sha256": "783b4c7cab5fe95ce342b5971bc1a168463c1b77cbd07c61ef619777d9290fb9"}
{"candidate_reason": "python scope discovery", "chunk_end": 531, "chunk_start": 1, "chunk_summary": "The script contains hardcoded scenario-specific keywords for scene scope detection and scenario-dependent style/content constraints within the LLM system prompt.", "duration_ms": 28891, "findings": [{"category": "semantic_string_judgment", "evidence": "extra_keywords = extra_keywords or [\"옥탑\", \"옥상\", \"rooftop\"] ... if any(kw in h or kw in txt for kw in extra_keywords):", "line_end": 117, "line_start": 81, "recommended_fix": "Remove hardcoded keywords. Scope detection should rely on structured metadata (e.g., tags or explicit scope IDs) provided in the context.json or step2_plan_specs.json.", "severity": "P1", "why_problematic": "The script uses a hardcoded list of scenario-specific place names ('rooftop' in Korean/English) to perform substring matching on scene headings and text to determine if a scene is 'in scope'. This is a pattern-based semantic judgment that routes processing based on specific story content."}, {"category": "scenario_dependent_prompt", "evidence": "35mm cinematic still aesthetic ... Eye-level approx 1.6m ... NO people, NO blood, NO broken glass, NO action.", "line_end": 54, "line_start": 50, "recommended_fix": "Move style constraints and content filters to a structured style/rule SOT (Source of Truth) that is injected into the prompt based on the specific scenario's requirements.", "severity": "P1", "why_problematic": "The system prompt contains hardcoded style specifications (35mm, 1.6m height) and a negative constraint list of specific scenario tropes ('blood', 'broken glass', 'action'). These constraints bias the visual generation toward a specific genre/project and should not be hardcoded in the pipeline prompt."}], "path": "backend/scripts/experiment_chain_structure_render_gpt.py", "scan_kind": "python", "sha256": "5b08d181695247f9dd1311df61e62d9edc11e0a67a39ea8ea7cd91e6d19fd1fd"}
{"candidate_reason": "python scope discovery", "chunk_end": 362, "chunk_start": 1, "chunk_summary": "The script uses substring matching for visual reference routing and contains hardcoded style/content constraints in the T2I prompt generation logic.", "duration_ms": 36765, "findings": [{"category": "semantic_string_judgment", "evidence": "if bp[\"id\"] in gn or gn in bp[\"id\"]:", "line_end": 128, "line_start": 128, "recommended_fix": "Replace substring matching with an explicit 'base_plan_id' field in the group or node definition within the input JSON.", "severity": "P1", "why_problematic": "Uses substring matching between group names and base plan IDs to determine which floor plan to use as a visual reference. This heuristic is prone to collisions or misses in open-world scenarios where names might overlap or be ambiguous."}, {"category": "scenario_dependent_prompt", "evidence": "35mm cinematic still aesthetic, Eye-level approx 1.6m, NO people, NO blood, NO broken glass", "line_end": 57, "line_start": 53, "recommended_fix": "Inject these constraints from a structured Style/World SOT or configuration object instead of hardcoding them in the prompt string.", "severity": "P1", "why_problematic": "Hardcodes specific visual style, camera parameters, and content exclusions directly into the system prompt. This prevents the pipeline from being used for scenarios with different aesthetic requirements or content needs."}, {"category": "scenario_dependent_prompt", "evidence": "match its wall finish, floor, ceiling, lighting tone, and color palette", "line_end": 59, "line_start": 58, "recommended_fix": "Generalize the attribute list or derive it from the node's 'kind' or 'spatial' context.", "severity": "P2", "why_problematic": "The prompt assumes an indoor architectural context by explicitly listing 'wall, floor, ceiling'. This biases the LLM and may produce nonsensical prompts for outdoor or non-architectural scenarios."}], "path": "backend/scripts/experiment_chain_structure_render.py", "scan_kind": "python", "sha256": "18bc16c35b45c068ce7b95afa906d933081f3d4c7748353cb34ba5f01d19590f"}
{"candidate_reason": "python scope discovery", "chunk_end": 184, "chunk_start": 1, "chunk_summary": "The script contains hardcoded scenario-specific prompts (PROMPT_E, PROMPT_F) that include specific cultural tropes, architectural details, and location-specific props.", "duration_ms": 19210, "findings": [{"category": "scenario_dependent_prompt", "evidence": "PROMPT_F = ( \"옥탑방 거실 내부...\" ... ) and PROMPT_E = ( \"Korean rooftop room (옥탑방)...\" ... )", "line_end": 105, "line_start": 76, "recommended_fix": "Extract scenario-specific descriptors into a structured configuration or World SOT that can be injected into prompts dynamically.", "severity": "P1", "why_problematic": "These prompts contain hardcoded scenario-specific details such as 'rooftop room', 'Seoul', 'vinyl-finish wallpaper', and 'fluorescent ceiling light'. These are domain-specific tropes and props that should be managed via a structured World SOT or visual ruleset rather than being scattered in prompt strings, especially as they contradict the script's own goal of avoiding hardcoded scenario words (line 10)."}], "path": "backend/scripts/experiment_fp_ref_bias.py", "scan_kind": "python", "sha256": "ef1a8d991f59165f43159424370fc143bd21d738c8f6509ed4f12f37012f7d3a"}
{"candidate_reason": "python scope discovery", "chunk_end": 366, "chunk_start": 1, "chunk_summary": "The script contains hardcoded stylistic details and genre-specific negative constraints within the LLM system prompt and image generation logic.", "duration_ms": 26075, "findings": [{"category": "scenario_dependent_prompt", "evidence": "35mm cinematic still aesthetic ... lived-in texture (worn wallpaper, dust, scuff) ... no blood, no broken glass", "line_end": 79, "line_start": 70, "recommended_fix": "Move stylistic descriptors and negative constraints to the environment_canon or visual_domain fields in the input JSON and inject them dynamically into the prompt.", "severity": "P1", "why_problematic": "The prompt hardcodes specific visual textures, lighting styles, and genre-specific negative constraints (e.g., blood, broken glass) that bias the model toward a gritty aesthetic. These details should be provided by the structured scenario context (SOT) rather than fixed in the pipeline code."}, {"category": "scenario_dependent_prompt", "evidence": "overall material aging — same room, just rotated", "line_end": 341, "line_start": 337, "recommended_fix": "Generalize the consistency instruction to refer to 'material properties' or derive specific attributes from the atmosphere_canon.", "severity": "P2", "why_problematic": "The image generation loop hardcodes 'material aging' as a consistency requirement, which forces a specific 'worn' look even if the scenario describes a clean or modern environment."}], "path": "backend/scripts/experiment_gemini_45deg_chain.py", "scan_kind": "python", "sha256": "1b0bbb10904b3aa86124216f1d7e5c23fe6b67365098094589b56dd3ac9a1f4a"}
{"candidate_reason": "python scope discovery", "chunk_end": 1985, "chunk_start": 1, "chunk_summary": "The file implements a multi-step floor plan and photo generation pipeline with several instances of pattern-based semantic judgment and trope-specific prompt pollution.", "duration_ms": 33531, "findings": [{"category": "semantic_string_judgment", "evidence": "grep_unsafe(payload, words), grep_scenario(payload, banned)", "line_end": 1033, "line_start": 1025, "recommended_fix": "Replace substring matching with a dedicated LLM-based moderation check or structured attribute extraction to verify compliance.", "severity": "P1", "why_problematic": "Uses substring checks ('in text') against hardcoded phrase lists to determine if LLM-generated story or visual content is 'safe' or 'scenario-compliant'. This logic directly triggers retries (fail/pass behavior) based on open-world natural language patterns."}, {"category": "scenario_dependent_prompt", "evidence": "\"doll\" + \"backpack\" + \"dim bedroom\" + \"stain/footprint\"", "line_end": 493, "line_start": 491, "recommended_fix": "Move specific trope or safety examples to a structured visual_rules SOT that can be injected dynamically or handled by a separate validator.", "severity": "P1", "why_problematic": "The system prompt contains highly specific trope combinations used as negative examples for safety. This pollutes the prompt with scenario-specific imagery that biases the model's visual generation for arbitrary future scenarios."}, {"category": "semantic_string_judgment", "evidence": "keys.append(v.split()[0].lower()), k not in prompt", "line_end": 1257, "line_start": 1252, "recommended_fix": "Use an LLM-based validator to verify that the generated prompt adheres to the environment canon, or compare structured attributes extracted from the prompt.", "severity": "P2", "why_problematic": "Performs brittle validation of semantic coverage by checking if the first word of a canon attribute exists as a substring in the generated natural language prompt."}, {"category": "semantic_string_judgment", "evidence": "any(w in text for w in [\"no people\", \"empty room\", ...])", "line_end": 1272, "line_start": 1269, "recommended_fix": "Use structured output for negative prompts or an LLM-based validator to check for the presence of required visual constraints.", "severity": "P2", "why_problematic": "Validates the presence of visual constraints in generated prompts using a closed list of substrings. This is fragile and fails to account for semantic variations in natural language instructions."}], "path": "backend/scripts/experiment_floor_plan_v4.py", "scan_kind": "python", "sha256": "b3c71ddd8b2b11039b2afb23f127342ad4f06d5d15b92f42568ebbca19b69eab"}
{"candidate_reason": "python scope discovery", "chunk_end": 406, "chunk_start": 1, "chunk_summary": "The script contains hardcoded visual style instructions and camera-to-compass mappings in the system prompt that bias the generation toward specific domestic scenarios and fixed orientations.", "duration_ms": 28054, "findings": [{"category": "scenario_dependent_prompt", "evidence": "eye-level approx 1.6m, slight wide angle ~28mm... soft natural daylight + dim domestic practicals", "line_end": 81, "line_start": 78, "recommended_fix": "Move these visual parameters to the 'spatial' or 'shot' context (SOT) and have the prompt reference the provided context instead of hardcoding them.", "severity": "P1", "why_problematic": "Hardcodes specific camera height, lens, and lighting style ('domestic practicals') into the system prompt. This pollutes the visual generation for scenarios that are not domestic or require different lighting/camera setups (e.g., night scenes, industrial settings), potentially conflicting with the 'visual_domain' or 'lighting' fields provided in the context."}, {"category": "scenario_dependent_prompt", "evidence": "cam_0 facing 0° (toward the wall labeled NORTH on the plan) ... cam_90 facing 90° clockwise from cam_0 (toward the wall labeled EAST)", "line_end": 68, "line_start": 65, "recommended_fix": "Define camera orientations and their relation to the plan's coordinate system in the input context (step1_spatial.json) rather than hardcoding the mapping in the system prompt.", "severity": "P2", "why_problematic": "Hardcodes a fixed mapping between camera indices and compass directions. This assumes the plan is oriented with North at 0 degrees and that the scenario requires exactly these 45-degree increments, which should be derived from the plan's metadata or spatial SOT."}, {"category": "scenario_dependent_prompt", "evidence": "Match its wall finish, floor finish, ceiling, lighting tone, color palette, and overall material aging — same room, just rotated.", "line_end": 379, "line_start": 374, "recommended_fix": "Parameterize consistency instructions or move them to a structured 'generation_strategy' field in the input context.", "severity": "P2", "why_problematic": "Hardcoded consistency instructions for sequential rotation steps. This logic is specific to the '45deg' experiment and may not apply to other view generation strategies, yet it is injected as a raw string mutation during prompt assembly."}], "path": "backend/scripts/experiment_gemini_redrawn_plan_45deg.py", "scan_kind": "python", "sha256": "49054091039d61ee29d2bef43d34df887dac42853e45ea03b64142fa2b115cc5"}
{"candidate_reason": "python scope discovery", "chunk_end": 663, "chunk_start": 1, "chunk_summary": "The script contains scenario-specific pollution in system prompts and delegates deterministic routing and semantic sanitization logic to the LLM using hardcoded phrase lists.", "duration_ms": 43699, "findings": [{"category": "scenario_dependent_prompt", "evidence": "\"인천 변두리 다세대 빌라\"", "line_end": 112, "line_start": 111, "recommended_fix": "Remove specific geographic or scenario names from the system prompt and use generic placeholders or few-shot examples.", "severity": "P2", "why_problematic": "The system prompt includes a specific Korean location example ('Incheon outskirts multi-family villa') to guide abstraction. This introduces scenario-specific pollution into a prompt explicitly labeled as 'scenario-independent' in line 1."}, {"category": "llm_closed_list_instruction", "evidence": "avoid: dead, corpse, deceased, victim, body ... 사용: \"motionless seated figure marker\"", "line_end": 196, "line_start": 187, "recommended_fix": "Move safety-related semantic substitutions to a centralized SOT or a dedicated prompt-processing utility.", "severity": "P1", "why_problematic": "Hardcoded semantic mapping of story concepts (death, blood, violence) to sanitized visual markers to bypass moderation. This is a closed-list semantic classifier that mutates visual output and should be managed via a structured SOT for style and safety."}, {"category": "llm_closed_list_instruction", "evidence": "(a) 어느 base_plan_id 위에 overlay할지 spatial.space_groups의 covers_location_ids와 해당 씬 primary_location 매칭으로 결정", "line_end": 461, "line_start": 458, "recommended_fix": "Resolve the base_plan_id in Python by comparing location IDs before constructing the prompt, and pass only the relevant plan context to the LLM.", "severity": "P1", "why_problematic": "Delegates the routing decision (matching a shot to a specific floor plan ID) to LLM reasoning based on ID strings. This is a deterministic operation that should be handled in code to prevent hallucination-driven routing errors."}], "path": "backend/scripts/experiment_floor_plan_v3.py", "scan_kind": "python", "sha256": "0d437a91bf2b0771c98a6284465ca2ade8de31cec7642547b338eafcaa34baac"}
{"candidate_reason": "python scope discovery", "chunk_end": 328, "chunk_start": 1, "chunk_summary": "The script defines a GPT-vision based pipeline for generating a 4-view interior image chain, but contains hardcoded visual styles and narrative tropes in the system prompt that should be driven by structured scenario context.", "duration_ms": 20088, "findings": [{"category": "scenario_dependent_prompt", "evidence": "35mm cinematic still aesthetic, soft natural daylight + dim domestic practicals, realistic shadows", "line_end": 63, "line_start": 58, "recommended_fix": "Remove hardcoded style strings. Instruct the LLM to derive aesthetic and lighting parameters exclusively from the 'visual_domain', 'lighting', and 'environment_canon' sections provided in the user prompt.", "severity": "P1", "why_problematic": "Hardcodes specific lighting and camera style instructions. This overrides or biases the 'visual_domain' and 'lighting' specs passed in the user prompt, preventing the pipeline from supporting diverse scenario atmospheres (e.g., sci-fi, horror, or non-domestic settings)."}, {"category": "scenario_dependent_prompt", "evidence": "no blood, no broken glass, no action", "line_end": 72, "line_start": 72, "recommended_fix": "Move narrative and content constraints to a structured configuration or the 'atmosphere_canon' provided in the context.", "severity": "P1", "why_problematic": "Hardcodes specific narrative trope exclusions. While intended as a filter, these are scenario-dependent (e.g., a thriller or post-disaster scene might require broken glass). These constraints should be part of a structured world-rule SOT rather than hardcoded in the generation script."}, {"category": "llm_closed_list_instruction", "evidence": "kitchen_wall, bed_corner, entry_door_wall", "line_end": 53, "line_start": 53, "recommended_fix": "Use generic placeholders like 'wall_a' or 'corner_b' in examples, or instruct the LLM to generate labels based on the 'elements_meta' provided in the context.", "severity": "P2", "why_problematic": "Provides specific domestic room examples for label generation. This can bias the LLM's spatial reasoning and naming conventions towards residential layouts even when the input scenario might be a different environment type."}], "path": "backend/scripts/experiment_gpt_planned_4view_chain.py", "scan_kind": "python", "sha256": "376fcca421d658aa4aa6325bc3d58fd50110e988ee113e79110983f971c5f898"}
{"candidate_reason": "python scope discovery", "chunk_end": 348, "chunk_start": 1, "chunk_summary": "The script contains scenario-specific visual mappings and trope-based prompt instructions, such as hardcoded colors for specific story elements like blood, which should be driven by structured data.", "duration_ms": 12455, "findings": [{"category": "scenario_dependent_prompt", "evidence": "혈흔/액체 패턴: red dots (#FF0000)", "line_end": 154, "line_start": 148, "recommended_fix": "Pass the color-to-entity mapping as a dynamic context variable derived from the project's visual style guide or scene-specific entity list.", "severity": "P1", "why_problematic": "The system prompt hardcodes specific story tropes (blood/liquid) and entity roles (primary/secondary) to specific colors. This biases the LLM toward specific visual interpretations that may not apply to all scenes and should instead be provided as a structured style-map or SOT-driven legend."}, {"category": "llm_closed_list_instruction", "evidence": "C##은 사용 금지 — \"character 1 in cyan\", \"character 2 in magenta\" 식", "line_end": 159, "line_start": 159, "recommended_fix": "Allow the use of IDs in the prompt or provide a strict mapping of ID to Label in the user prompt context to ensure traceability.", "severity": "P2", "why_problematic": "This instruction forces the LLM to discard structured entity IDs (C##) in favor of ordinal natural language labels. This makes it difficult to programmatically map the generated prompt content back to specific entities in the database if the LLM's assignment of 'character 1' deviates from the input order."}], "path": "backend/scripts/experiment_line_art_composition.py", "scan_kind": "python", "sha256": "96512b16086c10b60dce6aca2174ccf012042deda281bf55895d5217490d75d8"}
{"candidate_reason": "python scope discovery", "chunk_end": 184, "chunk_start": 1, "chunk_summary": "The script contains hardcoded scenario-specific visual details and fallback descriptions in image generation prompts that bias the output toward a specific 'aged residential' aesthetic.", "duration_ms": 12629, "findings": [{"category": "scenario_dependent_prompt", "evidence": "Soft natural daylight from windows mixed with dim domestic practicals (weak floor lamp, faint television glow)... dust motes, scuff marks... aged residential interior", "line_end": 77, "line_start": 72, "recommended_fix": "Move these stylistic and environmental details into the 'canon' or 'spatial' data structure and inject them dynamically.", "severity": "P1", "why_problematic": "The prompt hardcodes specific lighting, props, and textures that belong to a specific story scenario, preventing the script from being used for arbitrary environments (e.g. sci-fi, clean modern, or outdoor-adjacent)."}, {"category": "scenario_dependent_prompt", "evidence": "soft natural daylight + dim practicals... aged residential interior, modest domestic clutter", "line_end": 101, "line_start": 97, "recommended_fix": "Derive lighting and atmosphere descriptions from the structured canon input instead of hardcoding them in the prompt template.", "severity": "P1", "why_problematic": "Redundant hardcoding of scenario-specific lighting and fallback descriptions in the quad-view prompt, biasing visual generation regardless of the input floor plan's actual context."}], "path": "backend/scripts/experiment_panorama_and_quad.py", "scan_kind": "python", "sha256": "4ae34c7fda740e261ff15568919fafb1464c8a9c20a26e4b10c3f2a61ac619a3"}
{"candidate_reason": "python scope discovery", "chunk_end": 231, "chunk_start": 1, "chunk_summary": "The script contains hardcoded scenario-specific visual styles, props, and fallback descriptions within prompt templates, as well as a hardcoded list of architectural attributes for canon extraction.", "duration_ms": 19977, "findings": [{"category": "scenario_dependent_prompt", "evidence": "\"aged residential interior, modest domestic clutter\"", "line_end": 93, "line_start": 93, "recommended_fix": "Replace the hardcoded fallback with a generic default or require the canon to be provided from a structured source of truth.", "severity": "P1", "why_problematic": "Hardcoded fallback scenario string biases the LLM towards a specific 'aged residential' setting when the input canon is missing, rather than using a generic or world-derived default."}, {"category": "scenario_dependent_prompt", "evidence": "\"Soft natural daylight from window mixed with dim domestic practicals (weak floor lamp, faint old television glow). Realistic shadows, subtle film grain, lived-in details (dust motes, scuff marks, subtle wear).\"", "line_end": 129, "line_start": 126, "recommended_fix": "Move visual style and atmospheric details into the environment canon or a separate style configuration object.", "severity": "P1", "why_problematic": "The prompt contains overly specific visual style instructions and props (TV glow, dust motes, scuff marks) that are scenario-dependent and should be emitted by a structured world/style SOT rather than being hardcoded in the pipeline logic."}, {"category": "scenario_dependent_prompt", "evidence": "\"aged residential interior, modest domestic clutter\"", "line_end": 135, "line_start": 135, "recommended_fix": "Centralize scenario defaults in a configuration file or SOT.", "severity": "P1", "why_problematic": "Duplicate of the hardcoded fallback scenario string found in the photorealistic prompt generator."}, {"category": "schema_or_enum_drift", "evidence": "for k in (\"stories\", \"primary_material\", \"exterior_stairs\", \"rooftop_features\", \"window_pattern\", \"weathering\"): ... for k in (\"wall_finish\", \"floor_finish\", \"ceiling\", \"lighting_fixtures\", \"general_clutter_level\")", "line_end": 53, "line_start": 40, "recommended_fix": "Iterate over the canon dictionary keys dynamically or use a shared schema definition to drive the extraction.", "severity": "P2", "why_problematic": "The script hardcodes a closed list of architectural and interior attributes to extract from the canon. This creates drift risk if the upstream schema for 'environment_canon' evolves, and limits the LLM's awareness of other attributes present in the source data."}], "path": "backend/scripts/experiment_line_elevation_quad.py", "scan_kind": "python", "sha256": "70e9f5dd34691a1cfebea1e80dcb5e3262ab5fde01725c0ae5a92abcfad27e97"}
{"candidate_reason": "python scope discovery", "chunk_end": 289, "chunk_start": 1, "chunk_summary": "The script contains a system prompt for T2I generation that is heavily polluted with scenario-specific visual tropes, hardcoded prop examples, and semantic transformation rules for character-owned locations.", "duration_ms": 17496, "findings": [{"category": "scenario_dependent_prompt", "evidence": "인명이 붙은 방 → \"the small bedroom\" / \"the adjacent small bedroom\"", "line_end": 55, "line_start": 53, "recommended_fix": "Implement a generic rule to strip possessive names or use a structured mapping from the world SOT to provide neutral room labels.", "severity": "P1", "why_problematic": "Hardcodes specific replacement strings for character-owned rooms, assuming a specific room type ('small bedroom') and size, which biases arbitrary scenarios toward a specific domestic setting."}, {"category": "scenario_dependent_prompt", "evidence": "\"weathered red mark on wall\", \"circular stain\", \"faded ring shape\", \"dark dried floor stain\"", "line_end": 65, "line_start": 62, "recommended_fix": "Move these visual descriptors to a scenario-specific 'visual style' or 'prop list' SOT rather than hardcoding them in the base system prompt.", "severity": "P1", "why_problematic": "Hardcodes specific visual details (stains, red marks, weathered textures) that bias the T2I prompt towards a crime or thriller genre, even if the input scenario is unrelated."}, {"category": "llm_closed_list_instruction", "evidence": "\"low angle through doorway/door gap\" + \"bedroom\" + \"floor stain\"", "line_end": 72, "line_start": 70, "recommended_fix": "Define safety constraints using abstract categories or a general moderation layer that does not rely on specific prop/location combinations.", "severity": "P1", "why_problematic": "Uses a closed list of specific trope combinations (dolls, backpacks, floor stains in bedrooms) to drive visual routing and safety behavior. This is highly scenario-specific and fragile."}], "path": "backend/scripts/experiment_plan_to_photo.py", "scan_kind": "python", "sha256": "a387f64ec5a637a46f6ab0e3478744e2ec4a5f3e7405b0ecfea0db38f58e7526"}
{"candidate_reason": "python scope discovery", "chunk_end": 318, "chunk_start": 1, "chunk_summary": "The script implements an experimental pipeline for generating 4-quadrant architectural elevations and photos, but contains hardcoded visual style constraints and semantic assumptions about input prompt structures.", "duration_ms": 21310, "findings": [{"category": "llm_closed_list_instruction", "evidence": "35mm cinematic still aesthetic... no blood, no broken glass... Say 'a small bedroom door' not '<character name>'s bedroom'", "line_end": 104, "line_start": 98, "recommended_fix": "Move style and content constraints into a structured 'Environment Canon' or 'Style SOT' that is injected into the prompt dynamically based on the project's requirements.", "severity": "P1", "why_problematic": "The prompt hardcodes specific visual styles (35mm, natural daylight) and narrative tropes (blood, broken glass) to define 'neutrality'. It also uses specific naming examples to enforce anonymity. These constraints should be managed via a structured style/rule SOT to allow the pipeline to handle diverse genres or projects without manual prompt editing."}, {"category": "scenario_dependent_prompt", "evidence": "base_photo_t2i (contains NORTH/SOUTH/EAST/WEST wall sentences)", "line_end": 144, "line_start": 144, "recommended_fix": "Instead of assuming the structure of a raw string, pass the wall-by-wall information as a structured dictionary in the context, or use a validator to ensure the input string meets the expected format before passing it to the LLM.", "severity": "P1", "why_problematic": "The prompt hardcodes a semantic assumption about the internal structure of a natural-language field ('t2i_prompt'). This creates a fragile dependency on the upstream generator's phrasing and may lead to LLM hallucination if the input text does not follow this specific cardinal-direction pattern."}], "path": "backend/scripts/experiment_scene_aware_line_quad.py", "scan_kind": "python", "sha256": "0b9354c5df25efd3324236ffafbb19409ee5d2b1b700f1f6d09038d3f6bc68db"}
{"candidate_reason": "python scope discovery", "chunk_end": 386, "chunk_start": 1, "chunk_summary": "The set design experiment script contains hardcoded visual style and entity count instructions in the LLM prompts, and assumes interior settings in its consistency instructions.", "duration_ms": 21941, "findings": [{"category": "scenario_dependent_prompt", "evidence": "\"Photorealistic cinematic. ... include exactly 3 person-shaped DOTTED LINE silhouettes\"", "line_end": 127, "line_start": 127, "recommended_fix": "Inject the project's style description from a structured SOT and calculate the required silhouette count based on the maximum character count in the provided shots.", "severity": "P1", "why_problematic": "The prompt hardcodes a specific visual style ('Photorealistic cinematic') and a fixed number of silhouettes ('exactly 3'), ignoring the project's actual style SOT and the specific character counts provided in the shot data."}, {"category": "scenario_dependent_prompt", "evidence": "\"Maintain the same wall colors, flooring, furniture style, window shape, and overall condition.\"", "line_end": 205, "line_start": 202, "recommended_fix": "Use more generic consistency instructions (e.g., 'Maintain all architectural and environmental details') or derive specific attributes to maintain from the location's visual traits.", "severity": "P2", "why_problematic": "The consistency instruction assumes the location is an interior space (furniture, windows, flooring), which may bias or confuse the model when generating exterior or abstract locations."}], "path": "backend/scripts/experiment_set_design.py", "scan_kind": "python", "sha256": "877501bc4a08d7a43b8ad5870fe08d05822ebb377e3d8355b0f061125e9ea708"}
{"candidate_reason": "python scope discovery", "chunk_end": 486, "chunk_start": 1, "chunk_summary": "The script contains hardcoded location IDs and scenario-specific trope/emotion lists in LLM prompts that bias open-world story analysis and visual generation.", "duration_ms": 16926, "findings": [{"category": "scenario_dependent_code", "evidence": "if info.get(\"short_id\") == \"L05\": ... if \"L05\" not in ve: continue", "line_end": 79, "line_start": 71, "recommended_fix": "Pass the target location ID as a parameter to the function or script.", "severity": "P1", "why_problematic": "The data loading and shot filtering logic is hardcoded to a specific location ID ('L05'), preventing the script from being used for arbitrary locations without manual code modification."}, {"category": "llm_closed_list_instruction", "evidence": "blood, mess, unnaturally clean, etc.", "line_end": 126, "line_start": 121, "recommended_fix": "Replace specific trope examples with abstract definitions or move them to a structured world-rule SOT.", "severity": "P1", "why_problematic": "The prompt defines 'States' (story-driven changes) using a closed list of specific story tropes, which biases the LLM's analysis of open-world scenario text toward these specific examples."}, {"category": "llm_closed_list_instruction", "evidence": "NEVER include skin tone / face color modifiers (pale, drained, flushed, ashen, gray, white face, etc.)", "line_end": 134, "line_start": 134, "recommended_fix": "Move visual generation constraints to a centralized style-guide or prompt-engineering module rather than embedding them in scenario analysis prompts.", "severity": "P1", "why_problematic": "This is a hardcoded negative constraint list for visual generation. It forces the LLM to filter specific semantic descriptors from the story text based on a fixed list of 'forbidden' tokens."}, {"category": "llm_closed_list_instruction", "evidence": "Express fear/shock through body language and expression words only (frozen, trembling, wide eyes, clenched jaw, etc.)", "line_end": 134, "line_start": 134, "recommended_fix": "Allow the LLM to derive appropriate descriptors from the scenario context or a structured character-state SOT.", "severity": "P1", "why_problematic": "This is a hardcoded positive constraint list that forces the LLM to use specific tokens for character emotions, overriding the original scenario's descriptive nuance with a fixed set of tropes."}, {"category": "scenario_dependent_prompt", "evidence": "Maintain identical wall colors, flooring, furniture style, window shape.", "line_end": 234, "line_start": 232, "recommended_fix": "Generalize the consistency instruction or derive relevant features from the location's visual traits metadata.", "severity": "P2", "why_problematic": "The prompt assembly hardcodes specific architectural/visual features to ensure consistency. This assumes all sets will have these specific properties (e.g., windows, furniture)."}], "path": "backend/scripts/experiment_set_v3.py", "scan_kind": "python", "sha256": "f05ee05509ea4eb80f20d1f67ad2029465a21ec9593c7d564d0473c5570618ad"}
{"candidate_reason": "python scope discovery", "chunk_end": 571, "chunk_start": 1, "chunk_summary": "The script contains significant scenario-specific pollution in both prompt instructions and Python code, including hardcoded string mutations for specific story beats and regex-based entity reference attachment.", "duration_ms": 22342, "findings": [{"category": "blind_string_mutation", "evidence": "re.sub(r'blood-soaked torn shoulder and collarbone of the slumped corpse', 'a motionless figure slumped behind the curtain', text)", "line_end": 442, "line_start": 431, "recommended_fix": "Remove hardcoded story-beat replacements. Use a centralized safety filter or a structured 'visual style' SOT to handle content moderation and aesthetic softening.", "severity": "P0", "why_problematic": "This function performs hardcoded, scenario-specific string replacements for very specific story beats. It pollutes the pipeline with content from a single work and will fail or produce nonsensical results for any other scenario."}, {"category": "scenario_dependent_prompt", "evidence": "NEVER include gore (blood-soaked, corpse, dead body, exposed flesh, torn) — soften to (motionless figure, slumped, stain, mark)", "line_end": 179, "line_start": 177, "recommended_fix": "Move content constraints and 'softening' rules to a structured configuration or a dedicated safety/style module that can be adjusted per project.", "severity": "P1", "why_problematic": "The prompt contains a closed list of scenario-specific tropes and instructions on how to 'soften' them. This logic is hardcoded into the system prompt rather than being derived from a structured world-rule SOT."}, {"category": "semantic_string_judgment", "evidence": "re.search(rf'(?<![CO\\d]){sid}', t2i_text)", "line_end": 394, "line_start": 392, "recommended_fix": "Pass visible entities as a structured list (e.g., a JSON array of IDs) alongside the prompt text instead of parsing the prompt string to find them.", "severity": "P1", "why_problematic": "The system decides whether to attach a reference image (character or prop) by searching for entity IDs within natural language prompt text. This is a pattern-based semantic judgment that relies on the LLM correctly emitting IDs in the string."}, {"category": "llm_closed_list_instruction", "evidence": "문, 창문, 싱크대, 냉장고, TV, 침대, 식탁, 가스레인지, 선반 등", "line_end": 125, "line_start": 101, "recommended_fix": "Inject the list of expected 'fixed installations' from the location's structured metadata (SOT) into the prompt instead of hardcoding domestic examples.", "severity": "P2", "why_problematic": "The VLM prompts for blueprint extraction and consistency verification use a closed list of domestic furniture/props. This biases the visual analysis toward indoor/residential settings and may fail to identify key structures in other environments (e.g., a forest, a spaceship)."}], "path": "backend/scripts/experiment_set_v4.py", "scan_kind": "python", "sha256": "4db56357b919b516cbf93e484f565a5d4a5e318f73c567ca808218a0c1056e27"}
{"candidate_reason": "python scope discovery", "chunk_end": 527, "chunk_start": 1, "chunk_summary": "The script contains several instances of hardcoded semantic logic, scenario-specific prompt pollution (tailored to a specific room layout), and blind string mutations for visual content.", "duration_ms": 19617, "findings": [{"category": "semantic_string_judgment", "evidence": "any(kw in desc for kw in [\"내부\", \"실내\", \"방\", \"사무실\", \"조타실\"])", "line_end": 98, "line_start": 98, "recommended_fix": "Move location type classification to a structured metadata field in the location SOT or use an LLM classifier.", "severity": "P1", "why_problematic": "Determines visual generation routing (indoor vs outdoor logic) based on a hardcoded list of Korean keywords, including scenario-specific terms like 'wheelhouse' (조타실)."}, {"category": "semantic_string_judgment", "evidence": "any(kw in w for kw in ['room', 'wall', 'floor', 'window', 'curtain', 'bed', 'door', ...])", "line_end": 117, "line_start": 114, "recommended_fix": "Use an LLM to extract background elements or define them in a structured 'set_dressing' field in the location manifest.", "severity": "P1", "why_problematic": "Filters open-world story text (t2i_prompt) using a hardcoded list of English nouns to decide what constitutes a 'background element' for the grid prompt."}, {"category": "scenario_dependent_prompt", "evidence": "TOP-LEFT: Looking toward the kitchen/sink wall\\nTOP-RIGHT: Looking toward the main window wall...", "line_end": 126, "line_start": 123, "recommended_fix": "Parameterize quadrant descriptions based on the specific location's layout defined in the SOT.", "severity": "P1", "why_problematic": "The grid generation prompt hardcodes a specific room layout (kitchen, window, entrance, bedroom), making the script unusable for arbitrary locations."}, {"category": "llm_closed_list_instruction", "evidence": "NEVER include skin tone/face color modifiers (pale, drained, flushed, ashen, gray). ... soften to (motionless figure, slumped, stain, mark).", "line_end": 177, "line_start": 175, "recommended_fix": "Move visual style and safety constraints to a global style SOT or system-level prompt configuration.", "severity": "P2", "why_problematic": "Instructs the LLM to classify and transform open-world meaning based on a closed list of phrases/examples provided in the prompt rather than a structured rule set."}, {"category": "scenario_dependent_code", "evidence": "QUADRANT_DIRECTIONS = { \"SET_TL\": \"the TOP-LEFT quadrant (kitchen/sink direction)\", ... }", "line_end": 258, "line_start": 254, "recommended_fix": "Derive quadrant labels and directions from the location's structured manifest.", "severity": "P1", "why_problematic": "Hardcodes semantic mapping of technical IDs (SET_TL) to specific story-world locations (kitchen/sink), which is scenario-specific pollution."}, {"category": "blind_string_mutation", "evidence": "re.sub(r'blood-soaked torn shoulder and collarbone of the slumped corpse', 'a motionless figure slumped behind the curtain', text)", "line_end": 393, "line_start": 386, "recommended_fix": "Handle visual transformations (like gore softening) during the LLM analysis phase using structured rules.", "severity": "P1", "why_problematic": "Performs blind string replacement on visual prompts using highly specific story-beat descriptions as regex targets. This is fragile and bypasses structured analysis."}], "path": "backend/scripts/experiment_set_v5.py", "scan_kind": "python", "sha256": "f4c4b53813996fe879802361e8a47f402af99b78e16344b029f1e64f6d796d28"}
{"candidate_reason": "python scope discovery", "chunk_end": 293, "chunk_start": 1, "chunk_summary": "The script contains hardcoded scenario-specific filters and uses regex patterns to parse entity relationships from generated prompt text to drive reference image attachment.", "duration_ms": 34592, "findings": [{"category": "scenario_dependent_code", "evidence": "if \"L05\" not in ve:", "line_end": 60, "line_start": 59, "recommended_fix": "Pass the target location ID as a parameter or configuration instead of hardcoding it in the logic.", "severity": "P2", "why_problematic": "Hardcoded scenario-specific location ID ('L05') used to filter scenes, making the script non-portable to other scenarios or episodes."}, {"category": "semantic_string_judgment", "evidence": "pattern = rf'{short_id}(O\\d{{2,3}})'\\n            m = re.search(pattern, t2i_text)", "line_end": 97, "line_start": 96, "recommended_fix": "Store entity-outfit associations in a structured manifest or metadata field (e.g., in shot_data) rather than extracting them from the natural language prompt string.", "severity": "P1", "why_problematic": "The script parses the generated T2I prompt text using regex to determine entity-outfit relationships. This makes visual reference attachment dependent on the exact string formatting of the LLM-generated prompt."}], "path": "backend/scripts/experiment_set_shots.py", "scan_kind": "python", "sha256": "c002953934ab147b0cff3c4b048f4aa98a28e481622369bbf470c24d80f32445"}
{"candidate_reason": "python scope discovery", "chunk_end": 299, "chunk_start": 1, "chunk_summary": "The script contains several instances of pattern-based semantic judgment on prompts, blind string mutations for visual constraints, and scenario-specific pollution in prompt templates.", "duration_ms": 37198, "findings": [{"category": "blind_string_mutation", "evidence": "re.sub(r'NO people\\s*[—–-]\\s*instead include.*?placement guides\\.?', '', prompt, flags=re.DOTALL)", "line_end": 42, "line_start": 40, "recommended_fix": "Instead of mutating strings, the prompt generation logic should be controlled via structured parameters (e.g., a 'silhouette' boolean flag) in the SOT that determines whether to include or exclude these instructions during initial assembly.", "severity": "P1", "why_problematic": "This performs a blind regex replacement on natural language prompts to remove specific silhouette instructions and appends a hardcoded 'Empty room only' constraint. This assumes a specific prompt structure and scene type, which will fail or produce incorrect visual results for non-room or differently structured scenarios."}, {"category": "scenario_dependent_prompt", "evidence": "\"Maintain the same wall colors, flooring, furniture style, window shape, and overall condition.\" and \"Same room, different angle\"", "line_end": 75, "line_start": 60, "recommended_fix": "Move consistency instructions to a structured style-guide or environment-type SOT that provides context-appropriate attributes (e.g., 'foliage type' for forests vs 'wall color' for rooms).", "severity": "P2", "why_problematic": "The prompt instructions for visual consistency are polluted with indoor-specific tropes (walls, flooring, furniture, windows, 'room'). This biases the image generator and makes the script unsuitable for outdoor, natural, or abstract environments."}, {"category": "semantic_string_judgment", "evidence": "pattern = rf'{short_id}(O\\d{2,3})' ... re.search(pattern, t2i_text)", "line_end": 116, "line_start": 115, "recommended_fix": "Pass the outfit ID as a structured field in the shot/entity metadata rather than attempting to extract it from the prompt text.", "severity": "P1", "why_problematic": "The code uses regex to parse a natural language prompt string to extract outfit IDs (e.g., O01). This extracted ID is then used to query the database and attach reference images. This is a high-signal violation where visual routing depends on string patterns in generated text rather than structured metadata."}, {"category": "scenario_dependent_code", "evidence": "if \"L05\" not in s.get(\"visible_entities\", [])", "line_end": 214, "line_start": 214, "recommended_fix": "Pass the target location ID or filter criteria as a command-line argument or configuration parameter.", "severity": "P2", "why_problematic": "The script contains a hardcoded scenario-specific location ID ('L05') used to filter scenes for processing. This makes the script non-portable and couples the logic to a specific project's data."}], "path": "backend/scripts/experiment_set_regen.py", "scan_kind": "python", "sha256": "62d04a171149fa0363086ebfadb8fcf8060443e9689b1e8162f08372b91e49e3"}
{"candidate_reason": "python scope discovery", "chunk_end": 38, "chunk_start": 1, "chunk_summary": "The script contains hardcoded, scenario-specific prompt strings for 'S12' that include concrete story details, character roles, and specific props.", "duration_ms": 12230, "findings": [{"category": "scenario_dependent_prompt", "evidence": "SHOT_1 = \"...Character 1 in cyan... Character 2 in magenta... red tattoo mark... crumpled photograph...\"", "line_end": 13, "line_start": 13, "recommended_fix": "Parameterize the prompt template to accept character descriptions, prop lists, and scene layouts from a structured data source.", "severity": "P1", "why_problematic": "The prompt contains hardcoded scenario-specific entities, props, and plot points (S12 specific) that should be dynamically injected from a structured scenario/world SOT to ensure the pipeline remains scenario-agnostic."}, {"category": "scenario_dependent_prompt", "evidence": "SHOT_2 = \"...Character 1 in cyan... Character 2 in magenta... ritual circle...\"", "line_end": 15, "line_start": 15, "recommended_fix": "Move scenario-specific visual requirements and consistency rules into a structured SOT and use a generic prompt generator.", "severity": "P1", "why_problematic": "The prompt contains hardcoded scenario-specific entities and plot points (ritual circle) and manual consistency instructions ('FIXED CORPSE POSE') that should be handled by a structured world/rule SOT."}, {"category": "scenario_dependent_code", "evidence": "operation_type=\"line_art_s12\"", "line_end": 20, "line_start": 20, "recommended_fix": "Pass the scenario ID as a variable or argument to the context setter.", "severity": "P2", "why_problematic": "The operation type is hardcoded to a specific scenario ID ('s12'), indicating that the script or its execution context is coupled to a single story instance."}], "path": "backend/scripts/generate_line_art_s12.py", "scan_kind": "python", "sha256": "8062f06362cf85fad5fcea62747e57ea49338c8bfd93422e9c60d7f144f49273"}
{"candidate_reason": "python scope discovery", "chunk_end": 426, "chunk_start": 1, "chunk_summary": "The script contains hardcoded scenario-specific string mutations for gore sanitization, uses regex-based semantic filtering for entity reference attachment, and includes scenario-specific ID filtering in the logic.", "duration_ms": 35796, "findings": [{"category": "blind_string_mutation", "evidence": "re.sub(r'blood-soaked torn shoulder and collarbone of the slumped corpse', 'a motionless figure slumped behind the curtain', text)", "line_end": 258, "line_start": 249, "recommended_fix": "Move content-based prompt adjustments to a structured SOT or use LLM-based rewriting with general safety guidelines rather than hardcoded story phrases.", "severity": "P1", "why_problematic": "The function uses hardcoded, scenario-specific natural language patterns to perform blind string replacement. This couples the code to a specific story's content and bypasses structured safety or style controls with fragile regex."}, {"category": "semantic_string_judgment", "evidence": "re.search(rf'{sid}(O\\d{{2,3}})', t2i_text)", "line_end": 180, "line_start": 169, "recommended_fix": "Pass outfit selection as structured metadata (e.g., a mapping of character IDs to outfit IDs) rather than embedding and parsing them from the prompt string.", "severity": "P1", "why_problematic": "The code determines which character outfit (O##) to use by parsing the natural language prompt string with regex. This makes visual entity membership and reference attachment dependent on string patterns rather than structured metadata."}, {"category": "scenario_dependent_code", "evidence": "if \"L05\" not in ve: continue", "line_end": 73, "line_start": 73, "recommended_fix": "Pass the target location ID as a parameter or configuration variable rather than hardcoding it in the loop.", "severity": "P2", "why_problematic": "The script logic is hardcoded to filter for a specific location ID ('L05'), which is scenario-specific pollution that prevents the script from being used for arbitrary scenarios without modification."}, {"category": "llm_closed_list_instruction", "evidence": "Use \"previous_shot\" when the background state CHANGES due to story events (blood appears, room gets messy, items move)", "line_end": 108, "line_start": 108, "recommended_fix": "Replace specific examples with abstract categories of state change (e.g., 'permanent environmental modifications' or 'transient object movement').", "severity": "P2", "why_problematic": "The LLM prompt uses specific story-state examples to define the logic for background selection. This biases the model towards these specific tropes and should be replaced with abstract criteria."}], "path": "backend/scripts/experiment_set_v8.py", "scan_kind": "python", "sha256": "7fa33e1c28ef1fc9b915410b3e22bf9bbac221507e00dbcea54dabff8ebb696e"}
{"candidate_reason": "python scope discovery", "chunk_end": 585, "chunk_start": 1, "chunk_summary": "The script contains hardcoded scenario filters, scenario-specific prompt pollution (apartment/thriller tropes), and uses regex patterns to decide entity visibility and perform blind string mutation for content sanitization.", "duration_ms": 24883, "findings": [{"category": "scenario_dependent_code", "evidence": "if \"L05\" not in ve: continue", "line_end": 74, "line_start": 73, "recommended_fix": "Remove the hardcoded filter or move it to a configuration/argument passed to the script.", "severity": "P1", "why_problematic": "Hardcodes a specific location ID ('L05') as a filter, preventing the pipeline from processing other locations without manual code changes."}, {"category": "scenario_dependent_prompt", "evidence": "fictional Korean film screenplay storyboard... thriller movie script... apartment... kitchen side, bedroom side", "line_end": 252, "line_start": 183, "recommended_fix": "Inject location types and genre context from a structured Source of Truth (SOT) rather than hardcoding them in the prompt template.", "severity": "P1", "why_problematic": "Prompts contain scenario-specific pollution (genre, location type, and room names) that biases the LLM's analysis toward a specific setting instead of remaining open-world."}, {"category": "semantic_string_judgment", "evidence": "re.search(rf'(?<![CO\\d]){sid}', t2i_text)", "line_end": 412, "line_start": 401, "recommended_fix": "Rely on the structured 'visible_entities' list or a dedicated entity-to-shot mapping rather than parsing natural language strings.", "severity": "P1", "why_problematic": "Uses regex to detect entity IDs within natural language prompt strings to decide whether to attach reference images. This is unreliable as it depends on the specific phrasing of the prompt rather than structured visibility data."}, {"category": "blind_string_mutation", "evidence": "re.sub(r'blood-soaked|corpse|dead body|dead woman|exposed flesh|torn shoulder', '', text, flags=re.IGNORECASE)", "line_end": 444, "line_start": 439, "recommended_fix": "Use a dedicated LLM-based safety/refinement pass or a structured attribute-based system to handle content moderation.", "severity": "P1", "why_problematic": "The sanitize_gore function uses a hardcoded list of keywords to perform blind string replacement on story/visual prompts. This is a fragile, pattern-based semantic judgment that can break prompt intent or fail to catch variations."}], "path": "backend/scripts/experiment_set_v9.py", "scan_kind": "python", "sha256": "c8456f7443136c26329f4d09d9921fd1e981ec4bd83965fc452190621e290cca"}
{"candidate_reason": "python scope discovery", "chunk_end": 207, "chunk_start": 1, "chunk_summary": "No actionable findings; the script is a technical migration utility using closed-world step IDs and status constants for infrastructure orchestration.", "duration_ms": 3418, "findings": [], "path": "backend/scripts/migrate_shot_validator.py", "scan_kind": "python", "sha256": "dc0983f8a48d6bb669deda5d334a2a9a21ba68b79298251ab489118cd65f7e2b"}
{"candidate_reason": "python scope discovery", "chunk_end": 495, "chunk_start": 1, "chunk_summary": "The script contains hardcoded scenario-specific location mappings and prompt instructions that assume a specific environment type and handle scenario-specific pollution.", "duration_ms": 26559, "findings": [{"category": "scenario_dependent_code", "evidence": "LOCATION_FALLBACK = {\"L04\": \"photo_base_dense_low_rise_rooftop_site\", \"L05\": \"photo_base_small_rooftop_room_interior\"}", "line_end": 366, "line_start": 363, "recommended_fix": "Inject location-to-node mappings via a configuration file or include them in the planning data (SOT) rather than hardcoding them in the script.", "severity": "P1", "why_problematic": "Hardcodes specific location IDs (L04, L05) and their visual node names for the 'Rooftop' scenario. This logic is not portable to other scenarios and forces a specific visual mapping based on ID strings."}, {"category": "scenario_dependent_prompt", "evidence": "First reference image is the room/space — match its wall finish, floor, ceiling...", "line_end": 416, "line_start": 413, "recommended_fix": "Use environment-agnostic language or derive environment descriptions from the scene's metadata/location type.", "severity": "P2", "why_problematic": "The prompt assumes an indoor 'room/space' context with specific architectural features (wall, floor, ceiling), which will cause issues or hallucinations in scenarios with different environments (e.g., outdoor, space)."}, {"category": "scenario_dependent_prompt", "evidence": "ignore Korean proper names", "line_end": 424, "line_start": 423, "recommended_fix": "Ensure the entity trait extraction pipeline removes non-visual proper names before prompt assembly.", "severity": "P2", "why_problematic": "Instructs the LLM to filter scenario-specific pollution (Korean names) within the prompt itself, rather than ensuring the input data (Entity Canon) is clean at the source."}], "path": "backend/scripts/experiment_v4_main_shot_render_with_refs.py", "scan_kind": "python", "sha256": "030a57c3b0cbe264929f7f6f7b540bdfd584157d9b7e60b95026c5af06e82bfa"}
{"candidate_reason": "python scope discovery", "chunk_end": 501, "chunk_start": 1, "chunk_summary": "The script contains hardcoded visual style instructions and uses regex-based language filtering to semantically prune visual traits from prompts.", "duration_ms": 30049, "findings": [{"category": "semantic_string_judgment", "evidence": "re.search(r\"[가-힣]\", desc_en) ... [t for t in traits if not re.search(r\"[가-힣]\", str(t))]", "line_end": 129, "line_start": 126, "recommended_fix": "Visual traits should be filtered or translated at the SOT/data-ingestion layer based on structured metadata (e.g., a 'language' or 'type' field) rather than using regex in the prompt assembly logic.", "severity": "P2", "why_problematic": "The code uses regex to detect Korean characters and silently drops visual traits or descriptions that contain them. This is a semantic judgment based on string patterns that can lead to loss of visual information if the source data is mixed-language or if the SOT contains non-English descriptors."}, {"category": "scenario_dependent_prompt", "evidence": "\"Photorealistic 35mm cinematic still.\", \"match its wall finish, floor, ceiling, lighting tone, color palette.\"", "line_end": 315, "line_start": 313, "recommended_fix": "Move style and technical descriptors to a configuration file or a structured 'Style SOT' that can be varied per project or scenario.", "severity": "P1", "why_problematic": "These lines hardcode specific visual styles and technical camera constraints directly into the prompt. This biases all generated images to a specific '35mm cinematic' look and 'photorealistic' style, which should instead be controlled by a structured style SOT or scenario-specific metadata."}, {"category": "scenario_dependent_prompt", "evidence": "\"ignore Korean proper names\"", "line_end": 324, "line_start": 322, "recommended_fix": "Ensure the 'visible_entities' data passed to the prompt generator is already cleaned of proper names at the source, rather than relying on the LLM to filter them.", "severity": "P2", "why_problematic": "This prompt instruction asks the LLM to perform semantic classification (distinguishing between descriptors and proper names) on the fly. This logic is prone to inconsistency and should be handled by providing pre-filtered, structured data from the SOT."}], "path": "backend/scripts/experiment_v4_main_shot_render_temp.py", "scan_kind": "python", "sha256": "95c9c5278eba2bab06df207502ed81048bd4322d957630e47527bdb2a4be3b83"}
{"candidate_reason": "python scope discovery", "chunk_end": 70, "chunk_start": 1, "chunk_summary": "The script contains hardcoded scenario-specific prompts and operation types that bake story details and visual style constants directly into the code.", "duration_ms": 15472, "findings": [{"category": "scenario_dependent_prompt", "evidence": "SHOT_1 = \"\"\"...\"\"\", SHOT_2_CONTINUATION = \"\"\"...\"\"\"", "line_end": 36, "line_start": 14, "recommended_fix": "Extract character descriptions, prop definitions, and style constants into a structured SOT and use a template engine to assemble prompts dynamically.", "severity": "P1", "why_problematic": "The prompts contain hardcoded scenario-specific entities (Character 1/2), props (crumpled photograph, red tattoo), and visual style constants (hex codes) that should be managed by a structured Source of Truth (SOT). This makes the generation logic brittle and scenario-locked."}, {"category": "scenario_dependent_code", "evidence": "operation_type=\"line_art_multiturn_s12\"", "line_end": 41, "line_start": 41, "recommended_fix": "Parameterize the operation type or pass the scenario ID as a separate metadata field.", "severity": "P2", "why_problematic": "The operation type is hardcoded with a specific scenario ID ('s12'), which prevents the script from being generic or reusable for other scenarios."}], "path": "backend/scripts/generate_line_art_s12_multiturn.py", "scan_kind": "python", "sha256": "828d41af425ce53df9fd46c1620e4088695c80a8811e2335b123175ee5b19778"}
{"candidate_reason": "python scope discovery", "chunk_end": 160, "chunk_start": 1, "chunk_summary": "No actionable findings; the script is a developer utility for observability and diagnostics that does not mutate production story or visual semantics.", "duration_ms": 5499, "findings": [], "path": "backend/scripts/opik_query.py", "scan_kind": "python", "sha256": "e836209c6c8b10cdb0b77e4594e60bde134501a504737282f02f186b9e618df2"}
{"candidate_reason": "python scope discovery", "chunk_end": 238, "chunk_start": 1, "chunk_summary": "The script is a diagnostic gallery generator that visualizes pipeline outputs using structured JSON data and technical IDs, with no actionable semantic or scenario-dependent logic found.", "duration_ms": 6610, "findings": [], "path": "backend/scripts/regen_gallery_with_prompts.py", "scan_kind": "python", "sha256": "df12f751477caefc6a9aa0e2f8bcd4420e18191201da97edb2ec68b621eb1f34"}
{"candidate_reason": "python scope discovery", "chunk_end": 281, "chunk_start": 1, "chunk_summary": "The migration script is a technical utility for triggering pipeline steps and contains no semantic logic or scenario-specific pollution.", "duration_ms": 10169, "findings": [], "path": "backend/scripts/migrate_v0513_reanalyze.py", "scan_kind": "python", "sha256": "04bd2083c9b57dc105508aa0599857da898aa6846d284620565db709d3c3bdbd"}
{"candidate_reason": "python scope discovery", "chunk_end": 444, "chunk_start": 1, "chunk_summary": "The orchestrator contains a hardcoded project-specific ID ('O00') used to identify specific entity types for visual generation logic.", "duration_ms": 268061, "findings": [{"category": "scenario_dependent_code", "evidence": "EntityCanon.short_id == \"O00\"", "line_end": 353, "line_start": 353, "recommended_fix": "Replace the hardcoded ID check with a boolean flag on the EntityCanon model (e.g., is_null_outlook) or a system-level configuration that maps semantic roles to IDs.", "severity": "P1", "why_problematic": "Hardcoding a specific ID ('O00') to identify 'Null Outlooks' is a project-specific convention. This drives visual generation logic (identifying characters for full-body images) and creates a dependency on specific naming conventions in the database."}], "path": "backend/app/services/reference_pipeline_orchestrator.py", "scan_kind": "python", "sha256": "ff2ad64624ebed2747e69bc0bdb588816e6c17ef2fa38e5739cf4f05255d0c59"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 49, "chunk_start": 1, "chunk_summary": "No actionable findings; the schema defines structural graph nodes and technical metadata without scenario-specific pollution or semantic string judgments.", "duration_ms": 3006, "findings": [], "path": "prompts/_base/background_chain_planning/1.202604271600/schema.json", "scan_kind": "prompt", "sha256": "39807d088c0f02e0d2d16ed2ce207117ff07c954f01fe8c098548e44353d9f84"}
{"candidate_reason": "python scope discovery", "chunk_end": 86, "chunk_start": 1, "chunk_summary": "The script contains hardcoded, scenario-specific prompts for a specific scene (S12), including character colors, props, and environment details, which should be abstracted into a structured SOT.", "duration_ms": 15469, "findings": [{"category": "scenario_dependent_prompt", "evidence": "SHOT_1 = \"\"\"Pure line drawing... interior of a cramped Korean rooftop room (옥탑방)... Character 1 in cyan (#00E5FF)... Character 2 in magenta (#FF00FF)... orange (#FFA500) geometric outline.\"\"\"", "line_end": 32, "line_start": 14, "recommended_fix": "Extract scenario-specific details (characters, colors, props, environment) into a structured SOT and use a generic prompt template to assemble the final string.", "severity": "P1", "why_problematic": "The prompt contains hardcoded scenario-specific entities, colors, and props. This prevents the generation logic from being reused for arbitrary scenarios and forces manual script duplication for every new scene."}, {"category": "scenario_dependent_prompt", "evidence": "SHOT_2_CONTINUATION = \"\"\"Continue the exact same line drawing style... same cramped Korean rooftop room (옥탑방)... magenta character 2... orange photograph...\"\"\"", "line_end": 52, "line_start": 35, "recommended_fix": "Implement a scene-state or entity-tracking system that passes structured attributes (color, pose, status) to the prompt generator.", "severity": "P1", "why_problematic": "This prompt hardcodes continuity logic and specific story elements (e.g., 'magenta character 2', 'orange photograph'). Visual consistency should be managed via structured entity tracking rather than hardcoded prose in a scenario-specific script."}], "path": "backend/scripts/generate_line_art_s12_v2.py", "scan_kind": "python", "sha256": "6d312348e6f1a3a8c08a896c2aca40880fed900ae5c3937e74463e23addb010d"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 21, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 6151, "findings": [], "path": "prompts/_base/background_chain_planning/1.202604271600/user_template.md", "scan_kind": "prompt", "sha256": "92cae51f7a0d2fab8eb355699863de2e6480e32ea8b9568780f62b4f033b0e63"}
{"candidate_reason": "python scope discovery", "chunk_end": 1511, "chunk_start": 1, "chunk_summary": "The file contains logic for coordinating scene image generation, including prompt assembly, reference attachment, and variation management, with some hardcoded style tropes and substring-based prompt mutations.", "duration_ms": 263549, "findings": [{"category": "scenario_dependent_prompt", "evidence": "Photorealistic cinematic still.", "line_end": 483, "line_start": 465, "recommended_fix": "Move the default style prefix to a project-level configuration or the visual world rules SOT.", "severity": "P1", "why_problematic": "The visual style 'Photorealistic cinematic still' is hardcoded as a default prefix or fallback. This is a style trope that should be emitted by a structured world/rule SOT rather than being baked into the coordinator logic."}, {"category": "semantic_string_judgment", "evidence": "if shot_name and shot_name.lower() not in var_t2i.lower(): var_t2i = f\"[Camera: {shot_name}] {var_t2i}\"", "line_end": 719, "line_start": 718, "recommended_fix": "Handle camera directive prepending during the initial prompt construction phase in the prompt service, or use structured metadata to track whether a camera directive has already been applied.", "severity": "P1", "why_problematic": "A substring check is used to decide whether to mutate the visual prompt by prepending a camera directive. This is a pattern-based semantic judgment over open-world prompt text."}], "path": "backend/app/services/scene_generation_coordinator.py", "scan_kind": "python", "sha256": "258fea47b6c20d942e942bb8a6629f39495560b30f2655559c8b72a5818993fc"}
{"candidate_reason": "python scope discovery", "chunk_end": 304, "chunk_start": 1, "chunk_summary": "The file is a standalone checklist management server for tracking project improvements and contains no pipeline logic or scenario-specific pollution.", "duration_ms": 12880, "findings": [], "path": "docs/checklist-server.py", "scan_kind": "python", "sha256": "f2e11cc1473ff7b5ab8269466fae1247faac26f7ef256c2cddebdeb0d0d83bea"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 57, "chunk_start": 1, "chunk_summary": "The schema defines background chain planning logic, including a skip mechanism for outdoor locations based on a hardcoded list of environment examples in the description.", "duration_ms": 9564, "findings": [{"category": "llm_closed_list_instruction", "evidence": "(street, road, coast, sea, forest, yard, park, exterior rooftop, public square, beach, dock, vehicle exterior, etc.)", "line_end": 8, "line_start": 5, "recommended_fix": "Remove the specific environment examples from the schema description. Instead, the location metadata (SOT) should provide a boolean or enum (e.g., 'environment_type': 'outdoor') which the LLM or a simple code check uses to set 'skip_chain'.", "severity": "P1", "why_problematic": "The LLM is instructed to classify open-world location types into a 'skip_chain' boolean based on a hardcoded list of environment tropes. This logic bypasses structured world-state (SOT) metadata and relies on the LLM's interpretation of a closed list of examples to drive pipeline routing and visual continuity strategy."}], "path": "prompts/_base/background_chain_planning/2.202604272110/schema.json", "scan_kind": "prompt", "sha256": "d0bf9f8dfd54f532aecbf6a5f81e530510d339059878e7f057c80afc06628352"}
{"candidate_reason": "python scope discovery", "chunk_end": 713, "chunk_start": 1, "chunk_summary": "The service handles scene image persistence and state restoration, with one finding related to semantic filtering of entity types for visual consistency.", "duration_ms": 263499, "findings": [{"category": "semantic_string_judgment", "evidence": "entity_lookup[eid].get(\"entity_type\") == \"location\"", "line_end": 381, "line_start": 380, "recommended_fix": "Replace the string check with a property-based check from the EntityCanon model (e.g., is_background_entity) or use a centralized entity-type registry that defines which types require visual history tracking.", "severity": "P1", "why_problematic": "The code uses a hardcoded string check for 'location' to decide whether to populate the location_scene_history map. This history is used to drive visual consistency (reference attachment) in the image generation pipeline. Relying on a string pattern to decide visual routing for specific entity categories is brittle and bypasses structured world rules."}], "path": "backend/app/services/scene_persistence_service.py", "scan_kind": "python", "sha256": "5c95c40e8b9d324dffb601a0769b3e5f7f38116e61f61e19468a617813d5dd44"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 94, "chunk_start": 1, "chunk_summary": "The prompt contains hardcoded lists of location types and room states used to drive pipeline routing and node generation logic.", "duration_ms": 11960, "findings": [{"category": "llm_closed_list_instruction", "evidence": "OUTDOOR / OPEN-AIR (street, road, alley, coast, sea, beach, dock, yard, garden, park, public square, forest, mountain, exterior rooftop view, vehicle exterior, open-air market, etc.)", "line_end": 22, "line_start": 11, "recommended_fix": "Replace the keyword-based classification with a structured boolean or enum (e.g., 'is_controlled_environment') in the input location context.", "severity": "P1", "why_problematic": "The prompt instructs the LLM to make a critical pipeline routing decision (skip_chain) by classifying open-world location text against a hardcoded list of examples. This is a brittle semantic judgment that should be driven by structured metadata."}, {"category": "scenario_dependent_prompt", "evidence": "clean / lived-in / disturbed / heavily-ransacked", "line_end": 88, "line_start": 32, "recommended_fix": "Generalize the instruction to split nodes based on 'significant visual state changes' and move the specific state definitions to the project-level SOT or input context.", "severity": "P2", "why_problematic": "The prompt hardcodes specific room states as the primary criteria for node splitting and description. These are domain-specific tropes that bias the LLM and should instead be provided via the 'visual_world_rules' or 'visual_traits' input."}], "path": "prompts/_base/background_chain_planning/2.202604272110/system.md", "scan_kind": "prompt", "sha256": "85af282d2d10d37795624ba9fb88b70ff5f5ed6e41227032f2011c9680065d4e"}
{"candidate_reason": "python scope discovery", "chunk_end": 263, "chunk_start": 1, "chunk_summary": "The script is a verification tool for scene_director results, using LLMs to validate entity presence based on hardcoded semantic rules in the system prompt and entity type lists.", "duration_ms": 25690, "findings": [{"category": "llm_closed_list_instruction", "evidence": "대화 속 언급, 회상, 상상 속 인물은 제외 / 빙의/변신 등으로 육체가 존재하면 포함 / 엔티티 목록에 없는 인물(단역, 엑스트라)은 무시", "line_end": 33, "line_start": 31, "recommended_fix": "Move these semantic inclusion/exclusion rules to a project-level configuration or a shared 'Scenario Analysis Rules' SOT that can be injected into the prompt.", "severity": "P2", "why_problematic": "The prompt hardcodes specific scenario tropes (flashbacks, imagination, possession) to define 'physical presence'. This logic is genre-dependent and should be driven by a structured world/rule SOT rather than being scattered in validation prompts."}, {"category": "schema_or_enum_drift", "evidence": "for etype in [\"characters\", \"locations\", \"props\"]:", "line_end": 100, "line_start": 100, "recommended_fix": "Iterate over the keys of the entities dictionary or use a centralized entity type registry.", "severity": "P2", "why_problematic": "Hardcoded list of entity types for verification. If the entity schema expands (e.g., to include 'creatures' or 'vehicles' as separate categories), this verification script will silently omit them from the context provided to the LLM."}, {"category": "blind_string_mutation", "evidence": "etype[:-1]", "line_end": 104, "line_start": 104, "recommended_fix": "Use a mapping dictionary for singular labels or store the singular name in the entity schema.", "severity": "P2", "why_problematic": "Blindly slicing the last character to singularize entity types for the prompt. This assumes all types end in 's' and will fail for types like 'scenery' or 'staff', leading to confusing labels in the LLM prompt."}], "path": "backend/scripts/verify_scene_director.py", "scan_kind": "python", "sha256": "e0d16e5f1fc1d1594537cc8f694a997182137d8684372417128c7cc0ec7aed30"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 74, "chunk_start": 1, "chunk_summary": "The system prompt contains hardcoded narrative tropes and specific prop examples used as semantic classifiers for background state-splitting logic.", "duration_ms": 22553, "findings": [{"category": "llm_closed_list_instruction", "evidence": "different room state (clean / lived-in / disturbed / heavily-ransacked) ... e.g. \"open window with torn curtain\"", "line_end": 19, "line_start": 16, "recommended_fix": "Remove specific state examples and the 'torn curtain' prop. Instruct the LLM to split nodes based on state changes defined in the VISUAL_WORLD_RULES or the input shot beats.", "severity": "P1", "why_problematic": "The prompt uses a closed list of narrative tropes and a specific prop example to define when a background node should be split. This biases the LLM toward these specific states and should instead be derived from the provided VISUAL_WORLD_RULES or a structured state schema."}, {"category": "llm_closed_list_instruction", "evidence": "surface condition (clean / disturbed / ransacked etc.)", "line_end": 49, "line_start": 49, "recommended_fix": "Replace the hardcoded list with a reference to the state categories defined in the project's visual world rules.", "severity": "P1", "why_problematic": "Hardcoded state examples in the field description instruct the LLM to classify open-world scenario text into a narrow set of predefined tropes."}, {"category": "llm_closed_list_instruction", "evidence": "(day vs. night vs. dusk; clean vs. disturbed vs. ransacked)", "line_end": 68, "line_start": 68, "recommended_fix": "Abstract these state categories into the VISUAL_WORLD_RULES or a project-specific state-change schema provided in the input.", "severity": "P1", "why_problematic": "This strict rule forces the LLM to use a specific set of semantic states for node splitting, which may conflict with or limit the actual requirements of a specific scenario."}], "path": "prompts/_base/background_chain_planning/1.202604271600/system.md", "scan_kind": "prompt", "sha256": "c5be6528964195a14ec17b754fb182713e22ed8e4241b8e1c41be8dca0d51601"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 57, "chunk_start": 1, "chunk_summary": "The schema uses a hardcoded list of location types to instruct the LLM on background continuity routing decisions.", "duration_ms": 15831, "findings": [{"category": "llm_closed_list_instruction", "evidence": "(street, road, coast, sea, forest, yard, park, exterior rooftop, public square, beach, dock, vehicle exterior, etc.)", "line_end": 8, "line_start": 5, "recommended_fix": "Inject the 'is_outdoor' or 'skip_chain' flag into the prompt context from the location's SOT metadata, rather than asking the LLM to infer it from a list of examples in the schema description.", "severity": "P2", "why_problematic": "The schema description provides a closed list of domain tropes to guide the LLM in classifying open-world locations as 'OUTDOOR'. This classification determines whether to skip background chain rendering, a significant routing decision that should ideally be driven by structured metadata (SOT) rather than heuristic string matching or LLM inference against a hardcoded list in the schema."}], "path": "prompts/_base/background_chain_planning/3.202604290417/schema.json", "scan_kind": "prompt", "sha256": "d0bf9f8dfd54f532aecbf6a5f81e530510d339059878e7f057c80afc06628352"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 8, "chunk_start": 1, "chunk_summary": "No actionable findings; the file contains a standard technical JSON schema for prompt output validation.", "duration_ms": 2376, "findings": [], "path": "prompts/_base/background_chain_render/1.202604271700/schema.json", "scan_kind": "prompt", "sha256": "e3e7189629203831751b57b20e820f18eadcb50cdedfb06b1821d12d85ee563b"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 103, "chunk_start": 1, "chunk_summary": "The prompt uses hardcoded lists of location types and environmental states to drive critical routing and node-splitting logic, creating a dependency on closed-list semantic classifiers.", "duration_ms": 17506, "findings": [{"category": "llm_closed_list_instruction", "evidence": "If the location is OUTDOOR / OPEN-AIR (street, road, alley, coast, sea, beach, dock, yard, garden, park, public square, forest, mountain, exterior rooftop view, vehicle exterior, open-air market, etc.)", "line_end": 29, "line_start": 18, "recommended_fix": "Replace the keyword-based heuristic with a structured boolean or enum (e.g., 'continuity_mode': 'skip' | 'plan') provided in the LOCATION CONTEXT input.", "severity": "P1", "why_problematic": "The skip_chain routing decision is driven by a hardcoded list of location keywords in the system prompt. This forces the LLM to perform semantic classification against a closed list of examples rather than relying on structured metadata from the location SOT."}, {"category": "llm_closed_list_instruction", "evidence": "different time-of-day (day / night / dusk / dawn) ... different room state (clean / lived-in / disturbed / heavily-ransacked)", "line_end": 42, "line_start": 38, "recommended_fix": "Move the definition of significant state-change dimensions to the VISUAL_WORLD_RULES or provide a structured list of valid states for the specific location in the input context.", "severity": "P1", "why_problematic": "The logic for splitting background nodes relies on a hardcoded list of semantic states and tropes (e.g., 'ransacked'). This limits the planner's ability to handle arbitrary or project-specific state changes that aren't explicitly listed in the system prompt."}], "path": "prompts/_base/background_chain_planning/3.202604290417/system.md", "scan_kind": "prompt", "sha256": "337f4a1ee3c8e226a3e31484051d1ad799754b4add68fd5695f12602ceb6ac45"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 57, "chunk_start": 1, "chunk_summary": "The schema defines the structure for background chain planning, including a boolean to skip chaining for outdoor locations based on a hardcoded list of environment tropes.", "duration_ms": 15032, "findings": [{"category": "llm_closed_list_instruction", "evidence": "(street, road, coast, sea, forest, yard, park, exterior rooftop, public square, beach, dock, vehicle exterior, etc.)", "line_end": 7, "line_start": 7, "recommended_fix": "Remove the specific list of examples from the schema description. Instead, refer to a 'is_outdoor' or 'is_open_air' property that should be determined during the location analysis phase based on project-wide world rules.", "severity": "P2", "why_problematic": "The schema description uses a hardcoded list of environment tropes to define the semantic boundary for the 'skip_chain' routing decision. This biases the LLM toward specific outdoor types and should ideally be handled by a centralized world-rule SOT or a more abstract definition of environment properties."}], "path": "prompts/_base/background_chain_planning/4.202604291315/schema.json", "scan_kind": "prompt", "sha256": "d0bf9f8dfd54f532aecbf6a5f81e530510d339059878e7f057c80afc06628352"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 30, "chunk_start": 1, "chunk_summary": "The prompt delegates pipeline routing logic to an LLM semantic classification of the location's physical nature (indoor vs. outdoor).", "duration_ms": 21288, "findings": [{"category": "llm_closed_list_instruction", "evidence": "Decide first whether to skip chain rendering... A) If SKIP applies (outdoor / open-air)... B) Otherwise (indoor / enclosed / fixed-set)", "line_end": 20, "line_start": 14, "recommended_fix": "Include a structured field in the location context (e.g., 'requires_chain_planning': boolean) and use that to explicitly instruct the LLM on which JSON branch to output.", "severity": "P1", "why_problematic": "The prompt uses natural language categories ('outdoor / open-air' vs 'indoor / enclosed / fixed-set') to drive technical pipeline routing. This forces the LLM to make a semantic judgment on open-world location descriptions to determine the JSON structure and execution path, which is prone to inconsistency and should be defined in the location's structured metadata."}], "path": "prompts/_base/background_chain_planning/2.202604272110/user_template.md", "scan_kind": "prompt", "sha256": "2f771dba85c03ee0942052832f240282e78c75afd0ef85dfb3ab89881f777da4"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 112, "chunk_start": 1, "chunk_summary": "The prompt contains hardcoded lists of location types and visual states used to guide LLM classification and node generation, which should be derived from structured world rules.", "duration_ms": 14535, "findings": [{"category": "llm_closed_list_instruction", "evidence": "rooftop slab, building yard, courtyard, parking lot, building entrance staircase, vehicle deck of an enclosed boat... a road far from any building, an unrelated forest, a wide beach, a public street block, a mountain trail, a public square", "line_end": 25, "line_start": 21, "recommended_fix": "Move location classification (chained vs. detached) to a structured metadata field in the input JSON or define the classification criteria in the VISUAL_WORLD_RULES SOT.", "severity": "P1", "why_problematic": "The LLM is instructed to classify open-world locations into 'IMMEDIATE EXTERIORS' or 'DETACHED OPEN AREA' using a hardcoded list of examples to drive the skip_chain routing decision. This creates a maintenance burden and potential for misclassification as the variety of locations grows."}, {"category": "scenario_dependent_prompt", "evidence": "clean / lived-in / disturbed / heavily-ransacked", "line_end": 82, "line_start": 48, "recommended_fix": "Remove specific state examples from the system prompt and rely on the VISUAL_WORLD_RULES excerpt (line 59) to define valid states for the current project.", "severity": "P1", "why_problematic": "Specific visual states and surface conditions are hardcoded as examples for node splitting and description generation. These are domain-specific tropes that should be provided by the project-specific VISUAL_WORLD_RULES rather than being baked into the base system prompt."}], "path": "prompts/_base/background_chain_planning/4.202604291315/system.md", "scan_kind": "prompt", "sha256": "b6d96cccd24910b03feb484005f1233195e64b54e48add4ed8c1f3fc1ecec938"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 21, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 4253, "findings": [], "path": "prompts/_base/background_classify/1.202604291937/schema.json", "scan_kind": "prompt", "sha256": "2be2f04c944552e255fe943261bad8cb500348434982028de41ff249a646669e"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 31, "chunk_start": 1, "chunk_summary": "The prompt requires the LLM to semantically classify locations as indoor or outdoor to determine pipeline routing for background chain generation.", "duration_ms": 22450, "findings": [{"category": "llm_closed_list_instruction", "evidence": "A) If SKIP applies (outdoor / open-air): ... B) Otherwise (indoor / enclosed / fixed-set):", "line_end": 20, "line_start": 14, "recommended_fix": "Define the 'skip_chain' or 'environment_type' property as a structured field in the location SOT and pass it as a boolean or enum to the prompt, rather than asking the LLM to decide based on a description.", "severity": "P1", "why_problematic": "The pipeline uses the LLM to perform a semantic classification (indoor vs. outdoor) to decide whether to skip background chain generation. This makes routing dependent on natural language interpretation of 'open-world' descriptions rather than structured metadata, which can lead to inconsistent behavior across different scenarios."}], "path": "prompts/_base/background_chain_planning/3.202604290417/user_template.md", "scan_kind": "prompt", "sha256": "304dac14ef0a3261104a157cadae45f43795d187c7d3292ee6de1665b45bc763"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 30, "chunk_start": 1, "chunk_summary": "The schema defines the structure for background chain rendering outputs and is free of scenario-specific pollution or pattern-based semantic routing.", "duration_ms": 8728, "findings": [], "path": "prompts/_base/background_chain_render/2.202604282201/schema.json", "scan_kind": "prompt", "sha256": "0add65ca63b853793c54fbf527a3c182b69ad8b0f9e90764495afed2ef579fe7"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 21, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 3516, "findings": [], "path": "prompts/_base/background_classify/1.202604300430/schema.json", "scan_kind": "prompt", "sha256": "2be2f04c944552e255fe943261bad8cb500348434982028de41ff249a646669e"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 11, "chunk_start": 1, "chunk_summary": "The prompt template is a generic structure for classification using placeholders and contains no scenario-specific pollution or hardcoded semantic rules.", "duration_ms": 7246, "findings": [], "path": "prompts/_base/background_classify/1.202604291937/user_template.md", "scan_kind": "prompt", "sha256": "fd92c70e978782eabcf5b7165714fb2ff68250a2348d1307838737cc0d7991c3"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 26, "chunk_start": 1, "chunk_summary": "The prompt template contains hardcoded semantic exclusions for visual content that should be driven by scenario-specific metadata or style SOTs.", "duration_ms": 18247, "findings": [{"category": "llm_closed_list_instruction", "evidence": "NO people, NO blood, NO weapons, NO action — empty/quiet space only.", "line_end": 21, "line_start": 21, "recommended_fix": "Replace the hardcoded list with a template variable such as {content_constraints} or {negative_prompt_instructions} derived from the scenario's genre or safety configuration.", "severity": "P2", "why_problematic": "Hardcoding specific visual exclusions like 'blood' or 'weapons' in a base template prevents the pipeline from supporting scenarios where these elements are contextually appropriate (e.g., a crime scene, a hospital, or an armory). These constraints represent domain-specific tropes that should be emitted by a structured world/rule SOT or passed as dynamic style variables."}], "path": "prompts/_base/background_chain_render/2.202604282201/user_template.md", "scan_kind": "prompt", "sha256": "2d6a41752148553a33e814740e39cafcea066aa1542352d4e719cc3262a1cb37"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 11, "chunk_start": 1, "chunk_summary": "No actionable findings; the template is a structural skeleton using placeholders for rules and data without hardcoded scenario pollution.", "duration_ms": 6685, "findings": [], "path": "prompts/_base/background_classify/1.202604300430/user_template.md", "scan_kind": "prompt", "sha256": "fd92c70e978782eabcf5b7165714fb2ff68250a2348d1307838737cc0d7991c3"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 26, "chunk_start": 1, "chunk_summary": "The template contains hardcoded semantic constraints and interior-specific requirements that bias background generation against non-interior or non-sanitized scenarios.", "duration_ms": 23486, "findings": [{"category": "scenario_dependent_prompt", "evidence": "NO people, NO blood, NO weapons, NO action — empty/quiet space only.", "line_end": 21, "line_start": 21, "recommended_fix": "Remove hardcoded exclusions and replace with a reference to scenario-specific style/content rules provided in the context.", "severity": "P1", "why_problematic": "Hardcodes semantic exclusions and atmospheric constraints (quiet/empty) that may conflict with specific story genres like horror, war, or cluttered environments. These should be driven by the scenario's visual rules or metadata rather than being hardcoded in a base template."}, {"category": "scenario_dependent_prompt", "evidence": "thoroughly describe wall finish, floor, ceiling, lighting, palette. ... doors, windows, fixtures, furniture.", "line_end": 25, "line_start": 24, "recommended_fix": "Generalize the requirement to 'environmental boundaries and surfaces' or provide a conditional list of descriptors based on the node's environment type (e.g., interior vs. exterior).", "severity": "P1", "why_problematic": "Assumes all root background nodes are interior architectural spaces. This forces the LLM to hallucinate or misapply interior descriptors to outdoor or abstract environments (e.g., forests, space, or open landscapes)."}], "path": "prompts/_base/background_chain_render/1.202604271700/user_template.md", "scan_kind": "prompt", "sha256": "2d6a41752148553a33e814740e39cafcea066aa1542352d4e719cc3262a1cb37"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 36, "chunk_start": 1, "chunk_summary": "No actionable findings; the schema defines technical metadata and ID patterns for background classification without scenario-specific pollution or pattern-based semantic judgment.", "duration_ms": 3964, "findings": [], "path": "prompts/_base/background_classify/2.202604300500/schema.json", "scan_kind": "prompt", "sha256": "226f089229ca74dab57b5b2c18f07b808701f6e8f97b6cc32e4477c0488ad6e9"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 31, "chunk_start": 1, "chunk_summary": "The prompt template contains hard-coded semantic categories for routing decisions, which biases the LLM's classification of open-world location data.", "duration_ms": 31524, "findings": [{"category": "llm_closed_list_instruction", "evidence": "(outdoor / open-air) ... (indoor / enclosed / fixed-set)", "line_end": 20, "line_start": 16, "recommended_fix": "Remove the parenthetical examples from lines 16 and 20. Rely on the 'SKIP DECISION' logic in the system message and the provided 'world_rules_excerpt' to guide the LLM's decision-making process.", "severity": "P1", "why_problematic": "The prompt provides a closed list of semantic examples to guide a binary routing decision (skip_chain). This forces the LLM to map open-world location descriptions to these specific tropes, which may not be exhaustive or appropriate for all scenarios. Such logic should be defined in the system message or derived from the structured world rules rather than hard-coded in the user template."}], "path": "prompts/_base/background_chain_planning/4.202604291315/user_template.md", "scan_kind": "prompt", "sha256": "304dac14ef0a3261104a157cadae45f43795d187c7d3292ee6de1665b45bc763"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 25, "chunk_start": 1, "chunk_summary": "The system prompt defines a classification logic for background rendering strategies based on shot counts and indoor/outdoor status, with explicit rules to avoid scenario-specific pollution and enforce technical ID constraints.", "duration_ms": 17548, "findings": [], "path": "prompts/_base/background_classify/1.202604291937/system.md", "scan_kind": "prompt", "sha256": "5125b2d75756681b0c2c536beebbd0c05e16abce623ae4199402645bca369b0d"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 53, "chunk_start": 1, "chunk_summary": "The prompt contains hardcoded visual constraints, camera specifications, and specific prop examples that should be driven by structured scenario or style data.", "duration_ms": 24031, "findings": [{"category": "scenario_dependent_prompt", "evidence": "35mm cinematic still aesthetic... Eye-level approx 1.6m, slight wide angle ~28mm", "line_end": 17, "line_start": 16, "recommended_fix": "Move aesthetic and camera defaults to a configuration object or a 'Visual Style' SOT section.", "severity": "P1", "why_problematic": "Hardcoding specific focal lengths and aesthetic styles ('35mm', '28mm') into the system prompt limits the visual variety of the pipeline. These parameters should be provided by a global style SOT or per-shot metadata."}, {"category": "scenario_dependent_prompt", "evidence": "NO people, NO blood, NO broken glass, NO action, NO weapons.", "line_end": 20, "line_start": 20, "recommended_fix": "Replace hardcoded exclusions with a dynamic 'Visual Constraints' list derived from the scenario's genre or environment rules.", "severity": "P1", "why_problematic": "This is a hardcoded list of semantic exclusions. While 'no people' is appropriate for a background render, 'no blood' and 'no broken glass' are scenario-dependent (e.g., a crime scene or post-disaster setting) and represent domain trope pollution."}, {"category": "scenario_dependent_prompt", "evidence": "TV is in the upper-left... sofa cluster... window on the right... DO NOT redraw the TV/sofa/window", "line_end": 43, "line_start": 36, "recommended_fix": "Use abstract placeholders like '[Primary Object]' or '[Furniture A]' in guide examples.", "severity": "P2", "why_problematic": "The use of specific domestic props (TV, sofa) in instructions biases the LLM's spatial reasoning toward residential interiors, which may be inappropriate for other scenario types (e.g., outdoor, industrial, or sci-fi)."}], "path": "prompts/_base/background_chain_render/2.202604282201/system.md", "scan_kind": "prompt", "sha256": "d1cea9a7d76fc41325a290eb3a428e03bcf5c0938ef39b3bb7fbae96d858a657"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 36, "chunk_start": 1, "chunk_summary": "No actionable findings; the schema defines technical structure and metadata for background classification without scenario-specific pollution or semantic string judgment.", "duration_ms": 3358, "findings": [], "path": "prompts/_base/background_classify/3.202604300520/schema.json", "scan_kind": "prompt", "sha256": "226f089229ca74dab57b5b2c18f07b808701f6e8f97b6cc32e4477c0488ad6e9"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 27, "chunk_start": 1, "chunk_summary": "The system prompt contains hardcoded stylistic biases, specific prop exclusions, and default camera settings that should be driven by scenario-specific data or a style SOT.", "duration_ms": 31845, "findings": [{"category": "scenario_dependent_prompt", "evidence": "NO broken glass, NO action, NO weapons. Reflect atmosphere only via worn surfaces, dust, dim light, weathered furniture, etc.", "line_end": 20, "line_start": 20, "recommended_fix": "Move stylistic preferences and specific prop exclusions to a structured Style of Truth (SOT) or scenario-specific configuration rather than hardcoding them in the base system prompt.", "severity": "P1", "why_problematic": "This instruction hardcodes both specific negative constraints (broken glass, weapons) and a specific 'gritty' aesthetic (worn surfaces, dust, weathered furniture). This biases the visual generation pipeline toward a specific genre or state, preventing the system from accurately rendering clean, modern, or high-end backgrounds as defined in an arbitrary open-world scenario."}, {"category": "scenario_dependent_prompt", "evidence": "Eye-level approx 1.6m, slight wide angle ~28mm", "line_end": 17, "line_start": 17, "recommended_fix": "Pass camera parameters as structured variables in the user message rather than hardcoding defaults in the system prompt.", "severity": "P2", "why_problematic": "Hardcoding a default camera height and focal length in the system prompt can conflict with scenario-specific camera requirements (e.g., low-angle shots, telephoto shots) even with the provided caveat, as LLMs often over-prioritize explicit numeric constraints in 'Hard Constraints' sections."}], "path": "prompts/_base/background_chain_render/1.202604271700/system.md", "scan_kind": "prompt", "sha256": "d1dc39ca307411646ad79d39dfbe426fc232f8ef346056088e9c4852de04a1cc"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 58, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 5275, "findings": [], "path": "prompts/_base/background_master_plan/1.202604292000/schema.json", "scan_kind": "prompt", "sha256": "1257ed08c8b548f4ddf34f4a66bc25cdf48335eaa4151a602b030c31c327e2f3"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 17, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 3969, "findings": [], "path": "prompts/_base/background_master_plan/1.202604292000/user_template.md", "scan_kind": "prompt", "sha256": "93dbe3a995f82ee34482a1b1403ead2b9c630689b2cc4398e9df0a23060f6560"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 18, "chunk_start": 1, "chunk_summary": "The prompt template provides a structural framework for clustering locations and assigning technical classifications based on provided metadata, with no scenario-specific pollution or pattern-based semantic judgments.", "duration_ms": 16119, "findings": [], "path": "prompts/_base/background_classify/2.202604300500/user_template.md", "scan_kind": "prompt", "sha256": "f2a44f60cc72c3d5919e162301bd8f09e5bb291a1d087ef35a2ec85462ab32fc"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 51, "chunk_start": 1, "chunk_summary": "The system prompt for background classification is well-structured, using technical IDs and explicit instructions to avoid scenario-specific pollution while defining clear logic for visual routing.", "duration_ms": 17387, "findings": [], "path": "prompts/_base/background_classify/2.202604300500/system.md", "scan_kind": "prompt", "sha256": "fec5b2a5555284cbc6769e943dfedb187a3498b10f8233192ca3156dbcb8a313"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 17, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 3397, "findings": [], "path": "prompts/_base/background_master_plan/2.202605091400/user_template.md", "scan_kind": "prompt", "sha256": "93dbe3a995f82ee34482a1b1403ead2b9c630689b2cc4398e9df0a23060f6560"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 66, "chunk_start": 1, "chunk_summary": "The system prompt contains hardcoded Korean keyword lists for semantic indoor/outdoor classification and a magic-number heuristic for visual pipeline routing.", "duration_ms": 18590, "findings": [{"category": "llm_closed_list_instruction", "evidence": "Korean clues that often imply indoor: 내부 / 안 / 방 / 실 / 층 / 차내 / 매장 안 / 사무실 ... Korean clues: 외부 / 옥상 / 거리 / 도로 / 공터 / 골목 / 해안 / 숲 / 마당", "line_end": 20, "line_start": 18, "recommended_fix": "Remove the specific keyword lists. Instead, provide high-level spatial reasoning principles or rely on a structured World SOT where location properties are pre-defined or analyzed by a separate spatial reasoning step.", "severity": "P1", "why_problematic": "The prompt uses a closed list of specific Korean tokens to drive open-world semantic classification (is_indoor). This biases the LLM toward specific vocabulary and may fail or misclassify locations that use synonymous or context-dependent terminology not present in the list."}, {"category": "scenario_dependent_prompt", "evidence": "total_shots >= 3 AND has_indoor -> chain_bg", "line_end": 54, "line_start": 53, "recommended_fix": "Move the threshold and routing logic to a configuration file or a structured rule-set (SOT) that the pipeline consumes, rather than hardcoding the '3 shots' rule in the prompt text.", "severity": "P1", "why_problematic": "This is a hardcoded heuristic (magic number '3') that directly routes the visual generation pipeline between dedicated background rendering and reference-based rendering. Such logic should be part of a configurable policy or SOT rather than embedded in a system prompt."}], "path": "prompts/_base/background_classify/3.202604300520/system.md", "scan_kind": "prompt", "sha256": "bfa0a31e9c0d0d0b60cc3bc8819b0e5bdd093e8776b3721c4b4f5beb604754ed"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 18, "chunk_start": 1, "chunk_summary": "The prompt contains a hardcoded heuristic for semantic classification of background types which should be managed by structured rules or code.", "duration_ms": 19080, "findings": [{"category": "llm_closed_list_instruction", "evidence": "assign kind per the heuristic (chain_bg if total_shots>=3 AND has_indoor, else prev_shot_ref)", "line_end": 15, "line_start": 15, "recommended_fix": "Move the classification logic to the data processing layer before the prompt is called, or define the 'kind' assignment rules in a structured visual world rule SOT.", "severity": "P1", "why_problematic": "This line embeds a hardcoded semantic classification heuristic ('chain_bg' vs 'prev_shot_ref') based on shot counts and indoor status. This logic dictates visual routing and background handling, but relies on the LLM to correctly interpret and apply the math/logic within a natural language prompt rather than using a structured rule set or code-driven classification."}], "path": "prompts/_base/background_classify/3.202604300520/user_template.md", "scan_kind": "prompt", "sha256": "f2a44f60cc72c3d5919e162301bd8f09e5bb291a1d087ef35a2ec85462ab32fc"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 47, "chunk_start": 1, "chunk_summary": "The system prompt contains scenario-specific visual state examples and cultural references that bias the LLM's art-direction planning.", "duration_ms": 17633, "findings": [{"category": "scenario_dependent_prompt", "evidence": "dusk_ransacked, night_blood_curtain_drawn", "line_end": 20, "line_start": 20, "recommended_fix": "Replace specific trope examples with abstract categories or instructions to derive state labels from the provided scene text using a structured schema defined in the world SOT.", "severity": "P1", "why_problematic": "The prompt provides specific visual tropes (ransacked, blood) as examples for the state_label field, which is the primary driver for downstream image generation. This biases the LLM toward these specific tropes and encourages hardcoded semantic strings instead of deriving states from a structured world SOT."}, {"category": "scenario_dependent_prompt", "evidence": "day_normal, dusk_ransacked, night_blood_curtain_drawn", "line_end": 39, "line_start": 39, "recommended_fix": "Use generic architectural or lighting state examples (e.g., 'day_clear', 'night_interior_lit') and refer to the world SOT for plot-specific state requirements.", "severity": "P1", "why_problematic": "Repetition of scenario-specific visual state examples in field definitions, reinforcing the bias toward specific plot tropes (ransacked, blood) in the generated output."}, {"category": "scenario_dependent_prompt", "evidence": "ok-tab-bang_living_room", "line_end": 19, "line_start": 19, "recommended_fix": "Use a generic placeholder like 'protagonist_home_living_room' as the negative example.", "severity": "P2", "why_problematic": "Uses a specific cultural/scenario-based name as a negative example. While intended to prevent pollution, the example itself is scenario-specific pollution in a base prompt."}], "path": "prompts/_base/background_master_plan/1.202604292000/system.md", "scan_kind": "prompt", "sha256": "fd6480acc85f30e8c7d4557662421e9c45521fa5699c7b3d0b1379242bb89f30"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 82, "chunk_start": 1, "chunk_summary": "The prompt contains closed-list semantic classifiers for story states and architectural spaces that bias the master planner toward specific genre tropes and domestic settings.", "duration_ms": 11189, "findings": [{"category": "llm_closed_list_instruction", "evidence": "\"main\" | \"kitchen\" | \"rooftop\" | \"stairs\" | \"yard\" | \"exterior\" | \"office\"", "line_end": 26, "line_start": 26, "recommended_fix": "Allow the LLM to generate a semantic space_key based on the scenario text or move this list to a project-specific world-rule SOT.", "severity": "P1", "why_problematic": "This is a closed list of architectural labels used to classify open-world story locations. It forces diverse settings (e.g., laboratories, dungeons, cockpits) into a narrow set of domestic/office tropes, biasing downstream visual generation."}, {"category": "llm_closed_list_instruction", "evidence": "`normal` / `quiet` / `busy` / `busy_exit` / `ransacked` / `clean_after` / `blood_scene` / `intrusion` / `arrival` / `evidence_display` / `dream_or_vision_state` ", "line_end": 43, "line_start": 39, "recommended_fix": "Define state_class requirements in the input scenario spec or allow the LLM to propose descriptive state keys that are then normalized by a separate genre-aware validator.", "severity": "P1", "why_problematic": "The state_class enum contains genre-specific tropes (crime/thriller) that pollute the master planner's ability to handle arbitrary scenarios. Forcing the LLM to map story events to these specific labels limits visual and narrative flexibility."}], "path": "prompts/_base/background_master_plan/2.202605091400/system.md", "scan_kind": "prompt", "sha256": "40c7bc11082d014da97cba4b839b5a1380771c7fd3e1d978aea762e6aff2e94c"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 17, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 3543, "findings": [], "path": "prompts/_base/background_master_plan/3.202605092023/user_template.md", "scan_kind": "prompt", "sha256": "ee647c0273d545c417474316d9ba4a520338c78467df5e314d82e63f40210171"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 72, "chunk_start": 1, "chunk_summary": "The schema contains scenario-specific enums for background types and states, constraining the LLM to a specific genre and set of locations.", "duration_ms": 18092, "findings": [{"category": "llm_closed_list_instruction", "evidence": "\"enum\": [\"main\", \"kitchen\", \"rooftop\", \"stairs\", \"yard\", \"exterior\", \"office\"]", "line_end": 31, "line_start": 31, "recommended_fix": "Change to a string field or move the enum to a scenario-specific configuration that is injected at runtime.", "severity": "P1", "why_problematic": "Forces the LLM to categorize backgrounds into a fixed set of common domestic/office locations, which fails for non-urban or non-modern scenarios (e.g., sci-fi, fantasy, or nature-based stories)."}, {"category": "llm_closed_list_instruction", "evidence": "\"enum\": [\"normal\", \"quiet\", \"busy\", \"busy_exit\", \"ransacked\", \"clean_after\", \"blood_scene\", \"intrusion\", \"arrival\", \"evidence_display\", \"dream_or_vision_state\"]", "line_end": 43, "line_start": 39, "recommended_fix": "Replace the hardcoded enum with a string field or a dynamic enum sourced from the specific scenario's world-building rules.", "severity": "P1", "why_problematic": "Contains scenario-specific narrative tropes (e.g., 'blood_scene', 'ransacked', 'evidence_display') that pollute the base schema with crime-genre assumptions, biasing arbitrary future scenarios."}], "path": "prompts/_base/background_master_plan/2.202605091400/schema.json", "scan_kind": "prompt", "sha256": "fd1bdaecd75993bdadbc033041680a3e3677ed0e0a45c3912dbea52fa796b0b7"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 99, "chunk_start": 1, "chunk_summary": "The background generation planner system prompt is clean and contains explicit instructions to avoid scenario-specific pollution and pattern-based semantic judgment.", "duration_ms": 8311, "findings": [], "path": "prompts/_base/background_planner/1.202604290417/system.md", "scan_kind": "prompt", "sha256": "4fb8e5fd42eb39a819fc9768c9000a77b17f6d116d615c3a0244c09e69876fc5"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 98, "chunk_start": 1, "chunk_summary": "The prompt defines a background master plan schema using closed-list enums for spatial categories and visual states, including scenario-specific tropes.", "duration_ms": 12406, "findings": [{"category": "llm_closed_list_instruction", "evidence": "\"main\" | \"kitchen\" | \"rooftop\" | \"stairs\" | \"yard\" | \"exterior\" | \"office\"", "line_end": 19, "line_start": 19, "recommended_fix": "Allow the LLM to generate a semantic 'space_key' based on the scenario context or provide the valid space keys for the specific building group in the input context.", "severity": "P1", "why_problematic": "Forces open-world story locations into a hardcoded set of spatial categories. This causes semantic drift when the scenario involves spaces not in the list (e.g., a 'spaceship' or 'cave'), leading to the 'main' fallback mentioned on line 90."}, {"category": "llm_closed_list_instruction", "evidence": "`normal` / `quiet` / `busy` / `busy_exit` / `ransacked` / `clean_after` / `blood_scene` / `intrusion` / `arrival` / `evidence_display` / `dream_or_vision_state`", "line_end": 43, "line_start": 43, "recommended_fix": "Move state classification to a scenario-specific configuration or allow the LLM to define the state label naturally, using a broader set of architectural/atmospheric categories if an enum is required.", "severity": "P1", "why_problematic": "The state_class enum contains highly specific story tropes (e.g., 'blood_scene', 'ransacked', 'evidence_display') that pollute the base prompt with scenario-specific assumptions. This limits the system's ability to handle genres or plots where these states are irrelevant or where other states are critical."}, {"category": "scenario_dependent_prompt", "evidence": "Example (group `bg_large_mart` covers L09 외부 + L10 매장 + L14 사무실)", "line_end": 78, "line_start": 74, "recommended_fix": "Use abstract placeholders (e.g., Group_A, Loc_01, Space_X) in examples to ensure the LLM focuses on the structural logic rather than specific scenario types.", "severity": "P2", "why_problematic": "Uses a concrete scenario (a large mart) to define the logic for floor plan linking. While illustrative, it embeds specific domain nomenclature like 'sales_floor' and 'exterior_entrance' as the primary reference for the LLM's reasoning pattern."}], "path": "prompts/_base/background_master_plan/3.202605092023/system.md", "scan_kind": "prompt", "sha256": "4358960fd84707d2d4bd36eb2afe5525ca1af6a5cf1ff707cbb113af50e9a280"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 25, "chunk_start": 1, "chunk_summary": "The prompt uses LLM semantic inference for pipeline routing and contains scenario-specific examples.", "duration_ms": 44188, "findings": [{"category": "semantic_string_judgment", "evidence": "has at least one indoor anchor", "line_end": 21, "line_start": 6, "recommended_fix": "Provide an explicit 'is_indoor' boolean in the location input data and use it in the heuristic logic.", "severity": "P1", "why_problematic": "The pipeline routes rendering strategies based on the LLM's semantic interpretation of 'indoor' vs 'outdoor' locations. This open-world classification of scenario text drives critical visual pipeline branching without a structured SOT attribute."}, {"category": "scenario_dependent_prompt", "evidence": "rooftop building, bg_rooftop_unit, 옥탑방_단지", "line_end": 13, "line_start": 11, "recommended_fix": "Replace scenario-specific examples with generic placeholders like 'building_a' or 'location_type_x'.", "severity": "P2", "why_problematic": "The prompt contains scenario-specific tropes (rooftop units) and Korean-specific place names as examples. This pollutes the base system prompt with domain-specific nomenclature that should be abstracted to remain generic."}], "path": "prompts/_base/background_classify/1.202604300430/system.md", "scan_kind": "prompt", "sha256": "0946fca18949414a098067a6c1c8647d323c5374af6e1422e9641b5c651755cf"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 77, "chunk_start": 1, "chunk_summary": "The schema defines closed-list enums for location types and narrative states, which forces the LLM to categorize open-world story elements into a fixed set of tropes and architectural labels.", "duration_ms": 18002, "findings": [{"category": "llm_closed_list_instruction", "evidence": "\"enum\": [\"main\", \"kitchen\", \"rooftop\", \"stairs\", \"yard\", \"exterior\", \"office\"]", "line_end": 15, "line_start": 15, "recommended_fix": "Replace the fixed enum with a dynamic reference to a world-building SOT or use broader, more abstract categories (e.g., interior/exterior/transitional).", "severity": "P1", "why_problematic": "The space_key_hint enum (also appearing on line 36) restricts location categorization to a fixed set of residential/office types, which fails to scale to diverse scenarios such as wilderness, industrial, or fantasy settings."}, {"category": "llm_closed_list_instruction", "evidence": "\"enum\": [\"normal\", \"quiet\", \"busy\", \"busy_exit\", \"ransacked\", \"clean_after\", \"blood_scene\", \"intrusion\", \"arrival\", \"evidence_display\", \"dream_or_vision_state\"]", "line_end": 48, "line_start": 44, "recommended_fix": "Abstract the state_class into visual/narrative intensity levels or move these trope-specific labels to a scenario-specific configuration file.", "severity": "P1", "why_problematic": "The state_class enum hardcodes specific narrative tropes like 'blood_scene', 'ransacked', and 'evidence_display' into the schema, forcing the LLM to map arbitrary story events into a narrow, pre-defined set of visual states."}], "path": "prompts/_base/background_master_plan/3.202605092023/schema.json", "scan_kind": "prompt", "sha256": "89d5b432867c456662276679f96828b35c4c06811bf627a9f8d7e86d5f53bfdf"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 32, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 13658, "findings": [], "path": "prompts/_base/background_planner/1.202604290417/user_template.md", "scan_kind": "prompt", "sha256": "529063896441903d8aa04130fc5e3cf9d71d999590bb6d67bfdb01a7dd2c39f2"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 115, "chunk_start": 1, "chunk_summary": "The prompt contains several lists of specific architectural tropes and scenario-specific state examples used to guide the LLM's semantic grouping of locations.", "duration_ms": 12478, "findings": [{"category": "llm_closed_list_instruction", "evidence": "bathroom, office, meeting room, CEO room, living room, bedroom, hallway, kitchen, storage, rooftop slab, parking lot, entrance plaza, shop front sidewalk", "line_end": 24, "line_start": 10, "recommended_fix": "Replace specific room and feature examples with abstract physical constraints or move these examples to a structured 'Architectural Logic' SOT that can be swapped per project.", "severity": "P1", "why_problematic": "The prompt uses a closed list of common architectural tropes to instruct the LLM on how to determine physical connectivity and building membership. This biases the planner toward specific modern/urban settings and may lead to incorrect groupings in scenarios with different architectural logic (e.g., sci-fi, fantasy, or historical)."}, {"category": "scenario_dependent_prompt", "evidence": "apt_unit_a, studio_loft, cafe_first_floor, rooftop_dwelling, mart_complex", "line_end": 30, "line_start": 30, "recommended_fix": "Use generic placeholders for ID examples, such as complex_alpha or building_01.", "severity": "P2", "why_problematic": "The identifier examples contain specific scenario types (cafe, mart, loft) which act as subtle pollution for the LLM's naming conventions."}, {"category": "scenario_dependent_prompt", "evidence": "cb_l05_living_night_blood", "line_end": 60, "line_start": 60, "recommended_fix": "Change the example to a neutral state variant, e.g., cb_l05_living_night_v2.", "severity": "P2", "why_problematic": "The example ID includes a specific narrative state ('blood') which is scenario-specific pollution and may bias the LLM to look for or create similar violent state variants."}], "path": "prompts/_base/background_planner/2.202604291245/system.md", "scan_kind": "prompt", "sha256": "29acbbbf4a25b04ca81ac7a599db9aedf50c27dfb925b90d265267f18d2f15d5"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 22, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 2725, "findings": [], "path": "prompts/_base/background_prompt/1.202604292053/schema.json", "scan_kind": "prompt", "sha256": "3ae7fb278c13dbc525e3faa53f960af7103e7ad7ed349077c414b4d196aedef9"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 38, "chunk_start": 1, "chunk_summary": "The prompt template defines structural logic for background planning based on location connectivity and shot frequency without scenario-specific pollution or hardcoded semantic string patterns.", "duration_ms": 8315, "findings": [], "path": "prompts/_base/background_planner/2.202604291245/user_template.md", "scan_kind": "prompt", "sha256": "9b10c2ba3118987737fc486111f5b8eff83b3ab2d187ce8f763ab19e7c561e4b"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 165, "chunk_start": 1, "chunk_summary": "The schema defines the structure for background planning, including floor plan grouping and background chaining, but contains scenario-specific examples and semantic classifiers in enums.", "duration_ms": 18904, "findings": [{"category": "scenario_dependent_prompt", "evidence": "e.g. 'okt_room'", "line_end": 24, "line_start": 24, "recommended_fix": "Replace with a generic example like 'building_a' or 'main_house'.", "severity": "P2", "why_problematic": "The use of 'okt_room' (옥탑방) as a primary example for a building group is a scenario-specific trope that can bias the LLM's spatial reasoning or naming conventions in non-urban or different genre scenarios."}, {"category": "llm_closed_list_instruction", "evidence": "enum: [\"outdoor_3+\", \"low_freq_2\", \"single_shot\"]", "line_end": 146, "line_start": 146, "recommended_fix": "Split into separate fields: 'is_outdoor' (boolean) and 'frequency_category' (enum), or derive this classification in post-processing logic based on the 'shot_count' and location metadata.", "severity": "P1", "why_problematic": "This enum forces the LLM to perform a combined semantic (outdoor vs indoor) and quantitative (shot count) classification into a single string. This logic is redundant as 'shot_count' is already a field (line 140) and 'outdoor' status should be a structured property of the location rather than a string-based classification label."}], "path": "prompts/_base/background_planner/1.202604290417/schema.json", "scan_kind": "prompt", "sha256": "3f106edc052e99e473f5131c17712a11fa1600e67c445f94dbc65ebc84a37c4e"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 165, "chunk_start": 1, "chunk_summary": "The schema defines background planning structures but contains scenario-specific trope examples and heuristic-based semantic classifiers in enums.", "duration_ms": 17132, "findings": [{"category": "scenario_dependent_prompt", "evidence": "e.g. 'okt_room'", "line_end": 24, "line_start": 24, "recommended_fix": "Replace with a generic architectural example like 'main_building' or 'detached_house'.", "severity": "P2", "why_problematic": "The description uses a specific Korean drama trope (rooftop room) as a hardcoded example in a base schema, which can bias the LLM toward specific architectural patterns."}, {"category": "llm_closed_list_instruction", "evidence": "[\"outdoor_3+\", \"low_freq_2\", \"single_shot\"]", "line_end": 146, "line_start": 146, "recommended_fix": "Separate spatial classification (indoor/outdoor) from frequency metadata, and let downstream logic handle the '3+' or 'low_freq' thresholds.", "severity": "P1", "why_problematic": "This enum forces the LLM to perform semantic classification and frequency counting (spatial type + shot count) to drive pipeline routing. These heuristics are brittle and should be handled by code or a structured SOT rather than being encoded as string-based buckets in the LLM output schema."}], "path": "prompts/_base/background_planner/2.202604291245/schema.json", "scan_kind": "prompt", "sha256": "3f106edc052e99e473f5131c17712a11fa1600e67c445f94dbc65ebc84a37c4e"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 18, "chunk_start": 1, "chunk_summary": "No actionable findings; the template uses structured placeholders for background generation without scenario-specific pollution or semantic string judgment.", "duration_ms": 3112, "findings": [], "path": "prompts/_base/background_prompt/1.202604292053/user_template.md", "scan_kind": "prompt", "sha256": "23620dbe7a2b35034644c0fcaea9dd4c7e266a4ee27f7fe7bd3becd79ff20f61"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 22, "chunk_start": 1, "chunk_summary": "No actionable findings; the schema defines technical structure and ID patterns without scenario-specific pollution or semantic string judgments.", "duration_ms": 3213, "findings": [], "path": "prompts/_base/background_prompt/2.202604300800/schema.json", "scan_kind": "prompt", "sha256": "3ae7fb278c13dbc525e3faa53f960af7103e7ad7ed349077c414b4d196aedef9"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 24, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 4050, "findings": [], "path": "prompts/_base/background_prompt/2.202604300800/user_template.md", "scan_kind": "prompt", "sha256": "91903591fa68be17830395b99ee426dad812e40f28fb39bd512e3474caf5a154"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 38, "chunk_start": 1, "chunk_summary": "The background planner prompt template defines structural logic for grouping locations and determining generation strategies without scenario-specific pollution or hard-coded semantic string matching.", "duration_ms": 13087, "findings": [], "path": "prompts/_base/background_planner/3.202604291500/user_template.md", "scan_kind": "prompt", "sha256": "9b10c2ba3118987737fc486111f5b8eff83b3ab2d187ce8f763ab19e7c561e4b"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 27, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 4521, "findings": [], "path": "prompts/_base/background_prompt/3.202604300936/user_template.md", "scan_kind": "prompt", "sha256": "9d1a5a8f310cbfafc8a9bcfb89f5d00e6058068dfd76a0ebed5202d06d390de5"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 22, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 3308, "findings": [], "path": "prompts/_base/background_prompt/4.202604301033/schema.json", "scan_kind": "prompt", "sha256": "3ae7fb278c13dbc525e3faa53f960af7103e7ad7ed349077c414b4d196aedef9"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 176, "chunk_start": 1, "chunk_summary": "The schema uses a composite semantic enum for location classification and contains scenario-specific trope examples in its descriptions.", "duration_ms": 21340, "findings": [{"category": "llm_closed_list_instruction", "evidence": "enum: [\"outdoor_3+\", \"low_freq_2\", \"single_shot\"]", "line_end": 157, "line_start": 157, "recommended_fix": "Provide raw attributes (is_outdoor: bool, shot_count: int) and let the system or a dedicated logic step determine the 'kind' of handling required.", "severity": "P1", "why_problematic": "The enum 'outdoor_3+' forces the LLM to perform semantic categorization ('outdoor') and apply a frequency heuristic ('3+') simultaneously. This couples visual/spatial semantics with pipeline routing logic in a single string, making it harder to adjust thresholds or handle 'outdoor' logic consistently across different scenarios."}, {"category": "scenario_dependent_prompt", "evidence": "e.g. 'okt_room'", "line_end": 24, "line_start": 24, "recommended_fix": "Replace with a neutral example like 'main_building' or 'residence_01'.", "severity": "P2", "why_problematic": "The example 'okt_room' (rooftop room) is a scenario-specific trope (common in K-dramas) used in a base schema description, which can bias the LLM toward specific architectural patterns."}], "path": "prompts/_base/background_planner/3.202604291500/schema.json", "scan_kind": "prompt", "sha256": "cc0fa46524bdbf476b116634fb9ac2e469f3d6e651e5ec402ed3a9cd5d03ac66"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 27, "chunk_start": 1, "chunk_summary": "The prompt template is a structural skeleton for background generation and does not contain hardcoded scenario-specific pollution or semantic string logic.", "duration_ms": 5825, "findings": [], "path": "prompts/_base/background_prompt/4.202604301033/user_template.md", "scan_kind": "prompt", "sha256": "9d1a5a8f310cbfafc8a9bcfb89f5d00e6058068dfd76a0ebed5202d06d390de5"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 21, "chunk_start": 1, "chunk_summary": "The system prompt contains scenario-specific state examples and prop tropes that bias the background generation toward a specific genre (crime/horror).", "duration_ms": 19027, "findings": [{"category": "scenario_dependent_prompt", "evidence": "dusk_ransacked, night_blood_curtain_drawn", "line_end": 17, "line_start": 17, "recommended_fix": "Replace specific trope examples with neutral, structural examples (e.g., 'day_clear', 'night_interior_lit') and move scenario-specific state definitions to the input context or a dedicated SOT.", "severity": "P1", "why_problematic": "These examples bake specific narrative tropes into the base system prompt, biasing the LLM's interpretation of the state_label field toward a specific genre (crime/horror) instead of treating it as a generic semantic key."}, {"category": "scenario_dependent_prompt", "evidence": "drawn curtain, broken window, scattered debris", "line_end": 15, "line_start": 15, "recommended_fix": "Use a broader range of examples for visual devices, including neutral or positive props (e.g., 'specific flower arrangement', 'open laptop', 'unique wall art').", "severity": "P2", "why_problematic": "The examples provided for 'plot-critical visual devices' are narrow and suggest a specific 'damaged' or 'messy' aesthetic, which may bias the model's focus in cleaner or different scenarios."}], "path": "prompts/_base/background_prompt/1.202604292053/system.md", "scan_kind": "prompt", "sha256": "b22793bd0d744517ad2f793a990efc71b6c701b00ae9bbfa84fdd8f23016c81c"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 138, "chunk_start": 1, "chunk_summary": "The background planner prompt contains scenario-specific examples and closed-list room types that bias the LLM's architectural grouping logic and state identification.", "duration_ms": 24569, "findings": [{"category": "llm_closed_list_instruction", "evidence": "CEO room, mart_complex, rooftop_dwelling, parking lot behind a shop, office tower", "line_end": 30, "line_start": 10, "recommended_fix": "Replace specific room and building types with abstract physical relationship descriptions (e.g., 'enclosed sub-spaces', 'contiguous structural footprints') and move domain-specific examples to an external SOT or few-shot examples block.", "severity": "P1", "why_problematic": "The prompt uses a closed list of modern/urban architectural examples to define 'building_group' membership and connectivity. This biases the LLM's semantic judgment of physical space toward specific genres (corporate/urban) rather than relying on abstract physical rules or a structured World SOT."}, {"category": "scenario_dependent_prompt", "evidence": "(/거실 → /안방 → /욕실 etc.)", "line_end": 65, "line_start": 65, "recommended_fix": "Use generic placeholders or refer to the [ALL LOCATIONS] input for valid room labels.", "severity": "P2", "why_problematic": "Hardcoded Korean room names serve as semantic triggers for floor plan generation logic, creating a dependency on specific domestic scenario nomenclature."}, {"category": "scenario_dependent_prompt", "evidence": "cb_l05_living_night_blood", "line_end": 82, "line_start": 82, "recommended_fix": "Use neutral state descriptors like 'variant_a', 'damaged', or 'event_1' in examples.", "severity": "P2", "why_problematic": "The inclusion of 'blood' as a state identifier example introduces scenario-specific narrative pollution (horror/action tropes) into the technical ID generation pattern."}], "path": "prompts/_base/background_planner/3.202604291500/system.md", "scan_kind": "prompt", "sha256": "5fc66af29fc1f40910012103f4050997efa88a7b3ae569ded117b52f2e1a0f67"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 27, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 3580, "findings": [], "path": "prompts/_base/background_prompt/5.202605032354/user_template.md", "scan_kind": "prompt", "sha256": "9d1a5a8f310cbfafc8a9bcfb89f5d00e6058068dfd76a0ebed5202d06d390de5"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 22, "chunk_start": 1, "chunk_summary": "The system prompt for background generation is well-structured, using structured inputs (visual_world_rules, camera_recommendations) and explicitly forbidding scenario-specific proper nouns while providing clear instructions for localization and style.", "duration_ms": 20378, "findings": [], "path": "prompts/_base/background_prompt/3.202604300936/system.md", "scan_kind": "prompt", "sha256": "13ce2d806e922b2554c1a744f86d158ed5da42f05ffb5b97d2e4183dd7307362"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 22, "chunk_start": 1, "chunk_summary": "No actionable findings; the schema defines structural constraints for background prompt generation without scenario-specific pollution or semantic string judgment.", "duration_ms": 22893, "findings": [], "path": "prompts/_base/background_prompt/3.202604300936/schema.json", "scan_kind": "prompt", "sha256": "3ae7fb278c13dbc525e3faa53f960af7103e7ad7ed349077c414b4d196aedef9"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 27, "chunk_start": 1, "chunk_summary": "No actionable findings; the template is a structural skeleton for background generation using placeholders for structured data and world rules.", "duration_ms": 5051, "findings": [], "path": "prompts/_base/background_prompt/6.202605091200/user_template.md", "scan_kind": "prompt", "sha256": "fdb96d453f99db6ddaf689a3802060706113b4974c8e04b75c58615da8c58604"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 28, "chunk_start": 1, "chunk_summary": "The background prompt schema contains project-specific versioning and specific object examples in a field description that define semantic behavior for downstream components.", "duration_ms": 16182, "findings": [{"category": "llm_closed_list_instruction", "evidence": "round 4 Q2=B — 한국어/일본어 시나리오에서도 영어 고정 ... 예: ['door', 'window', 'TV', 'wardrobe']. scene_detail 이 redraw 하지 않도록 contract.", "line_end": 23, "line_start": 23, "recommended_fix": "Remove project-specific references and examples from the description. Define the 'no-redraw' behavior through a structured boolean flag or a dedicated metadata field rather than relying on string-based contracts in natural language.", "severity": "P1", "why_problematic": "The schema description contains project-specific versioning ('round 4 Q2=B') and specific examples that bias LLM output. Furthermore, it defines a 'contract' where the presence of these strings dictates downstream visual behavior (preventing redraw), which is a semantic dependency on natural language strings."}], "path": "prompts/_base/background_prompt/5.202605032354/schema.json", "scan_kind": "prompt", "sha256": "29f8a6f315df0ca6c69b3b508c94e044d9d86b4a54f84ba4a8555d4025407e5b"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 22, "chunk_start": 1, "chunk_summary": "The system prompt contains hardcoded visual style constraints, language-specific examples, and relies on the LLM to interpret technical state labels without structured definitions.", "duration_ms": 29912, "findings": [{"category": "llm_closed_list_instruction", "evidence": "state_label drives lighting/mood/decor (e.g., day_norm, dusk_lit, night_dim)", "line_end": 18, "line_start": 18, "recommended_fix": "Provide a mapping or description for each state_label within the visual_world_rules or a dedicated state definition object in the input.", "severity": "P1", "why_problematic": "The LLM is instructed to derive visual mood from technical tokens (day_norm, etc.) without a structured definition of what these states imply. This forces the LLM to use internal bias or pattern-matching for specific string tokens rather than following a world-rule SOT."}, {"category": "scenario_dependent_prompt", "evidence": "end t2i_prompt with a \"16:9 시네마틱 화면비\" / \"16:9 cinematic aspect ratio\" hint", "line_end": 17, "line_start": 17, "recommended_fix": "Remove hardcoded strings and pass aspect ratio as a parameter to the generation function, or use a placeholder that the system fills based on the target language.", "severity": "P2", "why_problematic": "Hardcoding specific natural language strings for visual metadata (aspect ratio) into the prompt body creates scenario and language dependency. This should be handled by the image generation parameters or a structured metadata field rather than forced prose."}, {"category": "scenario_dependent_prompt", "evidence": "standing human height (~1.6m), 35mm-class lens", "line_end": 13, "line_start": 13, "recommended_fix": "Move these defaults to a configuration object or the visual_world_rules SOT to allow for scenario-specific camera styles.", "severity": "P2", "why_problematic": "Hardcoding specific camera height and lens values in the system prompt limits the flexibility of the pipeline for different cinematic styles or scenarios. These are style examples that should be emitted by a structured world/rule SOT."}, {"category": "scenario_dependent_prompt", "evidence": "(e.g., 한국어 \"옷장\")", "line_end": 15, "line_start": 15, "recommended_fix": "Use abstract placeholders or multiple language examples to maintain neutrality in the base prompt.", "severity": "P2", "why_problematic": "The use of a specific language example (Korean) and a specific prop (wardrobe) in a system prompt introduces scenario-specific pollution into a generic instruction set."}], "path": "prompts/_base/background_prompt/2.202604300800/system.md", "scan_kind": "prompt", "sha256": "3548d49cdf3358579edf49d486fe50a078ce9db1beccad4976594f5d9ae26007"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 1, "chunk_start": 1, "chunk_summary": "No actionable findings; the prompt contains a generic role definition and task instruction without scenario-specific pollution or pattern-based semantic judgment.", "duration_ms": 2351, "findings": [], "path": "prompts/_base/beat_extract/1.202603281644/system.md", "scan_kind": "prompt", "sha256": "91cb49bd92a43667d86370bcde3f69fcff6c57b0e8b46c8f668d880cd51c080b"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 37, "chunk_start": 1, "chunk_summary": "No actionable findings; the file defines a standard technical JSON schema for structured beat extraction without scenario-specific pollution.", "duration_ms": 5756, "findings": [], "path": "prompts/_base/beat_extract/1.202603281644/beat_schema.json", "scan_kind": "prompt", "sha256": "744017c11bbc619a12f5344bd37eb4dc1e4a49affb6056b3a97cf7d0721ce808"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 1, "chunk_start": 1, "chunk_summary": "No actionable findings; the line contains a generic system role and task definition for scenario analysis.", "duration_ms": 2740, "findings": [], "path": "prompts/_base/beat_extract/2.202603290030/system.md", "scan_kind": "prompt", "sha256": "91cb49bd92a43667d86370bcde3f69fcff6c57b0e8b46c8f668d880cd51c080b"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 28, "chunk_start": 1, "chunk_summary": "The schema contains project-specific milestone markers and pipeline-specific logic instructions within a field description.", "duration_ms": 14116, "findings": [{"category": "scenario_dependent_prompt", "evidence": "(round 4 Q2=B — 한국어/일본어 시나리오에서도 영어 고정) ... scene_detail 이 redraw 하지 않도록 contract.", "line_end": 23, "line_start": 23, "recommended_fix": "Remove project-specific milestone tags and internal pipeline logic from the schema description. Use a separate system prompt or a structured 'World Rules' SOT to define these constraints.", "severity": "P2", "why_problematic": "The description includes project-specific versioning ('round 4 Q2=B') and internal pipeline coordination logic ('contract' with 'scene_detail') which should be abstracted into a system prompt or a structured rule set rather than being hardcoded in the schema definition."}], "path": "prompts/_base/background_prompt/6.202605091200/schema.json", "scan_kind": "prompt", "sha256": "fe5c7aed07ecfd3f68d7a4b1baba969db6d0d97618640b56f803aca6a9f3cca6"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 24, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 4703, "findings": [], "path": "prompts/_base/beat_extract/1.202603281644/user.md", "scan_kind": "prompt", "sha256": "7618c846f74fee19c16a0f7860aa33b975e76c97b4886a4634f3cafc2722dac1"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 1, "chunk_start": 1, "chunk_summary": "No actionable findings.", "duration_ms": 2526, "findings": [], "path": "prompts/_base/beat_extract/3.202603301500/system.md", "scan_kind": "prompt", "sha256": "91cb49bd92a43667d86370bcde3f69fcff6c57b0e8b46c8f668d880cd51c080b"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 19, "chunk_start": 1, "chunk_summary": "The system prompt contains hardcoded style tropes and language-specific string examples that constrain the visual output and bias the LLM's translation and description logic.", "duration_ms": 26142, "findings": [{"category": "llm_closed_list_instruction", "evidence": "Avoid in source language: words like \"cinematic look\", \"film grain emulation\", \"color graded\", \"stylized\", \"concept art\", \"illustrated\", \"rendered\", \"moody artistic\". Prefer instead: words like \"real DSLR photo\", \"natural daylight\", \"actual location reference\", \"documentary photo\", \"matter-of-fact photograph\", \"no post-processing\".", "line_end": 19, "line_start": 19, "recommended_fix": "Move the anti-stylization checklist to a structured style SOT or include it as part of the visual_world_rules input to allow for scenario-specific flexibility.", "severity": "P1", "why_problematic": "This is a closed list of semantic visual tropes used to steer the LLM's open-world visual generation. Hardcoding these stylistic constraints in the system prompt prevents the pipeline from supporting scenarios that might require specific 'photoreal' variations (e.g., period-accurate film looks or specific lighting moods) that overlap with the forbidden list. Such definitions should come from a structured style SOT or the visual_world_rules."}, {"category": "scenario_dependent_prompt", "evidence": "\"실제 카메라로 촬영한 다큐멘터리 풍 사진\" / \"16:9 가로 비율, 실제 카메라 촬영본\"", "line_end": 17, "line_start": 13, "recommended_fix": "Replace hardcoded language-specific examples with generic instructions or move them to a language-specific configuration mapping that is injected based on the source_language.", "severity": "P2", "why_problematic": "The prompt hardcodes specific Korean translation examples for style and framing hints. This biases the LLM toward these exact strings and provides irrelevant or confusing context when the source_language is not Korean (e.g., English or Japanese), potentially leading to mixed-language outputs or rigid phrasing."}], "path": "prompts/_base/background_prompt/4.202604301033/system.md", "scan_kind": "prompt", "sha256": "db08e471eb7eb32a1683e41a8997da74440d2fdb13da5bd46fcbc1d611f27070"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 37, "chunk_start": 1, "chunk_summary": "No actionable findings; the file defines a standard structural JSON schema for narrative beat extraction using generic literary categories.", "duration_ms": 5982, "findings": [], "path": "prompts/_base/beat_extract/2.202603290030/beat_schema.json", "scan_kind": "prompt", "sha256": "744017c11bbc619a12f5344bd37eb4dc1e4a49affb6056b3a97cf7d0721ce808"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 19, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 2347, "findings": [], "path": "prompts/_base/entity_all/2.202603260725/character_schema.json", "scan_kind": "prompt", "sha256": "83b2414658c1be2118bddc7069f1c45c6a5f5dbf669ab04359ffa5b04ed6a0b8"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 20, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 17145, "findings": [], "path": "prompts/_base/background_prompt/6.202605091200/system.md", "scan_kind": "prompt", "sha256": "1a7df487a6353e45d35af4b4fc93e6952160728d2d8a036a060c429d224b586f"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 37, "chunk_start": 1, "chunk_summary": "The file is a standard JSON schema for narrative beat extraction and contains no scenario-specific pollution or problematic semantic string judgments.", "duration_ms": 6986, "findings": [], "path": "prompts/_base/beat_extract/3.202603301500/beat_schema.json", "scan_kind": "prompt", "sha256": "744017c11bbc619a12f5344bd37eb4dc1e4a49affb6056b3a97cf7d0721ce808"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 18, "chunk_start": 1, "chunk_summary": "No actionable findings; the file is a standard structural JSON schema for location validation.", "duration_ms": 2742, "findings": [], "path": "prompts/_base/entity_all/2.202603260725/location_schema.json", "scan_kind": "prompt", "sha256": "88949edccdfb064f20e8efd74a90e64e229469332f4c6a24694196b6bd30f750"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 19, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 2281, "findings": [], "path": "prompts/_base/entity_all/2.202603260725/prop_schema.json", "scan_kind": "prompt", "sha256": "a2b56df5767b69fa2c3ad7546d0feaea77361a0b7c805f86bc2d1f2e770912c4"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 30, "chunk_start": 1, "chunk_summary": "The prompt defines structural rules for beat extraction but includes specific narrative examples (injury, weather changes) that may bias analysis toward certain tropes.", "duration_ms": 15685, "findings": [{"category": "scenario_dependent_prompt", "evidence": "(예: 앞 씬에서 부상 → 현재 씬에서 부상 상태로 등장) ... (예: 낮→밤, 비가 그침)", "line_end": 26, "line_start": 25, "recommended_fix": "Replace concrete story examples with abstract descriptions of state continuity or move specific trope examples to a scenario-specific configuration or SOT that guides the extraction logic.", "severity": "P2", "why_problematic": "The prompt provides concrete story-state examples (injury, weather) to illustrate state changes. These specific tropes can bias the LLM to prioritize or look for similar physical/environmental changes even in scenarios where they are irrelevant or where other types of changes (e.g., psychological, technical) are more critical."}], "path": "prompts/_base/beat_extract/2.202603290030/user.md", "scan_kind": "prompt", "sha256": "4f3371a9b028d1bd740687a4dbe0a1fef8b5be87fad603d0fd3e8c35ee11ce6d"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 16, "chunk_start": 1, "chunk_summary": "The prompt contains hardcoded visual tropes for character state changes that bias the output toward injury/health-related variants.", "duration_ms": 15699, "findings": [{"category": "scenario_dependent_prompt", "evidence": "Change ONLY: expression, skin pallor, posture, wounds/blood as appropriate for the state", "line_end": 12, "line_start": 12, "recommended_fix": "Replace the hardcoded list with a generic instruction to apply changes defined in the {state_description} while maintaining character consistency, or move the specific tropes into the state-specific SOT/description.", "severity": "P1", "why_problematic": "The prompt hardcodes a closed list of visual tropes (wounds/blood, skin pallor) as the exclusive allowed changes. This biases the LLM toward injury-related states and prevents the system from correctly handling other state types (e.g., environmental, magical, or temporal) that are not covered by this specific list."}], "path": "prompts/_base/character_state_variant/1.202604101200/system.md", "scan_kind": "prompt", "sha256": "0bae30a11cefa54d02ebbde518f68a058e7d12caeca5b619881d370e081d095a"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 20, "chunk_start": 1, "chunk_summary": "The system prompt contains hardcoded language-specific style strings, a closed list of visual keywords for photorealism, and language-specific logic/internal references in the object list contract.", "duration_ms": 34865, "findings": [{"category": "scenario_dependent_prompt", "evidence": "\"실제 카메라로 촬영한 다큐멘터리 풍 사진\" / \"real camera documentary-style photograph\"", "line_end": 17, "line_start": 13, "recommended_fix": "Remove hardcoded strings from the system prompt. Provide style and framing requirements as conceptual instructions or via a structured style SOT that includes localized strings for the target language.", "severity": "P1", "why_problematic": "Hardcodes specific natural language strings for visual style and framing in specific languages (KO/EN). This biases the LLM toward these exact phrases and fails to scale to other supported languages (e.g., JA), bypassing a structured style SOT."}, {"category": "llm_closed_list_instruction", "evidence": "Avoid in source language: words like \"cinematic look\", \"film grain emulation\", \"color graded\", \"stylized\", \"concept art\", \"illustrated\", \"rendered\", \"moody artistic\". Prefer instead: words like \"real DSLR photo\", \"natural daylight\", \"actual location reference\", \"documentary photo\", \"matter-of-fact photograph\", \"no post-processing\".", "line_end": 19, "line_start": 19, "recommended_fix": "Move the anti-stylization checklist and preferred vocabulary to a centralized visual style SOT or configuration file.", "severity": "P1", "why_problematic": "Defines the 'photoreal' visual domain using a closed list of scattered keywords and tropes. This scattered domain nomenclature should be centralized in a style SOT to allow for consistent visual governance across different prompt types."}, {"category": "scenario_dependent_prompt", "evidence": "한국어 시나리오에서도 [\"문\", \"창문\"] 금지 — 항상 영어로. ... (round 4 Q2=B)", "line_end": 20, "line_start": 20, "recommended_fix": "State the requirement for English canonical nouns as a general schema constraint without language-specific examples or internal test references.", "severity": "P2", "why_problematic": "Includes language-specific instructions ('Korean scenarios') and internal project-specific references ('round 4 Q2=B') in a base system prompt. This is scenario-dependent pollution that clutters the prompt logic."}], "path": "prompts/_base/background_prompt/5.202605032354/system.md", "scan_kind": "prompt", "sha256": "faccdd541969085188c747ea7b1ae44672a9f3c53637dca827c1d051c5b8dcef"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 14, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 15333, "findings": [], "path": "prompts/_base/entity_all/2.202603260725/location.md", "scan_kind": "prompt", "sha256": "84f5d6ff0a930d563bc8be853547a89e838c9c16cf1c764050f2496b15a1d199"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 19, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 2447, "findings": [], "path": "prompts/_base/entity_all/3.202603290500/character_schema.json", "scan_kind": "prompt", "sha256": "6c396525e1b050f4a4b99584c99fcd99ddf7637df4331d3af8fcb2cc880bf836"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 22, "chunk_start": 1, "chunk_summary": "The prompt uses genre-specific examples and scattered domain nomenclature to define semantic exclusion boundaries for prop extraction.", "duration_ms": 14363, "findings": [{"category": "llm_closed_list_instruction", "evidence": "우주복, 갑옷, 제복, 입는 장치나 로봇, 벽면 모니터, TV, CCTV, 문, 창문, 계단, 엘리베이터, 상태창, 모니터 화면, HUD", "line_end": 22, "line_start": 19, "recommended_fix": "Replace genre-specific examples with abstract ontological categories (e.g., 'wearable equipment', 'fixed architectural elements', 'digital overlays') or move these definitions to a centralized Source of Truth (SOT) that defines entity types across the pipeline.", "severity": "P1", "why_problematic": "The prompt instructs the LLM to classify and exclude entities based on a closed list of genre-specific examples (sci-fi, fantasy, game tropes). This pollutes the base prompt with scenario-specific nomenclature and forces the LLM to make semantic judgments based on scattered examples rather than a structured ontology or abstract definitions."}], "path": "prompts/_base/entity_all/2.202603260725/prop.md", "scan_kind": "prompt", "sha256": "7cf834521b7b74482214d6e4d8924a963150cd16fecee1b86293ee8be0fdc5fe"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 19, "chunk_start": 1, "chunk_summary": "No actionable findings; the file defines a standard structural JSON schema for location metadata without scenario-specific pollution or semantic string judgment.", "duration_ms": 2445, "findings": [], "path": "prompts/_base/entity_all/3.202603290500/location_schema.json", "scan_kind": "prompt", "sha256": "343dc66596429b320b46ed182671572df45078c3545a4ef808051e894216d7e6"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 19, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 2075, "findings": [], "path": "prompts/_base/entity_all/3.202603290500/prop_schema.json", "scan_kind": "prompt", "sha256": "1560913f4e4684ab1bab8f1a01b2fba0991152902666d8df6d152631cb8d06f4"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 14, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 14644, "findings": [], "path": "prompts/_base/entity_all/2.202603260725/system.md", "scan_kind": "prompt", "sha256": "13a47454da9c24e4364de8c0040c59c47a5aa8c00b7acddcd26ee707837fbdb1"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 19, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 2545, "findings": [], "path": "prompts/_base/entity_all/4.202603310100/character_schema.json", "scan_kind": "prompt", "sha256": "6c396525e1b050f4a4b99584c99fcd99ddf7637df4331d3af8fcb2cc880bf836"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 14, "chunk_start": 1, "chunk_summary": "No actionable findings; the prompt provides generic instructions for visual entity extraction without scenario-specific pollution or hardcoded semantic classifiers.", "duration_ms": 8476, "findings": [], "path": "prompts/_base/entity_all/3.202603290500/system.md", "scan_kind": "prompt", "sha256": "13a47454da9c24e4364de8c0040c59c47a5aa8c00b7acddcd26ee707837fbdb1"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 15, "chunk_start": 1, "chunk_summary": "The prompt provides generic instructions and architectural examples for extracting and grouping location entities from a scenario based on visual set logic, with no scenario-specific pollution or problematic hardcoded string logic.", "duration_ms": 14661, "findings": [], "path": "prompts/_base/entity_all/3.202603290500/location.md", "scan_kind": "prompt", "sha256": "d8a15dfe64e2e786f5bb18394080ba148dffeb960fea7fda0ef79c2bff37f2e1"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 19, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 2261, "findings": [], "path": "prompts/_base/entity_all/4.202603310100/location_schema.json", "scan_kind": "prompt", "sha256": "343dc66596429b320b46ed182671572df45078c3545a4ef808051e894216d7e6"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 32, "chunk_start": 1, "chunk_summary": "The character extraction prompt relies on genre-specific tropes for entity splitting and instructs the LLM to encode visual state metadata directly into name strings, creating identity resolution debt.", "duration_ms": 31349, "findings": [{"category": "llm_closed_list_instruction", "evidence": "인간↔요괴, 인간↔괴물, 본체↔변신체 ... 빙의/합체", "line_end": 28, "line_start": 25, "recommended_fix": "Generalize the splitting criteria to focus on visual consistency (e.g., 'significant change in facial features or body structure') and move genre-specific tropes to a separate world-rule SOT.", "severity": "P1", "why_problematic": "The prompt uses specific fantasy and supernatural tropes as the primary examples for character splitting logic. This biases the LLM's semantic judgment toward these genres and may lead to inconsistent extraction in other contexts (e.g., sci-fi augmentations or realistic aging) where the provided examples do not apply."}, {"category": "llm_closed_list_instruction", "evidence": "이름 구분: \"A\", \"A (변형 상태)\" — 괄호 안에 변형 상태를 명시", "line_end": 31, "line_start": 31, "recommended_fix": "Modify the extraction schema to include a separate 'state' or 'variant' field, allowing the 'name' field to remain a stable unique identifier for the character entity.", "severity": "P1", "why_problematic": "This instruction forces the LLM to encode semantic state metadata directly into the character's name string. This creates a 'blind string' that downstream components must parse to resolve identity, increasing the risk of mismatching characters across scenes when their visual state changes."}], "path": "prompts/_base/entity_all/2.202603260725/character.md", "scan_kind": "prompt", "sha256": "4d93299bf291019476c120d5baa177a35b32ea082ab41f995187fb59d58fc63e"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 32, "chunk_start": 1, "chunk_summary": "The prompt contains a hardcoded closed list of state-change categories and specific narrative trope examples (injury, rain, chase) that bias open-world story analysis.", "duration_ms": 33173, "findings": [{"category": "llm_closed_list_instruction", "evidence": "1. 행동 변화 (action) ... 7. 상황/환경 변화 (situation)", "line_end": 13, "line_start": 6, "recommended_fix": "Move the state-change categories to a structured SOT or configuration file that can be injected based on the project's narrative requirements.", "severity": "P2", "why_problematic": "The prompt restricts the LLM's definition of a 'Beat' to a hardcoded list of seven categories. This closed-list classification can bias or limit the analysis of diverse story genres where state changes might occur in dimensions not listed here."}, {"category": "scenario_dependent_prompt", "evidence": "갈등, 추격, 대화 ... 부상 ... 낮→밤, 비가 그침", "line_end": 28, "line_start": 26, "recommended_fix": "Replace concrete trope examples with abstract logic or move them to a scenario-specific reference section provided by the world-building SOT.", "severity": "P2", "why_problematic": "The prompt uses specific domain tropes (injury, weather changes, chases) as examples to guide the LLM. These are scenario-dependent and may not apply to all story worlds (e.g., sci-fi, abstract, or non-humanoid settings), leading to biased extraction."}], "path": "prompts/_base/beat_extract/3.202603301500/user.md", "scan_kind": "prompt", "sha256": "1a8c4693f32e627516c7911eb4c9e8928ef8cf5b8bd2194b3a0b96879fc63f84"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 34, "chunk_start": 1, "chunk_summary": "The character extraction prompt contains hardcoded domain-specific tropes used as semantic triggers for entity splitting.", "duration_ms": 11302, "findings": [{"category": "llm_closed_list_instruction", "evidence": "수식어(이무기, 구미호, 요괴화, 뱀파이어 등)", "line_end": 30, "line_start": 30, "recommended_fix": "Replace the specific trope examples with abstract categories of transformation (e.g., 'mythical form', 'species change') and move specific keyword lists to a structured world-rule SOT or project-specific configuration.", "severity": "P1", "why_problematic": "This instruction directs the LLM to perform entity splitting based on a closed list of specific Korean fantasy tropes (Imugi, Gumiho, etc.) acting as string modifiers. This biases the extraction logic toward specific genres and uses scattered domain nomenclature instead of generalized visual or narrative rules."}], "path": "prompts/_base/entity_all/4.202603310100/character.md", "scan_kind": "prompt", "sha256": "f918e34e677c2843fea63d9ca6db822d5e82c5f0f4a1842022e36902792e2286"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 19, "chunk_start": 1, "chunk_summary": "No actionable findings; the file contains a standard structural JSON schema for prop metadata validation.", "duration_ms": 2269, "findings": [], "path": "prompts/_base/entity_all/4.202603310100/prop_schema.json", "scan_kind": "prompt", "sha256": "1560913f4e4684ab1bab8f1a01b2fba0991152902666d8df6d152631cb8d06f4"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 19, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 2393, "findings": [], "path": "prompts/_base/entity_character_list/1.202604010100/character_list_schema.json", "scan_kind": "prompt", "sha256": "51eeead38ce71cafebcfef226e8d7dff91ac7714c1cdf55548302c15f722018f"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 19, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 2807, "findings": [], "path": "prompts/_base/entity_character_list/2.202605011057/character_list_schema.json", "scan_kind": "prompt", "sha256": "51eeead38ce71cafebcfef226e8d7dff91ac7714c1cdf55548302c15f722018f"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 15, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 13268, "findings": [], "path": "prompts/_base/entity_all/4.202603310100/location.md", "scan_kind": "prompt", "sha256": "d8a15dfe64e2e786f5bb18394080ba148dffeb960fea7fda0ef79c2bff37f2e1"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 14, "chunk_start": 1, "chunk_summary": "No actionable findings; the prompt provides generic instructions for entity extraction from scenarios without scenario-specific pollution or hardcoded semantic classifiers.", "duration_ms": 8634, "findings": [], "path": "prompts/_base/entity_all/4.202603310100/system.md", "scan_kind": "prompt", "sha256": "13a47454da9c24e4364de8c0040c59c47a5aa8c00b7acddcd26ee707837fbdb1"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 28, "chunk_start": 1, "chunk_summary": "The prompt defines the 'Prop' entity category using specific object examples for inclusion and exclusion, which acts as a closed-list semantic classifier.", "duration_ms": 22110, "findings": [{"category": "llm_closed_list_instruction", "evidence": "무기, 도구, 편지, 열쇠 등... 수트, 우주복, 갑옷, 제복, 의상, 입는 장치나 로봇은 제외... 피, 물, 불, 연기... 자동차, 트럭, 버스, 자전거 등", "line_end": 28, "line_start": 10, "recommended_fix": "Define 'Prop' using abstract visual consistency requirements (e.g., 'any non-character entity requiring a persistent design across shots') and move genre-specific exclusions to a configurable SOT or a higher-level scenario analysis step.", "severity": "P1", "why_problematic": "The prompt uses a collection of specific object types to define the 'Prop' category. This forces the LLM to perform semantic classification based on a closed list of examples, which can lead to the omission of story-critical items in specific genres (e.g., a power suit in sci-fi or a specific vehicle in a racing story) that require visual consistency but are explicitly excluded or discouraged by these rules."}], "path": "prompts/_base/entity_all/3.202603290500/prop.md", "scan_kind": "prompt", "sha256": "1eabcda09586a55f0378b330b12a14ed282105fcab6a2ee45f8fb3e09e64bd7b"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 32, "chunk_start": 1, "chunk_summary": "The character extraction prompt contains genre-specific examples for visual separation logic, which introduces domain-specific bias into a base prompt.", "duration_ms": 29870, "findings": [{"category": "llm_closed_list_instruction", "evidence": "인간↔요괴, 인간↔괴물, 본체↔변신체 ... 빙의/합체", "line_end": 28, "line_start": 25, "recommended_fix": "Replace genre-specific examples with abstract visual criteria (e.g., 'significant change in physical silhouette, species, or facial features') and provide genre-specific examples only via dynamic context or a world-rule SOT.", "severity": "P2", "why_problematic": "The prompt defines character separation logic using specific genre tropes (Youkai, monsters, possession). This scattered domain nomenclature in a base prompt can bias the LLM's semantic judgment of character identity across different genres and should instead be derived from a structured SOT or abstract visual rules."}], "path": "prompts/_base/entity_all/3.202603290500/character.md", "scan_kind": "prompt", "sha256": "c1340776f6bf8ffb7f8070ca4e80bccca8faf9a469380143bddd9b246f1bfac4"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 20, "chunk_start": 1, "chunk_summary": "No actionable findings; the character extraction schema is generic and contains no scenario-specific pollution or semantic string judgments.", "duration_ms": 2505, "findings": [], "path": "prompts/_base/entity_extract_v4/6.202603261200/character_schema.json", "scan_kind": "prompt", "sha256": "bc15a486b3396e6036ab8e16a3042e48e57fa077158a18b3607368409f6241c5"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 13, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 5222, "findings": [], "path": "prompts/_base/entity_extract_v4/6.202603261200/character.md", "scan_kind": "prompt", "sha256": "f0edfdc662f097bd9590cdbfb239ca93c79a0474f52e0cd802f8a6a9e21396a5"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 20, "chunk_start": 1, "chunk_summary": "No actionable findings; the file contains a standard structural JSON schema for location extraction without scenario-specific pollution or semantic string judgment.", "duration_ms": 2313, "findings": [], "path": "prompts/_base/entity_extract_v4/6.202603261200/location_schema.json", "scan_kind": "prompt", "sha256": "9695d47c6b17d38d9070651a909e3e07e0f2adebc043a34c93cede17ec28d84e"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 20, "chunk_start": 1, "chunk_summary": "No actionable findings; the file contains a standard structural JSON schema for prop extraction without scenario-specific pollution or semantic string judgment.", "duration_ms": 3066, "findings": [], "path": "prompts/_base/entity_extract_v4/6.202603261200/prop_schema.json", "scan_kind": "prompt", "sha256": "c930a18e26c7f94f42c7124da3cca36d8ffb85311edaeecb47039d449c48875d"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 12, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 4715, "findings": [], "path": "prompts/_base/entity_extract_v4/6.202603261200/location.md", "scan_kind": "prompt", "sha256": "9050b6be0e6772587ed00744e36d75bda123971911357e2f55ae64e57754db78"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 20, "chunk_start": 1, "chunk_summary": "No actionable findings; the file is a standard structural JSON schema for character extraction without scenario-specific pollution or semantic string judgment.", "duration_ms": 2663, "findings": [], "path": "prompts/_base/entity_extract_v4/7.202603261400/character_schema.json", "scan_kind": "prompt", "sha256": "bc15a486b3396e6036ab8e16a3042e48e57fa077158a18b3607368409f6241c5"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 14, "chunk_start": 1, "chunk_summary": "The prompt defines character extraction criteria based on visual presence and narrative significance using generic examples without scenario-specific pollution.", "duration_ms": 15491, "findings": [], "path": "prompts/_base/entity_character_list/1.202604010100/system.md", "scan_kind": "prompt", "sha256": "163a62f2f9522b9aad17dab823c0d4397801467558c3e7c1fca3a2d82fb47952"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 28, "chunk_start": 1, "chunk_summary": "The prompt defines prop extraction boundaries using extensive lists of domain-specific tropes and object categories for inclusion and exclusion.", "duration_ms": 18210, "findings": [{"category": "llm_closed_list_instruction", "evidence": "수트, 우주복, 갑옷, 제복, 의상, 입는 장치나 로봇... 피, 물, 불, 연기, 안개, 먼지, 눈, 비... 자동차, 트럭, 버스, 자전거... 의자, 탁자, 접시, 컵, 마이크... 번호표, 명함, 영수증", "line_end": 28, "line_start": 21, "recommended_fix": "Replace the specific trope lists with high-level conceptual definitions (e.g., 'exclude wearable items', 'exclude environmental effects', 'exclude common furniture without unique identifiers') and move specific category mappings to a centralized schema or world-rule SOT that can be injected based on the scenario's genre.", "severity": "P1", "why_problematic": "The prompt uses a closed list of semantic categories and domain tropes to instruct the LLM on what to exclude from the 'Prop' entity type. This hardcodes genre-specific assumptions (e.g., sci-fi/fantasy tropes like spacesuits, robots, HUDs) and forces the LLM to perform classification based on scattered nomenclature rather than a structured world-rule SOT."}], "path": "prompts/_base/entity_all/4.202603310100/prop.md", "scan_kind": "prompt", "sha256": "1eabcda09586a55f0378b330b12a14ed282105fcab6a2ee45f8fb3e09e64bd7b"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 20, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 3003, "findings": [], "path": "prompts/_base/entity_extract_v4/7.202603261400/location_schema.json", "scan_kind": "prompt", "sha256": "9695d47c6b17d38d9070651a909e3e07e0f2adebc043a34c93cede17ec28d84e"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 20, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 2257, "findings": [], "path": "prompts/_base/entity_extract_v4/7.202603261400/prop_schema.json", "scan_kind": "prompt", "sha256": "c930a18e26c7f94f42c7124da3cca36d8ffb85311edaeecb47039d449c48875d"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 17, "chunk_start": 1, "chunk_summary": "The location extraction prompt provides generic structural instructions for entity identification without scenario-specific pollution or hardcoded semantic biases.", "duration_ms": 8110, "findings": [], "path": "prompts/_base/entity_extract_v4/7.202603261400/location.md", "scan_kind": "prompt", "sha256": "1302a26fba03cd0994a6fb79ecc67375bc71f6c8dd629bc868d0614793d21fe6"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 13, "chunk_start": 1, "chunk_summary": "The prompt provides generic instructions for character extraction, focusing on visual traits and excluding extras without scenario-specific pollution.", "duration_ms": 10472, "findings": [], "path": "prompts/_base/entity_extract_v4/7.202603261400/character.md", "scan_kind": "prompt", "sha256": "ef4d0d0a1d95732f9c815662f3f78e939cf1b2f6886c89b33926e1ef93c9bf1a"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 28, "chunk_start": 1, "chunk_summary": "The prompt contains genre-specific exclusion lists that use domain tropes to define prop extraction boundaries, potentially biasing the LLM against certain story types.", "duration_ms": 13632, "findings": [{"category": "llm_closed_list_instruction", "evidence": "수트, 우주복, 갑옷, 제복, 의상, 입는 장치 나 로봇... 벽면 모니터, TV, CCTV... 문, 창문, 계단, 엘리베이터... 상태창, 모니터 화면, HUD", "line_end": 25, "line_start": 22, "recommended_fix": "Replace specific object examples with abstract category definitions (e.g., 'standard character attire', 'fixed architectural elements', 'ephemeral UI overlays'). Move genre-specific examples to a structured World/Genre Rule SOT that can be injected based on the scenario context.", "severity": "P1", "why_problematic": "The prompt uses a hardcoded list of genre-specific tropes (Sci-Fi, Fantasy, Game) to define exclusion boundaries. This forces the LLM to perform semantic classification based on a closed list of examples, which may lead to incorrect exclusions in scenarios where these items are primary props requiring visual consistency."}], "path": "prompts/_base/entity_extract_v4/6.202603261200/prop.md", "scan_kind": "prompt", "sha256": "2cbc5e8092c5accc5dfc7940b9ea5c5c0394e410641db40dd6cc6901546f40d1"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 25, "chunk_start": 1, "chunk_summary": "The system prompt defines general principles for visual entity extraction from scenarios without scenario-specific pollution or hardcoded story examples.", "duration_ms": 13607, "findings": [], "path": "prompts/_base/entity_extract_v4/6.202603261200/system.md", "scan_kind": "prompt", "sha256": "714617f603558b21bc5995ae6b9631ae7b238df69a16f2bfac9a1d3e8bf70026"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 20, "chunk_start": 1, "chunk_summary": "No actionable findings; the file contains a generic structural JSON schema for character extraction without scenario-specific pollution or semantic string judgment.", "duration_ms": 3802, "findings": [], "path": "prompts/_base/entity_extract_v4/8.202603290500/character_schema.json", "scan_kind": "prompt", "sha256": "bc15a486b3396e6036ab8e16a3042e48e57fa077158a18b3607368409f6241c5"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 20, "chunk_start": 1, "chunk_summary": "No actionable findings; the file is a standard structural JSON schema for location entity extraction without scenario-specific pollution or semantic string logic.", "duration_ms": 2912, "findings": [], "path": "prompts/_base/entity_extract_v4/8.202603290500/location_schema.json", "scan_kind": "prompt", "sha256": "9695d47c6b17d38d9070651a909e3e07e0f2adebc043a34c93cede17ec28d84e"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 20, "chunk_start": 1, "chunk_summary": "No actionable findings; the file defines a generic JSON schema for prop extraction without scenario-specific pollution or semantic string logic.", "duration_ms": 2997, "findings": [], "path": "prompts/_base/entity_extract_v4/8.202603290500/prop_schema.json", "scan_kind": "prompt", "sha256": "c930a18e26c7f94f42c7124da3cca36d8ffb85311edaeecb47039d449c48875d"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 13, "chunk_start": 1, "chunk_summary": "The character extraction prompt defines generic visual extraction rules and schema without scenario-specific pollution or hardcoded story logic.", "duration_ms": 8596, "findings": [], "path": "prompts/_base/entity_extract_v4/8.202603290500/character.md", "scan_kind": "prompt", "sha256": "ef4d0d0a1d95732f9c815662f3f78e939cf1b2f6886c89b33926e1ef93c9bf1a"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 28, "chunk_start": 1, "chunk_summary": "The prompt defines prop extraction boundaries using hardcoded domain-specific examples for exclusion, which acts as a closed-list semantic classifier.", "duration_ms": 12255, "findings": [{"category": "llm_closed_list_instruction", "evidence": "수트, 우주복, 갑옷, 제복, 의상, 입는 장치 나 로봇 ... 벽면 모니터, TV, CCTV ... 문, 창문, 계단, 엘리베이터 ... 상태창, 모니터 화면, HUD", "line_end": 25, "line_start": 22, "recommended_fix": "Replace the hardcoded lists with high-level category definitions (e.g., 'Wearable Items', 'Fixed Architectural Elements', 'Digital Interfaces') and move the specific examples to a configuration-driven SOT or a few-shot context that can be adjusted per project or genre.", "severity": "P1", "why_problematic": "The prompt uses hardcoded lists of domain-specific tropes (sci-fi, fantasy, modern) to instruct the LLM on what to exclude from 'prop' extraction. This forces the LLM to perform semantic classification based on scattered nomenclature rather than a structured ontology or SOT, which can bias extraction results across different genres."}], "path": "prompts/_base/entity_extract_v4/7.202603261400/prop.md", "scan_kind": "prompt", "sha256": "2cbc5e8092c5accc5dfc7940b9ea5c5c0394e410641db40dd6cc6901546f40d1"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 17, "chunk_start": 1, "chunk_summary": "The prompt provides generic instructions for extracting location entities from a scenario based on movie set logic, without scenario-specific pollution or hardcoded semantic lists.", "duration_ms": 8781, "findings": [], "path": "prompts/_base/entity_extract_v4/8.202603290500/location.md", "scan_kind": "prompt", "sha256": "1302a26fba03cd0994a6fb79ecc67375bc71f6c8dd629bc868d0614793d21fe6"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 22, "chunk_start": 1, "chunk_summary": "No actionable findings; the prompt provides generic instructions for entity consolidation without scenario-specific pollution or hardcoded semantic classifiers.", "duration_ms": 5463, "findings": [], "path": "prompts/_base/entity_extraction/v5/final_system.md", "scan_kind": "prompt", "sha256": "f5781582efaf038296d6b5cba0d57b0c746893113c2fa61b4e6bb05a1d33f3e6"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 12, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 5642, "findings": [], "path": "prompts/_base/entity_extraction/v5/chunk_user.md", "scan_kind": "prompt", "sha256": "e5bbce34404d876df02ee69d081ac214535c0fdf5989ce8f4303695aa142d719"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 12, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 5183, "findings": [], "path": "prompts/_base/entity_extraction/v5/final_user.md", "scan_kind": "prompt", "sha256": "7570134e2e60184e6bf189bb02371ecbc3ad0641b7f33066143402a76344c25c"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 27, "chunk_start": 1, "chunk_summary": "The prop extraction prompt contains genre-specific exclusion lists (Sci-Fi, Fantasy, and Game tropes) that pollute the base extraction logic with scenario-dependent examples.", "duration_ms": 17591, "findings": [{"category": "llm_closed_list_instruction", "evidence": "수트, 우주복, 갑옷, 제복, 의상, 입는 장치나 로봇... 벽면 모니터, TV, CCTV... 문, 창문, 계단, 엘리베이터... 상태창, 모니터 화면, HUD... 피, 물, 불, 연기, 안개", "line_end": 26, "line_start": 22, "recommended_fix": "Replace specific examples with abstract category definitions (e.g., 'wearables', 'architectural elements', 'environmental effects', 'UI elements') and move scenario-specific exclusions to a configuration layer or a specialized SOT.", "severity": "P1", "why_problematic": "The prompt uses a closed list of domain-specific examples (Sci-Fi, Fantasy, Game-lit) to define the semantic boundaries of what constitutes a 'prop'. This hardcodes genre-specific assumptions into a base prompt, which should instead rely on abstract category definitions or a structured SOT."}, {"category": "semantic_string_judgment", "evidence": "정확한 고유명사가 없다면 씬간의 세밀한 판단 필요", "line_end": 8, "line_start": 8, "recommended_fix": "Provide a structured entity resolution strategy or a reference-matching schema that handles aliases and descriptions without relying on the LLM's internal heuristic for 'proper nouns'.", "severity": "P2", "why_problematic": "Instructs the LLM to perform identity resolution and visual consistency logic based on the presence or absence of 'proper nouns' versus descriptive text. This is a pattern-based semantic judgment for entity membership."}], "path": "prompts/_base/entity_extract_v4/8.202603290500/prop.md", "scan_kind": "prompt", "sha256": "fdd7be8ee1122650678ad8e65160acaced1934ab29ccdb08eb33911275f78c7b"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 12, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 9030, "findings": [], "path": "prompts/_base/entity_extraction/v6/chunk_user.md", "scan_kind": "prompt", "sha256": "5be1ffbc2b571cdecd0cd5a9edefe35694d3f2243cab5d4c1d086f2c3b3b232c"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 26, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 17880, "findings": [], "path": "prompts/_base/entity_extract_v4/8.202603290500/system.md", "scan_kind": "prompt", "sha256": "be3b168e706876531b387dbe2836c2c2aca23baf14ec9a9099e2ce867018e3e9"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 20, "chunk_start": 1, "chunk_summary": "The character extraction prompt contains hardcoded species tropes and a visual constraint that limits character definition, along with a frequency-based filtering heuristic.", "duration_ms": 42011, "findings": [{"category": "llm_closed_list_instruction", "evidence": "(인간, 요괴, 동물, 로봇, 외계인 등)", "line_end": 10, "line_start": 10, "recommended_fix": "Replace the specific trope list with a generic definition of sentient or narrative-driving entities, and move visual constraints to a style-specific SOT.", "severity": "P2", "why_problematic": "This provides a specific list of domain tropes as examples for character classification. Such nomenclature should be derived from a structured World SOT to avoid biasing the LLM toward specific genres or categories not present in the current scenario. Additionally, the 'head and body' constraint is a visual semantic judgment that may exclude valid non-humanoid characters."}, {"category": "semantic_string_judgment", "evidence": "여러번 출현하는 경우만 추출", "line_end": 12, "line_start": 12, "recommended_fix": "Extract all characters and perform filtering or prioritization in a downstream logic step based on explicit narrative importance or asset requirements.", "severity": "P1", "why_problematic": "This is a heuristic-based filter for entity membership that forces the LLM to make a semantic judgment on character importance based on frequency. This can lead to the exclusion of narratively significant characters who appear once but require visual assets or drive the plot."}], "path": "prompts/_base/entity_character_list/2.202605011057/system.md", "scan_kind": "prompt", "sha256": "4ca95ca996a5e1d649e92c9baf8963654a5f89537a794ab6ec04e86ce9971713"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 26, "chunk_start": 1, "chunk_summary": "The system prompt contains hardcoded narrative tropes and entity classification examples used to guide the LLM's semantic extraction logic.", "duration_ms": 28327, "findings": [{"category": "llm_closed_list_instruction", "evidence": "엑스트라(행인, 군중, 이름 없는 단역 등)", "line_end": 8, "line_start": 8, "recommended_fix": "Move the definition of 'extractable entities' to a structured configuration or SOT that can be injected into the prompt, rather than hardcoding specific examples like 'passersby' or 'crowds'.", "severity": "P2", "why_problematic": "Hardcodes a specific list of tropes to define 'extras'. This semantic classification should be driven by a structured policy or SOT to ensure consistency across different genres or scenario types where the definition of a 'minor character' might vary."}, {"category": "llm_closed_list_instruction", "evidence": "회상, 상상, 꿈, 화상통화 등 실제 존재하지 않더라도 **카메라에 찍히는 인물/배경/소품은 추출 대상**이다.", "line_end": 17, "line_start": 14, "recommended_fix": "Abstract the instruction to focus on 'visual manifestation in the scene' regardless of narrative context, or provide the list of valid contexts via a structured SOT.", "severity": "P2", "why_problematic": "Uses a closed list of narrative contexts (flashbacks, dreams, video calls) to instruct the LLM on visual presence. This is a domain trope list that biases the extractor toward specific storytelling modes."}, {"category": "llm_closed_list_instruction", "evidence": "상태 변화(부상, 결박, 사망) ... 장비 장착 상태", "line_end": 26, "line_start": 25, "recommended_fix": "Define entity resolution rules (what constitutes a variant vs a new entity) in a structured schema or world-rule SOT.", "severity": "P2", "why_problematic": "Provides specific examples of character states and equipment to define entity boundaries. These are semantic judgments that might conflict with specific scenario requirements (e.g., where a 'wounded' version of a character is a distinct visual asset)."}], "path": "prompts/_base/entity_extract_v4/7.202603261400/system.md", "scan_kind": "prompt", "sha256": "be3b168e706876531b387dbe2836c2c2aca23baf14ec9a9099e2ce867018e3e9"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 62, "chunk_start": 1, "chunk_summary": "The entity extraction prompt contains hardcoded lists of semantic labels and relationship tropes that bias open-world story analysis.", "duration_ms": 23120, "findings": [{"category": "llm_closed_list_instruction", "evidence": "rooms, roads, cars, terminals, devices, tools, guns, containers, and documents", "line_end": 36, "line_start": 36, "recommended_fix": "Rely on abstract criteria for exclusion (e.g., lack of unique identity or plot significance) rather than a list of specific object types.", "severity": "P2", "why_problematic": "Using a hardcoded list of nouns to define 'generic' entities creates a bias against these categories, even when they might be continuity-critical in specific scenarios."}, {"category": "llm_closed_list_instruction", "evidence": "age, disguise, injury, costume, hair_makeup, time_of_day, weather, damage, crowd_density, open_closed, ownership, blood_stain, or loaded_empty", "line_end": 48, "line_start": 48, "recommended_fix": "Inject these labels from a structured world-rule SOT or allow the LLM to generate natural labels that are subsequently normalized.", "severity": "P1", "why_problematic": "Providing a hardcoded list of concrete labels for variant axes instructs the LLM to classify open-world visual states into a closed set of examples, which may not fit all scenarios and biases the extraction."}, {"category": "llm_closed_list_instruction", "evidence": "identity reveal, family tie, alliance, hostility, command chain, ownership, possession, containment, residence, workplace, target pursuit, object custody, object use, body-control, hiding place, imprisonment, transport, activation, transformation", "line_end": 58, "line_start": 58, "recommended_fix": "Move relationship types to a configuration-driven SOT that can be adjusted per project or genre.", "severity": "P1", "why_problematic": "This list of relationship tropes acts as a closed-list semantic classifier for open-world story relationships. It restricts the LLM's interpretation to a predefined set of domain nomenclature."}], "path": "prompts/_base/entity_extraction/v5/chunk_system.md", "scan_kind": "prompt", "sha256": "1bedb2ccc3696431002d2b11c8e567e1ee57e5dd822a228c13ef57b950d44575"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 12, "chunk_start": 1, "chunk_summary": "No actionable findings; the prompt uses abstract semantic categories to define extraction scope without scenario-specific pollution or pattern-based logic.", "duration_ms": 12761, "findings": [], "path": "prompts/_base/entity_extraction/v7/chunk_user.md", "scan_kind": "prompt", "sha256": "5be1ffbc2b571cdecd0cd5a9edefe35694d3f2243cab5d4c1d086f2c3b3b232c"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 15, "chunk_start": 1, "chunk_summary": "No actionable findings; the schema defines generic structural fields for style extraction without scenario-specific pollution or semantic string judgment.", "duration_ms": 3559, "findings": [], "path": "prompts/_base/entity_extractor_v2/4.202604021900/turn0_style_schema.json", "scan_kind": "prompt", "sha256": "ddadc6b3ba3f79279dc52a9049e8bf5b1aff2e5a7b6b13d9090bcee9413c0f15"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 22, "chunk_start": 1, "chunk_summary": "The prompt contains scenario-specific examples and hardcoded visual composition templates that restrict the open-world flexibility of entity visual generation.", "duration_ms": 15809, "findings": [{"category": "scenario_dependent_prompt", "evidence": "Set in near-future Korea.", "line_end": 8, "line_start": 8, "recommended_fix": "Replace with a generic placeholder example or remove the specific location/era reference.", "severity": "P2", "why_problematic": "This is a concrete scenario-specific example embedded in a base prompt. It can bias the LLM toward specific modern/near-future settings even when the target scenario is different (e.g., historical or high fantasy)."}, {"category": "scenario_dependent_prompt", "evidence": "Passport-style ID photo... Photorealistic cinematic establishing shot... Photorealistic product photo... pencil sketch", "line_end": 22, "line_start": 10, "recommended_fix": "Parameterize the visual composition templates so they can be injected based on the project's art direction or a global style SOT.", "severity": "P1", "why_problematic": "The prompt hardcodes specific visual compositions (ID photos for characters, product shots for objects) and artistic choices (pencil sketches for mounting targets). These are semantic visual decisions that should be driven by a structured style SOT or project-level configuration rather than being fixed in the base entity extraction logic."}], "path": "prompts/_base/entity_extractor_v2/4.202603242100/turn_entity_detail.md", "scan_kind": "prompt", "sha256": "9821f5496d056652a0d7d5e3ada34a27d35b6566ea80020af3c4a8b3982b99f4"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 22, "chunk_start": 1, "chunk_summary": "The prompt contains hard-coded semantic filters for narrative relations that should be defined by a structured ontology.", "duration_ms": 25388, "findings": [{"category": "llm_closed_list_instruction", "evidence": "Exclude kinship, social, conflict, collaboration, membership, control, goal, and event relations.", "line_end": 5, "line_start": 5, "recommended_fix": "Inject the list of allowed and excluded relation types from a structured ontology or project-specific configuration (SOT) instead of hard-coding them in the base prompt.", "severity": "P1", "why_problematic": "The prompt uses a hard-coded list of narrative tropes to filter open-world story relations. This restricts the LLM's semantic judgment to a fixed set of categories that may not cover all visually relevant scenarios (e.g., 'membership' for uniforms or 'kinship' for character likeness)."}, {"category": "llm_closed_list_instruction", "evidence": "Keep only visually relevant relation facts (identity, transformation, possession, containment)", "line_end": 22, "line_start": 22, "recommended_fix": "Parameterize the list of allowed relation types based on the specific requirements of the visual generation pipeline's ontology.", "severity": "P1", "why_problematic": "This defines a closed set of 'visually relevant' relations in a base prompt, preventing the system from adapting to scenarios where other relations might have visual impact."}], "path": "prompts/_base/entity_extraction/v6/final_system.md", "scan_kind": "prompt", "sha256": "a9093df70ae7c1e055c753760b1f5f64444b73b2ebc601145d63f4be6b31af1f"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 85, "chunk_start": 1, "chunk_summary": "The prompt contains scenario-specific character and prop names in examples for relationship extraction, which pollutes the base extraction logic.", "duration_ms": 18226, "findings": [{"category": "scenario_dependent_prompt", "evidence": "예: 은성<->ZRBB51", "line_end": 24, "line_start": 24, "recommended_fix": "Replace specific names with generic placeholders such as 'Character Name <-> Unique Item ID' or 'Protagonist <-> Signature Weapon'.", "severity": "P1", "why_problematic": "The example uses a specific character name ('은성') and a unique prop identifier ('ZRBB51'). Base prompts should remain scenario-agnostic to avoid biasing the LLM toward specific naming patterns or entity types from a single project."}], "path": "prompts/_base/entity_extraction/v7/chunk_system.md", "scan_kind": "prompt", "sha256": "18ae0154de3911a0110e3988f01546e52d47d2b8b64f98e3fa67a39e12701a76"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 12, "chunk_start": 1, "chunk_summary": "The prompt contains hardcoded semantic filters for relation types, defining visual relevance through a closed list of abstract categories.", "duration_ms": 21242, "findings": [{"category": "llm_closed_list_instruction", "evidence": "visually relevant relation facts (identity, transformation, possession, containment) ... Exclude kinship, social, conflict, collaboration, membership, control, goal, and event relations.", "line_end": 4, "line_start": 4, "recommended_fix": "Inject the list of allowed and excluded relation types from a centralized schema or SOT configuration variable.", "severity": "P1", "why_problematic": "The prompt uses a hardcoded list of semantic categories to instruct the LLM on what to include or exclude. This 'visual relevance' logic is scenario-agnostic but domain-rigid, preventing the pipeline from capturing relations that might have visual manifestations in specific contexts (e.g., 'membership' via uniforms or 'social' via specific blocking) unless the prompt is manually edited."}], "path": "prompts/_base/entity_extraction/v6/final_user.md", "scan_kind": "prompt", "sha256": "1d02f2d2493816be8259d5385bc6be041da351a5c3340e069ffefaf35e9c50f2"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 25, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 3139, "findings": [], "path": "prompts/_base/entity_extractor_v2/4.202604021900/turn1_7_detail_batch_schema.json", "scan_kind": "prompt", "sha256": "c37d0b2ad98d09e2aae9c14b59e27467caeee1af360f7ff6d6a1e7862e3dbeda"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 21, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 3756, "findings": [], "path": "prompts/_base/entity_extractor_v2/4.202604021900/turn1_review_schema.json", "scan_kind": "prompt", "sha256": "8da829a58de03b15e392fe01e73b04699056e6dfe8aba79c77139d1a9f017dac"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 29, "chunk_start": 1, "chunk_summary": "The prompt contains specific cultural, historical, and genre-based examples that bias the LLM's extraction of world settings and physical presence rules.", "duration_ms": 14298, "findings": [{"category": "llm_closed_list_instruction", "evidence": "조선시대, 한국 서울, 가상의 왕국, 한옥, 한복, 중세 갑옷", "line_end": 22, "line_start": 17, "recommended_fix": "Replace specific examples with abstract definitions (e.g., 'Historical period', 'Specific geographic location') or move these examples to a project-specific configuration/SOT.", "severity": "P1", "why_problematic": "The prompt uses specific cultural and historical tropes (Joseon era, Hanok, Hanbok, Seoul) as classification examples. This biases the LLM towards these specific settings and pollutes the general extraction logic with scenario-specific nomenclature that should be derived from the scenario text or a structured SOT."}, {"category": "llm_closed_list_instruction", "evidence": "원격 접속/조종/빙의/텔레파시, 몽타주/교차편집", "line_end": 14, "line_start": 13, "recommended_fix": "Provide a more abstract instruction for determining physical presence (e.g., 'Identify any narrative or technical reason why a character appearing in a scene might not be physically present') instead of listing specific tropes.", "severity": "P2", "why_problematic": "The prompt provides a closed list of specific sci-fi tropes and cinematic techniques to define 'physical presence'. This restricts the LLM's semantic judgment to these specific patterns, potentially missing other scenario-specific ways an entity might be non-physically present."}], "path": "prompts/_base/entity_extractor_v2/4.202604021900/turn0_style.md", "scan_kind": "prompt", "sha256": "31930e4a978832afdd7f6b7163943c8d9b891c897bc91adebf5959e74669d55b"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 10, "chunk_start": 1, "chunk_summary": "The entity extraction prompt template is generic and does not contain scenario-specific pollution or hardcoded semantic classifiers.", "duration_ms": 8005, "findings": [], "path": "prompts/_base/entity_extractor_v2/4.202604021900/turn1.md", "scan_kind": "prompt", "sha256": "131cd0d20ee7aa0f183c463e454de83adb772de2eca314edd6594972804f7b95"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 62, "chunk_start": 1, "chunk_summary": "The prompt contains hardcoded domain nomenclature and closed-list semantic classifiers for entity exclusion, variant tracking, and relationship extraction.", "duration_ms": 34821, "findings": [{"category": "llm_closed_list_instruction", "evidence": "rooms, roads, cars, terminals, devices, tools, guns, containers, and documents", "line_end": 36, "line_start": 36, "recommended_fix": "Move the list of generic/excludable categories to a structured SOT or configuration file that can be adjusted per-project.", "severity": "P2", "why_problematic": "The LLM is instructed to exclude entities based on a hardcoded list of generic nouns, which is a pattern-based semantic judgment that should be handled by a more flexible world-rule system or a structured SOT."}, {"category": "llm_closed_list_instruction", "evidence": "age, disguise, injury, costume, hair_makeup, time_of_day, weather, damage, crowd_density, open_closed, ownership, blood_stain, or loaded_empty", "line_end": 48, "line_start": 48, "recommended_fix": "Define allowed variant axes in a structured schema or SOT and inject them into the prompt as a dynamic list.", "severity": "P2", "why_problematic": "This line provides a hardcoded list of domain-specific trope labels for the LLM to use as variant axes. This scattered nomenclature should be managed in a central SOT to ensure consistency across different extraction passes and scenarios."}, {"category": "llm_closed_list_instruction", "evidence": "identity, transformation, possession, containment", "line_end": 56, "line_start": 55, "recommended_fix": "Define the relationship ontology (types and roles) in a structured schema or SOT and pass it to the LLM as a reference.", "severity": "P1", "why_problematic": "The prompt defines a closed set of relationship types in natural language. This hardcodes the ontology of the continuity graph, making it difficult to extend or modify without editing the base prompt."}], "path": "prompts/_base/entity_extraction/v6/chunk_system.md", "scan_kind": "prompt", "sha256": "92c7193473dac3506013faf2f8a8b1c863017c4b28cb623e5deea4ceadcfade9"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 64, "chunk_start": 1, "chunk_summary": "The entity extraction system prompt contains hardcoded semantic mappings for specific story states and narrative tropes, which should be abstracted or moved to scenario-specific SOTs.", "duration_ms": 28976, "findings": [{"category": "llm_closed_list_instruction", "evidence": "\"전투 준비 상태\" — 프롬프트에 \"무장한\" 추가하면 됨", "line_end": 27, "line_start": 26, "recommended_fix": "Remove specific keyword mappings. Use abstract instructions to categorize these as 'temporary states' that should be described in the scene prompt rather than as entity variants.", "severity": "P1", "why_problematic": "These lines perform direct semantic mapping from story-level states to specific visual keywords (\"무장한\", \"묶인\") within the base extraction prompt. This hardcodes specific visual interpretations of open-world story states and bypasses the downstream T2I prompt generation logic."}, {"category": "scenario_dependent_prompt", "evidence": "A의 정신이 B의 몸에 들어가면 → B의 외형 그대로", "line_end": 35, "line_start": 35, "recommended_fix": "Replace with a general principle stating that entity extraction is based strictly on physical appearance regardless of narrative identity or internal state.", "severity": "P2", "why_problematic": "This hardcodes logic for a specific narrative trope (possession/body-swapping). While common in some genres, it is scenario-specific pollution in a base prompt that should instead rely on a general 'Visual Identity' rule."}, {"category": "llm_closed_list_instruction", "evidence": "\"두 동강 난 상태\"", "line_end": 28, "line_start": 28, "recommended_fix": "Replace with a more generic example of a physical state change, such as 'damaged' or 'altered state'.", "severity": "P2", "why_problematic": "Uses a highly specific, visceral action-genre trope as a classification example in a base prompt. This is scattered domain nomenclature that biases the extractor toward specific types of scenarios."}], "path": "prompts/_base/entity_extractor_v2/4.202604021900/system.md", "scan_kind": "prompt", "sha256": "c734c208ceb05e3271b0e3bcb0702e756affc2114ce149e090bffc387188a5d4"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 6, "chunk_start": 1, "chunk_summary": "The prompt uses hardcoded prop examples to define exclusion logic for entity extraction, introducing potential semantic bias.", "duration_ms": 12686, "findings": [{"category": "llm_closed_list_instruction", "evidence": "일반적인 물건 (의자, 테이블 등)은 제외하고", "line_end": 6, "line_start": 6, "recommended_fix": "Remove hardcoded prop examples from the base prompt and rely on abstract importance criteria or scenario-specific configuration.", "severity": "P2", "why_problematic": "The LLM is instructed to classify 'general' vs 'important' props using a closed list of examples (chairs, tables). This can lead to the omission of significant entities in scenarios where these specific objects are narratively or visually critical."}], "path": "prompts/_base/entity_extractor_v2/4.202604021900/turn4.md", "scan_kind": "prompt", "sha256": "704a66e992e6ebf7080c998f6de17f8fdec2576843e6ca5d321a0c8829256a17"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 14, "chunk_start": 1, "chunk_summary": "The prompt uses specific semantic examples and domain tropes to define the boundaries for character variant extraction.", "duration_ms": 18442, "findings": [{"category": "llm_closed_list_instruction", "evidence": "허용: 20대→60대 같은 큰 나이 변화, 완전히 다른 실루엣(전신 갑옷 등)... 금지: 의상만 바뀌는 경우(군복/정장/일상복...), 부상/결박/사망 상태", "line_end": 11, "line_start": 10, "recommended_fix": "Define the boundary between 'Character Variant' and 'Scene State' using abstract criteria (e.g., 'structural/permanent changes' vs 'transient/contextual states') and move specific trope lists to a centralized configuration or SOT.", "severity": "P2", "why_problematic": "The prompt defines the logic for character variants using a closed list of specific semantic tropes (e.g., injury, death, specific clothing types). This forces the LLM to perform semantic classification based on scattered examples rather than abstract principles or a structured SOT, which can lead to inconsistent extraction in scenarios involving other types of transient or permanent states."}], "path": "prompts/_base/entity_extractor_v2/4.202604021900/turn2.md", "scan_kind": "prompt", "sha256": "a4177ce4a007861512d66ee9bdb9b69afea47ff818eeeddfb1cb1a1fb6f2b817"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 27, "chunk_start": 1, "chunk_summary": "The entity extraction prompt contains hardcoded race/nationality classification lists and scenario-specific location examples that should be managed via structured world-building data.", "duration_ms": 12876, "findings": [{"category": "scenario_dependent_prompt", "evidence": "Set in near-future 인천, Korea.", "line_end": 9, "line_start": 9, "recommended_fix": "Replace the concrete example with a generic placeholder or a more diverse set of abstract examples (e.g., 'Set in [Era], [Location]').", "severity": "P2", "why_problematic": "The prompt uses a specific real-world location and time period as a concrete example, which can bias the LLM toward Korean or near-future contexts even when processing unrelated scenarios."}, {"category": "llm_closed_list_instruction", "evidence": "Korean, Japanese, American... East Asian, Caucasian, Black, Middle Eastern", "line_end": 16, "line_start": 15, "recommended_fix": "Remove the hardcoded list and instruct the LLM to use the nationality or race defined in the provided world-building context or scenario text.", "severity": "P1", "why_problematic": "This provides a closed list of semantic classifiers for race and nationality within the prompt. This logic should be driven by a structured world-building SOT (Source of Truth) to allow for fantasy races, fictional nationalities, or different demographic distributions without modifying the core extractor prompt."}], "path": "prompts/_base/entity_extractor_v2/5.202603270930/turn_entity_detail.md", "scan_kind": "prompt", "sha256": "736150475000884f04e05d2da19f17bb21aeffc9f9c4c24ca9ed437ae60e03ab"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 106, "chunk_start": 1, "chunk_summary": "The entity extraction prompt uses a hard-coded controlled vocabulary for sub-space classification, creating a semantic bottleneck for location analysis.", "duration_ms": 12649, "findings": [{"category": "llm_closed_list_instruction", "evidence": "allowed_space_keys 는 controlled vocab 안에서 선택: main / kitchen / rooftop / stairs / yard / exterior / office. ... 위 controlled vocab 밖 단어 사용 절대 금지.", "line_end": 86, "line_start": 81, "recommended_fix": "Remove the hard-coded list from the system prompt. Allow the LLM to generate descriptive keys based on the scenario text, or move the controlled vocabulary to a dynamic world-rule SOT that can be updated per project.", "severity": "P1", "why_problematic": "The prompt forces the LLM to classify arbitrary scenario locations into a narrow, hard-coded list of semantic labels. This prevents the system from accurately representing diverse environments (e.g., 'laboratory', 'cockpit', 'throne_room') in the structured metadata, which directly drives deterministic background ID assignment in downstream steps."}], "path": "prompts/_base/entity_extractor_v2/6.202605091300/system.md", "scan_kind": "prompt", "sha256": "29d0f842cebd8cb68e6c24a2c3faf4b7fb78990444db7db426570e76a0fc7c7a"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 15, "chunk_start": 1, "chunk_summary": "The provided JSON schema defines the structure for entity extraction without containing scenario-specific pollution or hardcoded semantic examples.", "duration_ms": 5768, "findings": [], "path": "prompts/_base/entity_extractor_v2/6.202605091300/turn0_style_schema.json", "scan_kind": "prompt", "sha256": "ddadc6b3ba3f79279dc52a9049e8bf5b1aff2e5a7b6b13d9090bcee9413c0f15"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 25, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 3125, "findings": [], "path": "prompts/_base/entity_extractor_v2/6.202605091300/turn1_7_detail_batch_schema.json", "scan_kind": "prompt", "sha256": "c37d0b2ad98d09e2aae9c14b59e27467caeee1af360f7ff6d6a1e7862e3dbeda"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 21, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 4553, "findings": [], "path": "prompts/_base/entity_extractor_v2/6.202605091300/turn1_review_schema.json", "scan_kind": "prompt", "sha256": "8da829a58de03b15e392fe01e73b04699056e6dfe8aba79c77139d1a9f017dac"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 10, "chunk_start": 1, "chunk_summary": "The prompt contains hardcoded visual state examples that act as closed-list semantic classifiers for scenario analysis.", "duration_ms": 25216, "findings": [{"category": "llm_closed_list_instruction", "evidence": "시간대 변화 (낮/밤/새벽), 날씨 변화 (맑음/비/안개), 상태 변화 (화재 이후/파괴된/정상)", "line_end": 9, "line_start": 7, "recommended_fix": "Replace specific trope examples with abstract instructions to identify any temporal, environmental, or structural variations mentioned in the source text.", "severity": "P2", "why_problematic": "The prompt provides specific visual tropes (fire, destruction, specific weather/times) as examples, which biases the LLM's extraction process toward these closed categories and may cause it to overlook or misclassify other valid open-world state changes present in the scenario."}], "path": "prompts/_base/entity_extractor_v2/4.202604021900/turn3.md", "scan_kind": "prompt", "sha256": "f757a7155f34670b5e6dafe6ac19be55de01cdcc65645990ab96036500746196"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 24, "chunk_start": 1, "chunk_summary": "The prompt defines rules for entity detail extraction, including a mandatory ethnicity classification for characters based on a hardcoded list of examples.", "duration_ms": 29724, "findings": [{"category": "llm_closed_list_instruction", "evidence": "국적 또는 인종(예: Korean, East Asian, South Asian, Black, White, Hispanic 등)을 description 첫 부분에 명시", "line_end": 13, "line_start": 13, "recommended_fix": "Remove the hardcoded list of ethnic examples and the 'must' requirement for classification. Instead, provide a reference to a structured SOT for valid traits or instruct the LLM to extract these details only when explicitly defined in the scenario text.", "severity": "P1", "why_problematic": "The prompt requires the LLM to classify characters (including non-human entities like aliens or robots if they look human) into a closed list of ethnic/national categories. This hardcodes domain nomenclature into the prompt, leading to potential bias or inconsistent labeling that should be managed by a structured SOT or character metadata rather than being hallucinated or forced by prompt examples."}], "path": "prompts/_base/entity_extractor_v2/4.202604021900/turn1_7_detail_batch.md", "scan_kind": "prompt", "sha256": "20e33cce20dc4a55dd7f6458de5911dfd80389064a09ead6ab27828fa13e54c1"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 10, "chunk_start": 1, "chunk_summary": "The prompt is a generic entity extraction template and does not contain scenario-specific pollution or hardcoded semantic logic.", "duration_ms": 11584, "findings": [], "path": "prompts/_base/entity_extractor_v2/6.202605091300/turn1.md", "scan_kind": "prompt", "sha256": "131cd0d20ee7aa0f183c463e454de83adb772de2eca314edd6594972804f7b95"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 24, "chunk_start": 1, "chunk_summary": "The prompt contains hardcoded ethnicity and nationality examples used as a semantic classifier for character visual descriptions.", "duration_ms": 11999, "findings": [{"category": "llm_closed_list_instruction", "evidence": "Korean, East Asian, South Asian, Black, White, Hispanic 등", "line_end": 13, "line_start": 13, "recommended_fix": "Remove the specific list of examples from the prompt and instead instruct the LLM to describe the character's perceived ethnicity/nationality based on the project's global style guide or a provided world-rule SOT.", "severity": "P1", "why_problematic": "The prompt provides a specific list of ethnic/national labels to classify open-world characters. This hardcodes a semantic classification scheme into the prompt rather than deriving it from a structured world-building SOT, leading to potential bias or inconsistent labeling across different story domains."}], "path": "prompts/_base/entity_extractor_v2/6.202605091300/turn1_7_detail_batch.md", "scan_kind": "prompt", "sha256": "20e33cce20dc4a55dd7f6458de5911dfd80389064a09ead6ab27828fa13e54c1"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 18, "chunk_start": 1, "chunk_summary": "The prompt contains hardcoded visual templates for entity types and requires the LLM to infer world-level parameters from scenario text, which should be managed via structured SOTs.", "duration_ms": 31308, "findings": [{"category": "scenario_dependent_prompt", "evidence": "\"Set in [시대], [지역].\" ... \"Set in near-future Korea.\"", "line_end": 8, "line_start": 7, "recommended_fix": "Pass Era and Region as variables (e.g., {era}, {region}) from the scenario configuration instead of asking the LLM to extract or infer them from the story text.", "severity": "P1", "why_problematic": "Instructs the LLM to infer high-level world parameters (Era, Region) from the scenario text to prefix T2I prompts. These should be provided as structured metadata from a Scenario SOT to ensure consistency across all entities. The specific example 'near-future Korea' in a base prompt can bias the LLM's extraction."}, {"category": "llm_closed_list_instruction", "evidence": "\"Passport-style ID photo\", \"Photorealistic cinematic establishing shot\", \"Photorealistic product photo\"", "line_end": 18, "line_start": 10, "recommended_fix": "Move these visual templates to a style configuration or SOT and inject them into the prompt as variables based on the desired project style.", "severity": "P1", "why_problematic": "Hardcodes specific visual tropes and shot compositions for different entity types within a base prompt. This limits the pipeline's ability to adapt to different artistic styles or shot requirements (e.g., non-photorealistic styles or non-ID-photo character references) which should be defined in a centralized Style SOT."}], "path": "prompts/_base/entity_extractor_v2/4.202604021900/turn_entity_detail.md", "scan_kind": "prompt", "sha256": "9759271f0130e1f187f19b13d858ca4b451723a62b7de5959150463c1ce1aa2f"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 15, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 3982, "findings": [], "path": "prompts/_base/entity_extractor_v2/7.202605091845/turn0_style_schema.json", "scan_kind": "prompt", "sha256": "ddadc6b3ba3f79279dc52a9049e8bf5b1aff2e5a7b6b13d9090bcee9413c0f15"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 14, "chunk_start": 1, "chunk_summary": "The prompt defines character variant extraction logic using hardcoded visual examples and frequency biases to guide LLM classification.", "duration_ms": 17528, "findings": [{"category": "llm_closed_list_instruction", "evidence": "20대→60대 같은 큰 나이 변화, 완전히 다른 실루엣(전신 갑옷 등) ... 군복/정장/일상복 ... 대부분의 인물은 변형 없음이 정상", "line_end": 12, "line_start": 10, "recommended_fix": "Abstract the definition of 'Visual Variant' into a structured rule-set or ontology provided in the system context, rather than using hardcoded examples and frequency assumptions in the extraction prompt.", "severity": "P2", "why_problematic": "The prompt uses specific visual tropes (age, armor, specific outfits) and a frequency bias ('most characters have no variants') to instruct the LLM on how to classify character variants (C##V##). This hardcodes a specific interpretation of visual identity that may conflict with genre-specific requirements (e.g., magical transformations or uniform-centric stories) and biases the model against detecting valid variants."}], "path": "prompts/_base/entity_extractor_v2/6.202605091300/turn2.md", "scan_kind": "prompt", "sha256": "a4177ce4a007861512d66ee9bdb9b69afea47ff818eeeddfb1cb1a1fb6f2b817"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 106, "chunk_start": 1, "chunk_summary": "The prompt contains a hardcoded controlled vocabulary for location sub-spaces, forcing open-world scenario analysis into a restricted set of semantic labels.", "duration_ms": 12502, "findings": [{"category": "llm_closed_list_instruction", "evidence": "allowed_space_keys` 는 controlled vocab 안에서 선택: `main` / `kitchen` / `rooftop` / `stairs` / `yard` / `exterior` / `office`", "line_end": 86, "line_start": 82, "recommended_fix": "Replace the hardcoded list with a dynamic vocabulary provided via a World SOT or allow the LLM to propose descriptive keys that are normalized or mapped in a separate stage.", "severity": "P1", "why_problematic": "This forces the LLM to classify arbitrary scenario locations into a fixed set of strings. This is a semantic bottleneck that limits the system's ability to handle diverse environments and forces a fallback to 'main' for any location not in the list, losing visual specificity during the entity extraction phase."}], "path": "prompts/_base/entity_extractor_v2/7.202605091845/system.md", "scan_kind": "prompt", "sha256": "29d0f842cebd8cb68e6c24a2c3faf4b7fb78990444db7db426570e76a0fc7c7a"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 6, "chunk_start": 1, "chunk_summary": "The prompt uses hardcoded examples to filter out 'common' objects, which introduces a semantic bias in entity extraction for visual generation.", "duration_ms": 16142, "findings": [{"category": "llm_closed_list_instruction", "evidence": "일반적인 물건 (의자, 테이블 등)은 제외하고", "line_end": 6, "line_start": 6, "recommended_fix": "Remove specific object examples and replace with a criteria-based instruction for importance (e.g., 'exclude objects that are part of the static background and do not contribute to the unique visual identity of the scene') or move the definition of 'common objects' to a structured world-rule configuration.", "severity": "P2", "why_problematic": "The prompt uses hardcoded examples ('chair', 'table') to define what should be excluded as 'common'. This is a semantic judgment based on a closed list of examples that may bias the LLM against extracting these objects even when they are visually or narratively significant in a specific scenario."}], "path": "prompts/_base/entity_extractor_v2/6.202605091300/turn4.md", "scan_kind": "prompt", "sha256": "704a66e992e6ebf7080c998f6de17f8fdec2576843e6ca5d321a0c8829256a17"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 24, "chunk_start": 1, "chunk_summary": "The prompt contains hardcoded visual styles and scenario-specific examples that bias entity extraction and T2I prompt generation.", "duration_ms": 16429, "findings": [{"category": "scenario_dependent_prompt", "evidence": "\"Set in near-future Korea.\"", "line_end": 8, "line_start": 8, "recommended_fix": "Replace with a generic placeholder like 'Set in [Era], [Location].'", "severity": "P2", "why_problematic": "Uses a specific scenario (near-future Korea) as a formatting example, which can bias the LLM's understanding of the 'world core' field toward specific regions or eras."}, {"category": "scenario_dependent_prompt", "evidence": "\"Passport-style ID photo\", \"Photorealistic cinematic establishing shot\", \"Photorealistic product photo\"", "line_end": 18, "line_start": 10, "recommended_fix": "Inject style requirements via a variable or reference a structured Style SOT instead of hardcoding specific prose like 'Passport-style'.", "severity": "P1", "why_problematic": "Hardcodes specific visual styles and compositions for different entity types. This forces a specific aesthetic (e.g., ID photos for characters) that should be defined in a style SOT or configuration, rather than being baked into the extraction prompt."}, {"category": "llm_closed_list_instruction", "evidence": "\"장식품(리본, 꽃 등), 상처/피/흙, 변장, 특수 메이크업\", \"폭발 후, 파괴된 상태\", \"파손, 분해\"", "line_end": 18, "line_start": 13, "recommended_fix": "Replace specific examples with a general instruction to exclude 'situational or transient states' and provide a separate rule-set for canonical entity definitions.", "severity": "P2", "why_problematic": "Uses a closed list of specific props and states to define what to exclude. This is scenario-specific pollution that should be handled by a general rule about 'canonical vs. situational' states."}], "path": "prompts/_base/entity_extractor_v2/6.202605091300/turn_entity_detail.md", "scan_kind": "prompt", "sha256": "1716b6d5371e24806018c29c0601bcf99e4547ec016a24a222a76a7babfd1b84"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 25, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 2834, "findings": [], "path": "prompts/_base/entity_extractor_v2/7.202605091845/turn1_7_detail_batch_schema.json", "scan_kind": "prompt", "sha256": "c37d0b2ad98d09e2aae9c14b59e27467caeee1af360f7ff6d6a1e7862e3dbeda"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 10, "chunk_start": 1, "chunk_summary": "The prompt contains hardcoded visual state examples that act as closed-list semantic classifiers, biasing the extraction of location variations.", "duration_ms": 20568, "findings": [{"category": "llm_closed_list_instruction", "evidence": "- 시간대 변화 (낮/밤/새벽), - 날씨 변화 (맑음/비/안개), - 상태 변화 (화재 이후/파괴된/정상)", "line_end": 9, "line_start": 7, "recommended_fix": "Generalize the instruction to extract any visual variations described in the text without providing a fixed list of tropes, or move these definitions to a structured world-building SOT.", "severity": "P2", "why_problematic": "These lines provide specific examples of visual variations (time, weather, and states like 'after fire') which function as a closed list. This biases the LLM to only look for or categorize variations into these specific buckets, potentially missing or misclassifying unique visual states present in an open-world scenario."}], "path": "prompts/_base/entity_extractor_v2/6.202605091300/turn3.md", "scan_kind": "prompt", "sha256": "f757a7155f34670b5e6dafe6ac19be55de01cdcc65645990ab96036500746196"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 29, "chunk_start": 1, "chunk_summary": "The prompt contains hard-coded visual style constraints and specific genre/era examples that bias the extraction process toward certain tropes and historical settings.", "duration_ms": 33752, "findings": [{"category": "scenario_dependent_prompt", "evidence": "모든 이미지는 실사 영화 촬영 스타일입니다.", "line_end": 3, "line_start": 3, "recommended_fix": "Move the base rendering style to a configuration variable or a world-level SOT field.", "severity": "P1", "why_problematic": "Hard-codes a specific visual style (live-action movie) for all scenarios, preventing the pipeline from supporting other styles (animation, illustration, etc.) without prompt modification."}, {"category": "llm_closed_list_instruction", "evidence": "원격 접속/조종/빙의/텔레파시 등 기술이 있다면... 몽타주/교차편집", "line_end": 14, "line_start": 13, "recommended_fix": "Generalize the instruction to ask for any rules regarding non-physical presence or editing-driven visual logic without listing specific tropes.", "severity": "P2", "why_problematic": "Provides a closed list of specific tropes and cinematic techniques to determine physical presence rules, biasing the LLM toward these specific concepts."}, {"category": "llm_closed_list_instruction", "evidence": "예: 근미래, 현대, 조선시대, 중세 유럽 ... 예: 현대 한국 도시 + 미래 연구시설, 조선시대 한옥", "line_end": 23, "line_start": 17, "recommended_fix": "Remove specific cultural/historical examples or replace them with abstract descriptions of the expected output format.", "severity": "P2", "why_problematic": "Uses specific historical and genre-based examples to guide extraction, which can bias the LLM's categorization towards these specific cultural or temporal markers."}], "path": "prompts/_base/entity_extractor_v2/6.202605091300/turn0_style.md", "scan_kind": "prompt", "sha256": "31930e4a978832afdd7f6b7163943c8d9b891c897bc91adebf5959e74669d55b"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 10, "chunk_start": 1, "chunk_summary": "The entity extraction prompt uses generic category labels and natural language instructions without scenario-specific pollution or hardcoded semantic lists.", "duration_ms": 11489, "findings": [], "path": "prompts/_base/entity_extractor_v2/7.202605091845/turn1.md", "scan_kind": "prompt", "sha256": "131cd0d20ee7aa0f183c463e454de83adb772de2eca314edd6594972804f7b95"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 21, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 7709, "findings": [], "path": "prompts/_base/entity_extractor_v2/7.202605091845/turn1_review_schema.json", "scan_kind": "prompt", "sha256": "8da829a58de03b15e392fe01e73b04699056e6dfe8aba79c77139d1a9f017dac"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 24, "chunk_start": 1, "chunk_summary": "The prompt contains hardcoded racial and ethnic categories as examples for character description, which biases open-world entity extraction.", "duration_ms": 15061, "findings": [{"category": "llm_closed_list_instruction", "evidence": "Korean, East Asian, South Asian, Black, White, Hispanic 등", "line_end": 13, "line_start": 13, "recommended_fix": "Remove the hardcoded list of ethnicities and instead reference a structured SOT or inject the allowed/preferred categories dynamically based on the project's world-building rules.", "severity": "P1", "why_problematic": "The prompt provides a specific list of racial and ethnic categories as examples for the LLM to use when describing characters. This hardcodes a classification schema for open-world visual attributes into the base extractor prompt, which should instead be defined in a structured world-rule SOT to ensure consistency and flexibility across different projects."}], "path": "prompts/_base/entity_extractor_v2/7.202605091845/turn1_7_detail_batch.md", "scan_kind": "prompt", "sha256": "20e33cce20dc4a55dd7f6458de5911dfd80389064a09ead6ab27828fa13e54c1"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 14, "chunk_start": 1, "chunk_summary": "The prompt defines character visual variant logic using specific trope examples like age ranges, armor, and specific outfit types to guide LLM classification.", "duration_ms": 10714, "findings": [{"category": "llm_closed_list_instruction", "evidence": "20대→60대 같은 큰 나이 변화, 완전히 다른 실루엣(전신 갑옷 등), 군복/정장/일상복", "line_end": 11, "line_start": 10, "recommended_fix": "Move the definition of 'Visual Variant' vs 'Scene State' to a structured system-of-truth (SOT) or a centralized rule set that defines state-change thresholds, and reference those abstract rules in the prompt instead of specific trope examples.", "severity": "P2", "why_problematic": "The prompt uses specific domain tropes and outfit examples to define the semantic boundary between a 'visual variant' and a 'scene state'. This hardcodes classification logic using natural language examples rather than relying on a structured SOT or rule-based definition of entity state transitions."}], "path": "prompts/_base/entity_extractor_v2/7.202605091845/turn2.md", "scan_kind": "prompt", "sha256": "a4177ce4a007861512d66ee9bdb9b69afea47ff818eeeddfb1cb1a1fb6f2b817"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 15, "chunk_start": 1, "chunk_summary": "No actionable findings; the schema defines a generic structure for style extraction without scenario-specific pollution or semantic string judgment.", "duration_ms": 3564, "findings": [], "path": "prompts/_base/entity_extractor_v2/8.202605121200/turn0_style_schema.json", "scan_kind": "prompt", "sha256": "ddadc6b3ba3f79279dc52a9049e8bf5b1aff2e5a7b6b13d9090bcee9413c0f15"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 10, "chunk_start": 1, "chunk_summary": "The prompt contains specific examples of visual variations (time, weather, and destruction states) that may bias the LLM's extraction of scene states.", "duration_ms": 14225, "findings": [{"category": "llm_closed_list_instruction", "evidence": "시간대 변화 (낮/밤/새벽), 날씨 변화 (맑음/비/안개), 상태 변화 (화재 이후/파괴된/정상)", "line_end": 9, "line_start": 7, "recommended_fix": "Replace the specific examples with a generic instruction to identify any significant visual state changes described in the text, or move these categories to a structured world-rule SOT that can be injected based on the genre.", "severity": "P2", "why_problematic": "The prompt provides a closed list of specific semantic examples for visual variations. This biases the LLM to categorize scene changes into these specific buckets (time, weather, destruction) and may lead it to overlook other types of visual transformations or hallucinate these specific states in scenarios where they do not apply."}], "path": "prompts/_base/entity_extractor_v2/7.202605091845/turn3.md", "scan_kind": "prompt", "sha256": "f757a7155f34670b5e6dafe6ac19be55de01cdcc65645990ab96036500746196"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 25, "chunk_start": 1, "chunk_summary": "No actionable findings; the schema defines a generic structure for entity extraction without scenario-specific pollution or semantic string judgment.", "duration_ms": 2686, "findings": [], "path": "prompts/_base/entity_extractor_v2/8.202605121200/turn1_7_detail_batch_schema.json", "scan_kind": "prompt", "sha256": "c37d0b2ad98d09e2aae9c14b59e27467caeee1af360f7ff6d6a1e7862e3dbeda"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 29, "chunk_start": 1, "chunk_summary": "The prompt contains hardcoded scenario-specific examples and trope lists that bias the LLM's extraction of world-building and visual style metadata.", "duration_ms": 13636, "findings": [{"category": "llm_closed_list_instruction", "evidence": "예: 근미래, 현대, 조선시대, 중세 유럽 ... 예: 한국 서울, 미국 뉴욕, 가상의 왕국 ... 예: 조선시대 한옥 ... 예: 한복, 중세 갑옷", "line_end": 23, "line_start": 17, "recommended_fix": "Remove concrete examples from the base prompt. If examples are necessary for few-shot guidance, they should be generic or provided via a separate world-building SOT injected at runtime based on the project context.", "severity": "P1", "why_problematic": "The prompt provides concrete examples of specific eras, locations, and cultural props (Joseon Dynasty, Hanbok, Medieval Europe). This biases the LLM toward these specific domains and can lead to forced classifications or 'hallucinated' style associations when the input scenario is outside these specific tropes."}, {"category": "llm_closed_list_instruction", "evidence": "원격 접속/조종/빙의/텔레파시", "line_end": 14, "line_start": 13, "recommended_fix": "Rephrase to ask the LLM to identify any mechanics that separate consciousness or agency from physical presence generally, rather than listing specific tropes.", "severity": "P2", "why_problematic": "The prompt instructs the LLM to look for a specific list of sci-fi/fantasy tropes (remote access, possession, telepathy) to determine physical presence rules. This is a closed-list semantic classifier for open-world story mechanics that may miss other relevant mechanics or over-index on the listed ones."}], "path": "prompts/_base/entity_extractor_v2/8.202605121200/turn0_style.md", "scan_kind": "prompt", "sha256": "31930e4a978832afdd7f6b7163943c8d9b891c897bc91adebf5959e74669d55b"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 106, "chunk_start": 1, "chunk_summary": "The prompt contains a hardcoded controlled vocabulary for spatial classification and uses specific scenario-based examples to define character variant logic.", "duration_ms": 14510, "findings": [{"category": "llm_closed_list_instruction", "evidence": "allowed_space_keys 는 controlled vocab 안에서 선택: main / kitchen / rooftop / stairs / yard / exterior / office", "line_end": 86, "line_start": 82, "recommended_fix": "Remove the hardcoded list from the system prompt and provide it via a dynamic configuration or allow the LLM to propose descriptive keys that are subsequently normalized.", "severity": "P1", "why_problematic": "Forces the LLM to map open-world story locations into a narrow, hardcoded set of semantic labels. This prevents accurate spatial modeling for scenarios outside of modern domestic or office settings, such as fantasy or sci-fi environments, by forcing a fallback to 'main'."}, {"category": "scenario_dependent_prompt", "evidence": "20대 → 60대, 평상복 → 전신 갑옷, \"전투 준비 상태\", \"결박된 상태\", \"부상 상태\", \"두 동강 난 상태\"", "line_end": 30, "line_start": 20, "recommended_fix": "Define the logic using abstract visual criteria (e.g., 'structural silhouette change' vs 'accessory addition') rather than specific story-state examples.", "severity": "P2", "why_problematic": "Uses specific scenario-based physical states and tropes to define extraction boundaries. This pollutes the general extraction logic with concrete examples that may bias the LLM's judgment on what constitutes a 'variant' in unrelated genres."}], "path": "prompts/_base/entity_extractor_v2/8.202605121200/system.md", "scan_kind": "prompt", "sha256": "29d0f842cebd8cb68e6c24a2c3faf4b7fb78990444db7db426570e76a0fc7c7a"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 24, "chunk_start": 1, "chunk_summary": "The entity extraction prompt contains scenario-specific examples and hardcoded visual style constraints that bias the pipeline toward photorealistic live-action settings.", "duration_ms": 17477, "findings": [{"category": "scenario_dependent_prompt", "evidence": "예: \"Set in near-future Korea.\"", "line_end": 8, "line_start": 8, "recommended_fix": "Replace the concrete example with generic placeholders like 'Set in [Era], [Region]' or inject the example dynamically from the scenario's world SOT.", "severity": "P1", "why_problematic": "Providing a concrete scenario-specific example (near-future Korea) in a base prompt can bias the LLM's output for arbitrary scenarios, leading to hallucinations or stylistic drift toward the example's domain."}, {"category": "scenario_dependent_prompt", "evidence": "실사 영화 촬영 스타일... Passport-style ID photo... Photorealistic cinematic establishing shot... Photorealistic product photo", "line_end": 17, "line_start": 6, "recommended_fix": "Abstract the visual style requirements into a configuration object or a 'Style SOT' that is injected into the prompt based on the project's target aesthetic.", "severity": "P1", "why_problematic": "The prompt hardcodes 'live-action movie' and 'photorealistic' styles for all entity types. This forces a specific visual aesthetic at the base extraction level, preventing the pipeline from supporting non-photorealistic or stylized scenarios (e.g., animation, 2D art) without modifying core prompts."}], "path": "prompts/_base/entity_extractor_v2/7.202605091845/turn_entity_detail.md", "scan_kind": "prompt", "sha256": "7fcf0fed915e4e24a917537c76cd1fab37f353037d84aa07f3c9a973d95db95b"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 21, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 5185, "findings": [], "path": "prompts/_base/entity_extractor_v2/8.202605121200/turn1_review_schema.json", "scan_kind": "prompt", "sha256": "8da829a58de03b15e392fe01e73b04699056e6dfe8aba79c77139d1a9f017dac"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 24, "chunk_start": 1, "chunk_summary": "The prompt contains a hardcoded list of ethnic and racial examples for character extraction, which biases open-world semantic classification.", "duration_ms": 11156, "findings": [{"category": "llm_closed_list_instruction", "evidence": "국적 또는 인종(예: Korean, East Asian, South Asian, Black, White, Hispanic 등)", "line_end": 13, "line_start": 13, "recommended_fix": "Remove the specific examples from the prompt and instead instruct the LLM to extract the nationality or ethnicity as described in the scenario text, or provide a reference to a project-specific character taxonomy SOT.", "severity": "P1", "why_problematic": "The prompt provides a specific list of ethnic/racial labels to the LLM. This biases the extraction process toward these categories and can lead to misclassification or awkward descriptions for scenarios outside these specific cultural contexts. Such taxonomies should be managed via a structured world-rule SOT rather than hardcoded prompt examples."}], "path": "prompts/_base/entity_extractor_v2/8.202605121200/turn1_7_detail_batch.md", "scan_kind": "prompt", "sha256": "20e33cce20dc4a55dd7f6458de5911dfd80389064a09ead6ab27828fa13e54c1"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 10, "chunk_start": 1, "chunk_summary": "The entity extraction prompt uses generic category labels and natural language filtering instructions without scenario-specific pollution or closed-list examples.", "duration_ms": 14189, "findings": [], "path": "prompts/_base/entity_extractor_v2/8.202605121200/turn1.md", "scan_kind": "prompt", "sha256": "131cd0d20ee7aa0f183c463e454de83adb772de2eca314edd6594972804f7b95"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 29, "chunk_start": 1, "chunk_summary": "The prompt contains hardcoded visual style constraints and specific domain trope lists that bias open-world extraction and visual consistency logic.", "duration_ms": 39092, "findings": [{"category": "scenario_dependent_prompt", "evidence": "모든 이미지는 실사 영화 촬영 스타일입니다.", "line_end": 3, "line_start": 3, "recommended_fix": "Move the global rendering style constraint to a configuration file or a structured style SOT that can be varied per project.", "severity": "P1", "why_problematic": "Hardcodes a specific rendering style (live-action movie) for all scenarios in a base prompt, preventing the pipeline from supporting other visual styles like animation or illustration without manual prompt changes."}, {"category": "llm_closed_list_instruction", "evidence": "원격 접속/조종/빙의/텔레파시 등 기술이 있다면", "line_end": 14, "line_start": 13, "recommended_fix": "Generalize the instruction to identify any narrative element that creates ambiguity regarding a character's physical presence at a location.", "severity": "P1", "why_problematic": "Instructs the LLM to determine physical presence based on a closed list of specific sci-fi/fantasy tropes. This biases the visual world rules towards these specific concepts and may miss other forms of non-physical presence not listed."}, {"category": "llm_closed_list_instruction", "evidence": "조선시대, 한옥, 미래 연구시설, 중세 유럽, 현대 한국 도시", "line_end": 23, "line_start": 17, "recommended_fix": "Replace specific trope examples with abstract category descriptions or move them to a domain-specific style guide.", "severity": "P2", "why_problematic": "Uses specific domain tropes and culturally-specific examples (e.g., Joseon Dynasty, Hanok) to guide extraction. These examples in a base prompt can bias the LLM's categorization of arbitrary scenarios and represent scattered domain nomenclature."}], "path": "prompts/_base/entity_extractor_v2/7.202605091845/turn0_style.md", "scan_kind": "prompt", "sha256": "31930e4a978832afdd7f6b7163943c8d9b891c897bc91adebf5959e74669d55b"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 6, "chunk_start": 1, "chunk_summary": "The prompt uses hardcoded examples of common objects to define a semantic exclusion filter for prop analysis.", "duration_ms": 25525, "findings": [{"category": "llm_closed_list_instruction", "evidence": "의자, 테이블 등", "line_end": 6, "line_start": 6, "recommended_fix": "Define 'core visual information' based on narrative or functional importance within the scene context rather than providing a hardcoded list of objects to exclude.", "severity": "P2", "why_problematic": "The prompt uses specific common noun examples ('chairs, tables') to define the 'general' category for semantic filtering. This instructs the LLM to classify open-world meaning (what is 'core' vs 'general') based on a closed list of examples, which may cause the omission of contextually significant props that happen to be common objects."}], "path": "prompts/_base/entity_extractor_v2/7.202605091845/turn4.md", "scan_kind": "prompt", "sha256": "704a66e992e6ebf7080c998f6de17f8fdec2576843e6ca5d321a0c8829256a17"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 15, "chunk_start": 1, "chunk_summary": "No actionable findings; the file defines a standard JSON schema for entity extraction without scenario-specific pollution or hardcoded semantic judgments.", "duration_ms": 2865, "findings": [], "path": "prompts/_base/entity_extractor_v2/9.202605130226/turn0_style_schema.json", "scan_kind": "prompt", "sha256": "ddadc6b3ba3f79279dc52a9049e8bf5b1aff2e5a7b6b13d9090bcee9413c0f15"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 6, "chunk_start": 1, "chunk_summary": "The prompt uses hardcoded examples of common objects to instruct the LLM on what to exclude from entity extraction, creating a semantic bias.", "duration_ms": 11980, "findings": [{"category": "llm_closed_list_instruction", "evidence": "일반적인 물건 (의자, 테이블 등)은 제외하고", "line_end": 6, "line_start": 6, "recommended_fix": "Remove specific object examples. Instead, provide a conceptual definition of 'background' or 'ambient' props, or allow the importance to be determined by the scenario's structural metadata (SOT).", "severity": "P2", "why_problematic": "Hardcoding specific examples like 'chairs' and 'tables' as items to exclude biases the LLM's judgment of what constitutes a 'common' vs. 'important' prop. This can lead to the omission of relevant props if they happen to match these examples in a specific scenario context (e.g., a ritual chair)."}], "path": "prompts/_base/entity_extractor_v2/8.202605121200/turn4.md", "scan_kind": "prompt", "sha256": "704a66e992e6ebf7080c998f6de17f8fdec2576843e6ca5d321a0c8829256a17"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 10, "chunk_start": 1, "chunk_summary": "The prompt contains scenario-specific visual state examples that bias the entity extraction process toward specific tropes like fire and destruction.", "duration_ms": 13589, "findings": [{"category": "llm_closed_list_instruction", "evidence": "시간대 변화 (낮/밤/새벽), 날씨 변화 (맑음/비/안개), 상태 변화 (화재 이후/파괴된/정상)", "line_end": 9, "line_start": 7, "recommended_fix": "Replace specific trope examples with abstract categories or instructions to identify any narrative-driven visual state changes mentioned in the text.", "severity": "P2", "why_problematic": "The prompt provides specific examples of visual variations, including scenario-specific tropes like 'after fire' (화재 이후) and 'destroyed' (파괴된). This biases the LLM to look for these specific states in open-world scenarios rather than identifying variations purely from the narrative context or a structured world-rule SOT."}], "path": "prompts/_base/entity_extractor_v2/8.202605121200/turn3.md", "scan_kind": "prompt", "sha256": "f757a7155f34670b5e6dafe6ac19be55de01cdcc65645990ab96036500746196"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 10, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 6753, "findings": [], "path": "prompts/_base/entity_extractor_v2/9.202605130226/turn1.md", "scan_kind": "prompt", "sha256": "131cd0d20ee7aa0f183c463e454de83adb772de2eca314edd6594972804f7b95"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 14, "chunk_start": 1, "chunk_summary": "The prompt defines character variant classification using specific trope examples like armor and military uniforms, which biases semantic extraction logic.", "duration_ms": 14339, "findings": [{"category": "llm_closed_list_instruction", "evidence": "20대→60대 같은 큰 나이 변화, 완전히 다른 실루엣(전신 갑옷 등), 변장... 군복/정장/일상복 → 씬 프롬프트로 처리, 부상/결박/사망 상태", "line_end": 11, "line_start": 10, "recommended_fix": "Replace specific trope examples with abstract definitions of 'Variant' (e.g., identity-altering or permanent physical changes) versus 'Scene Attribute' (e.g., situational states or standard wardrobe changes) to ensure consistent open-world behavior.", "severity": "P2", "why_problematic": "The prompt uses specific semantic examples (age gaps, armor, military uniforms, injuries) to instruct the LLM on how to distinguish between a character variant and a scene-level attribute. This hardcodes domain-specific tropes into the extraction logic, which can lead to inconsistent classification for similar but unlisted items (e.g., space suits or magical auras) that should be governed by abstract architectural rules."}], "path": "prompts/_base/entity_extractor_v2/8.202605121200/turn2.md", "scan_kind": "prompt", "sha256": "a4177ce4a007861512d66ee9bdb9b69afea47ff818eeeddfb1cb1a1fb6f2b817"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 25, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 3221, "findings": [], "path": "prompts/_base/entity_extractor_v2/9.202605130226/turn1_7_detail_batch_schema.json", "scan_kind": "prompt", "sha256": "c37d0b2ad98d09e2aae9c14b59e27467caeee1af360f7ff6d6a1e7862e3dbeda"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 21, "chunk_start": 1, "chunk_summary": "No actionable findings; the schema defines a generic structure for entity extraction without scenario-specific pollution or pattern-based semantic routing.", "duration_ms": 3130, "findings": [], "path": "prompts/_base/entity_extractor_v2/9.202605130226/turn1_review_schema.json", "scan_kind": "prompt", "sha256": "8da829a58de03b15e392fe01e73b04699056e6dfe8aba79c77139d1a9f017dac"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 29, "chunk_start": 1, "chunk_summary": "The prompt uses specific trope lists and cultural examples to guide semantic extraction, which biases the model's interpretation of open-world scenarios.", "duration_ms": 18141, "findings": [{"category": "llm_closed_list_instruction", "evidence": "원격 접속/조종/빙의/텔레파시 ... 몽타주/교차편집", "line_end": 14, "line_start": 13, "recommended_fix": "Generalize the instruction to identify any narrative or technical condition where an entity's visual appearance does not imply physical presence at the location, rather than listing specific tropes.", "severity": "P1", "why_problematic": "The prompt defines 'physical presence' logic using a closed list of specific tropes and cinematic techniques. This biases the LLM to only consider these patterns when determining if an entity should be rendered in a scene, potentially failing on novel scenario mechanics or different narrative genres."}, {"category": "scenario_dependent_prompt", "evidence": "조선시대, 중세 유럽, 한국 서울, 미국 뉴욕, 가상의 왕국", "line_end": 23, "line_start": 17, "recommended_fix": "Remove specific cultural/historical examples and replace them with abstract category descriptions (e.g., 'Historical period', 'Geographic location') to avoid anchoring bias.", "severity": "P2", "why_problematic": "Concrete historical and geographical examples (Joseon, Medieval Europe, etc.) are provided as hints. These act as semantic anchors that can bias the LLM toward these specific tropes even when the scenario text is ambiguous or describes a different setting."}], "path": "prompts/_base/entity_extractor_v2/9.202605130226/turn0_style.md", "scan_kind": "prompt", "sha256": "31930e4a978832afdd7f6b7163943c8d9b891c897bc91adebf5959e74669d55b"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 137, "chunk_start": 1, "chunk_summary": "The prompt defines a hardcoded controlled vocabulary for location sub-spaces, forcing open-world scenario analysis into a narrow set of domestic-oriented labels.", "duration_ms": 18661, "findings": [{"category": "llm_closed_list_instruction", "evidence": "allowed_space_keys 는 controlled vocab 안에서 선택: main / kitchen / rooftop / stairs / yard / exterior / office.", "line_end": 101, "line_start": 97, "recommended_fix": "Replace the hardcoded list with an open-ended descriptive requirement or move the vocabulary to a dynamically provided configuration (SOT) that can vary by project or genre.", "severity": "P1", "why_problematic": "The prompt imposes a hardcoded list of sub-space labels on open-world scenario analysis. This forces the LLM to use a narrow set of terms (e.g., 'kitchen', 'yard') regardless of the scenario's genre or setting (e.g., sci-fi, fantasy), leading to semantic inaccuracy or over-reliance on the 'main' fallback for any space not explicitly listed. This is scenario-specific pollution that biases the extractor toward modern domestic settings."}], "path": "prompts/_base/entity_extractor_v2/9.202605130226/system.md", "scan_kind": "prompt", "sha256": "4c6ca2572963ae30038f2acd9e844dc18c96adf97ceab28cead3f90c4a8af01a"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 6, "chunk_start": 1, "chunk_summary": "The prompt uses hardcoded examples to instruct the LLM on semantic filtering of objects, which can bias the extraction process.", "duration_ms": 9293, "findings": [{"category": "llm_closed_list_instruction", "evidence": "일반적인 물건 (의자, 테이블 등)은 제외하고", "line_end": 6, "line_start": 6, "recommended_fix": "Move the definition of 'general' or 'ignorable' items to a configuration or SOT, or use a more abstract instruction that defines 'importance' relative to the scene's narrative focus rather than specific object types.", "severity": "P2", "why_problematic": "Hardcoding specific examples like 'chairs' and 'tables' to define 'general items' biases the LLM's filtering logic. In certain scenarios, such as an antique shop or a carpenter's workshop, these items might be core visual information, but the prompt instructs their exclusion based on a fixed list of examples."}], "path": "prompts/_base/entity_extractor_v2/9.202605130226/turn4.md", "scan_kind": "prompt", "sha256": "704a66e992e6ebf7080c998f6de17f8fdec2576843e6ca5d321a0c8829256a17"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 10, "chunk_start": 1, "chunk_summary": "The prompt provides specific visual variation examples (time, weather, and state) which may bias the LLM's extraction of environmental states from open-world scenarios.", "duration_ms": 11790, "findings": [{"category": "llm_closed_list_instruction", "evidence": "- 시간대 변화 (낮/밤/새벽)\\n    - 날씨 변화 (맑음/비/안개)\\n    - 상태 변화 (화재 이후/파괴된/정상)", "line_end": 9, "line_start": 7, "recommended_fix": "Replace specific examples with abstract definitions of variation types (e.g., temporal, meteorological, or structural state) and ensure that valid state transitions are defined in a structured world-rule SOT rather than hardcoded in the base prompt.", "severity": "P2", "why_problematic": "The prompt uses specific scenario-dependent examples (especially 'after fire/destroyed') to define visual variation states. This biases the LLM's extraction logic toward these specific tropes and may lead to missed or forced classifications in arbitrary scenarios that do not fit these specific categories."}], "path": "prompts/_base/entity_extractor_v2/9.202605130226/turn3.md", "scan_kind": "prompt", "sha256": "f757a7155f34670b5e6dafe6ac19be55de01cdcc65645990ab96036500746196"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 21, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 3334, "findings": [], "path": "prompts/_base/entity_filter/1.202603231200/filter_schema.json", "scan_kind": "prompt", "sha256": "b39d2cbda5ef947208d71bc9fae20381140fc1e695f6eff4894b4968dd23972e"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 21, "chunk_start": 1, "chunk_summary": "The provided JSON schema is a structural definition for entity filtering and contains no scenario-specific pollution or pattern-based semantic logic.", "duration_ms": 3258, "findings": [], "path": "prompts/_base/entity_filter/2.202603241900/filter_schema.json", "scan_kind": "prompt", "sha256": "b39d2cbda5ef947208d71bc9fae20381140fc1e695f6eff4894b4968dd23972e"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 14, "chunk_start": 1, "chunk_summary": "The prompt uses hardcoded visual tropes and specific clothing examples to define the semantic boundary for character variants, which biases entity extraction logic.", "duration_ms": 14949, "findings": [{"category": "llm_closed_list_instruction", "evidence": "허용: 20대→60대 같은 큰 나이 변화, 완전히 다른 실루엣(전신 갑옷 등) ... 금지: 의상만 바뀌는 경우(군복/정장/일상복 ...)", "line_end": 11, "line_start": 10, "recommended_fix": "Define the criteria for variants using abstract principles (e.g., 'permanent physical changes' vs. 'transient outfit/state changes') and move specific visual examples to a genre-specific SOT or configuration.", "severity": "P1", "why_problematic": "The prompt defines the logic for 'Visual Variants' using specific scenario-dependent examples (age gaps, full armor, military uniforms, suits). This forces the LLM to classify open-world visual meaning based on a closed list of tropes, which may bias extraction or fail to generalize across different story genres (e.g., fantasy vs. modern drama)."}], "path": "prompts/_base/entity_extractor_v2/9.202605130226/turn2.md", "scan_kind": "prompt", "sha256": "a4177ce4a007861512d66ee9bdb9b69afea47ff818eeeddfb1cb1a1fb6f2b817"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 46, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 3490, "findings": [], "path": "prompts/_base/entity_relation/1.202603301200/analyze_schema.json", "scan_kind": "prompt", "sha256": "69d5ccded35446b0620cdc238849f916dcaf2af3e727bb19d7ff16f3404b2417"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 24, "chunk_start": 1, "chunk_summary": "The prompt contains a hard-coded list of ethnicity labels for character extraction, which biases open-world visual descriptions and should be managed via a structured SOT.", "duration_ms": 24049, "findings": [{"category": "llm_closed_list_instruction", "evidence": "Korean, East Asian, South Asian, Black, White, Hispanic 등", "line_end": 13, "line_start": 13, "recommended_fix": "Replace the hard-coded list with a placeholder that is populated from a structured source of truth (SOT) containing the allowed or preferred visual taxonomy for characters.", "severity": "P1", "why_problematic": "The prompt provides a specific list of ethnic/national labels and mandates their use for character descriptions. This hard-codes a visual taxonomy into the prompt, which can lead to inconsistent or biased character generation and makes the system harder to update with new categories."}], "path": "prompts/_base/entity_extractor_v2/9.202605130226/turn1_7_detail_batch.md", "scan_kind": "prompt", "sha256": "20e33cce20dc4a55dd7f6458de5911dfd80389064a09ead6ab27828fa13e54c1"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 11, "chunk_start": 1, "chunk_summary": "No actionable findings; the prompt provides generic semantic criteria for entity filtering without scenario-specific pollution or hardcoded story-world logic.", "duration_ms": 9772, "findings": [], "path": "prompts/_base/entity_filter/1.202603231200/system.md", "scan_kind": "prompt", "sha256": "53aee05e4629526ef24828309b54418651a936d050f46341f5f284738d48cb8b"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 24, "chunk_start": 1, "chunk_summary": "The prompt contains hardcoded visual styles and uses closed-list examples to define temporary vs. permanent entity states, which can bias extraction and visual generation.", "duration_ms": 30654, "findings": [{"category": "scenario_dependent_prompt", "evidence": "\"Passport-style ID photo\", \"Photorealistic cinematic establishing shot\", \"Photorealistic product photo\"", "line_end": 17, "line_start": 10, "recommended_fix": "Move visual style and framing constraints (e.g., 'Photorealistic', 'Passport-style') to the 'visual_world_rules' SOT or a style-specific configuration that is injected into the prompt.", "severity": "P1", "why_problematic": "These hardcoded visual styles and framing constraints are applied globally, potentially contradicting the 'visual_world_rules' (Line 8) and biasing the T2I prompt generation toward realism and specific photography styles regardless of the scenario's intended art direction."}, {"category": "llm_closed_list_instruction", "evidence": "장식품(리본, 꽃 등), 상처/피/흙, 변장, 특수 메이크업, 폭발 후, 파괴된 상태, 파손, 분해", "line_end": 18, "line_start": 14, "recommended_fix": "Replace specific examples with abstract criteria for 'permanent' vs 'temporary' states, or allow the 'visual_world_rules' to define what constitutes a core entity feature versus a scene-specific variant.", "severity": "P2", "why_problematic": "The prompt uses a closed list of specific tropes to define 'temporary states' to be excluded. This can lead to false negatives where permanent character or object features (e.g., a signature ribbon or a pre-existing scar) are incorrectly stripped because they match the example list."}], "path": "prompts/_base/entity_extractor_v2/8.202605121200/turn_entity_detail.md", "scan_kind": "prompt", "sha256": "d4c294572b35a866ffe299f8953b53eab3b49bb77e1b9ad67d8bab1825468c9e"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 46, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 2669, "findings": [], "path": "prompts/_base/entity_relation/2.202603301800/analyze_schema.json", "scan_kind": "prompt", "sha256": "69d5ccded35446b0620cdc238849f916dcaf2af3e727bb19d7ff16f3404b2417"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 33, "chunk_start": 1, "chunk_summary": "No actionable findings; the file defines a standard structural JSON schema for entity review without scenario-specific pollution or semantic string logic.", "duration_ms": 3416, "findings": [], "path": "prompts/_base/entity_review_v4/1.202603231200/review_schema.json", "scan_kind": "prompt", "sha256": "55e73bd7e3dd1efee870cf537946cb63af4e55d8895223189d1d2c55de9e0afe"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 16, "chunk_start": 1, "chunk_summary": "The prompt is a generic template for entity transformation analysis and visual similarity judgment using placeholders, free of scenario-specific pollution or hardcoded semantic rules.", "duration_ms": 11188, "findings": [], "path": "prompts/_base/entity_relation/1.202603301200/analyze.md", "scan_kind": "prompt", "sha256": "5664dc626df722b9772b0979379d88ffe3e5b892f65446b529d6766e31674151"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 33, "chunk_start": 1, "chunk_summary": "No actionable findings; the file defines a structural JSON schema for entity review without scenario-specific pollution or semantic string judgments.", "duration_ms": 2799, "findings": [], "path": "prompts/_base/entity_review_v4/2.202603241900/review_schema.json", "scan_kind": "prompt", "sha256": "55e73bd7e3dd1efee870cf537946cb63af4e55d8895223189d1d2c55de9e0afe"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 22, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 6040, "findings": [], "path": "prompts/_base/entity_review_v4/1.202603231200/system.md", "scan_kind": "prompt", "sha256": "c45a67bd6563029709396486050c5ba412f2cd670501af2e12b2db0fece380e1"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 16, "chunk_start": 1, "chunk_summary": "The entity filtering prompt contains hardcoded lists of specific object types (wearables and background equipment) used as removal criteria, which biases the LLM and risks stripping story-critical entities.", "duration_ms": 15488, "findings": [{"category": "llm_closed_list_instruction", "evidence": "(수트, 우주복, 갑옷, 제복 등, 완전 몸을 깜사는 형태 장치나 입는 로봇 등도 제거) ... (벽면 모니터, TV, CCTV 등)", "line_end": 13, "line_start": 12, "recommended_fix": "Replace specific prop examples with abstract criteria or move these genre-specific exclusions to a scenario-specific configuration or SOT. Use functional definitions (e.g., 'generic background props without unique identifiers') rather than naming specific objects like 'CCTV' or 'spacesuits'.", "severity": "P1", "why_problematic": "The prompt instructs the LLM to classify and remove entities based on a closed list of specific prop examples (spacesuits, armor, CCTV, etc.). This hardcodes domain-specific tropes into the base filtering logic, which can lead to the accidental removal of unique, plot-critical entities in scenarios where these items are central (e.g., a story about a specific sentient suit or a critical surveillance monitor)."}], "path": "prompts/_base/entity_filter/2.202603241900/system.md", "scan_kind": "prompt", "sha256": "c502937d8bafd262fe82d98c0a41087574371cf06f88e5ed2744b3a9b90af225"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 13, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 2367, "findings": [], "path": "prompts/_base/episode_summary/1.202603231200/summary_schema.json", "scan_kind": "prompt", "sha256": "58d2399111953754dbf3c5187e9d579ead0bed650918f7a7cc8b6f6352cef874"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 44, "chunk_start": 1, "chunk_summary": "The prompt defines entity transformation and visual similarity logic using specific genre tropes and scenario-dependent examples.", "duration_ms": 13826, "findings": [{"category": "llm_closed_list_instruction", "evidence": "인물 예시... 요괴/괴물 형태... 영웅 → 갑옷 착용... 무기 → 각성/강화... 배경 예시... 파괴된 형태", "line_end": 23, "line_start": 9, "recommended_fix": "Replace concrete trope examples with abstract categories of transformation (e.g., biological aging, functional state change, environmental degradation) or move genre-specific examples to a scenario-specific SOT.", "severity": "P1", "why_problematic": "The prompt uses scattered domain nomenclature (fantasy, action, post-apocalyptic tropes) to define the semantic boundaries of entity transformations. This biases the LLM toward specific genres and may lead to incorrect reasoning in scenarios that do not fit these tropes (e.g., realistic drama or hard sci-fi)."}, {"category": "llm_closed_list_instruction", "evidence": "사람이 늙어도 얼굴 특징은 유지됨... 요괴로 변해도... 로봇이 자동차로 변환", "line_end": 37, "line_start": 28, "recommended_fix": "Define visual similarity criteria based on structural, textural, or geometric persistence (e.g., 'retention of key facial landmarks' or 'consistent color palette') rather than specific story-driven examples.", "severity": "P1", "why_problematic": "The logic for visual similarity is defined through specific narrative examples like 'robots' and 'monsters'. This forces the LLM to classify open-world visual meaning based on a closed list of examples that may not be relevant to the current scenario's visual rules."}], "path": "prompts/_base/entity_relation/1.202603301200/system.md", "scan_kind": "prompt", "sha256": "fc32bbe39e98201c9ba341fcef4d6003368ba87a5188ee025ab80da40270c8f3"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 10, "chunk_start": 1, "chunk_summary": "No actionable findings; the prompt provides generic instructions for episode summarization without scenario-specific pollution or pattern-based semantic routing.", "duration_ms": 3004, "findings": [], "path": "prompts/_base/episode_summary/1.202603231200/system.md", "scan_kind": "prompt", "sha256": "f4083c07c91825326874ce1d0594b73c533d78c27367645c57c2e97ad7747c99"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 10, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 2874, "findings": [], "path": "prompts/_base/floor_plan_prompt/1.202604292033/schema.json", "scan_kind": "prompt", "sha256": "24ebabc439b7adf43a9118eea2a3ce90126a86500eb5b6f5055cdceb1b4c89d3"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 16, "chunk_start": 1, "chunk_summary": "The prompt provides a generic template for analyzing entity transformation relationships and visual similarity without scenario-specific pollution or hardcoded semantic rules.", "duration_ms": 13798, "findings": [], "path": "prompts/_base/entity_relation/2.202603301800/analyze.md", "scan_kind": "prompt", "sha256": "f3b2328dfba03b6f04267beef2b5539c9a30f86420e5102efec2db90899d3cd2"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 16, "chunk_start": 1, "chunk_summary": "No actionable findings; the template uses standard structural placeholders without scenario-specific pollution or semantic string judgment.", "duration_ms": 3322, "findings": [], "path": "prompts/_base/floor_plan_prompt/1.202604292033/user_template.md", "scan_kind": "prompt", "sha256": "ae084aafb17e4841c5337db4aa25779da32b6178dc178f1b893d12874c70fa85"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 26, "chunk_start": 1, "chunk_summary": "The prompt contains hardcoded visual style constraints and requires the LLM to make semantic judgments on prop uniqueness for reference routing.", "duration_ms": 30098, "findings": [{"category": "scenario_dependent_prompt", "evidence": "실사 영화 촬영 스타일, Passport-style ID photo, Photorealistic cinematic establishing shot, Photorealistic product photo", "line_end": 18, "line_start": 6, "recommended_fix": "Parameterize the visual style (e.g., 'photorealistic', 'cinematic') by deriving it from the visual_world_rules SOT, similar to how era and region are handled in line 8.", "severity": "P1", "why_problematic": "The prompt hardcodes 'live-action' and 'photorealistic' styles as the default for T2I prompt generation. This creates scenario-specific pollution that biases the visual output and prevents the pipeline from supporting non-photorealistic styles (e.g., animation) without modifying the base prompt logic."}, {"category": "semantic_string_judgment", "evidence": "이 specific prop 이 시각적으로 유니크한 정체성을 가져 reference image 가 필요한지 판단. **fixed object category list 추론 금지**.", "line_end": 24, "line_start": 24, "recommended_fix": "Provide a structured set of criteria or a category-based mapping in the SOT to determine reference requirements, rather than relying on LLM intuition.", "severity": "P2", "why_problematic": "The LLM is asked to perform an open-world semantic judgment on whether a prop is 'visually unique' to determine if a reference image is required, while being explicitly told not to use a fixed category list. This makes the reference attachment logic non-deterministic and reliant on LLM internal bias."}], "path": "prompts/_base/entity_extractor_v2/9.202605130226/turn_entity_detail.md", "scan_kind": "prompt", "sha256": "ec173df86b94c263a602aab6f01fd08b3b04afbda67b0ffdfe8a18ae0058482e"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 40, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 3229, "findings": [], "path": "prompts/_base/floor_plan_prompt/2.202604300800/schema.json", "scan_kind": "prompt", "sha256": "04c51854936287ed8a11d7b45f57302f64be4c75d63f95c6e09982a36ea3013c"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 16, "chunk_start": 1, "chunk_summary": "No actionable findings; the template uses generic placeholders for structured data without hardcoded scenario pollution or semantic string judgment.", "duration_ms": 3565, "findings": [], "path": "prompts/_base/floor_plan_prompt/2.202604300800/user_template.md", "scan_kind": "prompt", "sha256": "9f91dd418f0a7911ea52a92c3d4be17a502d4a685fe583064580181f0c08cc20"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 16, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 3234, "findings": [], "path": "prompts/_base/floor_plan_prompt/3.202604301041/user_template.md", "scan_kind": "prompt", "sha256": "9f91dd418f0a7911ea52a92c3d4be17a502d4a685fe583064580181f0c08cc20"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 40, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 3323, "findings": [], "path": "prompts/_base/floor_plan_prompt/4.202605091200/schema.json", "scan_kind": "prompt", "sha256": "02af9d1d07861c601f84f5725bc5aca93b2463cb0613c64829060b7566d13fcc"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 40, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 6463, "findings": [], "path": "prompts/_base/floor_plan_prompt/3.202604301041/schema.json", "scan_kind": "prompt", "sha256": "04c51854936287ed8a11d7b45f57302f64be4c75d63f95c6e09982a36ea3013c"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 17, "chunk_start": 1, "chunk_summary": "The floor plan system prompt includes specific narrative trope examples that may bias the LLM's identification of plot-critical elements.", "duration_ms": 12798, "findings": [{"category": "scenario_dependent_prompt", "evidence": "a curtain that hides a body, a broken window, a hidden compartment", "line_end": 11, "line_start": 11, "recommended_fix": "Replace specific narrative examples with abstract functional descriptions or instructions to follow explicit markers in the input spec.", "severity": "P2", "why_problematic": "These are specific narrative tropes used as examples for 'plot-critical visual devices'. Such specific examples can bias the LLM toward identifying or hallucinating these exact items in scenarios where they do not exist, rather than identifying elements based on the provided scene text."}], "path": "prompts/_base/floor_plan_prompt/1.202604292033/system.md", "scan_kind": "prompt", "sha256": "5f151416e85d57ef0a79f197fafe2c38c859147c147f522e0cae5cd47869d5aa"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 23, "chunk_start": 1, "chunk_summary": "The system prompt relies on closed-list examples and semantic categories to define entity boundaries, introducing genre-specific bias and hardcoded classification logic.", "duration_ms": 17527, "findings": [{"category": "llm_closed_list_instruction", "evidence": "감정, 심리, 추상 개념, CG 효과/현상 / 수트, 우주복, 갑옷 등 / 벽면 모니터, TV 등", "line_end": 15, "line_start": 12, "recommended_fix": "Replace the hardcoded examples with a reference to a structured Entity Type Definition (SOT) that defines the properties of 'Outlook', 'Prop', and 'Background' entities.", "severity": "P1", "why_problematic": "The LLM is instructed to classify and filter entities based on a closed list of semantic examples (e.g., space suits, armor, monitors). This creates a dependency on specific genre tropes and prevents the system from handling diverse scenarios where these items might be categorized differently or where other non-visual elements exist."}], "path": "prompts/_base/entity_review_v4/2.202603241900/system.md", "scan_kind": "prompt", "sha256": "db2ea9b43f8e8540b07db86686f39774915fbee618e2df1464899e29710fd15f"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 19, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 11535, "findings": [], "path": "prompts/_base/floor_plan_prompt/2.202604300800/system.md", "scan_kind": "prompt", "sha256": "b068125361cdcf434bffec5ed542e8d58f307483052d002978bcfe6f0be4b095"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 2, "chunk_start": 1, "chunk_summary": "No actionable findings; the prompt contains generic instructions for camera angle adjustments without scenario-specific pollution or semantic string judgments.", "duration_ms": 4524, "findings": [], "path": "prompts/_base/i2i_editor/v1/angle.md", "scan_kind": "prompt", "sha256": "6d01893a1b4001212ba3192514d3d21db01e0ec2c5b2fedbaadd06f34b50ff53"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 20, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 5381, "findings": [], "path": "prompts/_base/floor_plan_prompt/4.202605091200/user_template.md", "scan_kind": "prompt", "sha256": "24fd549170c03d3bc801c72186de5ecaebf9b39345023c6fb0c70f70c566f64e"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 54, "chunk_start": 1, "chunk_summary": "The prompt uses specific story tropes and scenario-specific examples to define entity transformation logic and visual similarity, which biases open-world analysis.", "duration_ms": 24502, "findings": [{"category": "llm_closed_list_instruction", "evidence": "인물 예시... 소품 예시... 배경 예시...", "line_end": 22, "line_start": 9, "recommended_fix": "Replace specific trope examples with abstract criteria for identity continuity and move specific examples to a separate few-shot or SOT configuration.", "severity": "P1", "why_problematic": "The prompt defines the 'variant' relationship using a closed list of specific tropes (aging, monster transformation, armor, awakened weapons, ruins). This biases the LLM to only look for these specific types of transformations rather than applying a general principle of identity continuity."}, {"category": "llm_closed_list_instruction", "evidence": "사람이 늙어도 얼굴 특징은 유지됨 → true... 사람이 완전히 다른 동물로 변신 → false", "line_end": 37, "line_start": 29, "recommended_fix": "Instruct the LLM to evaluate visual similarity based on the presence of shared visual descriptors or 'anchor features' rather than hardcoding specific transformation types.", "severity": "P1", "why_problematic": "Hardcodes visual similarity logic (true/false) based on specific semantic examples. This prevents the LLM from evaluating visual continuity in creative edge cases where identity might be preserved despite drastic changes."}, {"category": "scenario_dependent_prompt", "evidence": "수리검을 던져서 실 그물이 생긴 것", "line_end": 43, "line_start": 43, "recommended_fix": "Use a more generic example of an action/effect relationship.", "severity": "P2", "why_problematic": "Uses a specific scenario-based example (shuriken/thread net) to define a negative constraint, which is scenario-specific pollution."}], "path": "prompts/_base/entity_relation/2.202603301800/system.md", "scan_kind": "prompt", "sha256": "225b2bec987546cf5149416899dcd85827092b1a01b343d38008a32537f2207b"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 1, "chunk_start": 1, "chunk_summary": "No actionable findings; the file contains a generic template placeholder for composition notes without scenario-specific pollution.", "duration_ms": 2707, "findings": [], "path": "prompts/_base/i2i_editor/v1/composition.md", "scan_kind": "prompt", "sha256": "a456c0450d6fc79fc4f9ebc449f5efc0309a3a63294a4b1fffaf55fc2ce2e25a"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 2, "chunk_start": 1, "chunk_summary": "No actionable findings; the prompt uses generic instructions and placeholders without scenario-specific pollution or hardcoded semantic classifiers.", "duration_ms": 4329, "findings": [], "path": "prompts/_base/i2i_editor/v1/color.md", "scan_kind": "prompt", "sha256": "6566ff7edea40ff41419f975dfeca8b024390da0af4b0d45326271d2404f0d60"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 2, "chunk_start": 1, "chunk_summary": "The provided prompt template is a generic instruction for image-to-image editing and contains no scenario-specific pollution or pattern-based semantic judgment.", "duration_ms": 4435, "findings": [], "path": "prompts/_base/i2i_editor/v1/combined.md", "scan_kind": "prompt", "sha256": "357ff73d93ee627a8513cf2dbade17e136ecb55fcf3500c5968618a6790eb547"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 25, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 4987, "findings": [], "path": "prompts/_base/image_validation/v1/pdf_validation.md", "scan_kind": "prompt", "sha256": "b019a374ed74286a6f770532fc3904868d3c06362f0e6d0dc4834f1452789d0f"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 30, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 2928, "findings": [], "path": "prompts/_base/location_consistency/2.202604201230/location_schema.json", "scan_kind": "prompt", "sha256": "0dfe1cb0a807a863b3c4b4106189faf2c3b85869487137afd1fc010733d93807"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 30, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 4003, "findings": [], "path": "prompts/_base/location_consistency/1.202604191800/location_schema.json", "scan_kind": "prompt", "sha256": "0dfe1cb0a807a863b3c4b4106189faf2c3b85869487137afd1fc010733d93807"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 32, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 6672, "findings": [], "path": "prompts/_base/image_validation/v1/scene_validation.md", "scan_kind": "prompt", "sha256": "8d4f6bb07ebbe2010a82f1c2b68999c0798e8541eb9551cf057fd0820b22ef36"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 16, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 3672, "findings": [], "path": "prompts/_base/location_floor_plan/1.202604282315/user_template.md", "scan_kind": "prompt", "sha256": "52c648af4d8ed819db67381a00cd69591fd50cbb909508a45254cd9ae5e1cd9b"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 20, "chunk_start": 1, "chunk_summary": "The prompt template is a generic structure for floor plan generation and contains no scenario-specific pollution or hardcoded semantic classifiers.", "duration_ms": 4019, "findings": [], "path": "prompts/_base/location_floor_plan/2.202604290417/user_template.md", "scan_kind": "prompt", "sha256": "185416e92518bc46de8ab3040f5741f2784d86d504550c3f403ea8fcf4fbb7f3"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 31, "chunk_start": 1, "chunk_summary": "The image validation prompt is a generic template using placeholders for entity details and world context, with no hardcoded scenario-specific pollution or semantic string judgments.", "duration_ms": 14193, "findings": [], "path": "prompts/_base/image_validation/v1/reference_validation.md", "scan_kind": "prompt", "sha256": "098f81bf8e1fe789d206376f8013e1dff3167be59281a019f0552ed592983e38"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 92, "chunk_start": 1, "chunk_summary": "The system prompt defines the role and constraints for a location consistency agent, focusing on physical form while excluding dynamic environmental factors, and contains no scenario-specific pollution or hardcoded semantic logic.", "duration_ms": 14485, "findings": [], "path": "prompts/_base/location_consistency/2.202604201230/system.md", "scan_kind": "prompt", "sha256": "dcac2b2e414a6c2561a116c4c282f6c435b823785ea9f2f1b808241c949a7645"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 27, "chunk_start": 1, "chunk_summary": "The floor plan system prompt contains hardcoded semantic-to-visual mappings and scenario-specific prop examples that bias the LLM toward specific modern/regional settings.", "duration_ms": 26842, "findings": [{"category": "llm_closed_list_instruction", "evidence": "living = pale yellow, bedroom = pale blue, kitchen = pale green, bathroom = pale cyan, rooftop = pale gray, hallway = pale beige", "line_end": 10, "line_start": 10, "recommended_fix": "Move the color mapping to the visual_world_rules or a separate style configuration object passed as input.", "severity": "P1", "why_problematic": "Hardcodes a mapping between semantic room types and visual colors. This forces the LLM to use a specific color palette for a specific set of rooms, which may not apply to all scenarios (e.g., a dungeon, a spaceship) and should be defined in a world-level SOT."}, {"category": "scenario_dependent_prompt", "evidence": "low ondol-friendly bed vs western mattress; wall-mounted air-con position; built-in wardrobe on a specific wall", "line_end": 16, "line_start": 16, "recommended_fix": "Use abstract examples of layout conventions (e.g., 'seating arrangements', 'utility placement') or move these specific examples to the scenario-specific visual_world_rules input.", "severity": "P1", "why_problematic": "Includes scenario-specific props (ondol, air-con) as examples for architectural layout cues in a base prompt. This pollutes the prompt with domain-specific nomenclature that may conflict with arbitrary future scenarios (e.g., fantasy or sci-fi)."}], "path": "prompts/_base/floor_plan_prompt/4.202605091200/system.md", "scan_kind": "prompt", "sha256": "1e45ff82cbc1142f00b2266b10463053527018ab613418ae63664c0eea5182c3"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 21, "chunk_start": 1, "chunk_summary": "The prompt template is a generic structure for floor plan generation and contains no hardcoded scenario-specific pollution or semantic string judgments.", "duration_ms": 6152, "findings": [], "path": "prompts/_base/location_floor_plan/3.202604291130/user_template.md", "scan_kind": "prompt", "sha256": "a6d1b2b598c4c2b0e799aefe808989b056f7d062c3fdda8e63da08f1a901313b"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 76, "chunk_start": 1, "chunk_summary": "The prompt contains scenario-specific maritime and Korean-themed examples that bias the LLM's visual description logic toward a specific domain.", "duration_ms": 19579, "findings": [{"category": "scenario_dependent_prompt", "evidence": "\"같은 항구가 씬마다 대형 선박 vs 작은 어선으로 바뀌거나\", \"a single diesel engine housing at center\", \"A small wooden fishing boat\", \"a traditional Korean fishing village harbor\"", "line_end": 59, "line_start": 7, "recommended_fix": "Abstract the examples to cover multiple domains (e.g., a generic room, a vehicle, a natural landmark) or use placeholders to demonstrate the required level of detail without scenario-specific bias.", "severity": "P1", "why_problematic": "The prompt is heavily polluted with maritime and Korean-specific examples (fishing boats, harbors, masts, diesel engines). This anchors the LLM to a specific scenario's domain, biasing its interpretation of 'fixed physical form' and 'visual consistency' toward these specific tropes rather than general principles."}], "path": "prompts/_base/location_consistency/1.202604191800/system.md", "scan_kind": "prompt", "sha256": "54341c9189416c3745aee10fa57b7dd3a964539231568d82d57eb0d28d110fe4"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 13, "chunk_start": 1, "chunk_summary": "The prompt is a generic template for evaluating extracted entities and contains no scenario-specific pollution or hardcoded semantic heuristics.", "duration_ms": 5196, "findings": [], "path": "prompts/_base/lvm_prompts/1.202603171237/entity_list_review.md", "scan_kind": "prompt", "sha256": "faa1bb90cce5cdb8933ee4266e9cf6c9716b25526e5b1d9f664a5712dce776af"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 10, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 4656, "findings": [], "path": "prompts/_base/lvm_prompts/1.202603171237/ref_validation.md", "scan_kind": "prompt", "sha256": "6e3007c24428e687f7c021d1e52c72f7e3b7d7e9ca16f8a6331d8bafacff148d"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 7, "chunk_start": 1, "chunk_summary": "The prompt is a generic template for comparing two images against an entity description and contains no scenario-specific pollution or hardcoded semantic logic.", "duration_ms": 5912, "findings": [], "path": "prompts/_base/lvm_prompts/1.202603171237/ref_comparison.md", "scan_kind": "prompt", "sha256": "74f4922d2868aa0aad4ec036f7de04a65df68ebfdabdcd89c74e89d37b80e014"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 9, "chunk_start": 1, "chunk_summary": "No actionable findings; the prompt is a generic template for visual refinement using standard placeholders and technical categories.", "duration_ms": 4545, "findings": [], "path": "prompts/_base/lvm_prompts/1.202603171237/scene_improvement.md", "scan_kind": "prompt", "sha256": "47016bfe812a928a17935a6973a90ef4cedde87782855e4a7777b443f7efac0e"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 50, "chunk_start": 1, "chunk_summary": "The prompt relies on hardcoded Korean spatial keywords and specific architectural tropes to guide the LLM's spatial inference and layout generation logic.", "duration_ms": 13515, "findings": [{"category": "semantic_string_judgment", "evidence": "거실/안방, 부엌/거실, 침실/욕실, 방1/방2, \"문을 열고 들어간다\", \"방으로 들어선다\", \"건너편에서\", \"문 너머\"", "line_end": 25, "line_start": 22, "recommended_fix": "Abstract these spatial cues into a structured 'Spatial Reasoning SOT' or provide generalized instructions for identifying transitions (e.g., 'identify distinct nouns representing separate architectural volumes') rather than listing specific Korean strings.", "severity": "P1", "why_problematic": "The prompt provides a closed list of Korean keywords and movement phrases to drive the LLM's spatial reasoning (room separation and connectivity). This forces the LLM to perform semantic classification based on a hardcoded set of examples rather than general architectural or linguistic principles, which may fail on diverse or non-standard screenplay descriptions."}, {"category": "llm_closed_list_instruction", "evidence": "\"옥탑방 안 / 실내\", \"한옥 / 안방 / 마루\"", "line_end": 31, "line_start": 31, "recommended_fix": "Replace specific architectural examples with generic structural placeholders like 'Location / Sub-location / Zone' to maintain scenario neutrality.", "severity": "P2", "why_problematic": "The prompt uses specific scenario-dependent architectural tropes (Rooftop room, Hanok) as examples for parsing scene headings. This introduces cultural and scenario-specific bias into the general floor-plan generation logic."}], "path": "prompts/_base/location_floor_plan/3.202604291130/system.md", "scan_kind": "prompt", "sha256": "208e9e78602d9642b375b7b6f086358d66e257241d1746f0c4a6c39765678f8f"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 32, "chunk_start": 1, "chunk_summary": "The system prompt for floor plan generation contains hardcoded Korean zone markers and specific scenario-driven logic examples for spatial analysis.", "duration_ms": 21126, "findings": [{"category": "llm_closed_list_instruction", "evidence": "Identify zone markers (e.g., '/거실', '/안방', '/욕실', '/현관', '/욕조').", "line_end": 17, "line_start": 17, "recommended_fix": "Replace the hardcoded Korean examples with a generic instruction to identify zones based on the screenplay's structural markers, or inject a project-specific 'Zone SOT' into the context.", "severity": "P1", "why_problematic": "The prompt hardcodes specific Korean tokens as markers for identifying spatial zones. This biases the LLM toward a specific set of room types and screenplay formatting conventions, which should be abstracted or provided via a structured world-building SOT to ensure the pipeline remains scenario-agnostic."}], "path": "prompts/_base/location_floor_plan/2.202604290417/system.md", "scan_kind": "prompt", "sha256": "0e29ae369c44852e40fb9138334d3cc728b77a3b7769311438ede5edd0a58da5"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 22, "chunk_start": 1, "chunk_summary": "The prompt contains hardcoded visual mappings for room colors and furniture symbols, along with scenario-specific cultural examples that bias the LLM's generation logic.", "duration_ms": 39345, "findings": [{"category": "llm_closed_list_instruction", "evidence": "living = pale yellow, bedroom = pale blue, kitchen = pale green, bathroom = pale cyan, rooftop = pale gray, hallway = pale beige", "line_end": 10, "line_start": 10, "recommended_fix": "Remove the specific color-to-room mapping. Instruct the LLM to assign unique, distinct pastel colors to each area identified in the spec, or provide a mapping in the input SOT.", "severity": "P1", "why_problematic": "Hardcodes a visual mapping (color) to specific semantic room types. This biases the LLM toward a fixed set of rooms and forces a specific visual style that should be defined in a style SOT or derived from visual_world_rules."}, {"category": "llm_closed_list_instruction", "evidence": "bed = rectangle with pillow shape; sofa = long rectangle with cushion division; table = simple rectangle/square; door = arc with line indicating swing; window = double parallel line in the wall; sink/toilet = standard plan symbols", "line_end": 13, "line_start": 13, "recommended_fix": "Instruct the LLM to use standard architectural symbols appropriate to the era and region defined in the visual_world_rules, rather than prescribing specific geometric shapes in the system prompt.", "severity": "P1", "why_problematic": "Hardcodes a visual vocabulary for specific furniture and architectural elements. This limits the LLM's ability to represent diverse or period-specific objects not in this list, and should be part of a visual style SOT."}, {"category": "scenario_dependent_prompt", "evidence": "low ondol-friendly bed vs western mattress; wall-mounted air-con position; built-in wardrobe on a specific wall", "line_end": 16, "line_start": 16, "recommended_fix": "Replace specific prop examples with abstract descriptions of layout considerations (e.g., 'furniture placement relative to heating/cooling sources' or 'period-appropriate sleeping arrangements').", "severity": "P2", "why_problematic": "Contains specific prop and layout examples that pollute the prompt with domain-specific tropes (e.g., Korean 'ondol', modern 'air-con'). This biases the LLM's 'derivation' logic toward these specific examples."}], "path": "prompts/_base/floor_plan_prompt/3.202604301041/system.md", "scan_kind": "prompt", "sha256": "f3659020522811a95bb5f005c9b011c8f259ab8f8d70eabd644e971289f0ef2e"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 6, "chunk_start": 1, "chunk_summary": "No actionable findings; the prompt is a generic template for scene validation without scenario-specific pollution or hardcoded semantic logic.", "duration_ms": 6727, "findings": [], "path": "prompts/_base/lvm_prompts/1.202603171237/scene_validation.md", "scan_kind": "prompt", "sha256": "60e8bb1165578f128c64bd51de2961cb530a36879448e594ff0c02fb35a18235"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 19, "chunk_start": 1, "chunk_summary": "The system prompt contains hardcoded Korean room markers and specific negative constraints used as semantic classifiers and visual anchors.", "duration_ms": 26459, "findings": [{"category": "llm_closed_list_instruction", "evidence": "Identify zone markers (e.g., '/거실', '/안방', '/욕실', '/현관', '/욕조').", "line_end": 17, "line_start": 17, "recommended_fix": "Remove the specific Korean examples or move them to a structured 'World Rules' or 'Location Schema' SOT that defines how zones are marked in the specific project's screenplay format.", "severity": "P1", "why_problematic": "The LLM is instructed to identify spatial zones using a specific list of Korean tokens and a prefix convention ('/'). This anchors the analysis to a closed set of residential nomenclature, potentially leading to missed zones or incorrect parsing if the scenario uses different terminology or markers."}, {"category": "llm_closed_list_instruction", "evidence": "e.g., 'NOT a balcony, NOT a multi-floor building, NOT a single-room studio'", "line_end": 12, "line_start": 12, "recommended_fix": "Use abstract examples of negative constraints or instruct the LLM to derive exclusions based on the absence of features in the provided scenario text.", "severity": "P2", "why_problematic": "Provides specific negative visual constraints as examples, which can bias the LLM to include these specific exclusions in the output prompt regardless of their relevance to the actual scenario."}], "path": "prompts/_base/location_floor_plan/1.202604282315/system.md", "scan_kind": "prompt", "sha256": "f2895d8f6b572c7000a49a0c2856b3d012fb2200b01c7a45b47199ba02ffe354"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 7, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 5540, "findings": [], "path": "prompts/_base/lvm_prompts/2.202603181600/ref_comparison.md", "scan_kind": "prompt", "sha256": "74f4922d2868aa0aad4ec036f7de04a65df68ebfdabdcd89c74e89d37b80e014"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 15, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 4855, "findings": [], "path": "prompts/_base/lvm_prompts/2.202603181600/representative_selection.md", "scan_kind": "prompt", "sha256": "16f2201dc8e1f0ec994f05f5a8a99e4b207d1c72b6dba3f6a81cd11a4286deb1"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 13, "chunk_start": 1, "chunk_summary": "The prompt is a generic template for reviewing extracted entities and does not contain scenario-specific pollution or hardcoded semantic classifiers.", "duration_ms": 7826, "findings": [], "path": "prompts/_base/lvm_prompts/2.202603181600/entity_list_review.md", "scan_kind": "prompt", "sha256": "faa1bb90cce5cdb8933ee4266e9cf6c9716b25526e5b1d9f664a5712dce776af"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 10, "chunk_start": 1, "chunk_summary": "No actionable findings; the prompt is a generic validation template using placeholders for entity metadata without scenario-specific pollution or hardcoded semantic logic.", "duration_ms": 6386, "findings": [], "path": "prompts/_base/lvm_prompts/2.202603181600/ref_validation.md", "scan_kind": "prompt", "sha256": "6e3007c24428e687f7c021d1e52c72f7e3b7d7e9ca16f8a6331d8bafacff148d"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 9, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 5315, "findings": [], "path": "prompts/_base/lvm_prompts/2.202603181600/scene_improvement.md", "scan_kind": "prompt", "sha256": "47016bfe812a928a17935a6973a90ef4cedde87782855e4a7777b443f7efac0e"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 6, "chunk_start": 1, "chunk_summary": "No actionable findings; the prompt is a generic validation template using standard placeholders and status enums.", "duration_ms": 5162, "findings": [], "path": "prompts/_base/lvm_prompts/2.202603181600/scene_validation.md", "scan_kind": "prompt", "sha256": "60e8bb1165578f128c64bd51de2961cb530a36879448e594ff0c02fb35a18235"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 21, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 2263, "findings": [], "path": "prompts/_base/outlook_extractor/10.202603261238/phase1_schema.json", "scan_kind": "prompt", "sha256": "01de295c7851c67c107173d035a66f6924bc68c75d337d3ff0e40f0b615bdef2"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 15, "chunk_start": 1, "chunk_summary": "No actionable findings; the prompt is a generic template for image selection using standard placeholders without scenario-specific pollution or pattern-based semantic judgment.", "duration_ms": 5508, "findings": [], "path": "prompts/_base/lvm_prompts/2.202603181600/select_best_from_n.md", "scan_kind": "prompt", "sha256": "c52da2d988be52a70cabaa7ae292b92c39a8af82c949d6436036518382f56312"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 30, "chunk_start": 1, "chunk_summary": "No actionable findings; the file defines a structural JSON schema for scene-based character outlook assignments without scenario-specific pollution or semantic string logic.", "duration_ms": 3472, "findings": [], "path": "prompts/_base/outlook_extractor/10.202603261238/phase2_schema.json", "scan_kind": "prompt", "sha256": "8a04dc55d45f18285fbdb8278835e42d5843596c2bc30b11b3f515faa06d5320"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 20, "chunk_start": 1, "chunk_summary": "No actionable findings; the file defines a generic structural JSON schema for outlook merging operations without scenario-specific pollution.", "duration_ms": 3047, "findings": [], "path": "prompts/_base/outlook_extractor/10.202603261238/phase3_schema.json", "scan_kind": "prompt", "sha256": "9bdc26765a90a101a0a2ff5fab9eb155074a9d87e4fe8423725dd20e5b40a407"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 21, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 14869, "findings": [], "path": "prompts/_base/lvm_prompts/2.202603181600/combined_variation_recommend.md", "scan_kind": "prompt", "sha256": "efd98deb1306e35699ea3f18691be3a7af0aed9db01cbc68e475a20aad937b05"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 12, "chunk_start": 1, "chunk_summary": "The prompt contains scenario-specific examples for outlook merging logic which pollutes the base instruction set.", "duration_ms": 6402, "findings": [{"category": "scenario_dependent_prompt", "evidence": "\"고급선비복1\"과 \"고급선비복2\"", "line_end": 6, "line_start": 6, "recommended_fix": "Replace scenario-specific examples with generic placeholders like 'Item A' and 'Item B' or move the examples to a scenario-specific configuration.", "severity": "P1", "why_problematic": "The prompt uses specific scenario-dependent prop names ('Gogeup Seonbi-bok', a traditional Korean outfit) as examples for merging logic. This pollutes the base prompt with domain-specific nomenclature that may bias the LLM when processing different genres or scenarios."}], "path": "prompts/_base/outlook_extractor/10.202603261238/phase3.md", "scan_kind": "prompt", "sha256": "0690187a6e667049b629b4b5163ca8b2718054926527bc4801d09e335c9a3e29"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 26, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 3154, "findings": [], "path": "prompts/_base/outlook_extractor/11.202603311724/phase1_schema.json", "scan_kind": "prompt", "sha256": "49051b17ad03146b26c180d6b869ece95dcd8d935ce4bfd51ac744ebfe1e4bfb"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 28, "chunk_start": 1, "chunk_summary": "The prompt defines rules for extracting character outfits (outlooks) and identifying non-humanoid characters, but contains scenario-specific examples and closed-list semantic instructions.", "duration_ms": 5329, "findings": [{"category": "llm_closed_list_instruction", "evidence": "정장1, 정장2, 드레스1, 티셔츠1, 티셔츠2", "line_end": 7, "line_start": 7, "recommended_fix": "Replace specific clothing names with abstract placeholders like [OutfitType]1, [OutfitType]2.", "severity": "P2", "why_problematic": "Providing specific clothing types as examples can bias the LLM toward these common modern/formal categories, potentially limiting its creativity or accuracy in historical, sci-fi, or fantasy scenarios."}, {"category": "llm_closed_list_instruction", "evidence": "군복, 교복, 유니폼, 경비복", "line_end": 10, "line_start": 10, "recommended_fix": "Use a generic instruction: 'Identify clothing items that are standardized across a group or organization (is_shared=true).'", "severity": "P2", "why_problematic": "These specific examples of shared uniforms bias the model toward modern institutional settings. In a fantasy setting, this might miss 'cult robes' or 'guild armor' if the model over-indexes on the provided list."}, {"category": "llm_closed_list_instruction", "evidence": "\"검은더블정장\", \"네이비싱글정장\", \"낡은갈색점퍼\"", "line_end": 12, "line_start": 12, "recommended_fix": "Provide a structural naming rule (e.g., [Color/Condition] + [Style] + [Item]) rather than specific modern examples.", "severity": "P2", "why_problematic": "Specific naming examples like 'Navy Single Suit' or 'Old Brown Jumper' anchor the LLM to modern-day fashion descriptions, which may pollute the naming convention for non-modern scenarios."}, {"category": "llm_closed_list_instruction", "evidence": "동물, 뱀, 곤충 떼, 박쥐 떼, 물체, 차량 등 / 인간, 인간형 요괴/괴물, 뱀파이어, 좀비 등", "line_end": 24, "line_start": 23, "recommended_fix": "Define 'humanoid' based on anatomical structure (e.g., bipedal, head, two arms) rather than a list of creature types.", "severity": "P1", "why_problematic": "This is a closed-list semantic classifier for 'humanoid' vs 'non-humanoid'. It uses specific tropes (vampires, zombies, swarms) to define a visual/story routing decision (whether to generate an 'outlook'). This should be driven by a structured world-rule SOT or a more abstract definition of 'humanoid' (e.g., bipedal with head/limbs) to avoid missing edge cases in diverse genres."}], "path": "prompts/_base/outlook_extractor/11.202603311724/phase1.md", "scan_kind": "prompt", "sha256": "48204c280029e2dbd933775dd1b7e23fa8e9c3fda4c2cc85e10d6e1ad7722129"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 30, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 2513, "findings": [], "path": "prompts/_base/outlook_extractor/11.202603311724/phase2_schema.json", "scan_kind": "prompt", "sha256": "8a04dc55d45f18285fbdb8278835e42d5843596c2bc30b11b3f515faa06d5320"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 20, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 2483, "findings": [], "path": "prompts/_base/outlook_extractor/11.202603311724/phase3_schema.json", "scan_kind": "prompt", "sha256": "9bdc26765a90a101a0a2ff5fab9eb155074a9d87e4fe8423725dd20e5b40a407"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 12, "chunk_start": 1, "chunk_summary": "The prompt contains scenario-specific prop examples used to instruct the LLM on visual entity merging logic.", "duration_ms": 6065, "findings": [{"category": "scenario_dependent_prompt", "evidence": "(예: \"고급선비복1\"과 \"고급선비복2\"가 색상/재질까지 동일)", "line_end": 6, "line_start": 6, "recommended_fix": "Replace scenario-specific examples with generic placeholders (e.g., 'Item A' and 'Item B') or abstract descriptions of visual identity.", "severity": "P1", "why_problematic": "The prompt uses specific historical/cultural prop names ('Seonbibok') as examples for merging logic. This pollutes a base prompt with scenario-specific nomenclature, which can bias the LLM's judgment of visual similarity in arbitrary future scenarios."}], "path": "prompts/_base/outlook_extractor/11.202603311724/phase3.md", "scan_kind": "prompt", "sha256": "0690187a6e667049b629b4b5163ca8b2718054926527bc4801d09e335c9a3e29"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 21, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 3014, "findings": [], "path": "prompts/_base/outlook_extractor/9.202603261200/phase1_schema.json", "scan_kind": "prompt", "sha256": "01de295c7851c67c107173d035a66f6924bc68c75d337d3ff0e40f0b615bdef2"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 12, "chunk_start": 1, "chunk_summary": "The prompt contains specific cultural and genre-based examples that bias the LLM's extraction of visual style rules from open-world scenarios.", "duration_ms": 27147, "findings": [{"category": "llm_closed_list_instruction", "evidence": "현대/근미래/중세/조선시대 등, 한국/일본/미국/가상 등, 현대 도시/한옥/미래 시설 등, 현대복/군복/한복/우주복 등", "line_end": 11, "line_start": 5, "recommended_fix": "Replace specific examples with abstract definitions of the required visual dimensions. If specific categories are required, they should be provided via a structured SOT or schema rather than hardcoded examples in the prompt text.", "severity": "P1", "why_problematic": "The prompt uses specific cultural tropes (Joseon era, Hanok, Hanbok) and genre examples as classification guides. This biases the LLM's analysis of arbitrary scenarios, potentially leading to incorrect style extraction or forcing scenarios into these specific categories regardless of their actual content."}], "path": "prompts/_base/lvm_prompts/1.202603171237/style_rules_generator.md", "scan_kind": "prompt", "sha256": "9dc1d0c61bafa3e4f35794acc15a8a7069158f6300d5e2595127209ffab2be2a"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 20, "chunk_start": 1, "chunk_summary": "The prompt contains scenario-specific prop examples and instructs the LLM to perform semantic similarity fallbacks for missing visual data, which risks visual inconsistency.", "duration_ms": 16478, "findings": [{"category": "scenario_dependent_prompt", "evidence": "정장→피의갑옷", "line_end": 13, "line_start": 13, "recommended_fix": "Use generic placeholders for examples (e.g., 'Outfit A -> Outfit B') to avoid genre bias in the extractor's persona.", "severity": "P2", "why_problematic": "The prompt uses specific genre-heavy prop examples like 'Blood Armor' (피의갑옷) which can bias the LLM's extraction logic or influence its interpretation of ambiguous scene text toward specific tropes."}, {"category": "semantic_string_judgment", "evidence": "가장 유사한 다른 인물의 아웃룩을 배정하세요", "line_end": 20, "line_start": 20, "recommended_fix": "Require the LLM to flag missing outlooks as 'UNKNOWN' or 'MISSING' so the system can handle the fallback deterministically based on structured metadata.", "severity": "P1", "why_problematic": "This instructs the LLM to perform an arbitrary semantic similarity judgment to resolve missing data in the catalog. This leads to unpredictable visual mapping and breaks strict continuity by allowing the LLM to guess 'similar' outfits across different characters."}], "path": "prompts/_base/outlook_extractor/10.202603261238/phase2.md", "scan_kind": "prompt", "sha256": "ab29270ff877404cc1711b09caed2caf843d6303155edc72b088c8bbc469c4f2"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 30, "chunk_start": 1, "chunk_summary": "No actionable findings; the file defines a standard structural JSON schema for scene-based character outlook assignments without scenario-specific pollution or semantic string logic.", "duration_ms": 2913, "findings": [], "path": "prompts/_base/outlook_extractor/9.202603261200/phase2_schema.json", "scan_kind": "prompt", "sha256": "8a04dc55d45f18285fbdb8278835e42d5843596c2bc30b11b3f515faa06d5320"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 12, "chunk_start": 1, "chunk_summary": "The style rules generator prompt contains hardcoded domain-specific examples that bias the LLM's extraction of visual styles from scenarios.", "duration_ms": 20272, "findings": [{"category": "llm_closed_list_instruction", "evidence": "조선시대, 한옥, 한복", "line_end": 11, "line_start": 5, "recommended_fix": "Replace specific cultural examples with generic placeholders or move the domain-specific trope lists to a configuration file/SOT that is injected into the prompt context based on the project type.", "severity": "P2", "why_problematic": "The prompt provides specific cultural and domain-specific examples (e.g., Joseon era, Hanok, Hanbok) to guide the LLM's extraction of style rules. This biases the LLM towards these specific tropes and represents hardcoded domain knowledge that should ideally be managed in a structured SOT or kept generic to support arbitrary scenarios."}], "path": "prompts/_base/lvm_prompts/2.202603181600/style_rules_generator.md", "scan_kind": "prompt", "sha256": "9dc1d0c61bafa3e4f35794acc15a8a7069158f6300d5e2595127209ffab2be2a"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 56, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 2678, "findings": [], "path": "prompts/_base/outlook_extractor/9.202603261200/phase3_schema.json", "scan_kind": "prompt", "sha256": "be91c2bae2ecb2851d75f91167b8e9575c7fc770afc7ea60f75ddea3e3440000"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 20, "chunk_start": 1, "chunk_summary": "The prompt contains scenario-specific prop examples and instructs the LLM to perform subjective semantic similarity matching for missing data, which risks visual inconsistency.", "duration_ms": 15361, "findings": [{"category": "llm_closed_list_instruction", "evidence": "정장→피의갑옷", "line_end": 13, "line_start": 13, "recommended_fix": "Replace specific prop examples with generic placeholders or remove them entirely to maintain genre-neutrality.", "severity": "P2", "why_problematic": "The prompt uses a highly specific prop example ('Blood Armor') which constitutes scenario-specific pollution in a base prompt. This can bias the LLM's interpretation of outfit transitions in unrelated genres."}, {"category": "scenario_dependent_prompt", "evidence": "가장 유사한 다른 인물의 아웃룩을 배정하세요", "line_end": 20, "line_start": 20, "recommended_fix": "Change the fallback behavior to return a null value or a specific 'MISSING' token so the system can handle the error deterministically rather than relying on LLM guesswork.", "severity": "P1", "why_problematic": "This instructs the LLM to perform a subjective semantic 'similarity' judgment to bridge data gaps. This bypasses strict character-asset ownership rules and can lead to incorrect visual routing or hallucinations where one character's assets are incorrectly assigned to another."}], "path": "prompts/_base/outlook_extractor/11.202603311724/phase2.md", "scan_kind": "prompt", "sha256": "ab29270ff877404cc1711b09caed2caf843d6303155edc72b088c8bbc469c4f2"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 25, "chunk_start": 1, "chunk_summary": "No actionable findings; the file defines a generic structural schema for merging entity names without scenario-specific pollution or semantic logic.", "duration_ms": 3207, "findings": [], "path": "prompts/_base/outlook_merger/1.202603181600/merge_schema.json", "scan_kind": "prompt", "sha256": "835ea63b756fdce3248a67fc051e1aacd8811d452701f11e3d9e144aabe225f6"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 19, "chunk_start": 1, "chunk_summary": "The prompt defines extraction rules for character outfits but relies on hardcoded domain tropes to define semantic boundaries for uniforms and mechanical suits.", "duration_ms": 25809, "findings": [{"category": "llm_closed_list_instruction", "evidence": "군복, 교복, 유니폼, 경비복 등 조직에서 지급하는 동일 복장", "line_end": 11, "line_start": 9, "recommended_fix": "Replace the hardcoded list with a reference to 'official uniforms or organizational attire defined in the world rules' and inject specific examples via a dynamic SOT context.", "severity": "P2", "why_problematic": "The prompt defines the 'shared outlook' exception using a closed list of domain-specific tropes (military, school, guard uniforms). This logic should be driven by a genre-aware world-rule SOT rather than hardcoded examples in a base prompt."}, {"category": "llm_closed_list_instruction", "evidence": "인간형 기계장치(메카, 파워드슈트, 강화복, 갑옷 로봇 등)", "line_end": 16, "line_start": 16, "recommended_fix": "Move the inclusion of mechanical/armored entities to a genre-specific rule set or a 'World Rules' section of the prompt assembly.", "severity": "P2", "why_problematic": "The prompt expands the definition of 'outlook' to include specific sci-fi and fantasy tropes (mecha, powered suits, robots). Hardcoding these in a base extractor prompt pollutes the model's focus for non-sci-fi scenarios and should be part of a genre-specific configuration."}], "path": "prompts/_base/outlook_extractor/10.202603261238/phase1.md", "scan_kind": "prompt", "sha256": "f9abba86c86814378083ce2f9e4073c09952a439ed6bdf1b604a0e242cce0582"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 20, "chunk_start": 1, "chunk_summary": "The outlook extractor base prompt contains scenario-specific prop examples that pollute the shared extraction logic.", "duration_ms": 12211, "findings": [{"category": "scenario_dependent_prompt", "evidence": "정장→피의갑옷", "line_end": 13, "line_start": 13, "recommended_fix": "Replace specific prop names with generic placeholders such as '정장→전투복' or '의상A→의상B'.", "severity": "P1", "why_problematic": "The term '피의갑옷' (Blood Armor) is a highly specific, genre-heavy prop name used as an example in a base prompt. This introduces scenario-specific pollution into a shared component, potentially biasing the LLM's extraction behavior for other genres."}, {"category": "scenario_dependent_prompt", "evidence": "서바이벌강하복1, 서바이벌강하복2", "line_end": 20, "line_start": 20, "recommended_fix": "Use generic naming conventions in examples, such as '의상명_변형1, 의상명_변형2'.", "severity": "P1", "why_problematic": "The use of '서바이벌강하복' (Survival Descent Suit) as a concrete example for merging logic is scenario-specific pollution. Base prompts should remain agnostic to specific story props to avoid biasing the extractor's semantic boundaries."}], "path": "prompts/_base/outlook_extractor/9.202603261200/phase2.md", "scan_kind": "prompt", "sha256": "aba028e413d24a48508ed7e0912e00a615f328a6366058441d4271dcd17b4287"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 25, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 10085, "findings": [], "path": "prompts/_base/pdf_validation/v1/validate.md", "scan_kind": "prompt", "sha256": "9d9d162a76c35ddaa16838e139091f919d987a92e1182e122eb4df0cdabe6035"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 19, "chunk_start": 1, "chunk_summary": "The prompt contains hardcoded domain-specific trope lists and closed-list examples that bias the extraction of character outfits and shared uniforms.", "duration_ms": 21011, "findings": [{"category": "llm_closed_list_instruction", "evidence": "군복, 교복, 유니폼, 경비복", "line_end": 10, "line_start": 10, "recommended_fix": "Replace the closed list with a generic definition of shared organizational attire and move specific examples to a configurable world-rule SOT.", "severity": "P2", "why_problematic": "The prompt uses a closed list of specific uniform types to define the 'is_shared' logic. This biases the LLM to only consider these specific categories as shared, potentially missing other scenario-specific shared attire (e.g., ritual robes, sports team gear) that should be determined by a structured rule set."}, {"category": "llm_closed_list_instruction", "evidence": "메카, 파워드슈트, 강화복, 갑옷 로봇", "line_end": 16, "line_start": 16, "recommended_fix": "Remove the specific mecha examples and use a generic instruction for 'wearable or piloted entities' if applicable, or move this logic to a genre-specific prompt layer.", "severity": "P1", "why_problematic": "This line hardcodes a domain-specific trope list (sci-fi/mecha) into the base extraction logic. It forces the LLM to treat mechanical entities as 'outlooks' (clothing), which is a genre-specific semantic decision that should be driven by the project's world-building SOT rather than a generic extractor prompt."}], "path": "prompts/_base/outlook_extractor/9.202603261200/phase1.md", "scan_kind": "prompt", "sha256": "f9abba86c86814378083ce2f9e4073c09952a439ed6bdf1b604a0e242cce0582"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 17, "chunk_start": 1, "chunk_summary": "The prompt uses specific prop examples to define semantic merging logic for visual outlooks.", "duration_ms": 14492, "findings": [{"category": "llm_closed_list_instruction", "evidence": "(예: \"군복\"과 \"전투복\"과 \"택티컬 유니폼\") ... (예: \"군복\"과 \"정장\"은 다름)", "line_end": 9, "line_start": 7, "recommended_fix": "Replace specific prop examples with abstract criteria for visual identity or move them to a genre-specific configuration.", "severity": "P2", "why_problematic": "The prompt uses specific domain tropes (military/tactical vs formal wear) to instruct the LLM on visual similarity, biasing the merger logic with hardcoded examples that should be abstract or derived from a structured SOT."}], "path": "prompts/_base/outlook_merger/1.202603181600/merge_prompt.md", "scan_kind": "prompt", "sha256": "3b42b60b6cf26bf9282f7c7135092786ea5e997dd5aa59daefccbed9f28fbe5b"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 14, "chunk_start": 1, "chunk_summary": "The prompt contains a hardcoded visual style instruction that biases the output of the sanitization process toward a specific aesthetic.", "duration_ms": 11560, "findings": [{"category": "scenario_dependent_prompt", "evidence": "포토리얼리스틱 스타일로 수정해주세요", "line_end": 14, "line_start": 14, "recommended_fix": "Inject the target style as a variable from the scenario configuration or SOT instead of hardcoding it in the base sanitizer prompt.", "severity": "P1", "why_problematic": "The instruction hardcodes 'photorealistic style', which forces all sanitized prompts into a specific visual domain regardless of the original scenario's artistic requirements or the user's intent. This prevents the sanitizer from being used for non-photorealistic (e.g., stylized, anime, or painterly) scenarios."}], "path": "prompts/_base/prompt_sanitizer/2.202605112104/sanitize_user.md", "scan_kind": "prompt", "sha256": "4de9dd0cf185502515fa684b3626a5c6f6f6307fe93f82afeb8bd71d620c04ec"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 22, "chunk_start": 1, "chunk_summary": "The prompt contains hardcoded semantic transformation rules for safety mitigation and specific visual strategies that should be managed via a structured SOT.", "duration_ms": 15233, "findings": [{"category": "llm_closed_list_instruction", "evidence": "폭력: 직접적 폭력 → 긴장감 있는 대치/직후 정적 장면으로 변환 ... 아동: 아동 위험 상황 → 보호자와 함께 있는 안전한 장면으로", "line_end": 15, "line_start": 11, "recommended_fix": "Move the safety transformation rules to a structured configuration or SOT that can be injected into the prompt based on the scenario's specific requirements.", "severity": "P1", "why_problematic": "This section hardcodes a mapping between open-world semantic categories (violence, weapons, etc.) and specific visual tropes (tension, background implication, etc.). This logic should be defined in a structured safety/visual policy SOT to allow for scenario-specific mitigation strategies without modifying the system prompt."}, {"category": "scenario_dependent_prompt", "evidence": "attempt 1 — film_previs ... attempt 2 — movie_poster ... attempt 3 — aftermath ... 모든 전략의 출력은 포토리얼리스틱(실사)이어야 한다", "line_end": 22, "line_start": 17, "recommended_fix": "Parameterize the 'attempts' and style constraints so they can be provided by the calling pipeline or a structured world-rule SOT.", "severity": "P1", "why_problematic": "The prompt hardcodes specific visual strategies ('film_previs', 'movie_poster', 'aftermath') and a strict 'photorealistic' style constraint. These are domain-specific tropes and style requirements that bias the sanitizer against scenarios requiring different visual languages (e.g., stylized illustration) or different narrative strategies."}], "path": "prompts/_base/prompt_sanitizer/2.202605112104/sanitize_system.md", "scan_kind": "prompt", "sha256": "17c143e448fdb4c639dd0247291e118d2113f293264fa84374356bde2837e650"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 14, "chunk_start": 1, "chunk_summary": "The prompt contains scenario-specific examples for outfit merging and instructs the LLM to perform semantic consolidation of visual entities without structured constraints.", "duration_ms": 19468, "findings": [{"category": "scenario_dependent_prompt", "evidence": "\"서바이벌강하복1\", \"서바이벌강하복2\" → \"서바이벌강하복\"", "line_end": 6, "line_start": 6, "recommended_fix": "Replace scenario-specific examples with generic placeholders like 'Outfit_A_v1' and 'Outfit_A_v2' or 'Uniform_Type_A'.", "severity": "P2", "why_problematic": "The prompt uses a specific scenario-based prop name ('Survival Descent Suit') as a concrete example for merging logic. This introduces scenario-specific pollution into a base prompt template, which can bias the LLM's classification behavior for unrelated genres or story types."}, {"category": "semantic_string_judgment", "evidence": "같은 씬에서 비슷한 의상을 입는 인물들의 아웃룩 통합", "line_end": 9, "line_start": 9, "recommended_fix": "Define explicit criteria for 'similarity' (e.g., color, type, material) or move this logic to a step that references a structured character/world SOT to ensure visual identity is preserved.", "severity": "P1", "why_problematic": "This instruction requires the LLM to make open-world semantic judgments about visual 'similarity' to merge character outlooks. Without a structured world-rule SOT or specific visual attributes to compare, this can lead to the loss of intentional character-specific visual details or incorrect grouping of distinct entities, affecting visual consistency."}], "path": "prompts/_base/outlook_extractor/9.202603261200/phase3.md", "scan_kind": "prompt", "sha256": "77883baa6d063a0f1679a5c5dc272a3f609cae813bb5e7e0f6d54b3f452029e8"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 12, "chunk_start": 1, "chunk_summary": "The prompt sanitizer hardcodes a 'photorealistic' style constraint, biasing visual generation regardless of the original prompt's intent.", "duration_ms": 11159, "findings": [{"category": "scenario_dependent_prompt", "evidence": "포토리얼리스틱 스타일로 수정해주세요", "line_end": 12, "line_start": 12, "recommended_fix": "Remove the hardcoded style or replace it with a {target_style} placeholder passed from the scenario's style configuration.", "severity": "P1", "why_problematic": "Hardcoding a specific visual style ('photorealistic') in the sanitizer forces all sanitized prompts into that style, overriding the original scenario's artistic intent and preventing style-agnostic safety filtering."}], "path": "prompts/_base/prompt_sanitizer/v1/sanitize_user.md", "scan_kind": "prompt", "sha256": "a1b96732cc3eb249d20a5f0e1acb08fd9f9c678cad239bb56b1553d66d49d2f3"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 17, "chunk_start": 1, "chunk_summary": "No actionable findings; the prompt uses structured placeholders for world guides and entities without scenario-specific pollution.", "duration_ms": 3844, "findings": [], "path": "prompts/_base/prototype_prompts/v5/webbook_package_user.md", "scan_kind": "prompt", "sha256": "a35629eff8d74c1a488eed4c798f51baf6f6515b07fab60dc6a4bba3e3f7d36b"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 35, "chunk_start": 1, "chunk_summary": "The prompt contains hardcoded genre and setting constraints that bias the visual generation toward a specific near-future Korean setting.", "duration_ms": 7687, "findings": [{"category": "scenario_dependent_prompt", "evidence": "grounded in contemporary / near-future Korea... No... historical costume, fantasy armor, medieval architecture... Near-future gear should stay close to modern military, police, industrial, or biotech equipment", "line_end": 33, "line_start": 31, "recommended_fix": "Move era-specific, location-specific, and genre-specific visual constraints into the {world_guide_block} or a dedicated style SOT that is injected dynamically based on the scenario metadata.", "severity": "P1", "why_problematic": "These lines hardcode a specific setting (Korea) and genre (near-future/military/biotech) into a base prompt. This creates scenario pollution that will bias or conflict with arbitrary future scenarios (e.g., a historical drama or high-fantasy setting) that use this same base template."}], "path": "prompts/_base/prototype_prompts/v5/scene_image_en.md", "scan_kind": "prompt", "sha256": "1ded398a2364fa4ecdd726b2b72fd37a35a84585bbf63d922c4a834a9f508b37"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 22, "chunk_start": 1, "chunk_summary": "The prompt sanitizer uses hardcoded semantic mappings to transform sensitive content into specific visual tropes, bypassing scenario-specific context.", "duration_ms": 16610, "findings": [{"category": "llm_closed_list_instruction", "evidence": "폭력: 직접적 폭력 → 긴장감 있는 대치/직후 정적 장면으로 변환", "line_end": 15, "line_start": 11, "recommended_fix": "Decouple the safety transformation logic from the system prompt. Use a structured SOT to provide the LLM with context-appropriate visual fallbacks for different safety categories.", "severity": "P1", "why_problematic": "The prompt instructs the LLM to perform semantic classification and transformation based on a closed list of visual tropes (e.g., 'tense confrontation', 'implied weapons', 'distance and gaze'). This hardcodes the visual 'solution' for safety rejections, which should be driven by a structured SOT to maintain consistency with the specific scenario's tone and world rules."}], "path": "prompts/_base/prompt_sanitizer/v1/sanitize_system.md", "scan_kind": "prompt", "sha256": "17c143e448fdb4c639dd0247291e118d2113f293264fa84374356bde2837e650"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 39, "chunk_start": 1, "chunk_summary": "The prompt contains hardcoded setting and genre constraints (Modern Korea, prohibition of Fantasy/Historical styles) that bias entity generation toward a specific scenario type.", "duration_ms": 10506, "findings": [{"category": "scenario_dependent_prompt", "evidence": "인물은 현대 한국/근미래 한국 기준의 현실적 기본 복장으로", "line_end": 27, "line_start": 27, "recommended_fix": "Move setting-specific defaults to the {world_guide_block} or a separate configuration variable.", "severity": "P1", "why_problematic": "Hardcodes a specific setting (Modern/Near-future Korea) into a base reference prompt, biasing all entity generation regardless of the actual scenario's world-building."}, {"category": "scenario_dependent_prompt", "evidence": "사극, 전통 복식, 중세풍, 판타지풍, 복고 시대극풍, 레트로 우주복, 시대 착오적 패션 금지.", "line_end": 33, "line_start": 33, "recommended_fix": "Move genre constraints to a structured world-rule SOT or pass them as a variable.", "severity": "P1", "why_problematic": "Hardcodes genre prohibitions that should be determined by the scenario's world-building rules. This prevents the system from being used for non-modern genres."}], "path": "prompts/_base/prototype_prompts/v5/entity_reference_ko.md", "scan_kind": "prompt", "sha256": "46e14a175f56e3c153c4f3b04175d7de656d0253b4f2deb12ecb3675d3efc15a"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 35, "chunk_start": 1, "chunk_summary": "The prompt contains hardcoded genre and setting constraints (contemporary Korea, grounded near-future) that bias the LLM against other story types.", "duration_ms": 9474, "findings": [{"category": "scenario_dependent_prompt", "evidence": "동시대~근미래 한국 기준... 사극풍 복식, 판타지 갑옷, 중세풍 건축 금지... 전신 파워아머, 우주복, 초대형 메카처럼 과장하지 마라", "line_end": 33, "line_start": 31, "recommended_fix": "Remove these hardcoded constraints from the base prompt and move them into the {world_guide_block} or a dynamically injected style SOT provided by the scenario configuration.", "severity": "P1", "why_problematic": "These lines hardcode a specific 'grounded near-future Korea' setting and explicitly forbid fantasy, historical, or high-sci-fi tropes. This pollutes the base prompt with scenario-specific constraints, preventing its use for arbitrary story worlds and biasing visual generation."}], "path": "prompts/_base/prototype_prompts/v5/scene_image_ko.md", "scan_kind": "prompt", "sha256": "76781a6c81543b313343d3964890b0c9df81054cef0d8ce037f506775a459cde"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 10, "chunk_start": 1, "chunk_summary": "No actionable findings; the prompt chunk consists of clean template placeholders for structured data without scenario-specific pollution or semantic string judgment.", "duration_ms": 3130, "findings": [], "path": "prompts/_base/prototype_prompts/v5/world_guide_user.md", "scan_kind": "prompt", "sha256": "6c27670e4e60de172f1da34b632be5f1d4606a6a515538f7d30c4a783c6ae254"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 38, "chunk_start": 1, "chunk_summary": "The prompt contains domain-specific trope lists for continuity checking and language-specific length constraints that bias the LLM toward specific genres and markets.", "duration_ms": 13724, "findings": [{"category": "llm_closed_list_instruction", "evidence": "restraint state, damage, dirt, weapon possession", "line_end": 19, "line_start": 19, "recommended_fix": "Replace the specific list with a reference to a structured 'continuity_keys' list provided in the SOT or use more generic categories like 'character appearance' and 'environmental state'.", "severity": "P1", "why_problematic": "This is a closed list of domain-specific tropes used to guide continuity analysis. It biases the LLM to look for these specific attributes (common in action/thriller) even in scenarios where they are irrelevant, while potentially ignoring other critical continuity markers not in the list."}, {"category": "scenario_dependent_prompt", "evidence": "6,500-10,000 characters in Korean prose", "line_end": 21, "line_start": 21, "recommended_fix": "Parameterize the character count target and the language name (e.g., '{target_length} characters in {source_language_name} prose') to ensure the instruction scales with the input scenario.", "severity": "P2", "why_problematic": "The prompt specifies a character count target specifically for 'Korean prose'. This creates a project-specific bias in a base prompt that is intended to handle dynamic languages, potentially leading to incorrect length targets for non-Korean scenarios."}], "path": "prompts/_base/prototype_prompts/v5/webbook_package_system.md", "scan_kind": "prompt", "sha256": "b1e04c9474a0c6e0ab2a5b39aeaf146327b75f3028f7a3d347ebcfd1f25c1284"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 13, "chunk_start": 1, "chunk_summary": "The prompt contains a conditional instruction that injects specific genre-based negative constraints based on the LLM's classification of the story's era.", "duration_ms": 12104, "findings": [{"category": "llm_closed_list_instruction", "evidence": "explicitly forbid historical costumes, fantasy reinterpretation, and period drama styling", "line_end": 10, "line_start": 10, "recommended_fix": "Replace the specific trope list with a general instruction to identify and exclude visual elements that would be anachronistic or stylistically inconsistent with the identified era and technology baseline.", "severity": "P2", "why_problematic": "This instruction forces the LLM to use a hard-coded list of tropes as negative constraints when it classifies a story as contemporary. This introduces scenario-specific bias into the world guide extraction process instead of allowing the LLM to derive constraints purely from the screenplay's context or a structured SOT."}], "path": "prompts/_base/prototype_prompts/v5/world_guide_system.md", "scan_kind": "prompt", "sha256": "f9f3714fdc78cbaf9a47a07de2f660fae5c0d7624fc76da6b704dcf1225b9367"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 35, "chunk_start": 1, "chunk_summary": "The prompt template is a structured assembly of scene metadata and instructions without scenario-specific pollution or hardcoded semantic classifiers.", "duration_ms": 8347, "findings": [], "path": "prompts/_base/prototype_prompts/v6/scene_image_ko.md", "scan_kind": "prompt", "sha256": "c6b8d05d47015dc2db303e2254036ba3dc9b22a567c2007451277c661ff4daf0"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 35, "chunk_start": 1, "chunk_summary": "The prompt template uses placeholders for scenario-specific data and provides general instructions for image generation without hardcoded scenario pollution.", "duration_ms": 10620, "findings": [], "path": "prompts/_base/prototype_prompts/v6/scene_image_en.md", "scan_kind": "prompt", "sha256": "2adf71a7a20b598f7b06cb3ebb722461096b0712528958ffc094969bea97334f"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 17, "chunk_start": 1, "chunk_summary": "No actionable findings; the prompt template uses structured placeholders and technical parameters without scenario-specific pollution or pattern-based semantic routing.", "duration_ms": 3409, "findings": [], "path": "prompts/_base/prototype_prompts/v6/webbook_package_user.md", "scan_kind": "prompt", "sha256": "a35629eff8d74c1a488eed4c798f51baf6f6515b07fab60dc6a4bba3e3f7d36b"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 10, "chunk_start": 1, "chunk_summary": "No actionable findings; the prompt template uses generic placeholders for structured data and source text without scenario-specific pollution.", "duration_ms": 3204, "findings": [], "path": "prompts/_base/prototype_prompts/v6/world_guide_user.md", "scan_kind": "prompt", "sha256": "6c27670e4e60de172f1da34b632be5f1d4606a6a515538f7d30c4a783c6ae254"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 8, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 3874, "findings": [], "path": "prompts/_base/ref_image_prompts/3.202603251000/character_outlook_ref.md", "scan_kind": "prompt", "sha256": "f93899b1d747cfb84a6fa406c96bde322a8dc169753caa941c5fc9f05ed51841"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 38, "chunk_start": 1, "chunk_summary": "The prompt contains hardcoded continuity focus points and language-specific length targets that bias the LLM toward specific genres and languages.", "duration_ms": 17242, "findings": [{"category": "llm_closed_list_instruction", "evidence": "wardrobe, restraint state, damage, dirt, weapon possession, and location state", "line_end": 19, "line_start": 19, "recommended_fix": "Inject these continuity focus points from a structured World Rules or Scenario Metadata SOT instead of hardcoding them in the base system prompt.", "severity": "P1", "why_problematic": "This list hardcodes specific continuity focus points (like 'restraint state' and 'weapon possession') that are genre-specific (action/thriller). It forces the LLM to prioritize these semantic attributes even in scenarios where they are irrelevant, potentially leading to hallucinations or awkward narrative focus in non-action genres."}, {"category": "scenario_dependent_prompt", "evidence": "6,500-10,000 characters in Korean prose", "line_end": 21, "line_start": 21, "recommended_fix": "Use a dynamic variable for the character count range or provide language-specific length guidelines based on the 'source_language_code'.", "severity": "P2", "why_problematic": "The prompt hardcodes a character count target specifically for Korean prose. This creates a mismatch when the 'source_language_name' is not Korean, as character density and length expectations vary significantly between languages (e.g., English vs. Korean)."}], "path": "prompts/_base/prototype_prompts/v6/webbook_package_system.md", "scan_kind": "prompt", "sha256": "b1e04c9474a0c6e0ab2a5b39aeaf146327b75f3028f7a3d347ebcfd1f25c1284"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 39, "chunk_start": 1, "chunk_summary": "The prompt contains hardcoded genre constraints and a closed list of visual tokens that bias entity generation toward a modern Korean setting and restrict open-world scenario support.", "duration_ms": 32499, "findings": [{"category": "llm_closed_list_instruction", "evidence": "Remove temporary damage, dirt, blood, wetness, restraints, ribbons, smoke, sparks, debris, muzzle flash, and other momentary scene-state elements.", "line_end": 25, "line_start": 25, "recommended_fix": "Move the list of scene-state elements to a configurable SOT or the {entity_type_rules} block.", "severity": "P2", "why_problematic": "Hardcodes a specific list of visual tokens to define 'scene-state'. This can lead to the removal of legitimate entity features (e.g., a character whose identity includes ribbons or sparks) and should be managed via a structured SOT."}, {"category": "scenario_dependent_prompt", "evidence": "Characters should use realistic present-day / near-future Korean baseline clothing.", "line_end": 27, "line_start": 27, "recommended_fix": "Remove the hardcoded setting. Clothing style should be derived from the {world_guide_block} or {traits_block}.", "severity": "P1", "why_problematic": "Hardcodes a specific cultural and temporal setting (Modern Korea) into a base reference prompt, biasing all character generation regardless of the actual story world provided in the guide."}, {"category": "llm_closed_list_instruction", "evidence": "Do not introduce historical, fantasy, medieval, retro-period-drama, or space-opera styling.", "line_end": 33, "line_start": 33, "recommended_fix": "Remove the negative genre list. Style constraints should be managed via the world-building context provided in variables.", "severity": "P1", "why_problematic": "Explicitly blacklists common genres in a base prompt, preventing the system from supporting open-world scenarios that fall into these categories."}], "path": "prompts/_base/prototype_prompts/v5/entity_reference_en.md", "scan_kind": "prompt", "sha256": "88e2a055fbe72109535dcdcc5c516b99339a06e6ebb5211307e468da3027bd8d"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 3, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 6783, "findings": [], "path": "prompts/_base/ref_image_prompts/3.202603251000/location_ref.md", "scan_kind": "prompt", "sha256": "14f532450163d0f3614444db153de40238ed1f3e7bdd29e8aa9da03cdc847877"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 3, "chunk_start": 1, "chunk_summary": "No actionable findings; the prompt template uses generic technical photography constraints for prop reference generation without scenario-specific pollution.", "duration_ms": 3743, "findings": [], "path": "prompts/_base/ref_image_prompts/3.202603251000/prop_ref.md", "scan_kind": "prompt", "sha256": "4305658f5e64b21a7f6bcc6dd3f6a0ec50b6ae41216538f50f53dd6f2308adee"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 39, "chunk_start": 1, "chunk_summary": "The prompt contains hardcoded entity type classifications and specific scenario-derived examples (e.g., ribbons, binding ropes, genre tropes) that should be abstracted or moved to structured SOT blocks.", "duration_ms": 26704, "findings": [{"category": "scenario_dependent_prompt", "evidence": "포승줄, 리본, 먼지, 연기, 파편, 섬광", "line_end": 25, "line_start": 24, "recommended_fix": "Replace specific prop examples with generic categories of 'temporary accessories' or 'transient environmental effects', or move them to a scenario-specific exclusion list.", "severity": "P2", "why_problematic": "Specific props and visual effects like 'binding ropes' or 'ribbons' are listed as negative constraints. These appear to be scenario-specific leftovers that bias the LLM's definition of 'momentary states' and should be generalized."}, {"category": "llm_closed_list_instruction", "evidence": "인물은... 배경은... 소품은...", "line_end": 30, "line_start": 27, "recommended_fix": "Consolidate type-specific instructions into the {entity_type_rules} injection block and use generic language in the base template.", "severity": "P2", "why_problematic": "The prompt hardcodes a closed list of entity types (Person, Background, Prop) and their specific neutralization rules. This logic overlaps with the {entity_type_rules} placeholder and prevents the system from handling new entity types without prompt modification."}, {"category": "scenario_dependent_prompt", "evidence": "예: 동시대 가이드에 판타지 요소를 더하거나, 역사물 가이드에 근대 장비를 더하는 등", "line_end": 33, "line_start": 33, "recommended_fix": "Use abstract descriptions of 'anachronisms' or 'genre inconsistencies' instead of specific trope examples.", "severity": "P2", "why_problematic": "Hardcoded genre tropes (Fantasy, Historical, Modern) are used as examples of mismatch. This can bias the LLM or cause contradictions if the world guide defines a hybrid genre (e.g., Modern Fantasy)."}], "path": "prompts/_base/prototype_prompts/v6/entity_reference_ko.md", "scan_kind": "prompt", "sha256": "4d0f13798cf679e4da2a7a1e53b67e2ae30417f7f6c809ee20fd9b08e6365eed"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 8, "chunk_start": 1, "chunk_summary": "The prompt is a generic template for generating character outfit reference images using a placeholder for the description, with no scenario-specific pollution or hardcoded semantic logic.", "duration_ms": 4445, "findings": [], "path": "prompts/_base/ref_image_prompts/4.202603251000/character_outlook_ref.md", "scan_kind": "prompt", "sha256": "1f4d53da286be8d0cfa12102a8dda75cb9b1c8b6865009ba9dc62e497d2f88d8"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 13, "chunk_start": 1, "chunk_summary": "The prompt contains hardcoded genre-specific exclusions for contemporary settings that should be derived from structured analysis rather than a fixed list of tropes.", "duration_ms": 19260, "findings": [{"category": "llm_closed_list_instruction", "evidence": "explicitly forbid historical costumes, fantasy reinterpretation, and period drama styling", "line_end": 10, "line_start": 10, "recommended_fix": "Remove the hardcoded list of forbidden styles. Instead, instruct the LLM to identify the era and genre, then derive 'must_avoid' elements based on the specific screenplay context and a generalized set of consistency rules.", "severity": "P1", "why_problematic": "The prompt hardcodes a specific set of genre-based exclusions for 'contemporary' stories. This forces the LLM to use a closed list of tropes to define what is 'not' allowed, which can conflict with hybrid genres (e.g., urban fantasy) and should instead be derived from a structured world-rule SOT or the screenplay's specific genre analysis."}], "path": "prompts/_base/prototype_prompts/v6/world_guide_system.md", "scan_kind": "prompt", "sha256": "f9f3714fdc78cbaf9a47a07de2f660fae5c0d7624fc76da6b704dcf1225b9367"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 39, "chunk_start": 1, "chunk_summary": "The entity reference prompt contains hardcoded visual element exclusions and genre-specific examples that bias the LLM's semantic interpretation of 'neutral' state.", "duration_ms": 29391, "findings": [{"category": "llm_closed_list_instruction", "evidence": "restraints, ribbons, smoke, sparks, debris, flashes", "line_end": 25, "line_start": 25, "recommended_fix": "Move specific visual noise examples to a structured 'neutralization_guide' or use more abstract categories (e.g., 'transient environmental effects') while allowing the 'Identity anchor traits' to override them.", "severity": "P1", "why_problematic": "This hardcoded list of 'momentary' elements includes specific items like 'ribbons' or 'restraints' which may be core identity features for certain characters. Explicitly listing them for removal biases the LLM against valid permanent traits and forces a semantic judgment on what constitutes 'momentary' noise."}, {"category": "scenario_dependent_prompt", "evidence": "do not add fantasy elements to a contemporary guide, do not add modern gear to a historical guide", "line_end": 33, "line_start": 33, "recommended_fix": "Replace specific genre examples with a generic instruction to strictly adhere to the era and style defined in the 'World and era guide'.", "severity": "P2", "why_problematic": "The prompt uses specific genre-clash examples (fantasy vs contemporary, modern vs historical) to define consistency. This is scenario-specific pollution in a base prompt that should rely on the provided world guide's internal logic and may confuse the LLM in hybrid-genre scenarios (e.g., Urban Fantasy)."}], "path": "prompts/_base/prototype_prompts/v6/entity_reference_en.md", "scan_kind": "prompt", "sha256": "a86a3734594989c6084e1a0f643246debcac5472a018817841d9554657c979fb"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 3, "chunk_start": 1, "chunk_summary": "No actionable findings; the prompt template uses generic technical instructions for reference image generation without scenario-specific pollution.", "duration_ms": 3355, "findings": [], "path": "prompts/_base/ref_image_prompts/5.202603311724/character_nonhuman_ref.md", "scan_kind": "prompt", "sha256": "518f894d7739cb187f56faef754c7a7c2d9da76c8477ab65696587cf0db3d2ea"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 3, "chunk_start": 1, "chunk_summary": "The character reference prompt template provides generic technical constraints for image generation without scenario-specific pollution or semantic logic.", "duration_ms": 12322, "findings": [], "path": "prompts/_base/ref_image_prompts/4.202603251000/character_ref.md", "scan_kind": "prompt", "sha256": "7f328187b3c69cbebb4f4d54618c277db4de6e57a6871ee0719466835de39850"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 3, "chunk_start": 1, "chunk_summary": "The prompt provides a generic template for location reference images without scenario-specific pollution or hardcoded story logic.", "duration_ms": 10376, "findings": [], "path": "prompts/_base/ref_image_prompts/4.202603251000/location_ref.md", "scan_kind": "prompt", "sha256": "14f532450163d0f3614444db153de40238ed1f3e7bdd29e8aa9da03cdc847877"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 8, "chunk_start": 1, "chunk_summary": "No actionable findings; the prompt is a generic template for generating character outfit reference images without scenario-specific pollution or hardcoded semantic classifiers.", "duration_ms": 4625, "findings": [], "path": "prompts/_base/ref_image_prompts/5.202603311724/character_outlook_ref.md", "scan_kind": "prompt", "sha256": "1f4d53da286be8d0cfa12102a8dda75cb9b1c8b6865009ba9dc62e497d2f88d8"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 3, "chunk_start": 1, "chunk_summary": "The character reference prompt template contains hardcoded modern photographic style and lighting instructions.", "duration_ms": 24794, "findings": [{"category": "scenario_dependent_prompt", "evidence": "passport-style ID photo. ... Studio lighting.", "line_end": 1, "line_start": 1, "recommended_fix": "Move style and lighting descriptors to a structured style SOT or scenario-level configuration, replacing them with placeholders like {reference_composition_style} and {reference_lighting}.", "severity": "P1", "why_problematic": "The prompt hardcodes specific modern photographic tropes ('passport-style', 'Studio lighting') which biases the visual generation toward a contemporary aesthetic. This is problematic for scenarios set in historical, fantasy, or non-photorealistic worlds where such concepts are anachronistic or stylistically inconsistent."}], "path": "prompts/_base/ref_image_prompts/3.202603251000/character_ref.md", "scan_kind": "prompt", "sha256": "7f328187b3c69cbebb4f4d54618c277db4de6e57a6871ee0719466835de39850"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 13, "chunk_start": 1, "chunk_summary": "The prompt provides generic technical instructions for character reference compositing and does not contain scenario-specific pollution or pattern-based semantic logic.", "duration_ms": 14487, "findings": [], "path": "prompts/_base/ref_image_prompts/5.202603311724/character_composite_ref.md", "scan_kind": "prompt", "sha256": "1ff2430c6dff64ca7d0b38d86dd2e771730f9d564687e1912f29a1a00b488f11"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 13, "chunk_start": 1, "chunk_summary": "The prompt contains hardcoded visual styles and domain-specific prop examples that should be parameterized or derived from a structured SOT.", "duration_ms": 22001, "findings": [{"category": "scenario_dependent_prompt", "evidence": "Studio lighting, fashion photography style.", "line_end": 2, "line_start": 2, "recommended_fix": "Move style-specific keywords to a style SOT or parameterize the style section to allow scenario-specific overrides.", "severity": "P2", "why_problematic": "Hardcoding a specific visual style ('fashion photography') into a base character reference prompt biases all character generation toward a specific aesthetic, which may conflict with scenarios requiring different styles (e.g., hand-drawn, gritty, or period-accurate)."}, {"category": "scenario_dependent_prompt", "evidence": "e.g., armor over uniform", "line_end": 13, "line_start": 13, "recommended_fix": "Use more generic examples for layering (e.g., 'jacket over shirt') or remove the specific examples to rely on the general instruction.", "severity": "P2", "why_problematic": "Using domain-specific props like 'armor' and 'uniform' as examples for layering logic introduces genre bias (fantasy/military) into a base prompt that should remain genre-agnostic."}], "path": "prompts/_base/ref_image_prompts/4.202603251000/character_composite_ref.md", "scan_kind": "prompt", "sha256": "1ff2430c6dff64ca7d0b38d86dd2e771730f9d564687e1912f29a1a00b488f11"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 7, "chunk_start": 1, "chunk_summary": "The prompt uses hardcoded lists of prop examples and body parts to instruct the LLM on visual composition (silhouettes), which should be driven by structured metadata.", "duration_ms": 18078, "findings": [{"category": "llm_closed_list_instruction", "evidence": "earring, necklace, bracelet, mask, weapon held in hand, shoulder armor, backpack... ear, neck, wrist, face, hand, shoulder, torso", "line_end": 5, "line_start": 3, "recommended_fix": "Replace the conditional logic and example lists with structured variables passed from the entity SOT, such as 'attachment_point' or 'display_mode', to explicitly dictate the visual composition.", "severity": "P1", "why_problematic": "The prompt forces the LLM to classify open-world entity descriptions into visual composition categories (worn/held vs freestanding) using a hardcoded list of examples. This relies on LLM inference for a structural visual decision (silhouette inclusion and type) that should be explicitly defined in the entity SOT to ensure consistency across different prop types."}], "path": "prompts/_base/ref_image_prompts/4.202603251000/prop_ref.md", "scan_kind": "prompt", "sha256": "ea474ced47b0bb5b61ada88f2dc9cbe3d0143c1cbd7baa4e6d2599c065f7a2b0"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 4, "chunk_start": 1, "chunk_summary": "No actionable findings; the prompt contains generic style and composition instructions for location reference images without scenario-specific pollution.", "duration_ms": 2815, "findings": [], "path": "prompts/_base/reference_image/v2/location.md", "scan_kind": "prompt", "sha256": "7daeb117ff2abbcb571480b1732b2029018afd0e3860c12594126cda8ca977bf"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 3, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 10084, "findings": [], "path": "prompts/_base/ref_image_prompts/5.202603311724/location_ref.md", "scan_kind": "prompt", "sha256": "14f532450163d0f3614444db153de40238ed1f3e7bdd29e8aa9da03cdc847877"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 3, "chunk_start": 1, "chunk_summary": "The character reference prompt template provides a standardized visual style for ID-style reference images without scenario-specific pollution.", "duration_ms": 12723, "findings": [], "path": "prompts/_base/ref_image_prompts/5.202603311724/character_ref.md", "scan_kind": "prompt", "sha256": "7f328187b3c69cbebb4f4d54618c277db4de6e57a6871ee0719466835de39850"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 20, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 5220, "findings": [], "path": "prompts/_base/scene_camera_flow/1.202604151200/user.md", "scan_kind": "prompt", "sha256": "6d6e0061c6631cf1db76c4e0831e52959f7eda479298f97c828de753a3172f43"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 13, "chunk_start": 1, "chunk_summary": "The prompt contains hardcoded visual style instructions and domain-specific examples that may bias character reference generation.", "duration_ms": 42591, "findings": [{"category": "scenario_dependent_prompt", "evidence": "Full body shot, standing pose, plain neutral background. Head to toe visible. Studio lighting, fashion photography style.", "line_end": 2, "line_start": 1, "recommended_fix": "Move style and pose instructions to a configurable style SOT or inject them as variables to allow for scenario-appropriate reference generation.", "severity": "P2", "why_problematic": "Hardcodes a specific 'fashion photography' aesthetic and 'standing pose' into a base prompt. This biases the visual generation of character references toward a modern studio look, which may conflict with scenarios requiring different artistic styles or poses that should be defined in a style SOT."}, {"category": "scenario_dependent_prompt", "evidence": "e.g., armor over uniform", "line_end": 13, "line_start": 13, "recommended_fix": "Replace with more generic examples of layering, such as 'e.g., outer layers over inner layers' or 'accessories over clothing'.", "severity": "P2", "why_problematic": "Uses genre-specific tropes (armor, uniform) as examples for layering logic. This can bias the LLM's interpretation of outfit assembly toward specific domains like fantasy or military, rather than remaining genre-agnostic."}], "path": "prompts/_base/ref_image_prompts/3.202603251000/character_composite_ref.md", "scan_kind": "prompt", "sha256": "1ff2430c6dff64ca7d0b38d86dd2e771730f9d564687e1912f29a1a00b488f11"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 9, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 6623, "findings": [], "path": "prompts/_base/scene_cinematography/1.202603220900/analyze.md", "scan_kind": "prompt", "sha256": "482dfcb55b770b0b32561abda374cfcb0306d0652aa34485e4bb09bfba29e564"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 24, "chunk_start": 1, "chunk_summary": "No actionable findings; the file defines a structural JSON schema for cinematography analysis without scenario-specific pollution or semantic string judgment.", "duration_ms": 3190, "findings": [], "path": "prompts/_base/scene_cinematography/1.202603220900/analyze_schema.json", "scan_kind": "prompt", "sha256": "bd44a09a6ee15d0b867c039ad378c8e6b24beb2cb7142dfa70d79baeb5966c78"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 7, "chunk_start": 1, "chunk_summary": "The prompt uses hardcoded example lists to instruct the LLM on visual composition logic (silhouette inclusion) for props.", "duration_ms": 20047, "findings": [{"category": "llm_closed_list_instruction", "evidence": "e.g. earring, necklace, bracelet, mask, weapon held in hand, shoulder armor, backpack", "line_end": 5, "line_start": 3, "recommended_fix": "Pass a structured attribute (e.g., 'is_worn' or 'display_mode') from the entity SOT and use conditional prompt assembly instead of providing examples for LLM inference.", "severity": "P2", "why_problematic": "The prompt relies on the LLM to semantically classify an entity as 'worn' or 'freestanding' based on a closed list of examples to decide visual composition (silhouette presence). This logic is better handled by structured metadata in the SOT to ensure consistent visual output across different prop types."}], "path": "prompts/_base/ref_image_prompts/5.202603311724/prop_ref.md", "scan_kind": "prompt", "sha256": "ea474ced47b0bb5b61ada88f2dc9cbe3d0143c1cbd7baa4e6d2599c065f7a2b0"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 7, "chunk_start": 1, "chunk_summary": "The prompt file defines generic technical and stylistic constraints for character reference images without scenario-specific pollution or pattern-based semantic routing.", "duration_ms": 19729, "findings": [], "path": "prompts/_base/reference_image/v2/character.md", "scan_kind": "prompt", "sha256": "9d7757060aa0cbfbc2408aeda2adae376e1d58f7e9d7cfb3b5f74132c5cec25f"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 31, "chunk_start": 1, "chunk_summary": "No actionable findings; the file defines a standard technical JSON schema for structured LLM output without scenario-specific pollution or semantic string judgment.", "duration_ms": 2651, "findings": [], "path": "prompts/_base/scene_cinematography/2.202603261200/analyze_schema.json", "scan_kind": "prompt", "sha256": "7dcd5d06779d8bccedb0dcacafb62cc991250e4290a9fec810e23bd9f57d2709"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 5, "chunk_start": 1, "chunk_summary": "The prompt hardcodes a photorealistic style for prop reference images, which may conflict with scenarios requiring different artistic directions.", "duration_ms": 17459, "findings": [{"category": "scenario_dependent_prompt", "evidence": "Photorealistic product photo style", "line_end": 2, "line_start": 2, "recommended_fix": "Replace the hardcoded style with a template variable or reference a style SOT that can provide appropriate style descriptors based on the current scenario's art direction.", "severity": "P2", "why_problematic": "Hardcoding a specific visual style ('Photorealistic') in a base prompt prevents the pipeline from adapting to different artistic directions (e.g., stylized, anime, or sketch-based scenarios). This creates visual pollution for non-photorealistic stories."}], "path": "prompts/_base/reference_image/v2/prop.md", "scan_kind": "prompt", "sha256": "08fb9724dc164c07eab250dedca7aa2dab98fc423ac93e7117eb081e841ec9ca"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 10, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 8367, "findings": [], "path": "prompts/_base/scene_cinematography/2.202603261200/analyze.md", "scan_kind": "prompt", "sha256": "2987558190f17242230fe12709790c5bccacbbacea85014b42b7c68bc7ff5a94"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 51, "chunk_start": 1, "chunk_summary": "The prompt explicitly prohibits the use of structured entity IDs, forcing the LLM to use natural language names which introduces semantic ambiguity and scenario-specific pollution.", "duration_ms": 20426, "findings": [{"category": "scenario_dependent_prompt", "evidence": "엔티티 ID (C##, L##, P##) 사용 금지 — 보통명사와 인물 이름으로만", "line_end": 45, "line_start": 44, "recommended_fix": "Modify the instruction to encourage or require the use of structured IDs (C##, L##) within the camera flow descriptions (e.g., in visual_focus) to ensure precise entity tracking across the pipeline.", "severity": "P1", "why_problematic": "By forbidding structured IDs (C##, L##, P##) and requiring natural language names, the prompt forces the LLM to generate scenario-specific strings that are harder to validate and map consistently in downstream visual generation steps. This increases the risk of entity confusion and semantic drift between the camera flow and the actual scene entities."}], "path": "prompts/_base/scene_camera_flow/1.202604151200/system.md", "scan_kind": "prompt", "sha256": "3b1aa48396d082998f7497297cec0373f590df708ca47ccf6be4e61ecda3f483"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 47, "chunk_start": 1, "chunk_summary": "The schema defines the structure for scene consistency analysis, containing one scenario-specific example in a field description.", "duration_ms": 10611, "findings": [{"category": "scenario_dependent_prompt", "evidence": "dead_woman_by_door", "line_end": 19, "line_start": 19, "recommended_fix": "Replace the specific narrative example with a generic placeholder like 'object_identifier' or 'character_state_description'.", "severity": "P2", "why_problematic": "The example provided for the element_id field uses a highly specific narrative prop ('dead_woman_by_door'), which introduces scenario-specific bias into the LLM's generation of identifiers for arbitrary stories."}], "path": "prompts/_base/scene_consistency/2.202604141200/schema.json", "scan_kind": "prompt", "sha256": "834cc0117e8d30afba5a1204654588e23fa28bbce4f73df08d3c488176d4a7a6"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 71, "chunk_start": 1, "chunk_summary": "The schema defines a structured camera flow for scenes, using technical enums for motion and position, but includes a list of cinematic tropes as examples for a free-text label field.", "duration_ms": 25695, "findings": [{"category": "llm_closed_list_instruction", "evidence": "establishing / approach / close_observation / reaction / reveal / withdraw / transition 등 자유 라벨", "line_end": 19, "line_start": 16, "recommended_fix": "Move the list of stage labels to a central cinematography SOT or convert 'stage_label' into a formal enum if these categories drive downstream logic.", "severity": "P2", "why_problematic": "The description provides a list of domain-specific cinematic tropes to guide the LLM in labeling scene stages. While marked as a 'free label', providing such a list in the prompt/schema description biases the LLM toward a closed set of semantic categories for open-world story analysis, which should ideally be managed via a structured SOT or a formal enum if the system logic depends on these categories."}], "path": "prompts/_base/scene_camera_flow/1.202604151200/schema.json", "scan_kind": "prompt", "sha256": "8134593afd3332f3ede702bc020080e923df57687494bb925daca4e03ba4bea6"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 14, "chunk_start": 1, "chunk_summary": "The prompt defines a specific narrative emotional curve as a selection principle, which may bias cinematography for scenarios with different structures.", "duration_ms": 16816, "findings": [{"category": "scenario_dependent_prompt", "evidence": "긴장 고조 → 폭발 → 감정 정리", "line_end": 5, "line_start": 5, "recommended_fix": "Reference a dynamic emotional arc or narrative phase provided in the input context instead of hardcoding a specific pattern.", "severity": "P2", "why_problematic": "Hardcoding a specific emotional arc (Tension -> Explosion -> Resolution) as a selection principle biases the LLM to force cinematography choices into a traditional 3-act structure, which may not apply to all scenarios (e.g., ambient, slice-of-life, or non-linear narratives)."}], "path": "prompts/_base/scene_cinematography/1.202603220900/system.md", "scan_kind": "prompt", "sha256": "22f708173255c6b6c5b03f6995a1c2b63ccf0d4839148350389b9909ae158d95"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 9, "chunk_start": 1, "chunk_summary": "The cinematography system prompt hardcodes a specific dramatic arc as a selection principle, biasing visual decisions toward a fixed narrative structure.", "duration_ms": 20391, "findings": [{"category": "scenario_dependent_prompt", "evidence": "긴장 고조 → 폭발 → 감정 정리", "line_end": 5, "line_start": 5, "recommended_fix": "Replace the hardcoded arc with a reference to the scenario's actual emotional metadata or pacing instructions provided in the input context (e.g., 'Follow the emotional curve defined in the scenario metadata').", "severity": "P1", "why_problematic": "This line hardcodes a specific narrative arc (Tension -> Explosion -> Resolution) as the standard for cinematography selection. This biases the LLM's visual choices toward a specific dramatic structure, which may conflict with scenarios that have different emotional pacing or structures (e.g., slice-of-life, horror, or non-linear narratives)."}], "path": "prompts/_base/scene_cinematography/2.202603261200/system.md", "scan_kind": "prompt", "sha256": "ff95f90509cddeb6ef28b086c8031d53de8a82d1ed47f54425be940b14b471d9"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 47, "chunk_start": 1, "chunk_summary": "The schema for scene consistency analysis contains a scenario-specific example in the element_id description.", "duration_ms": 17939, "findings": [{"category": "scenario_dependent_prompt", "evidence": "dead_woman_by_door", "line_end": 19, "line_start": 19, "recommended_fix": "Use a generic, neutral example such as 'object_identifier' or 'scene_element_name'.", "severity": "P2", "why_problematic": "Providing a concrete, narrative-specific example like 'dead_woman_by_door' in a schema description biases the LLM's naming conventions and potentially its conceptualization of scene elements toward specific tropes or morbid scenarios."}], "path": "prompts/_base/scene_consistency/3.202604201230/schema.json", "scan_kind": "prompt", "sha256": "834cc0117e8d30afba5a1204654588e23fa28bbce4f73df08d3c488176d4a7a6"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 37, "chunk_start": 1, "chunk_summary": "The system prompt for visual continuity analysis contains scenario-specific pollution through genre-heavy examples and mandates for character attributes that should be managed by a structured SOT.", "duration_ms": 30358, "findings": [{"category": "scenario_dependent_prompt", "evidence": "사망, 부상, 의식불명 (line 9), 시체는 움직이지 않으므로 (line 12), blood pool, tattoo (line 13), shattered (line 17), 낙서, 그림, 자국 (line 35), 깜빡이는 불 (line 36)", "line_end": 36, "line_start": 9, "recommended_fix": "Replace genre-specific examples with abstract categories of visual persistence, such as 'physical orientation', 'surface markings', and 'environmental state', and provide a diverse set of examples across different genres.", "severity": "P1", "why_problematic": "The prompt uses specific crime/thriller tropes as primary examples and definitions for continuity elements. This biases the LLM to prioritize these specific visual markers (blood, tattoos, damage) and may lead to poor performance or hallucination in other genres (e.g., romance, sci-fi)."}, {"category": "scenario_dependent_prompt", "evidence": "인종/국적 명기: 인물 묘사 시 인종/국적을 반드시 포함", "line_end": 32, "line_start": 32, "recommended_fix": "Modify the instruction to require race/nationality only when provided in the character reference or scenario context, or move this requirement to a character-specific SOT lookup.", "severity": "P1", "why_problematic": "Mandating the inclusion of race/nationality in a continuity prompt forces the LLM to hallucinate these attributes if they are not explicitly mentioned in the source text. These core character attributes should be sourced from a structured character SOT to ensure global consistency."}], "path": "prompts/_base/scene_consistency/2.202604141200/system.md", "scan_kind": "prompt", "sha256": "d5d5c575a0b9ae0d4a015abeac5f9ef1b0514b4b669f46980917f555c5e2bf94"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 113, "chunk_start": 1, "chunk_summary": "The prompt relies on the LLM to perform semantic classification of camera framing and character states using closed lists of keywords and tropes to drive visual routing decisions.", "duration_ms": 17571, "findings": [{"category": "llm_closed_list_instruction", "evidence": "camera_direction / character_angles를 기준으로 각 샷의 지배적 프레이밍을 판정하세요: ... close-up / tight on / focus on body part / detail shot", "line_end": 33, "line_start": 30, "recommended_fix": "Pass the framing type (e.g., 'FULL_BODY', 'CLOSE_UP') as a structured enum from the upstream shot analysis or staging data instead of asking the LLM to infer it from strings.", "severity": "P1", "why_problematic": "The LLM is instructed to classify open-world visual framing (full vs zoom) based on a closed list of natural language keywords. This classification is used to split character states to avoid T2I artifacts, making a critical visual routing decision dependent on keyword-based semantic judgment rather than structured metadata."}, {"category": "llm_closed_list_instruction", "evidence": "수면·의식불명·기절·휴식·부상·사망 등 모든 \"정지 상태\" 해당", "line_end": 11, "line_start": 9, "recommended_fix": "Define the category by its functional requirement (e.g., 'any physical state that remains static across shots') rather than providing a list of specific narrative tropes.", "severity": "P2", "why_problematic": "The prompt defines the 'character_state' category using a closed list of specific story tropes. This biases the LLM's identification of persistent states toward these examples and may cause it to miss other valid 'static' states not listed in this domain trope list."}], "path": "prompts/_base/scene_consistency/5.202605021400/system.md", "scan_kind": "prompt", "sha256": "790a2a86a020ecd3f0f97f1286369e3efddc4eafcead0026dfd4814fff7dcfad"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 70, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 12147, "findings": [], "path": "prompts/_base/scene_consistency/6.202605031033/schema.json", "scan_kind": "prompt", "sha256": "4aeb529eb7dec036534313f38b8689cbb6406faca3398a3b4f331c6fc36ee4d7"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 47, "chunk_start": 1, "chunk_summary": "Schema for scene consistency analysis containing scenario-specific examples and implicit shot-type classification instructions.", "duration_ms": 20112, "findings": [{"category": "scenario_dependent_prompt", "evidence": "e.g. dead_woman_by_door", "line_end": 19, "line_start": 19, "recommended_fix": "Replace with a generic placeholder such as 'element_name_or_state'.", "severity": "P2", "why_problematic": "The schema description uses a specific, scenario-laden example to illustrate a technical naming convention. This introduces narrative bias and specific trope pollution into the schema definition which should be domain-agnostic."}, {"category": "llm_closed_list_instruction", "evidence": "전신형과 확대형은 서로 겹치지 않도록 분리", "line_end": 37, "line_start": 37, "recommended_fix": "Reference a centralized shot-type classification system or provide an enum of allowed shot categories in the schema.", "severity": "P2", "why_problematic": "The instruction requires the LLM to classify and separate shots based on shot-type categories ('full body' vs 'close up') that are not defined in the schema or a structured SOT, relying on inconsistent internal LLM interpretation of domain nomenclature."}], "path": "prompts/_base/scene_consistency/5.202605021400/schema.json", "scan_kind": "prompt", "sha256": "35bcd8c77e2050e60acfff9d844acd82843d3cb086fcff698995f4c878f2d77e"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 47, "chunk_start": 1, "chunk_summary": "The schema defines the structure for scene consistency analysis, but contains a scenario-specific example in a field description.", "duration_ms": 26266, "findings": [{"category": "scenario_dependent_prompt", "evidence": "e.g. dead_woman_by_door", "line_end": 19, "line_start": 19, "recommended_fix": "Replace the scenario-specific example with a generic placeholder like 'element_name_here' or 'character_state_description'.", "severity": "P2", "why_problematic": "The schema description uses a concrete, scenario-specific example ('dead_woman_by_door') to illustrate a technical format (snake_case). This introduces genre/scenario bias into the LLM's structured output generation."}], "path": "prompts/_base/scene_consistency/4.202604201700/schema.json", "scan_kind": "prompt", "sha256": "35bcd8c77e2050e60acfff9d844acd82843d3cb086fcff698995f4c878f2d77e"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 21, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 4798, "findings": [], "path": "prompts/_base/scene_dependency/1.202603190100/extract_schema.json", "scan_kind": "prompt", "sha256": "901fb2eb5e6bdab9e25969c92d0207320c831646aad33e31fd4bc70198c58ce1"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 21, "chunk_start": 1, "chunk_summary": "The file defines a generic technical schema for scene dependency tracking using integer indices and contains no scenario-specific pollution or semantic string judgments.", "duration_ms": 6385, "findings": [], "path": "prompts/_base/scene_dependency/2.202603231200/dependency_schema.json", "scan_kind": "prompt", "sha256": "cd033d882c36acc4f4081a37502bdb92e428c7b1abddfff641a06e6b977256f6"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 113, "chunk_start": 1, "chunk_summary": "The system prompt for visual continuity analysis contains scenario-specific pollution in examples and instructs the LLM to perform semantic classification of shot framing and character states from open-world text.", "duration_ms": 28760, "findings": [{"category": "llm_closed_list_instruction", "evidence": "수면·의식불명·기절·휴식·부상·사망 등 모든 \"정지 상태\" 해당", "line_end": 14, "line_start": 9, "recommended_fix": "Define 'character_state' by the property of being 'unchanging throughout the scene' rather than providing a closed list of semantic states.", "severity": "P2", "why_problematic": "Defines 'character_state' using a closed list of specific semantic tropes. This biases the LLM to only recognize these specific states as valid 'static' elements, potentially missing other scenario-specific static conditions not listed."}, {"category": "llm_closed_list_instruction", "evidence": "shot description / staging의 camera_direction / character_angles를 기준으로 각 샷의 지배적 프레이밍을 판정하세요: ... 전신형(full) ... 확대형(zoom)", "line_end": 35, "line_start": 30, "recommended_fix": "Pass structured shot scale metadata (e.g., ECU, CU, MS, FS) to the prompt and use it to drive the splitting logic instead of asking the LLM to 'judge' the framing from text.", "severity": "P1", "why_problematic": "Instructs the LLM to classify open-world shot descriptions into a closed set of framing categories (full vs zoom) to drive the routing of visual descriptions. This semantic judgment is used to prevent T2I artifacts but should be derived from structured shot metadata (e.g., shot scale) rather than LLM interpretation of prose."}, {"category": "scenario_dependent_prompt", "evidence": "씬 S12에 민숙(사망, C04)이 등장, 선택된 샷이 Shot1(전신 구도), Shot2(발끝만 확대), Shot19(손목 확대)라고 가정", "line_end": 79, "line_start": 46, "recommended_fix": "Replace the concrete scenario example with a generic, abstract example (e.g., Character A, Object B) or move the example to a separate few-shot template that is not part of the core system prompt.", "severity": "P1", "why_problematic": "The system prompt contains a concrete, highly specific scenario example including character names (Min-sook), specific IDs (C04), and plot points (death, wooden floor). This introduces scenario-specific pollution that can bias the LLM's output for unrelated scenarios, leading to trope leakage or hallucinations."}], "path": "prompts/_base/scene_consistency/4.202604201700/system.md", "scan_kind": "prompt", "sha256": "17a4798addf9d8b671d8aca45e21c8c9a260333dd4a69937d091033a1a643c5f"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 52, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 5815, "findings": [], "path": "prompts/_base/scene_detail/10.202604301430/detail_schema.json", "scan_kind": "prompt", "sha256": "7b30ebe26e94189a1d2dd6d1afed295c041efc40cc2671a688a265d65301117e"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 12, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 12698, "findings": [], "path": "prompts/_base/scene_dependency/1.202603190100/extract_prompt.md", "scan_kind": "prompt", "sha256": "7283c1cf8f1869e92e03a88eca50f64809c22ddad437009ad8a979b83092ee62"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 52, "chunk_start": 1, "chunk_summary": "The scene detail schema defines a structured output format for scene analysis and T2I prompt generation using standard technical ID patterns (C##, P##, O##, L##) and narrative metadata.", "duration_ms": 9291, "findings": [], "path": "prompts/_base/scene_detail/11.202604301730/detail_schema.json", "scan_kind": "prompt", "sha256": "7b30ebe26e94189a1d2dd6d1afed295c041efc40cc2671a688a265d65301117e"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 52, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 8222, "findings": [], "path": "prompts/_base/scene_detail/12.202605021300/detail_schema.json", "scan_kind": "prompt", "sha256": "7b30ebe26e94189a1d2dd6d1afed295c041efc40cc2671a688a265d65301117e"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 155, "chunk_start": 1, "chunk_summary": "The prompt defines logic for maintaining visual consistency across shots, including a specific instruction for the LLM to classify shot framing into 'full' or 'zoom' categories using a closed list of keywords to prevent T2I rendering artifacts.", "duration_ms": 27696, "findings": [{"category": "llm_closed_list_instruction", "evidence": "전신형(full): 전신/상반신/미디엄 ... 확대형(zoom): close-up / tight on / focus on body part / detail shot", "line_end": 35, "line_start": 30, "recommended_fix": "Move framing classification to a structured staging analysis step (SOT) where shot scale is an explicit enum, or allow the LLM to determine framing scale based on the full context of the shot description without a restrictive keyword list.", "severity": "P1", "why_problematic": "The LLM is instructed to perform semantic classification of shot framing based on a closed list of keywords. This classification directly routes which visual descriptions (character_state) are applied to which shots to avoid 'double body' artifacts. Hard-coding these keywords in the prompt makes the system brittle to variations in staging nomenclature that might appear in the open-world scenario text."}], "path": "prompts/_base/scene_consistency/6.202605031033/system.md", "scan_kind": "prompt", "sha256": "23cf18a3169873911f22b34f130f22e65f0f95cdcb82d07e17c7e6ca9f45c5d4"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 19, "chunk_start": 1, "chunk_summary": "The system prompt defines scene dependency logic using generic location examples that may bias visual association analysis.", "duration_ms": 21646, "findings": [{"category": "scenario_dependent_prompt", "evidence": "예: 같은 집 거실, 같은 사무실, 같은 거리", "line_end": 8, "line_start": 8, "recommended_fix": "Replace specific location examples with abstract principles of visual continuity (e.g., 'shared architectural features', 'identical environmental markers') or move examples to a genre-specific layer.", "severity": "P2", "why_problematic": "The prompt uses specific modern-day location examples to define 'visual similarity'. This introduces genre bias into the base analysis logic, which should ideally be genre-agnostic or driven by the scenario's own world-building SOT."}], "path": "prompts/_base/scene_dependency/2.202603231200/system.md", "scan_kind": "prompt", "sha256": "2e112b49c795f09b9a51f8dc95403637964474f450422e339d52b8604c08cd43"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 52, "chunk_start": 1, "chunk_summary": "The schema defines the structure for scene details, including T2I prompts and character assignments, but contains an instruction for semantic-based string mutation in the prompt field description.", "duration_ms": 17072, "findings": [{"category": "blind_string_mutation", "evidence": "신체 부위 클로즈업/사진·거울 속 인물 등 system prompt가 명시한 예외 구도에서는 보통명사로 대체", "line_end": 16, "line_start": 16, "recommended_fix": "Maintain consistent ID usage (C01O02) in the t2i_prompt regardless of shot type, and handle visual-context-specific prompt adjustments (like 'a hand' vs 'the character') in a dedicated post-processing step or via the T2I adapter logic.", "severity": "P1", "why_problematic": "This instructs the LLM to perform semantic classification of visual tropes (close-ups, mirrors) to decide whether to use a structured ID (C01O02) or a generic noun. This introduces inconsistency in character tracking and relies on subjective LLM judgment to mutate the string format, which can break downstream automated substitution logic (the 'Image N' replacement mentioned in the same line)."}], "path": "prompts/_base/scene_detail/13.202605022141/detail_schema.json", "scan_kind": "prompt", "sha256": "413eb51a6595d4a0ee422a809ac66710935da480c5cd7ebc6de18be25565f5bb"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 75, "chunk_start": 1, "chunk_summary": "The schema defines the structure for scene detail generation, using generic entity IDs and standard cinematic enums without scenario-specific pollution.", "duration_ms": 16547, "findings": [], "path": "prompts/_base/scene_detail/14.202605031033/detail_schema.json", "scan_kind": "prompt", "sha256": "fc4b7b905ec2540a85873e2b6ffbfe7b01f47f44cf38c4bbf2897300d69e2a89"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 447, "chunk_start": 1, "chunk_summary": "The prompt contains scenario-specific pollution in the form of hardcoded ethnicity in examples, semantic string mutation instructions for character IDs, and closed-list vocabulary for violence.", "duration_ms": 41043, "findings": [{"category": "scenario_dependent_prompt", "evidence": "Korean woman, Korean man", "line_end": 244, "line_start": 124, "recommended_fix": "Replace 'Korean woman/man' with generic placeholders like '[Race/Nationality] [Gender]' or 'a person' in all examples.", "severity": "P1", "why_problematic": "Hardcoded ethnicity in multiple 'Correct' (✓) examples (lines 124, 126, 128, 244) biases the LLM towards a specific demographic. This is scenario-specific pollution that should be replaced with generic placeholders or instructions to pull from the world SOT."}, {"category": "blind_string_mutation", "evidence": "고정 요소 description의 보통명사 인물 묘사...를 해당 C##으로 대체", "line_end": 144, "line_start": 134, "recommended_fix": "Provide structured character-to-ID mappings in the input JSON rather than asking the LLM to perform string-based replacement on prose.", "severity": "P1", "why_problematic": "Instructs the LLM to perform string replacement of common nouns with IDs within a natural language description. This is a semantic judgment task prone to error (e.g., if multiple characters of the same gender/age are present) and should be handled by structured data or explicit tagging."}, {"category": "llm_closed_list_instruction", "evidence": "attacker / assailant / aggressor / predator / pursuer, tearing flesh, ripped skin, blood spray", "line_end": 299, "line_start": 277, "recommended_fix": "Move the 'Vocabulary Palette' to a separate, context-aware SOT or style guide that is injected only when relevant to the scene's genre.", "severity": "P2", "why_problematic": "Provides a closed list of semantic descriptors for violence and power dynamics. This is scenario-specific (genre-specific) pollution that should be managed via a structured SOT for tone/genre rather than being hardcoded in the system prompt."}], "path": "prompts/_base/scene_detail/10.202604301430/system.md", "scan_kind": "prompt", "sha256": "e88033d4847a3c7b7dd284c4d34ddfe05d0a82f3223a1472c610ab5213c3f081"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 619, "chunk_start": 1, "chunk_summary": "The prompt contains several hardcoded semantic classifiers and heuristic-based routing rules for entity representation based on string patterns and domain-specific trope lists.", "duration_ms": 39852, "findings": [{"category": "semantic_string_judgment", "evidence": "Focus on / close on / tight on / detail on + 특정 신체 부위", "line_end": 48, "line_start": 31, "recommended_fix": "Move this logic to a structured validator or use a dedicated field in the shot schema to indicate 'body-part-only' focus, rather than relying on LLM pattern matching.", "severity": "P1", "why_problematic": "The prompt uses specific natural language patterns to decide whether to use a character ID (C##) or a common noun. This is a semantic judgment based on string patterns that mutates entity representation in the final T2I prompt."}, {"category": "semantic_string_judgment", "evidence": "사진, 포스터, 그림, 초상화, 모니터, TV, 거울, 창유리 반사, 투영 — 은 C##O## 절대 금지", "line_end": 130, "line_start": 119, "recommended_fix": "Introduce a 'media_type' or 'is_reflection' attribute in the entity/shot schema to drive this behavior programmatically.", "severity": "P1", "why_problematic": "The prompt requires the LLM to judge the 'reality' of an entity (real vs 2D media) based on scenario context to decide on ID usage. This is a semantic routing decision that should be handled by structured metadata."}, {"category": "llm_closed_list_instruction", "evidence": "Asian, East Asian, South Asian, Southeast Asian, Black, Middle Eastern, Hispanic, Caucasian", "line_end": 368, "line_start": 351, "recommended_fix": "Inject demographic descriptors from a structured 'visual_world_rules' SOT rather than hardcoding them in the system prompt.", "severity": "P1", "why_problematic": "The prompt hardcodes a closed list of demographic/racial labels for open-world entity classification. This should be part of a structured world-rule SOT (Source of Truth) to allow for scenario-specific diversity and regional settings."}, {"category": "llm_closed_list_instruction", "evidence": "attacker / assailant / aggressor / predator / pursuer / victim / prey / target", "line_end": 442, "line_start": 431, "recommended_fix": "Move domain-specific vocabulary and trope lists to a separate configuration or SOT that is injected based on the scenario's metadata (e.g., genre: thriller).", "severity": "P1", "why_problematic": "The prompt provides a hardcoded 'vocabulary palette' for violence and power dynamics. This is domain-specific trope pollution that should be emitted by a structured rule SOT based on the scenario's genre and intensity."}, {"category": "llm_closed_list_instruction", "evidence": "and then, while ~ing, after ~ing, face filling the entire frame, red light cuts across, approximately X meters wide", "line_end": 107, "line_start": 11, "recommended_fix": "Consolidate these negative constraints into a structured 'style_guide' SOT or use a post-generation validator to flag these patterns.", "severity": "P2", "why_problematic": "The prompt contains multiple closed lists of forbidden natural language phrases to enforce technical or stylistic constraints (temporal singularity, framing, lighting, dimensions)."}], "path": "prompts/_base/scene_detail/11.202604301730/system.md", "scan_kind": "prompt", "sha256": "b7ee2130bae31ddb3b1bd50eb3d727e92e1aa727472739347dc9e746174cab49"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 711, "chunk_start": 1, "chunk_summary": "The system prompt contains several instances of keyword-based semantic classification and scenario-specific vocabulary palettes that bias the LLM's visual analysis and prompt generation.", "duration_ms": 27919, "findings": [{"category": "semantic_string_judgment", "evidence": "close framing: `close-up`, `CU`, `MCU`, `ECU`, `XCU`, `extreme close-up`, `클로즈업`, `손가락이`, `손이`, `눈이`, `얼굴이`", "line_end": 341, "line_start": 339, "recommended_fix": "Pass the framing scale as a structured enum in the shot metadata rather than relying on the LLM to parse it from natural language strings.", "severity": "P1", "why_problematic": "The prompt instructs the LLM to classify the shot's framing scale (routing logic for Rule J and Rule E) based on a closed list of natural language keywords and body part nouns found in the input description."}, {"category": "scenario_dependent_prompt", "evidence": "attacker / assailant / aggressor / predator / pursuer ... tearing flesh, ripped skin, gaping wound", "line_end": 499, "line_start": 477, "recommended_fix": "Remove the hardcoded vocabulary list. If specific intensity levels are needed, define them in a structured 'visual_world_rules' or 'genre_guide' provided as context.", "severity": "P1", "why_problematic": "This section provides a hardcoded 'vocabulary palette' for violence and physical conflict. This pollutes the prompt with domain-specific tropes that should be derived from the scenario text or a structured world-rule SOT, potentially biasing the LLM toward extreme descriptions even when not warranted."}, {"category": "semantic_string_judgment", "evidence": "동적 동사 (`running`, `riding`, `walking`, `moving`, `chasing`, `pedaling`, `rowing`)", "line_end": 651, "line_start": 649, "recommended_fix": "Use a structured 'motion_state' flag in the input schema to indicate when mid-action freeze logic should be applied.", "severity": "P1", "why_problematic": "The prompt uses a closed list of verbs to trigger specific 'mid-action freeze' logic. This is a pattern-based semantic judgment that may fail to capture other synonyms or contextually relevant movement verbs."}, {"category": "llm_closed_list_instruction", "evidence": "Asian, East Asian, South Asian, Southeast Asian, Black, Middle Eastern, Hispanic, Caucasian", "line_end": 418, "line_start": 403, "recommended_fix": "Demographic descriptors should be sourced directly from the 'visual_world_rules' or 'character_metadata' rather than being hardcoded as examples in the system prompt.", "severity": "P1", "why_problematic": "The prompt provides a closed list of demographic descriptors and maps them to specific regions. This biases the LLM's output toward these specific labels and creates a maintenance burden if the world-building regions change."}], "path": "prompts/_base/scene_detail/14.202605031033/system.md", "scan_kind": "prompt", "sha256": "2ddec5371f3acf9c62ec78fca89fb33984181a12b7a5b53543f9de678b7f7d2b"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 669, "chunk_start": 1, "chunk_summary": "The system prompt contains hardcoded visual style strings, scenario-specific demographic examples, and a closed vocabulary palette for violence that biases visual generation.", "duration_ms": 42248, "findings": [{"category": "llm_closed_list_instruction", "evidence": "attacker / assailant / aggressor / predator / pursuer ... tearing flesh, ripped skin, gaping wound, jagged gash, raw tissue", "line_end": 492, "line_start": 482, "recommended_fix": "Remove the hardcoded vocabulary palette. Instead, provide intensity levels or genre-specific descriptors through a structured world/rule SOT or the scene's staging metadata.", "severity": "P1", "why_problematic": "This provides a closed list of high-intensity tropes and nomenclature for violence. It forces the LLM to use specific 'predatory' or 'brutal' language for any conflict scene, biasing the visual output regardless of the actual scenario's tone or genre. This nomenclature should be provided by a structured world/rule SOT."}, {"category": "scenario_dependent_prompt", "evidence": "Photorealistic cinematic still.", "line_end": 552, "line_start": 552, "recommended_fix": "Replace the hardcoded style string with a placeholder or variable that is populated from the project's visual style configuration.", "severity": "P1", "why_problematic": "The visual style is hardcoded as 'Photorealistic' in the system prompt. This prevents the pipeline from supporting different artistic styles (e.g., stylized, animated, or period-specific mediums) that should be defined in a global style SOT."}, {"category": "scenario_dependent_prompt", "evidence": "C11O13 in a security uniform, an East Asian man in his 30s ... C03O05 in fisher workwear, a young Southeast Asian man", "line_end": 418, "line_start": 412, "recommended_fix": "Use more generic examples that demonstrate the structure of the demographic descriptor without tying them to specific scenario roles or regions.", "severity": "P2", "why_problematic": "These examples use scenario-specific roles (security uniform, fisher workwear) and demographic mappings that reflect the current project's setting (TheRoad-I1), potentially biasing the LLM's generation for other scenarios."}], "path": "prompts/_base/scene_detail/12.202605021300/system.md", "scan_kind": "prompt", "sha256": "bd52343fbc9124efa30e5b1d7f6c01ac3ce9d04e0109a517ea410346d04c2b17"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 75, "chunk_start": 1, "chunk_summary": "The schema defines a domain-specific prompt syntax using string patterns for IDs and locations, and includes instructions for the LLM to perform semantic classification of visual contexts to determine prompt formatting.", "duration_ms": 25708, "findings": [{"category": "blind_string_mutation", "evidence": "인물+아웃룩은 복합 ID(C01O02)를 사용 — 합성 단계가 'the character from Image N'으로 자동 치환. ... 소품은 P01, 배경은 [L01: 설명] 형태.", "line_end": 16, "line_start": 16, "recommended_fix": "Pass structured references (e.g., an array of entity objects with ID and description) alongside the prompt instead of embedding them in a custom bracketed syntax that requires regex parsing.", "severity": "P1", "why_problematic": "The pipeline relies on blind string replacement of IDs (C01O02) and regex-based extraction of location descriptions from bracketed patterns ([L01: 설명]). This couples visual reference logic to fragile string patterns within natural language prompts, making the system vulnerable to LLM formatting deviations."}, {"category": "llm_closed_list_instruction", "evidence": "신체 부위 클로즈업/사진·거울 속 인물 등 system prompt가 명시한 예외 구도에서는 보통명사로 대체", "line_end": 16, "line_start": 16, "recommended_fix": "Define a structured field for the type of visual representation (direct, reflection, media) and let the synthesis stage decide the prompt phrasing based on that metadata.", "severity": "P2", "why_problematic": "Instructs the LLM to classify open-world visual meaning (mirror, close-up, photo) to decide whether to use a structured ID or a common noun. This semantic routing should be handled by the pipeline logic or a structured flag rather than varying the string format based on trope classification."}], "path": "prompts/_base/scene_detail/15.202605032354/detail_schema.json", "scan_kind": "prompt", "sha256": "fc4b7b905ec2540a85873e2b6ffbfe7b01f47f44cf38c4bbf2897300d69e2a89"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 716, "chunk_start": 1, "chunk_summary": "The system prompt contains several instances of semantic string judgment for routing, blind string mutations for character integration, and hardcoded semantic palettes for violence tropes.", "duration_ms": 33681, "findings": [{"category": "semantic_string_judgment", "evidence": "Focus on / close on / tight on / detail on + 특정 신체 부위", "line_end": 48, "line_start": 48, "recommended_fix": "Pass a structured 'is_closeup' or 'target_entity_type' flag from the scene analysis stage instead of relying on the LLM to parse these phrases.", "severity": "P1", "why_problematic": "This uses specific natural language string patterns to decide whether to use a character ID (C##) or a common noun, which is a semantic routing decision based on substring matching."}, {"category": "blind_string_mutation", "evidence": "고정 요소 description의 보통명사 인물 묘사('An Asian man', 'a woman' 등)를 해당 C##으로 대체", "line_end": 135, "line_start": 135, "recommended_fix": "Use a structured character_state object where the description and character_id are separate fields, rather than mutating the description string.", "severity": "P1", "why_problematic": "This instructs the LLM to perform a blind replacement of natural language descriptions with IDs, which can lead to grammatical errors or incorrect entity mapping if the source text varies."}, {"category": "scenario_dependent_code", "evidence": "round 4 Q1=B", "line_end": 209, "line_start": 209, "recommended_fix": "Remove internal evaluation references from production system prompts.", "severity": "P2", "why_problematic": "This is a reference to a specific internal evaluation round or logic branch that pollutes the general system prompt with project-specific metadata."}, {"category": "semantic_string_judgment", "evidence": "회피 표현: portal for door, screen for TV — 의미상 redraw 면 위반", "line_end": 223, "line_start": 223, "recommended_fix": "Use a more robust semantic similarity check or rely on the structured 'owned objects' list without hardcoding specific synonym examples.", "severity": "P2", "why_problematic": "This uses a closed list of synonyms to judge semantic 'evasion' of background rules, which is fragile and scenario-dependent."}, {"category": "semantic_string_judgment", "evidence": "camera_direction 자연어에 close-framing tag — ECU, XCU, extreme close-up, MCU, medium close-up, close-up, CU — 가 하나라도 포함되면", "line_end": 233, "line_start": 233, "recommended_fix": "Define framing scale as an enum in the shot metadata and use that to drive the reference skip logic.", "severity": "P1", "why_problematic": "The pipeline's decision to skip reference images is driven by the presence of specific natural language tags in a string, which is a semantic judgment that should be handled by structured metadata."}, {"category": "llm_closed_list_instruction", "evidence": "close-up, CU, MCU, ECU, XCU, extreme close-up, 클로즈업, 손가락이, 손이, 눈이, 얼굴이", "line_end": 347, "line_start": 342, "recommended_fix": "Provide the framing scale as a structured enum (e.g., CLOSE, MEDIUM, WIDE) in the input rather than having the LLM infer it from keywords.", "severity": "P1", "why_problematic": "This forces the LLM to classify framing scale based on a closed list of keywords and body parts, which is a semantic judgment that dictates entity visibility and background handling."}, {"category": "scenario_dependent_prompt", "evidence": "사용 가능 어휘 팔레트 (attacker / assailant / aggressor / predator / pursuer ... tearing flesh, ripped skin, gaping wound)", "line_end": 504, "line_start": 482, "recommended_fix": "Move genre-specific vocabulary palettes to a separate 'style' or 'genre' rulebook injected only when relevant.", "severity": "P2", "why_problematic": "This is a hardcoded list of domain-specific tropes and vocabulary for violence. Such palettes should be part of a genre-specific SOT rather than the base system prompt."}], "path": "prompts/_base/scene_detail/15.202605032354/system.md", "scan_kind": "prompt", "sha256": "26ef6712dbc576f4acbf98e17589ef5a8fddcd57e90e9bcc08633d518f5313ca"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 75, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 18100, "findings": [], "path": "prompts/_base/scene_detail/17.202605042018/detail_schema.json", "scan_kind": "prompt", "sha256": "fc4b7b905ec2540a85873e2b6ffbfe7b01f47f44cf38c4bbf2897300d69e2a89"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 75, "chunk_start": 1, "chunk_summary": "The schema for scene details includes instructions that force the LLM to make semantic judgments about visual context to determine string formatting.", "duration_ms": 29327, "findings": [{"category": "llm_closed_list_instruction", "evidence": "신체 부위 클로즈업/사진·거울 속 인물 등 system prompt가 명시한 예외 구도에서는 보통명사로 대체", "line_end": 16, "line_start": 16, "recommended_fix": "Standardize the use of IDs in the LLM output and handle the conversion to common nouns or specific phrases in a dedicated post-processing or rendering step that uses structured scene metadata.", "severity": "P1", "why_problematic": "The LLM is required to classify the visual context (e.g., mirror, photo, close-up) to decide between using a structured ID or a common noun. This forces the LLM to perform semantic judgment to satisfy a formatting rule, which leads to inconsistent prompt structures and makes the downstream 'composition stage' dependent on the LLM's subjective classification of the scene."}], "path": "prompts/_base/scene_detail/16.202605041200/detail_schema.json", "scan_kind": "prompt", "sha256": "fc4b7b905ec2540a85873e2b6ffbfe7b01f47f44cf38c4bbf2897300d69e2a89"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 75, "chunk_start": 1, "chunk_summary": "The schema defines the structure for scene details, including T2I prompt formatting rules and scene classification enums.", "duration_ms": 31046, "findings": [{"category": "llm_closed_list_instruction", "evidence": "신체 부위 클로즈업/사진·거울 속 인물 등 system prompt가 명시한 예외 구도에서는 보통명사로 대체", "line_end": 16, "line_start": 16, "recommended_fix": "Define a structured 'composition_rules' SOT that maps specific shot types to ID-suppression behavior, and have the LLM output a 'composition_type' field instead of making formatting decisions based on natural language examples.", "severity": "P1", "why_problematic": "This instruction requires the LLM to perform semantic classification of the visual scene (identifying 'close-ups' or 'mirrors') to decide whether to suppress character IDs. This logic is scattered in natural language rather than being driven by a structured visual-rule SOT, leading to inconsistent character tracking in complex shots."}], "path": "prompts/_base/scene_detail/18.202605041549/detail_schema.json", "scan_kind": "prompt", "sha256": "fc4b7b905ec2540a85873e2b6ffbfe7b01f47f44cf38c4bbf2897300d69e2a89"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 587, "chunk_start": 1, "chunk_summary": "The prompt contains several instances of hardcoded keyword lists and phrase patterns used for semantic classification of framing, entity visibility, and character ID policies, as well as a domain-specific vocabulary palette for violence.", "duration_ms": 29905, "findings": [{"category": "semantic_string_judgment", "evidence": "trigger_phrases (focus on / close on / tight on / detail on + 신체부위)", "line_end": 43, "line_start": 41, "recommended_fix": "Move the trigger phrase logic to a structured classifier or rely on explicit flags in the RenderPromptCard rather than string matching in the prompt.", "severity": "P1", "why_problematic": "The prompt instructs the LLM to use specific string patterns to decide whether to suppress character IDs (C##O##). This is a pattern-based semantic judgment that affects entity representation and should be handled by structured metadata."}, {"category": "semantic_string_judgment", "evidence": "판정 키워드 ... close-up, CU, MCU, ECU, XCU, extreme close-up, 클로즈업, 손가락이, 손이, 눈이, 얼굴이", "line_end": 259, "line_start": 258, "recommended_fix": "The framing scale should be a structured enum in the RenderPromptCard (e.g., framing_scale: 'close') rather than being inferred from natural language keywords in the prompt.", "severity": "P1", "why_problematic": "The prompt uses a hardcoded list of keywords (including body parts) to classify the framing scale of a shot. This classification then drives logic for entity visibility and ID usage, making it a high-signal semantic judgment based on string patterns."}, {"category": "llm_closed_list_instruction", "evidence": "사용 가능 어휘 팔레트 ... attacker / assailant / aggressor / predator / pursuer ... forceful, firm, aggressive, violent, brutal, savage, feral, predatory, vicious", "line_end": 375, "line_start": 353, "recommended_fix": "Externalize domain-specific vocabulary palettes into a structured 'visual_world_rules' or 'style_guide' SOT that can be injected based on the scenario's genre or tags.", "severity": "P2", "why_problematic": "This section provides a closed list of domain-specific tropes and vocabulary for violence. While intended to guide the LLM, it pollutes the prompt with scenario-specific nomenclature that should ideally be part of a structured world/rule SOT or style guide."}], "path": "prompts/_base/scene_detail/18.202605041549/system.md", "scan_kind": "prompt", "sha256": "7d915d79a07cd158f22b3e8e1fa4e2efb807a75efbc6648d9c417d19b002019e"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 75, "chunk_start": 1, "chunk_summary": "The file defines a JSON schema for scene details, utilizing structured IDs (C##, O##, P##, L##) and standard cinematic enums for scene classification, with no scenario-specific pollution or problematic semantic string logic.", "duration_ms": 12049, "findings": [], "path": "prompts/_base/scene_detail/20.202605051240/detail_schema.json", "scan_kind": "prompt", "sha256": "fc4b7b905ec2540a85873e2b6ffbfe7b01f47f44cf38c4bbf2897300d69e2a89"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 75, "chunk_start": 1, "chunk_summary": "The schema defines a structured scene detail format with specific ID syntax and semantic rules for T2I prompt generation.", "duration_ms": 34161, "findings": [{"category": "llm_closed_list_instruction", "evidence": "신체 부위 클로즈업/사진·거울 속 인물 등 system prompt가 명시한 예외 구도에서는 보통명사로 대체", "line_end": 16, "line_start": 16, "recommended_fix": "Move the logic for ID-to-noun replacement to a post-processing step or a dedicated visual-logic SOT that defines these 'exception' conditions more formally, rather than relying on the LLM's ad-hoc interpretation of visual categories within a field description.", "severity": "P2", "why_problematic": "This instructs the LLM to perform semantic classification of the visual scene (e.g., identifying a 'mirror' or 'close-up') to decide whether to use a technical ID or a common noun. This logic is a pattern-based semantic judgment that affects the downstream composition stage's ability to identify and replace character IDs."}], "path": "prompts/_base/scene_detail/19.202605050814/detail_schema.json", "scan_kind": "prompt", "sha256": "fc4b7b905ec2540a85873e2b6ffbfe7b01f47f44cf38c4bbf2897300d69e2a89"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 732, "chunk_start": 1, "chunk_summary": "The system prompt contains several instances of hardcoded semantic classifiers and domain nomenclature used to drive visual routing and prompt generation logic.", "duration_ms": 59028, "findings": [{"category": "semantic_string_judgment", "evidence": "\"`손가락이`, `손이`, `눈이`, `얼굴이`\", \"`running`, `riding`, `walking`, `moving`, `chasing`, `pedaling`, `rowing`\"", "line_end": 691, "line_start": 360, "recommended_fix": "Move framing scale and motion state to structured shot metadata (e.g., framing_scale enum and motion_state flag) to ensure deterministic visual routing.", "severity": "P1", "why_problematic": "The prompt instructs the LLM to infer framing scale and motion state from specific natural language tokens (including Korean body parts), which is brittle and should be driven by structured metadata rather than string patterns."}, {"category": "scenario_dependent_prompt", "evidence": "\"`Asian`, `East Asian`, ...\", \"`attacker`, `assailant`, ...\"", "line_end": 513, "line_start": 424, "recommended_fix": "Inject nomenclature from a structured SOT based on the scenario's region and genre instead of hardcoding them in the system prompt.", "severity": "P1", "why_problematic": "Hardcodes demographic and violence nomenclature/tropes that should be injected from a World/Genre SOT to support arbitrary scenarios (e.g., non-human races or different levels of gore)."}, {"category": "scenario_dependent_prompt", "evidence": "\"`vehicle`, `bicycle`, `motorcycle`, `boat`, `cart`, `wheelchair`\"", "line_end": 586, "line_start": 584, "recommended_fix": "Use asset metadata (e.g., an 'is_large_prop' or 'requires_body_visibility' flag) to trigger Rule D logic.", "severity": "P1", "why_problematic": "Hardcodes a list of props to trigger specific visual routing (Rule D), which is brittle and fails for other large props not included in the list."}], "path": "prompts/_base/scene_detail/16.202605041200/system.md", "scan_kind": "prompt", "sha256": "1847b818e67aa62990b12ca4547e5be25024730fd0de7e6434ee1ad92163f112"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 534, "chunk_start": 1, "chunk_summary": "The prompt contains hardcoded keyword lists for classifying framing scales and motion states, which are used to drive visual routing and reframing strategies.", "duration_ms": 43774, "findings": [{"category": "semantic_string_judgment", "evidence": "'close-up', 'CU', 'MCU', 'ECU', 'XCU', 'extreme close-up', '클로즈업', '손가락이', '손이', '눈이', '얼굴이', 'wide shot', 'establishing', 'aerial', '전경', '전신'", "line_end": 225, "line_start": 224, "recommended_fix": "Pass the framing scale as a structured enum (e.g., 'CLOSE', 'WIDE', 'MEDIUM') in the RenderPromptCard metadata instead of performing keyword-based inference in the prompt.", "severity": "P1", "why_problematic": "The prompt defines a list of English and Korean keywords to classify the framing scale of a shot. This classification drives significant visual logic (Rule J), such as entity visibility and focus, but relies on fragile string matching of open-world scenario text."}, {"category": "semantic_string_judgment", "evidence": "running / riding / walking / swimming 류", "line_end": 356, "line_start": 356, "recommended_fix": "Use a structured 'is_complex_motion' or 'action_category' field in the input schema to trigger reframing strategies.", "severity": "P1", "why_problematic": "The prompt instructs the LLM to detect complex motion or action based on a specific list of verbs to trigger 'Strategy C: Reframe'. This is a semantic routing decision based on string patterns in the scenario description."}, {"category": "semantic_string_judgment", "evidence": "running, riding, walking, moving, chasing, pedaling, rowing", "line_end": 474, "line_start": 474, "recommended_fix": "Explicitly tag shots with a 'motion_state' attribute in the metadata to drive the application of freeze-frame motion rules.", "severity": "P1", "why_problematic": "The prompt uses a hardcoded list of verbs to identify 'dynamic' shots that require motion direction preservation. This is a pattern-based judgment of open-world story content."}], "path": "prompts/_base/scene_detail/19.202605050814/system.md", "scan_kind": "prompt", "sha256": "9b4d7ab87961efb3220ef768a6a79eb4a3812ed3ee42a54bdf8bab0cde72f158"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 75, "chunk_start": 1, "chunk_summary": "The file defines a generic JSON schema for scene detail analysis and T2I prompt generation, utilizing a structured ID system for characters, outfits, and locations without scenario-specific pollution.", "duration_ms": 18792, "findings": [], "path": "prompts/_base/scene_detail/21.202605061636/detail_schema.json", "scan_kind": "prompt", "sha256": "fc4b7b905ec2540a85873e2b6ffbfe7b01f47f44cf38c4bbf2897300d69e2a89"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 669, "chunk_start": 1, "chunk_summary": "The prompt contains several instances of keyword-based semantic classification and scenario-specific trope pollution, particularly in framing scale determination, violence vocabulary, and demographic descriptors.", "duration_ms": 67881, "findings": [{"category": "semantic_string_judgment", "evidence": "\"클로즈업, 손가락이, 손이, 눈이, 얼굴이 (특정 신체 부위 명시 + close 의미)\"", "line_end": 299, "line_start": 297, "recommended_fix": "Derive framing scale from a structured field in the RenderPromptCard or a dedicated visual analysis step that considers the full context of the shot.", "severity": "P1", "why_problematic": "Uses a keyword list of body parts and shot types to classify the framing scale of a shot. This is a pattern-based semantic judgment that should be derived from structured metadata or a more robust visual analysis, as it can misclassify shots where these nouns appear in a wide context."}, {"category": "scenario_dependent_prompt", "evidence": "\"attacker / assailant / aggressor / predator / pursuer\", \"tearing flesh, ripped skin, gaping wound\"", "line_end": 457, "line_start": 435, "recommended_fix": "Move scenario-specific trope lists and vocabulary to a structured world/rule SOT or a dynamic style injection based on the scene's genre/tags.", "severity": "P1", "why_problematic": "Contains a hardcoded vocabulary palette of tropes and specific descriptors for violent scenarios. This is scenario-specific pollution that biases the LLM and should be part of a structured world-building SOT or a specialized style guide, not embedded in the general system prompt."}, {"category": "llm_closed_list_instruction", "evidence": "\"Asian, East Asian, South Asian, Southeast Asian, Black, Middle Eastern, Hispanic, Caucasian\"", "line_end": 376, "line_start": 361, "recommended_fix": "Inject demographic options from a structured world/region SOT instead of hardcoding them in the system prompt.", "severity": "P2", "why_problematic": "Provides a hardcoded list of demographic descriptors for the LLM to use as a classifier. This domain nomenclature should come from a structured world SOT to ensure consistency across different scenarios and regions."}, {"category": "semantic_string_judgment", "evidence": "\"running / riding / walking / swimming 류\"", "line_end": 491, "line_start": 491, "recommended_fix": "Use structured action tags or a more robust semantic analysis to trigger reframing strategies.", "severity": "P2", "why_problematic": "Uses a keyword list of motion verbs to decide when to apply a 'Reframe' strategy. This is a pattern-based decision on story meaning (motion) that should be handled by structured action metadata."}], "path": "prompts/_base/scene_detail/17.202605042018/system.md", "scan_kind": "prompt", "sha256": "c91b16e87259591162b8bb24c0f36aa645ffb131736e79e6b3e836c8a56bbf6e"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 423, "chunk_start": 1, "chunk_summary": "The system prompt contains several hardcoded semantic classifiers and domain-specific vocabulary lists used for visual routing and story analysis, which are identified as legacy debt awaiting migration to structured SOTs.", "duration_ms": 27449, "findings": [{"category": "semantic_string_judgment", "evidence": "framing_scale_keywords: close-up, CU, MCU, ECU, XCU, extreme close-up, 클로즈업, 손가락이, 손이, 눈이, 얼굴이 (총 11 entries)", "line_end": 151, "line_start": 151, "recommended_fix": "Move framing scale classification to a structured metadata field in the RenderPromptCard or a dedicated scene analysis SOT.", "severity": "P1", "why_problematic": "Uses a hardcoded list of natural language tokens (including body parts like 'fingers' and 'eyes') to perform semantic classification of framing scale, which drives visual routing logic."}, {"category": "llm_closed_list_instruction", "evidence": "사용 가능 어휘 팔레트 (해당 씬에서만 꺼내 쓸 것) ... attacker / assailant / aggressor / predator / pursuer ... tearing flesh, ripped skin, gaping wound", "line_end": 211, "line_start": 189, "recommended_fix": "Inject scene-type specific vocabulary and behavioral rules via a dynamic 'World Rule' or 'Genre Rule' SOT based on the scenario's metadata.", "severity": "P1", "why_problematic": "Provides a hardcoded 'Vocabulary Palette' of violence tropes and descriptors. This is scenario-specific pollution that should be emitted by a structured world/rule SOT rather than being baked into the system prompt."}, {"category": "semantic_string_judgment", "evidence": "vehicle, bicycle, motorcycle, boat, cart, wheelchair", "line_end": 277, "line_start": 277, "recommended_fix": "Define prop categories in the asset schema and pass the requirement via the RenderPromptCard's asset_requirements.", "severity": "P2", "why_problematic": "A hardcoded list of specific props used to trigger 'Rule D' (prop body visibility). This logic should be driven by asset metadata (e.g., a 'large_prop' or 'mountable' tag) rather than string matching in the prompt."}, {"category": "semantic_string_judgment", "evidence": "running, riding, walking, moving, chasing, pedaling, rowing", "line_end": 363, "line_start": 363, "recommended_fix": "Use an action-type enum or metadata flag in the shot staging data to trigger motion-specific prompt requirements.", "severity": "P2", "why_problematic": "Hardcoded list of motion verbs used to trigger 'motion direction' freeze logic. This is a semantic judgment on open-world actions that should be handled by structured action metadata."}], "path": "prompts/_base/scene_detail/20.202605051240/system.md", "scan_kind": "prompt", "sha256": "e5a0910ce397e832d950cf306c3be32c3cdacfba441633ca6cd57ea0c394adfa"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 75, "chunk_start": 1, "chunk_summary": "The schema defines the structure for scene details, but the description for the t2i_prompt field contains logic for blind string substitution and semantic classification of visual tropes.", "duration_ms": 18769, "findings": [{"category": "blind_string_mutation", "evidence": "합성 단계가 'the character from Image N'으로 자동 치환", "line_end": 16, "line_start": 16, "recommended_fix": "Pass the structured ID (C01O02) to the composition engine and let the engine decide the reference string based on its internal state/context, rather than relying on a blind string replacement of the prompt text.", "severity": "P1", "why_problematic": "This documents a downstream blind string replacement where structured IDs are swapped for natural language phrases ('the character from Image N'). This couples the prompt generation to a specific string-based substitution logic in the composition stage rather than using a structured reference system."}, {"category": "llm_closed_list_instruction", "evidence": "신체 부위 클로즈업/사진·거울 속 인물 등 system prompt가 명시한 예외 구도에서는 보통명사로 대체", "line_end": 16, "line_start": 16, "recommended_fix": "Define these visual exceptions in a structured 'Visual Rules' SOT and have the LLM reference that SOT, or ideally, always use IDs and let the downstream renderer/validator handle the conversion to common nouns for specific shots.", "severity": "P2", "why_problematic": "The LLM is instructed to classify visual meaning (close-ups, mirrors, photos) from a closed list of examples to decide whether to use a structured ID or a common noun. This logic is scattered in the schema description and should be driven by a centralized visual rule SOT."}], "path": "prompts/_base/scene_detail/21.202605062217/detail_schema.json", "scan_kind": "prompt", "sha256": "fc4b7b905ec2540a85873e2b6ffbfe7b01f47f44cf38c4bbf2897300d69e2a89"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 81, "chunk_start": 1, "chunk_summary": "The schema defines structural requirements for scene detail generation using technical ID patterns and generic cinematic enums, with no actionable scenario-specific pollution or semantic string judgment found.", "duration_ms": 5672, "findings": [], "path": "prompts/_base/scene_detail/23.202605141758/detail_schema.json", "scan_kind": "prompt", "sha256": "7070e3b9450d30e6bc31d0632d894ef8250d9157cc76813352ed95fcdcc9b2dd"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 532, "chunk_start": 1, "chunk_summary": "The system prompt contains several hardcoded semantic keyword lists and phrase patterns used to classify scenario text for visual routing (framing, motion, and violence intensity) which are currently being transitioned to a structured contract (RenderPromptCard).", "duration_ms": 29020, "findings": [{"category": "llm_closed_list_instruction", "evidence": "trigger_phrases (focus on / close on / tight on / detail on + 신체부위)", "line_end": 43, "line_start": 41, "recommended_fix": "Move the trigger phrase detection logic to a pre-processing step or define the specific triggers within the id_policy schema of the RenderPromptCard.", "severity": "P1", "why_problematic": "The LLM is instructed to detect specific English phrase patterns combined with arbitrary body parts to decide whether to forbid character ID usage (C##O##). This is a semantic judgment based on a hardcoded phrase list."}, {"category": "llm_closed_list_instruction", "evidence": "close 판정 키워드 = 'close-up', 'CU', 'MCU', 'ECU', 'XCU', 'extreme close-up', '클로즈업', '손가락이', '손이', '눈이', '얼굴이' (총 11 entries)", "line_end": 151, "line_start": 151, "recommended_fix": "Ensure the framing_scale_keywords are exclusively provided via the RenderPromptCard and remove the hardcoded list from the system prompt prose.", "severity": "P1", "why_problematic": "The prompt hardcodes a list of 11 keywords (including specific Korean body parts) to classify a shot as 'close'. This semantic classification should be driven by the structured SOT (RenderPromptCard) rather than prose reminders."}, {"category": "llm_closed_list_instruction", "evidence": "일반 가용 어휘: forceful, firm, decisive, sudden, intense", "line_end": 271, "line_start": 271, "recommended_fix": "Inject allowed intensity tokens via the entity_canon or scenario-specific style rules rather than hardcoding them in the base prompt.", "severity": "P1", "why_problematic": "The prompt provides a hardcoded list of intensity adjectives for violence/contact scenes. This biases the LLM toward specific vocabulary regardless of the scenario's unique tone."}, {"category": "llm_closed_list_instruction", "evidence": "동적 동사 (running, riding, walking, moving, chasing, pedaling, rowing)", "line_end": 472, "line_start": 470, "recommended_fix": "Move the motion verb classification to the shot_extract or staging analysis phase and pass a 'motion_detected' flag in the RenderPromptCard.", "severity": "P1", "why_problematic": "The prompt uses a hardcoded list of verbs to trigger 'motion freeze' logic. This is a semantic classifier that should be handled by the scenario analysis pipeline or defined in a structured rule set."}], "path": "prompts/_base/scene_detail/21.202605061636/system.md", "scan_kind": "prompt", "sha256": "7f69a258c9d8d0eb3da6efaca56921d6b8003a70f345c92735eea4d0e5546662"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 75, "chunk_start": 1, "chunk_summary": "The schema defines the structure for scene detail generation, using standard ID patterns and cinematic enums without scenario-specific pollution.", "duration_ms": 13584, "findings": [], "path": "prompts/_base/scene_detail/22.202605122049/detail_schema.json", "scan_kind": "prompt", "sha256": "37123c7b9efaa3b7112168d1ac0c3b811607fb0889facf1e7ce2f9761cbee384"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 81, "chunk_start": 1, "chunk_summary": "The provided JSON schema defines the structure for scene detail generation and uses standard technical IDs and cinematic categories without scenario-specific pollution.", "duration_ms": 10613, "findings": [], "path": "prompts/_base/scene_detail/24.202605151451/detail_schema.json", "scan_kind": "prompt", "sha256": "7070e3b9450d30e6bc31d0632d894ef8250d9157cc76813352ed95fcdcc9b2dd"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 52, "chunk_start": 1, "chunk_summary": "The JSON schema defines the structure for scene detail analysis, including T2I prompt generation and character outfit assignments, using allowed technical ID syntax and standard narrative enums.", "duration_ms": 8299, "findings": [], "path": "prompts/_base/scene_detail/7.202604201230/detail_schema.json", "scan_kind": "prompt", "sha256": "7b30ebe26e94189a1d2dd6d1afed295c041efc40cc2671a688a265d65301117e"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 52, "chunk_start": 1, "chunk_summary": "The provided JSON schema defines the structure for scene details and T2I prompt variations using standard technical ID syntax (C##, P##, L##) without scenario-specific pollution.", "duration_ms": 6550, "findings": [], "path": "prompts/_base/scene_detail/8.202604201530/detail_schema.json", "scan_kind": "prompt", "sha256": "7b30ebe26e94189a1d2dd6d1afed295c041efc40cc2671a688a265d65301117e"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 552, "chunk_start": 1, "chunk_summary": "The system prompt contains multiple instances of pattern-based semantic judgment, scenario-specific trait pollution, and blind string substitution rules for visual routing and ID policy.", "duration_ms": 30204, "findings": [{"category": "semantic_string_judgment", "evidence": "framing_scale_keywords: close 판정 키워드 = `close-up`, ..., `손가락이`, `손이`, `눈이`, `얼굴이`", "line_end": 155, "line_start": 155, "recommended_fix": "Move framing classification to the RenderPromptCard or a dedicated SOT that provides the framing_scale enum directly.", "severity": "P1", "why_problematic": "Uses a closed list of natural language tokens (including body parts in Korean) to classify open-world framing scale, which should be determined by structured metadata."}, {"category": "semantic_string_judgment", "evidence": "body_part_focus_rule.trigger_phrases (`focus on / close on / tight on / detail on` + 신체부위) 패턴이 등장하면 ... C##O## 사용 금지", "line_end": 44, "line_start": 41, "recommended_fix": "Use a structured focus_target field in the shot metadata instead of parsing trigger phrases.", "severity": "P1", "why_problematic": "Decides entity ID usage (visual routing) based on substring patterns and noun matching (body parts) in the scenario text."}, {"category": "blind_string_mutation", "evidence": "fixed_elements[i].description 안 보통명사 인물 ... 이 ... 조건 만족 시 해당 보통명사를 C##/C##O## 로 치환", "line_end": 119, "line_start": 119, "recommended_fix": "Use structured entity references in the fixed_elements description instead of post-hoc string replacement.", "severity": "P1", "why_problematic": "Performs blind string substitution of natural language nouns with technical IDs based on a mapping, which risks incorrect replacements in complex sentences."}, {"category": "semantic_string_judgment", "evidence": "face fully obscured / no visible facial features / face hidden in shadow 같은 face-obscured 표현을 포함하면", "line_end": 176, "line_start": 175, "recommended_fix": "Define a boolean or enum flag (e.g., visibility_state: obscured) in the entity_canon schema.", "severity": "P1", "why_problematic": "Triggers specific visual logic (silhouette policy) by matching specific natural language strings in entity traits."}, {"category": "scenario_dependent_prompt", "evidence": "non-standard canine structure / altered eye coloration / injury marker", "line_end": 230, "line_start": 226, "recommended_fix": "Remove specific trait examples from the system prompt and rely on the injected stable_traits block.", "severity": "P2", "why_problematic": "The prompt contains scenario-specific examples and domain-specific trope lists (e.g., canine structure) that should be emitted by a structured world/rule SOT."}, {"category": "semantic_string_judgment", "evidence": "running / riding / walking / swimming 류 ... 동작A하며 동작B 같은 두 동작 합성 표현을 묘사하면", "line_end": 324, "line_start": 320, "recommended_fix": "Move motion complexity analysis to a pre-processing step that sets a reframe_required flag in the RenderPromptCard.", "severity": "P1", "why_problematic": "Uses a list of verbs and syntactic patterns to trigger 'Strategy C: Reframe', making visual routing decisions based on open-world string patterns."}, {"category": "semantic_string_judgment", "evidence": "entity_canon.name 이 prompt 안에 등장하면 그 specific entity 의 ID 가 같은 sentence + ±60 char window 안에 있어야 한다", "line_end": 470, "line_start": 466, "recommended_fix": "Validate entity presence using structured ID tags rather than natural language names.", "severity": "P1", "why_problematic": "Enforces a validation rule based on the presence of open-world names (entity_canon.name) within a character window, which is a pattern-based semantic judgment."}], "path": "prompts/_base/scene_detail/22.202605122049/system.md", "scan_kind": "prompt", "sha256": "8af3731123c0c755ed4a0206ecdce55869f88cea7b24b51cc2ace883091ee512"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 597, "chunk_start": 1, "chunk_summary": "The prompt contains a hardcoded list of 11 keywords, including Korean body parts, used to classify framing scale, which constitutes a pattern-based semantic judgment.", "duration_ms": 30949, "findings": [{"category": "llm_closed_list_instruction", "evidence": "close 판정 키워드 = `close-up`, `CU`, `MCU`, `ECU`, `XCU`, `extreme close-up`, `클로즈업`, `손가락이`, `손이`, `눈이`, `얼굴이` (총 11 entries; freeze-frame `정지 컷` 류는 무관)", "line_end": 155, "line_start": 155, "recommended_fix": "Remove the hardcoded list from the prompt prose. Ensure the framing scale classification is performed upstream or passed as a structured enum/boolean in the RenderPromptCard, and have the LLM follow the card's explicit instruction rather than performing its own string-based detection.", "severity": "P1", "why_problematic": "The LLM is instructed to classify the framing scale (a visual semantic property) based on a hardcoded list of 11 string patterns, including specific body parts in Korean. This is a heuristic-based semantic judgment that should be derived from structured metadata (SOT) rather than string matching in the prompt prose."}], "path": "prompts/_base/scene_detail/23.202605141758/system.md", "scan_kind": "prompt", "sha256": "fcd7953f00be507f9dae1842d26254acfe62ef861a2b86624f27a668921b004c"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 52, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 5179, "findings": [], "path": "prompts/_base/scene_detail/9.202604201700/detail_schema.json", "scan_kind": "prompt", "sha256": "7b30ebe26e94189a1d2dd6d1afed295c041efc40cc2671a688a265d65301117e"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 20, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 3085, "findings": [], "path": "prompts/_base/scene_detail_owned_judge/1.202605032354/schema.json", "scan_kind": "prompt", "sha256": "8c85452fa11026fa9e9aeca09ab9f1a98114674b46bd152beb28ca53c85ba86f"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 597, "chunk_start": 1, "chunk_summary": "The prompt contains several instances of hardcoded phrase lists and string-based semantic judgments used to drive ID policies, background binding, and visual suppression, as well as a complex window-based validation rule for ID-Name association.", "duration_ms": 35725, "findings": [{"category": "semantic_string_judgment", "evidence": "trigger_phrases (focus on / close on / tight on / detail on + 신체부위) 패턴이 등장하면 ... C##O## 사용 금지", "line_end": 44, "line_start": 41, "recommended_fix": "Move the trigger logic to the shot_staging or card generation phase, providing a boolean flag (e.g., is_body_part_focus) instead of relying on phrase matching.", "severity": "P1", "why_problematic": "The prompt uses a hardcoded list of natural language phrases to trigger a change in entity representation (ID policy). This logic should be driven by structured metadata in the RenderPromptCard rather than pattern matching on the prompt's own reasoning or source text."}, {"category": "blind_string_mutation", "evidence": "the existing X / from the reference / use the X from the reference / preserving the same room perspective / maintaining the reference's framing / do not generate a new X", "line_end": 144, "line_start": 140, "recommended_fix": "Define the constraint semantically (e.g., 'do not mention the background reference') and allow the LLM to handle the phrasing, or use a more robust validation step.", "severity": "P1", "why_problematic": "This is a hardcoded list of forbidden phrases used to enforce background binding rules. Relying on a closed list of phrases to prevent specific visual mentions is fragile and prevents the LLM from using natural variations that might be necessary for the scene."}, {"category": "semantic_string_judgment", "evidence": "face fully obscured / no visible facial features / face hidden in shadow ... jaw / chin / nose / cheek / forehead / mouth / eye / 이목구비 / 윤곽 같은 face-feature 단어를 직접 출력하지 마라", "line_end": 226, "line_start": 220, "recommended_fix": "Replace the string-matching logic with a structured visibility enum in the entity_canon or stable_traits.", "severity": "P1", "why_problematic": "The prompt instructs the LLM to perform semantic classification on trait strings to decide whether to suppress a specific list of nouns. This is a pattern-based visual decision that should be explicitly signaled by a structured status (e.g., face_visibility: obscured) in the entity traits."}, {"category": "semantic_string_judgment", "evidence": "entity_canon.name 이 prompt 안에 등장하면 그 specific entity 의 ID ... 가 같은 sentence + ±60 char window 안에 있어야 한다.", "line_end": 515, "line_start": 511, "recommended_fix": "Ensure the LLM always uses a standard template for entity introduction (e.g., 'Name (ID)') rather than enforcing a character-count window check.", "severity": "P1", "why_problematic": "This is a highly specific string-level validation rule (window-based proximity) embedded in the prompt to ensure ID-Name association. This type of technical constraint is difficult for LLMs to follow precisely and indicates a lack of structured mapping between names and IDs in the generation pipeline."}], "path": "prompts/_base/scene_detail/24.202605151451/system.md", "scan_kind": "prompt", "sha256": "d35e50e1332ba5226384543fa6532ba0dc98f7c38b3d86f5cd3e88b578bdd47a"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 8, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 3969, "findings": [], "path": "prompts/_base/scene_detail_owned_judge/1.202605032354/user_template.md", "scan_kind": "prompt", "sha256": "6d57d82ee092bee6bf0d1eeb1453e3bdc990e6051c40da9472e6788083f196a3"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 273, "chunk_start": 1, "chunk_summary": "The system prompt contains scenario-specific ethnicity bias in examples and hardcoded semantic descriptors for physical conflict scenes.", "duration_ms": 31362, "findings": [{"category": "scenario_dependent_prompt", "evidence": "\"middle-aged Korean woman\", \"Korean man in his 30s\", \"young Korean woman\", \"A Korean man\", \"Korean woman\"", "line_end": 135, "line_start": 96, "recommended_fix": "Replace specific ethnicities in examples with generic placeholders like '[Race/Nationality]' or use diverse, non-specific descriptions to ensure the LLM remains neutral and follows the provided scenario/world SOT.", "severity": "P1", "why_problematic": "The prompt repeatedly uses 'Korean' as the default ethnicity in examples across multiple sections (photos, consistency, perspective). This creates a strong few-shot bias that pollutes the LLM's output, likely causing it to generate 'Korean' even for scenarios where it is inappropriate, despite the instruction in line 46 to avoid fixing the setting."}, {"category": "llm_closed_list_instruction", "evidence": "\"the aggressor / the one being attacked\", \"firm, forceful, aggressive, violent\"", "line_end": 170, "line_start": 169, "recommended_fix": "Abstract these instructions to focus on 'physical tension' and 'asymmetric positioning' rather than providing a specific vocabulary list, or move the vocabulary to a domain-specific rule SOT.", "severity": "P2", "why_problematic": "This section provides a closed list of semantic labels and adjectives to describe physical conflict. While intended to mitigate T2I model bias (intimacy bias), hardcoding these specific terms in the system prompt forces a 'violence' framing on all physical interactions, which should instead be derived from the scenario's specific tone or a structured interaction SOT."}], "path": "prompts/_base/scene_detail/7.202604201230/system.md", "scan_kind": "prompt", "sha256": "0ce7d711cce452479171e24e86872666f98428fa021459def876138f97df4650"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 21, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 2967, "findings": [], "path": "prompts/_base/scene_detail_owned_judge/2.202605051641/schema.json", "scan_kind": "prompt", "sha256": "2ceaa86e4bda0aec69b371fce33acf8f39965e993a82a7a29e0bc21aa6c25967"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 548, "chunk_start": 1, "chunk_summary": "The prompt contains several hardcoded semantic classification lists and forbidden phrase patterns (framing, motion, props, surfaces, lighting, silhouettes) that should be driven by structured data to avoid bias and drift.", "duration_ms": 57912, "findings": [{"category": "semantic_string_judgment", "evidence": "'and then', 'while ~ing', 'after ~ing', 'as ~', 'before ~', '~하자', '~하며', '~한 뒤'", "line_end": 27, "line_start": 27, "recommended_fix": "Replace the token list with a high-level semantic instruction to describe only a single instantaneous moment.", "severity": "P1", "why_problematic": "Hardcoded list of forbidden time-related conjunctions used to enforce 'single moment' semantics. This is a pattern-based semantic judgment that should be handled by general reasoning or a more flexible rule-set."}, {"category": "llm_closed_list_instruction", "evidence": "body_part_focus_rule.trigger_phrases (focus on / close on / tight on / detail on + 신체부위)", "line_end": 44, "line_start": 41, "recommended_fix": "Instruct the LLM to use the trigger_phrases provided in the RenderPromptCard instead of hardcoding them in the prompt prose.", "severity": "P1", "why_problematic": "Hardcoded string patterns used to decide visual semantics (disabling character IDs). This is a pattern-based semantic judgment that should be driven by the RenderPromptCard."}, {"category": "llm_closed_list_instruction", "evidence": "reproduction_surface_rule.applies_to_surfaces (사진·포스터·모니터·거울·반사·투영 등)", "line_end": 51, "line_start": 49, "recommended_fix": "Rely solely on the applies_to_surfaces field in the RenderPromptCard and remove the hardcoded examples from the prose.", "severity": "P1", "why_problematic": "Hardcoded list of semantic surface categories used to mutate ID policy. This should be managed as a structured list in the RenderPromptCard to ensure consistency across different scenarios."}, {"category": "semantic_string_judgment", "evidence": "cut / slice / split / carve / bisect + 신체 부위 조합 절대 금지", "line_end": 88, "line_start": 88, "recommended_fix": "Replace the verb list with a semantic instruction to avoid lighting descriptions that imply physical separation of body parts.", "severity": "P1", "why_problematic": "Blind string-pattern check for specific verbs to prevent lighting-induced body distortion. This is a pattern-based semantic judgment that may miss synonyms or flag valid metaphorical uses."}, {"category": "llm_closed_list_instruction", "evidence": "framing_scale_keywords: close 판정 키워드 = 'close-up', 'CU', 'MCU', 'ECU', 'XCU', 'extreme close-up', '클로즈업', '손가락이', '손이', '눈이', '얼굴이' (총 11 entries)", "line_end": 151, "line_start": 151, "recommended_fix": "Remove the hardcoded list from the prompt prose and instruct the LLM to use the keywords provided in the RenderPromptCard.", "severity": "P1", "why_problematic": "Hardcoded list of 11 semantic keywords used to classify framing scale. This should be driven by the structured SOT (RenderPromptCard) to allow for open-world flexibility and avoid drift."}, {"category": "llm_closed_list_instruction", "evidence": "jaw / chin / nose / cheek / forehead / mouth / eye / 이목구비 / 윤곽", "line_end": 177, "line_start": 176, "recommended_fix": "Move the forbidden word list to a structured configuration or the RenderPromptCard's constraints.", "severity": "P1", "why_problematic": "Hardcoded list of forbidden facial feature words for silhouette shots. This is a closed-list semantic classifier that should be part of a structured silhouette policy in the SOT."}, {"category": "llm_closed_list_instruction", "evidence": "vehicle, bicycle, motorcycle, boat, cart, wheelchair 등 인물이 잡고 있거나 타고 있는 큰 prop", "line_end": 352, "line_start": 352, "recommended_fix": "Move the list of 'large props' to a structured configuration or the RenderPromptCard.", "severity": "P1", "why_problematic": "Hardcoded list of prop types used to trigger Rule D. This is a closed-list semantic classifier for open-world objects that should be defined in a world-rule SOT."}, {"category": "llm_closed_list_instruction", "evidence": "running, riding, walking, moving, chasing, pedaling, rowing", "line_end": 488, "line_start": 488, "recommended_fix": "Instruct the LLM to identify motion-related verbs semantically or provide the trigger list via the RenderPromptCard.", "severity": "P1", "why_problematic": "Hardcoded list of motion verbs used to trigger 'freeze' logic. This limits the system's ability to handle other motion-related verbs and should be handled by semantic reasoning."}], "path": "prompts/_base/scene_detail/21.202605062217/system.md", "scan_kind": "prompt", "sha256": "7e7c680ae4dad5c2c2c1713e66104cab5bc005b11a575adde8296acbdf7fa099"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 8, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 5319, "findings": [], "path": "prompts/_base/scene_detail_owned_judge/2.202605051641/user_template.md", "scan_kind": "prompt", "sha256": "6d57d82ee092bee6bf0d1eeb1453e3bdc990e6051c40da9472e6788083f196a3"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 21, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 5073, "findings": [], "path": "prompts/_base/scene_detail_owned_judge/3.202605051746/schema.json", "scan_kind": "prompt", "sha256": "2ceaa86e4bda0aec69b371fce33acf8f39965e993a82a7a29e0bc21aa6c25967"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 37, "chunk_start": 1, "chunk_summary": "The prompt contains internal project tracking metadata and hardcoded semantic examples for object identification and violation detection.", "duration_ms": 23566, "findings": [{"category": "scenario_dependent_prompt", "evidence": "round 4 Q2=B / round 5 BLOCKING 1", "line_end": 7, "line_start": 7, "recommended_fix": "Remove internal project management references and historical context from the production system prompt.", "severity": "P2", "why_problematic": "Internal project tracking, versioning history, or blocking notes are embedded in the system prompt, which constitutes scenario-specific pollution."}, {"category": "llm_closed_list_instruction", "evidence": "portal for door, screen for TV, a TV displaying a news bulletin in the corner", "line_end": 19, "line_start": 18, "recommended_fix": "Instruct the LLM to use general semantic reasoning to identify synonyms or redrawing attempts, or move specific object mappings to a structured SOT/world-rule input.", "severity": "P1", "why_problematic": "The prompt uses specific noun substitutions and scenario-specific prop examples to define semantic violations. This forces the LLM to classify open-world meaning based on a closed list of examples, which may conflict with valid scenario-specific objects (e.g., a sci-fi 'portal' that is not a 'door')."}], "path": "prompts/_base/scene_detail_owned_judge/1.202605032354/system.md", "scan_kind": "prompt", "sha256": "4a2e0893bec05cac8b9e6c3f36c19e8ee1c3c64466fe19a66acef828bd7579f9"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 350, "chunk_start": 1, "chunk_summary": "The prompt contains hardcoded domain-specific vocabulary for violence and ethnicity-specific examples that should be abstracted into a SOT or made generic.", "duration_ms": 29184, "findings": [{"category": "llm_closed_list_instruction", "evidence": "attacker / assailant / aggressor / predator / pursuer ... tearing flesh, ripped skin, gaping wound, jagged gash, raw tissue", "line_end": 226, "line_start": 204, "recommended_fix": "Move the violence vocabulary palette to a separate genre-specific or world-specific SOT and inject it dynamically based on the scenario's metadata.", "severity": "P1", "why_problematic": "Hardcoded domain-specific vocabulary for violence and physical conflict biases the LLM toward specific graphic tropes. This nomenclature should be provided via a structured World or Genre SOT rather than being baked into the base system prompt, as it forces a specific 'flavor' of violence that may not suit all scenarios."}, {"category": "scenario_dependent_prompt", "evidence": "middle-aged Korean woman ... Korean man in his 30s ... young Korean woman ... A Korean man stands rigidly ... furrowed brow of a Korean woman", "line_end": 171, "line_start": 96, "recommended_fix": "Replace ethnicity-specific examples with generic placeholders or diverse examples (e.g., 'a middle-aged woman', 'a man in his 30s') to maintain the prompt's neutrality as a base component.", "severity": "P2", "why_problematic": "The base prompt uses ethnicity-specific (Korean) examples for character descriptions. While appropriate for a specific project, hardcoding these in a base prompt limits its reusability for other scenarios and introduces demographic bias into the LLM's generation logic."}], "path": "prompts/_base/scene_detail/9.202604201700/system.md", "scan_kind": "prompt", "sha256": "46dcfb78de951ab47fb714ce9f73466397415842b7d46f573570de6144add052"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 8, "chunk_start": 1, "chunk_summary": "No actionable findings; the template uses standard placeholders and technical instructions for consistency without scenario-specific pollution.", "duration_ms": 7815, "findings": [], "path": "prompts/_base/scene_detail_owned_judge/3.202605051746/user_template.md", "scan_kind": "prompt", "sha256": "6d57d82ee092bee6bf0d1eeb1453e3bdc990e6051c40da9472e6788083f196a3"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 289, "chunk_start": 1, "chunk_summary": "The system prompt contains a hardcoded violence vocabulary palette, scenario-specific demographic examples, and semantic routing logic for character IDs based on visual identifiability.", "duration_ms": 45478, "findings": [{"category": "llm_closed_list_instruction", "evidence": "사용 가능 어휘 팔레트... attacker / assailant / aggressor / predator / pursuer... tearing flesh, ripped skin, gaping wound...", "line_end": 184, "line_start": 168, "recommended_fix": "Move the violence vocabulary and intensity mapping to a structured world-rule SOT or a dedicated configuration file.", "severity": "P1", "why_problematic": "This provides a hardcoded list of high-signal tokens for the LLM to inject based on its interpretation of violence in the scenario. This scattered domain nomenclature should be managed by a structured world-rule SOT to avoid biasing open-world descriptions with a fixed vocabulary."}, {"category": "scenario_dependent_prompt", "evidence": "middle-aged Korean woman... a Korean man in his 30s... young Korean woman", "line_end": 100, "line_start": 96, "recommended_fix": "Use more generic or diverse examples (e.g., 'a middle-aged woman', 'a man in his 30s') to avoid demographic bias in the system prompt.", "severity": "P2", "why_problematic": "The examples are polluted with scenario-specific demographic details ('Korean') which can bias the LLM's generation for scenarios set in different regions or involving different ethnicities."}, {"category": "semantic_string_judgment", "evidence": "C## 사용 여부는 얼굴이 식별 가능한지로 판단... 완전히 뒤돌아선 인물... 실루엣... OTS에서 뒷통수/어깨만...", "line_end": 27, "line_start": 19, "recommended_fix": "Define face visibility/identifiability as a structured field in the shot metadata or SOT rather than relying on LLM interpretation of the scene description.", "severity": "P1", "why_problematic": "The LLM is tasked with making a critical routing decision (using a technical ID vs. a common noun) based on its open-world interpretation of visual identifiability. This directly affects whether the T2I pipeline attaches face reference images, making the visual consistency dependent on pattern-based semantic judgment."}, {"category": "blind_string_mutation", "evidence": "고정 요소 description의 보통명사 인물 묘사('A Korean man', 'a woman' 등)를 해당 C##으로 대체", "line_end": 107, "line_start": 107, "recommended_fix": "Ensure character mapping is handled by explicit entity IDs in the source text rather than requiring the LLM to perform string-based semantic replacement.", "severity": "P2", "why_problematic": "Instructs the LLM to perform a semantic replacement of natural language descriptions with IDs. This is a form of blind string mutation that risks incorrect entity mapping if the scenario contains multiple characters matching the common noun description."}], "path": "prompts/_base/scene_detail/8.202604201530/system.md", "scan_kind": "prompt", "sha256": "58547578315eb8e11069a69f6650baa9b98b0d391c3ea2f8a1e49f74b1c60b9d"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 47, "chunk_start": 1, "chunk_summary": "The judge prompt uses closed-list phrase examples and specific synonym mappings to classify open-world T2I prompt intent, and contains internal project metadata.", "duration_ms": 25073, "findings": [{"category": "scenario_dependent_prompt", "evidence": "round 4 Q2=B / round 5 BLOCKING 1", "line_end": 7, "line_start": 7, "recommended_fix": "Remove internal project tracking references from the production system prompt.", "severity": "P2", "why_problematic": "Internal project-specific milestone markers and logic references are embedded in the system prompt, which is scenario-specific pollution."}, {"category": "llm_closed_list_instruction", "evidence": "portal for door, screen for TV", "line_end": 20, "line_start": 16, "recommended_fix": "Use a more generalized instruction for semantic equivalence or rely on a structured world-rule SOT to define prohibited object mutations.", "severity": "P1", "why_problematic": "The prompt instructs the LLM to detect 'evasive expressions' using a closed list of specific synonym examples. This is a brittle semantic classifier for open-world story text."}, {"category": "llm_closed_list_instruction", "evidence": "near the doorway, beside the table, against the wall by the window", "line_end": 28, "line_start": 23, "recommended_fix": "Define the semantic criteria for 'anchoring' (e.g., spatial preposition + reference to existing context) rather than providing a fixed list of examples.", "severity": "P1", "why_problematic": "The LLM is provided with a closed list of natural language anchor phrases to distinguish valid references from violations. This biases the judge against valid but differently phrased spatial references."}, {"category": "semantic_string_judgment", "evidence": "ambiguous case (e.g. \"the table\" 단순 등장) → redraw_violation", "line_end": 31, "line_start": 31, "recommended_fix": "Allow the LLM to use broader context to determine if a noun phrase refers to an existing object or a new one, rather than enforcing a rigid default based on phrase structure.", "severity": "P1", "why_problematic": "Hardcoded semantic rule that treats simple noun presence as a violation unless specific anchor patterns are met. This is a pattern-based judgment on open-world text."}], "path": "prompts/_base/scene_detail_owned_judge/2.202605051641/system.md", "scan_kind": "prompt", "sha256": "521a4db44ae22f852bcdbe2954c88a2364e876e5560e4cef48bc7e652d20fd14"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 25, "chunk_start": 1, "chunk_summary": "The file defines a standard JSON schema for scene analysis and contains no actionable scenario-specific pollution or problematic semantic string judgments.", "duration_ms": 12213, "findings": [], "path": "prompts/_base/scene_director/7.202604031800/analyze_schema.json", "scan_kind": "prompt", "sha256": "d6ab4edccec1ba46ff95deab0075c434da094aa79e1112c55c26db4a50ecfe64"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 38, "chunk_start": 1, "chunk_summary": "The prompt defines visual continuity rules for scene analysis, but contains several instances of scenario-dependent pollution, including mandatory race/nationality injection and the explicit prohibition of structured entity IDs in favor of natural language names.", "duration_ms": 232926, "findings": [{"category": "llm_closed_list_instruction", "evidence": "수면·의식불명·기절·휴식·부상·사망", "line_end": 37, "line_start": 9, "recommended_fix": "Replace specific trope lists with a generalized instruction to identify any physical state or environmental detail that remains static across multiple shots.", "severity": "P2", "why_problematic": "The prompt provides a closed list of semantic tropes (sleep, unconsciousness, injury, etc.) and visual features (tattoos, scars, shattered glass) to guide the LLM's identification of 'consistency' elements. This biases the analysis toward these specific examples rather than allowing for arbitrary open-world visual elements found in a scenario."}, {"category": "scenario_dependent_prompt", "evidence": "엔티티 ID(C##, L##, P##) 절대 금지. 보통명사로만 묘사", "line_end": 32, "line_start": 29, "recommended_fix": "Allow and require the use of structured IDs (C##, P##) to ensure that visual descriptions are correctly mapped to the global character and prop definitions.", "severity": "P1", "why_problematic": "The prompt explicitly forbids the use of structured SOT identifiers (C##, P##, etc.) and mandates the use of natural language names for entity tracking. This breaks the link to the global source of truth (SOT) and forces the LLM to rely on scenario-specific strings, which increases the risk of ambiguity and visual drift."}, {"category": "scenario_dependent_prompt", "evidence": "인종/국적 명기: 인물 묘사 시 인종/국적을 반드시 포함", "line_end": 33, "line_start": 33, "recommended_fix": "Remove the mandatory race/nationality requirement from the general scene consistency prompt and ensure these attributes are pulled from the Character SOT profile.", "severity": "P1", "why_problematic": "This instruction forces the LLM to generate race/nationality attributes for every character description. These are core identity traits that should be defined in a structured Character SOT and referenced via ID, not mandated as a general prompt instruction which leads to hallucination or inconsistency with the intended character design."}, {"category": "scenario_dependent_prompt", "evidence": "a young person asleep on a sofa, curled on the left side, one arm tucked under the cheek", "line_end": 22, "line_start": 13, "recommended_fix": "Use more abstract examples or a wider variety of shots to demonstrate the required level of detail without biasing specific spatial configurations.", "severity": "P2", "why_problematic": "The prompt includes overly specific visual examples (e.g., 'curled on the left side', 'left pane of the window is shattered') that can bias the LLM's output toward these specific configurations or level of detail, rather than being driven purely by the scenario text."}], "path": "prompts/_base/scene_consistency/3.202604201230/system.md", "scan_kind": "prompt", "sha256": "9f39d07e4b568f56110813479c94851859d45b6ecad5b90311273d5195e48700"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 25, "chunk_start": 1, "chunk_summary": "The schema defines scene analysis structures, including a hardcoded list of narrative scene types in the description field.", "duration_ms": 30881, "findings": [{"category": "llm_closed_list_instruction", "evidence": "\"scene_type\": {\"type\": \"string\", \"description\": \"normal | montage | flashback | dream | voiceover | transition | other\"}", "line_end": 11, "line_start": 11, "recommended_fix": "Move the narrative mode definitions to a structured World/Director SOT and inject them into the prompt dynamically, or use a formal JSON Schema 'enum' if these are intended to be immutable system constants.", "severity": "P2", "why_problematic": "The LLM is instructed to classify open-world narrative structure into a hardcoded list of cinematic tropes. This limits the system's ability to handle diverse storytelling modes (e.g., 'simulation', 'hallucination', 'meta-commentary') without schema modification. These categories should ideally be defined in a project-level SOT."}], "path": "prompts/_base/scene_director/6.202603251200/analyze_schema.json", "scan_kind": "prompt", "sha256": "d6ab4edccec1ba46ff95deab0075c434da094aa79e1112c55c26db4a50ecfe64"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 25, "chunk_start": 1, "chunk_summary": "The JSON schema defines a generic structure for scene analysis without scenario-specific pollution or problematic semantic string judgments.", "duration_ms": 17342, "findings": [], "path": "prompts/_base/scene_director/8.202604081200/analyze_schema.json", "scan_kind": "prompt", "sha256": "d6ab4edccec1ba46ff95deab0075c434da094aa79e1112c55c26db4a50ecfe64"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 33, "chunk_start": 1, "chunk_summary": "The Scene Director system prompt contains hardcoded narrative tropes and genre-specific examples used to determine entity presence, which biases semantic analysis.", "duration_ms": 31036, "findings": [{"category": "llm_closed_list_instruction", "evidence": "영상통화, CCTV, 방송 화면, 홀로그램, VR, 원격 조종/빙의 기술, 유령, 영혼, 아스트랄 투영, 변장, 쌍둥이 교체, 바디더블, 회상(플래시백), 꿈/환상/상상", "line_end": 33, "line_start": 7, "recommended_fix": "Relocate narrative presence logic and trope-specific rules to a structured 'World Rules' or 'Scenario Context' SOT. The system prompt should be generalized to apply rules provided in the input context rather than hardcoding specific genre tropes.", "severity": "P1", "why_problematic": "The prompt instructs the LLM to classify entity presence based on a hardcoded list of narrative tropes. This is a closed-list semantic classifier for open-world story meaning. Specific tropes like 'astral projection' or 'possession' are genre-dependent and should not be hardcoded in a base system prompt, as they may conflict with the internal logic of specific scenarios (e.g., a world where holograms are physical entities)."}], "path": "prompts/_base/scene_director/6.202603251200/system.md", "scan_kind": "prompt", "sha256": "14e46d5169f3ff71f18c2f27788e101efc7337555d0a460159d5a18502acbb07"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 11, "chunk_start": 1, "chunk_summary": "No actionable findings; the prompt uses generic placeholders and section headers for scene extraction without scenario-specific pollution.", "duration_ms": 3182, "findings": [], "path": "prompts/_base/scene_extractor_v2/15.202604091500/turn0_context.md", "scan_kind": "prompt", "sha256": "f368f86b21e3ba608484cca34a7b58432da01fdf1b1fc07cfde4a96a63627db2"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 52, "chunk_start": 1, "chunk_summary": "The JSON schema defines the structure for scene extraction, including scene types and T2I prompt formatting using standard ID-based referencing (C##, P##, L##).", "duration_ms": 12313, "findings": [], "path": "prompts/_base/scene_extractor_v2/15.202604091500/scene_detail_schema.json", "scan_kind": "prompt", "sha256": "7b30ebe26e94189a1d2dd6d1afed295c041efc40cc2671a688a265d65301117e"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 33, "chunk_start": 1, "chunk_summary": "The prompt uses hardcoded genre-specific tropes to define entity visibility logic, which creates scenario-dependent semantic bias in the base scene director instructions.", "duration_ms": 24545, "findings": [{"category": "llm_closed_list_instruction", "evidence": "영상통화, CCTV, 방송 화면, 홀로그램, VR, 원격 조종/빙의 기술 ... 변장, 쌍둥이 교체, 바디더블 ... 유령 ... 빙의/원격접속", "line_end": 24, "line_start": 8, "recommended_fix": "Abstract visibility and identity rules into a structured world-rule SOT that is injected into the prompt, rather than hardcoding specific trope examples in the base system instructions.", "severity": "P2", "why_problematic": "The prompt defines entity presence/visibility using a closed list of genre-specific tropes (sci-fi, supernatural, etc.). This hardcodes semantic judgment logic that should be derived from a structured world-rule SOT, as different scenarios may have different rules for how these entities are visually represented or identified."}], "path": "prompts/_base/scene_director/7.202604031800/system.md", "scan_kind": "prompt", "sha256": "e9ca2d9d4766d1a05be6666c599622e8e799ca8336fb067a83ab2caaffc3d464"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 52, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 3196, "findings": [], "path": "prompts/_base/scene_extractor_v2/16.202604091800/scene_detail_schema.json", "scan_kind": "prompt", "sha256": "7b30ebe26e94189a1d2dd6d1afed295c041efc40cc2671a688a265d65301117e"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 13, "chunk_start": 1, "chunk_summary": "The prompt provides structural instructions for splitting long scenes based on logical narrative breaks without scenario-specific pollution.", "duration_ms": 6993, "findings": [], "path": "prompts/_base/scene_extractor_v2/15.202604091500/turn1_split_long.md", "scan_kind": "prompt", "sha256": "f17b9125bdb94d8dd7bd8117cf0114b63ad745161c074e6ff1b111f3b3a80002"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 34, "chunk_start": 1, "chunk_summary": "The prompt defines entity visibility logic using a closed list of specific story tropes (holograms, possession, twins, etc.) which may bias analysis of scenarios with different or novel presence mechanics.", "duration_ms": 23580, "findings": [{"category": "llm_closed_list_instruction", "evidence": "영상통화, CCTV, 방송 화면, 홀로그램, VR, 원격 조종/빙의 기술 ... 변장, 쌍둥이 교체, 바디더블 ... 유령 ... (빙의/원격/V.O. 등)", "line_end": 34, "line_start": 8, "recommended_fix": "Generalize the visibility criteria to focus on 'physical presence in the scene's spatial context' and move specific trope-based examples to a scenario-specific configuration or a world-rule SOT injected at runtime.", "severity": "P2", "why_problematic": "The prompt uses a closed list of specific domain tropes (sci-fi tech, supernatural beings, specific plot devices) to define the semantic boundary of 'visibility'. This pollutes the base scene director logic with scenario-specific concepts that may not apply to all genres and should instead be defined in a world-rule SOT."}], "path": "prompts/_base/scene_director/8.202604081200/system.md", "scan_kind": "prompt", "sha256": "c0ccc32eff66642ab081fe58317496e4a28b0f9fce2761af72db227b96682b75"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 11, "chunk_start": 1, "chunk_summary": "No actionable findings; the prompt chunk contains standard structural placeholders for scenario analysis without scenario-specific pollution.", "duration_ms": 2575, "findings": [], "path": "prompts/_base/scene_extractor_v2/16.202604091800/turn0_context.md", "scan_kind": "prompt", "sha256": "f368f86b21e3ba608484cca34a7b58432da01fdf1b1fc07cfde4a96a63627db2"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 70, "chunk_start": 1, "chunk_summary": "The prompt contains scenario-specific character names and prop examples within the entity visibility rules, which pollutes the base system prompt.", "duration_ms": 10609, "findings": [{"category": "scenario_dependent_prompt", "evidence": "\"동녘(강의원)\"", "line_end": 60, "line_start": 60, "recommended_fix": "Replace specific names with generic placeholders like 'Character A (Character B)' or 'Person A'.", "severity": "P1", "why_problematic": "The base system prompt includes specific character names from a particular scenario as examples. This pollutes the model's context and can bias entity extraction or reasoning when applied to different stories."}, {"category": "scenario_dependent_prompt", "evidence": "\"캡슐속 남자들\"", "line_end": 63, "line_start": 63, "recommended_fix": "Use a generic example like 'Object A' or 'Item in a container'.", "severity": "P1", "why_problematic": "Uses a scenario-specific prop/description as an example in a base prompt, leading to domain pollution and potential bias in how the LLM handles similar props in other scenarios."}], "path": "prompts/_base/scene_extractor_v2/16.202604091800/system.md", "scan_kind": "prompt", "sha256": "4f554d5306bcdfddb6b83f99efcc2bc9ddfd50de9991a6a147b30f04bfa2596c"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 52, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 6464, "findings": [], "path": "prompts/_base/scene_extractor_v2/17.202604101200/scene_detail_schema.json", "scan_kind": "prompt", "sha256": "7b30ebe26e94189a1d2dd6d1afed295c041efc40cc2671a688a265d65301117e"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 13, "chunk_start": 1, "chunk_summary": "The prompt provides generic structural instructions for splitting long scenario scenes based on narrative transitions and length constraints without scenario-specific pollution.", "duration_ms": 8769, "findings": [], "path": "prompts/_base/scene_extractor_v2/16.202604091800/turn1_split_long.md", "scan_kind": "prompt", "sha256": "f17b9125bdb94d8dd7bd8117cf0114b63ad745161c074e6ff1b111f3b3a80002"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 92, "chunk_start": 1, "chunk_summary": "The prompt contains scenario-specific examples (Korean/Joseon tropes and specific story plot points) and hardcoded closed-list visual style constraints that limit open-world generation.", "duration_ms": 15541, "findings": [{"category": "scenario_dependent_prompt", "evidence": "예: 한국 배경이면 \"Korean police officer\", \"Korean-style apartment\", \"Korean convenience store\" ... 예: 조선시대면 \"Joseon-era nobleman\", \"tiled-roof wooden structure\" ... (\"police officer\" → \"Korean police officer\")", "line_end": 68, "line_start": 66, "recommended_fix": "Replace specific cultural examples with generic instructions to utilize the 'world_context' or 'era' metadata provided in the input.", "severity": "P1", "why_problematic": "Hardcoded scenario-specific examples (Korean, Joseon) bias the LLM towards specific cultural tropes instead of deriving them from the provided world SOT. This is scenario leakage in a base prompt."}, {"category": "llm_closed_list_instruction", "evidence": "카메라 구도 선택지: low angle / high angle / dutch angle / over-the-shoulder / bird's eye / extreme wide / tight medium ... 색감 선택지: warm amber / cold blue / high contrast / desaturated / golden hour / neon-lit / silhouette backlight", "line_end": 75, "line_start": 74, "recommended_fix": "Inject these options as a dynamic configuration or allow the LLM to suggest appropriate styles based on the scene's mood and world SOT.", "severity": "P1", "why_problematic": "Restricts visual variety to a hardcoded list in a base prompt, preventing scenario-specific or artist-driven styles from being used unless they happen to be in this list."}, {"category": "scenario_dependent_prompt", "evidence": "예: \"캡슐속 남자들\"이 헬기에 타고 있다면 → 캡슐은 헬기에 없으므로 제외", "line_end": 91, "line_start": 91, "recommended_fix": "Use an abstract logic example (e.g., \"If an object is mentioned as being inside a container that is not present in the current scene...\").", "severity": "P2", "why_problematic": "Contains a specific story-based example (\"Men in capsules\", \"Helicopter\") which is scenario pollution in a base prompt used to explain visibility logic."}], "path": "prompts/_base/scene_extractor_v2/15.202604091500/turn_scene_detail.md", "scan_kind": "prompt", "sha256": "9fdd05f4f433c27db905ea8ead5122263d967282a9d0f28f2fdbe26c98b5c841"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 70, "chunk_start": 1, "chunk_summary": "The base system prompt contains scenario-specific character names and prop examples that pollute the generic logic for entity visibility.", "duration_ms": 19160, "findings": [{"category": "scenario_dependent_prompt", "evidence": "\"동녘(강의원)\" → 동녘의 몸만 보이고, 강의원은 다른 곳에 있으므로 강의원 제외", "line_end": 60, "line_start": 60, "recommended_fix": "Use generic placeholders like 'Character A (Character B)' or 'Pilot (Remote Operator)' to explain the visibility rule.", "severity": "P1", "why_problematic": "The base prompt includes specific character names ('동녘', '강의원') and a specific plot mechanic (remote control/possession) as an example. This pollutes the generic scene extraction logic with scenario-specific data that should not exist in a base template."}, {"category": "scenario_dependent_prompt", "evidence": "\"캡슐속 남자들\" → 캡슐이 이 장소에 없으면 제외", "line_end": 63, "line_start": 63, "recommended_fix": "Replace with a generic example like 'The man in the car' (where the car is not in the current scene).", "severity": "P2", "why_problematic": "Uses a specific scenario-derived phrase ('Men in capsules') as a logic example for excluding non-present props, which is scenario-specific pollution in a base prompt."}], "path": "prompts/_base/scene_extractor_v2/15.202604091500/system.md", "scan_kind": "prompt", "sha256": "4f554d5306bcdfddb6b83f99efcc2bc9ddfd50de9991a6a147b30f04bfa2596c"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 11, "chunk_start": 1, "chunk_summary": "No actionable findings; the prompt chunk uses standard placeholders for scenario context without hardcoded scenario-specific pollution or semantic string judgment.", "duration_ms": 3481, "findings": [], "path": "prompts/_base/scene_extractor_v2/17.202604101200/turn0_context.md", "scan_kind": "prompt", "sha256": "f368f86b21e3ba608484cca34a7b58432da01fdf1b1fc07cfde4a96a63627db2"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 13, "chunk_start": 1, "chunk_summary": "The prompt provides generic structural instructions for splitting long scenes based on narrative transitions and script elements without scenario-specific pollution.", "duration_ms": 7649, "findings": [], "path": "prompts/_base/scene_extractor_v2/17.202604101200/turn1_split_long.md", "scan_kind": "prompt", "sha256": "f17b9125bdb94d8dd7bd8117cf0114b63ad745161c074e6ff1b111f3b3a80002"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 52, "chunk_start": 1, "chunk_summary": "The JSON schema defines the structure for scene extraction and T2I prompt generation using allowed ID syntax and standard narrative categories.", "duration_ms": 6908, "findings": [], "path": "prompts/_base/scene_extractor_v2/18.202605150955/scene_detail_schema.json", "scan_kind": "prompt", "sha256": "7b30ebe26e94189a1d2dd6d1afed295c041efc40cc2671a688a265d65301117e"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 102, "chunk_start": 1, "chunk_summary": "The prompt contains scenario-specific examples (Korean/Joseon tropes and a specific story scenario involving capsules/helicopters) used to illustrate logic, which pollutes the base prompt.", "duration_ms": 16401, "findings": [{"category": "scenario_dependent_prompt", "evidence": "예: 한국 배경이면 \"Korean police officer\", \"Korean-style apartment\" ... 예: 조선시대면 \"Joseon-era nobleman\"", "line_end": 78, "line_start": 76, "recommended_fix": "Remove specific cultural examples. Use generic instructions like 'Apply the cultural and historical context defined in the world setting to all descriptions' without hardcoding 'Korean' or 'Joseon' as the target.", "severity": "P1", "why_problematic": "The prompt hardcodes specific cultural and historical tropes as examples for the LLM to follow. This biases the LLM's generation towards these specific patterns and pollutes the base prompt with domain-specific nomenclature that should be derived from the world SOT."}, {"category": "scenario_dependent_prompt", "evidence": "예: \"캡슐속 남자들\"이 헬기에 타고 있다면 -> 캡슐은 헬기에 없으므로 제외", "line_end": 101, "line_start": 101, "recommended_fix": "Replace with a generic example, e.g., 'If a character is inside a vehicle that is not visible in the current shot, do not include the vehicle in the visible entities list.'", "severity": "P2", "why_problematic": "Uses a specific story scenario (men in capsules, helicopter) to explain entity visibility logic, introducing scenario-specific pollution into a base prompt."}], "path": "prompts/_base/scene_extractor_v2/16.202604091800/turn_scene_detail.md", "scan_kind": "prompt", "sha256": "e96ddba245ae4d310d291c8cedd305979fae58186ebcf4d6a901aa9a9d170909"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 70, "chunk_start": 1, "chunk_summary": "The system prompt contains scenario-specific character names and prop examples used to define entity visibility logic.", "duration_ms": 14483, "findings": [{"category": "scenario_dependent_prompt", "evidence": "\"동녘(강의원)\"", "line_end": 60, "line_start": 60, "recommended_fix": "Replace specific character names with generic placeholders such as 'Character A (Character B)'.", "severity": "P1", "why_problematic": "The prompt uses specific character names from a particular scenario to illustrate entity visibility logic. This pollutes the general extraction instructions with scenario-specific data, which can bias the LLM when processing different stories."}, {"category": "scenario_dependent_prompt", "evidence": "\"캡슐속 남자들\"", "line_end": 63, "line_start": 63, "recommended_fix": "Use a generic example like 'Background characters mentioned in dialogue' or 'Generic Object A'.", "severity": "P2", "why_problematic": "Uses a specific scenario-derived prop/phrase as an example for exclusion logic in a base prompt, which should remain scenario-agnostic."}], "path": "prompts/_base/scene_extractor_v2/17.202604101200/system.md", "scan_kind": "prompt", "sha256": "4f554d5306bcdfddb6b83f99efcc2bc9ddfd50de9991a6a147b30f04bfa2596c"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 11, "chunk_start": 1, "chunk_summary": "No actionable findings; the prompt uses generic placeholders for context injection without hardcoded scenario pollution or semantic string judgment.", "duration_ms": 4340, "findings": [], "path": "prompts/_base/scene_extractor_v2/18.202605150955/turn0_context.md", "scan_kind": "prompt", "sha256": "f368f86b21e3ba608484cca34a7b58432da01fdf1b1fc07cfde4a96a63627db2"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 1, "chunk_start": 1, "chunk_summary": "No actionable findings; the file contains a generic template for reference image labeling using dynamic placeholders.", "duration_ms": 2590, "findings": [], "path": "prompts/_base/scene_generator/v1/reference_labels.md", "scan_kind": "prompt", "sha256": "716fcd1b63425a1ecfaef17b53941cffb513939576e2e18744feae428e3f4e00"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 109, "chunk_start": 1, "chunk_summary": "The prompt contains scenario-specific examples and cultural/historical tropes that pollute the base logic and should be moved to a structured world-setting SOT.", "duration_ms": 13252, "findings": [{"category": "scenario_dependent_prompt", "evidence": "예: 한국 배경이면 \"Korean police officer\", \"Korean-style apartment\" ... 예: 조선시대면 \"Joseon-era nobleman\"", "line_end": 85, "line_start": 83, "recommended_fix": "Remove specific cultural examples from the base prompt. Instead, provide a 'World Context' variable in the prompt that contains these descriptive requirements (e.g., 'Nationality: Korean', 'Era: Joseon') derived from the project's metadata.", "severity": "P1", "why_problematic": "The base prompt contains hardcoded cultural and historical examples to guide the LLM's descriptive style. This forces the LLM to perform semantic mapping of a 'world setting' to specific strings like 'Korean' or 'Joseon' using scattered examples rather than a structured World/SOT definition."}, {"category": "scenario_dependent_prompt", "evidence": "예: \"캡슐속 남자들\"이 헬기에 타고 있다면 → 캡슐은 헬기에 없으므로 제외", "line_end": 108, "line_start": 108, "recommended_fix": "Replace the scenario-specific example with a generic one, such as 'If a character is mentioned as being inside a car that is not present in the current scene, do not include the car in the visible entities.'", "severity": "P2", "why_problematic": "This is a concrete story-specific example (likely from a specific project involving 'men in capsules' and 'helicopters') used to illustrate a logic rule. It pollutes the base prompt with scenario-specific entities."}], "path": "prompts/_base/scene_extractor_v2/17.202604101200/turn_scene_detail.md", "scan_kind": "prompt", "sha256": "df067460057e0dcc3ed26fa8babdbf89e384f7863bea96d1d38844cac88b7f37"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 8, "chunk_start": 1, "chunk_summary": "The base scene rules contain hardcoded aesthetic and genre-specific constraints that limit the system to contemporary Korean scenarios.", "duration_ms": 7725, "findings": [{"category": "scenario_dependent_prompt", "evidence": "realistic contemporary-to-near-future Korean aesthetics", "line_end": 5, "line_start": 5, "recommended_fix": "Move aesthetic and temporal constraints to a structured World SOT or scenario-specific configuration that is injected at runtime.", "severity": "P1", "why_problematic": "Hardcodes a specific cultural and temporal setting into a base prompt. This prevents the pipeline from supporting arbitrary scenarios (e.g., historical, Western, or sci-fi) without modifying core prompt files."}, {"category": "scenario_dependent_prompt", "evidence": "fantasy armor, or medieval architecture", "line_end": 6, "line_start": 6, "recommended_fix": "Move genre-specific negative constraints to a style/genre configuration block or a dynamic rule-set.", "severity": "P1", "why_problematic": "Hardcodes genre-specific negative constraints. These tropes are only 'anachronistic' if the scenario is contemporary; they would be valid in other settings, making this prompt scenario-polluted."}], "path": "prompts/_base/scene_generator/v1/scene_rules_en.md", "scan_kind": "prompt", "sha256": "a6784e29342462a9e7a9cf7f8df8e7ebaeeb5ea296caee90b8562defd22dc568"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 8, "chunk_start": 1, "chunk_summary": "The base scene rules contain hardcoded setting and genre constraints (Modern Korea, anti-fantasy/historical tropes) that should be externalized to a world-state or genre-specific SOT.", "duration_ms": 7948, "findings": [{"category": "scenario_dependent_prompt", "evidence": "동시대~근미래 한국 기준 ... 사극풍 복식, 판타지 갑옷, 중세풍 건축 금지", "line_end": 6, "line_start": 5, "recommended_fix": "Move setting-specific constraints and genre-based negative prompts to a structured World SOT or Scenario Configuration that is injected into the prompt template dynamically.", "severity": "P1", "why_problematic": "These lines hardcode a specific setting (Modern Korea) and genre-specific negative constraints (no fantasy/history) into a base prompt. This prevents the pipeline from being used for diverse scenarios or different cultural contexts without manual prompt modification."}], "path": "prompts/_base/scene_generator/v1/scene_rules_ko.md", "scan_kind": "prompt", "sha256": "88ea6d5dd050060178279c1899161b5a837221c25ff3a4f7382779e38320e7e9"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 1, "chunk_start": 1, "chunk_summary": "No actionable findings; the file contains a generic template for reference image labeling using placeholders.", "duration_ms": 2630, "findings": [], "path": "prompts/_base/scene_generator/v2/reference_labels.md", "scan_kind": "prompt", "sha256": "716fcd1b63425a1ecfaef17b53941cffb513939576e2e18744feae428e3f4e00"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 70, "chunk_start": 1, "chunk_summary": "The system prompt contains scenario-specific logic for entity visibility (possession and containers) hardcoded as string pattern examples, which biases the LLM's semantic judgment of entity membership.", "duration_ms": 20235, "findings": [{"category": "scenario_dependent_prompt", "evidence": "\"<visible_body_name>(<remote_identity_name>)\"", "line_end": 60, "line_start": 60, "recommended_fix": "Remove the hardcoded string pattern example and instruct the LLM to rely solely on the structured visual_world_rules provided in the context for determining visibility in possession cases.", "severity": "P1", "why_problematic": "This hardcodes a specific sci-fi/fantasy trope (possession) and a naming convention into the base system prompt to drive entity visibility logic. It instructs the LLM to perform semantic exclusion based on a specific string pattern, which should instead be derived from a structured SOT or scenario-specific rules."}, {"category": "scenario_dependent_prompt", "evidence": "\"<container descriptor> 안의 인물들\"", "line_end": 63, "line_start": 63, "recommended_fix": "Move container-based visibility logic to a structured rule set or handle it via general spatial reasoning instructions rather than specific string patterns.", "severity": "P1", "why_problematic": "This uses a specific natural language pattern to define entity exclusion logic. This is scenario-dependent (e.g., characters inside a vehicle, screen, or container) and should be handled by structured scene analysis or general spatial reasoning rather than a hardcoded string pattern in the base system prompt."}], "path": "prompts/_base/scene_extractor_v2/18.202605150955/system.md", "scan_kind": "prompt", "sha256": "acf7ef11303d21772e3caa534a4c7c76b02a391b7de8574ceb0e881072ca1874"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 13, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 18409, "findings": [], "path": "prompts/_base/scene_extractor_v2/18.202605150955/turn1_split_long.md", "scan_kind": "prompt", "sha256": "f17b9125bdb94d8dd7bd8117cf0114b63ad745161c074e6ff1b111f3b3a80002"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 8, "chunk_start": 1, "chunk_summary": "The prompt contains hardcoded genre-specific exclusions that limit the system's open-world flexibility and conflict with dynamic world rules.", "duration_ms": 8733, "findings": [{"category": "scenario_dependent_prompt", "evidence": "fantasy armor, or medieval architecture", "line_end": 6, "line_start": 6, "recommended_fix": "Remove specific genre tropes from the base rules. Rely on the 'world rules' or 'style guide' to define era-appropriate constraints and exclusions dynamically.", "severity": "P1", "why_problematic": "These are domain-specific trope exclusions hardcoded into a base prompt. This creates a conflict if the 'world rules' (referenced in line 5) define a fantasy or historical setting, preventing the generator from being truly open-world."}], "path": "prompts/_base/scene_generator/v2/scene_rules_en.md", "scan_kind": "prompt", "sha256": "5bf6b0dac84a14275eb5f6ce71888aed7e0743c171004a3b143e1a9493581a0b"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 8, "chunk_start": 1, "chunk_summary": "The prompt contains hardcoded genre-specific exclusions that conflict with the intended use of a world-building SOT.", "duration_ms": 10311, "findings": [{"category": "scenario_dependent_prompt", "evidence": "사극풍 복식, 판타지 갑옷, 중세풍 건축 금지", "line_end": 6, "line_start": 6, "recommended_fix": "Remove specific genre tropes from the base rules and delegate style/era constraints to the structured world rules SOT.", "severity": "P1", "why_problematic": "This line hardcodes specific genre and era exclusions (historical drama clothing, fantasy armor, medieval architecture) into the base scene generation rules. This is scenario-specific pollution that should be managed by the world-building SOT or style guide mentioned in line 5, rather than being globally prohibited."}], "path": "prompts/_base/scene_generator/v2/scene_rules_ko.md", "scan_kind": "prompt", "sha256": "e355584a8818267261533a37e10c4d28a131ef3da9ea1fe81f047087d7697856"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 26, "chunk_start": 1, "chunk_summary": "The prompt contains hardcoded genre and cultural trope lists used to classify scenario style, which biases open-world visual generation.", "duration_ms": 19861, "findings": [{"category": "llm_closed_list_instruction", "evidence": "현대, 근미래, SF, 중세, 조선시대, 고대 등 ... 한국, 일본, 미국, 유럽, 우주, 가상세계 등 ... 현대복, 군복, 갑옷, 한복, 우주복 등", "line_end": 10, "line_start": 5, "recommended_fix": "Replace the hardcoded examples with instructions to extract these attributes directly from the scenario text or a provided structured World SOT.", "severity": "P1", "why_problematic": "The prompt uses specific cultural and historical examples (e.g., Joseon Dynasty, Hanbok) as classification anchors for style generation. This creates a bias toward these specific tropes and limits the system's ability to handle arbitrary open-world scenarios without pollution from these predefined categories."}], "path": "prompts/_base/scene_generator/v1/style_rules_generator.md", "scan_kind": "prompt", "sha256": "45cdd96820cd73fe19915326811a36b83f7e5b4abc1d93a8a4d563673b8d24d6"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 109, "chunk_start": 1, "chunk_summary": "The prompt contains logic for semantic routing based on visual interpretation and instructions for the LLM to derive regional/temporal markers from scenario text.", "duration_ms": 26190, "findings": [{"category": "semantic_string_judgment", "evidence": "얼굴/형태 식별 불가 인물 — short_id 사용 금지", "line_end": 38, "line_start": 34, "recommended_fix": "Retain the short_id for entity tracking and use a separate boolean flag or visual modifier (e.g., 'is_silhouette: true') in the structured output to control reference attachment logic.", "severity": "P1", "why_problematic": "This instructs the LLM to omit entity IDs (C##O##) based on its semantic interpretation of the scene (e.g., silhouettes, shadows). This directly controls reference attachment routing; if the ID is omitted, the downstream T2I pipeline cannot attach the character's reference image, breaking visual consistency based on a subjective LLM judgment."}, {"category": "scenario_dependent_prompt", "evidence": "<region-derived demonym> police officer`, `<region-style apartment>", "line_end": 85, "line_start": 83, "recommended_fix": "Inject structured world-building attributes (Region, Era, Culture) from a central SOT into the prompt variables instead of asking the LLM to derive them from the scenario text.", "severity": "P1", "why_problematic": "The prompt instructs the LLM to 'derive' regional and temporal markers from scenario 'cues' and inject them into the prompt. This relies on open-world LLM interpretation of the setting rather than using a structured World SOT (e.g., 'Region: Joseon', 'Era: 18th Century'), leading to inconsistent visual branding across scenes."}, {"category": "llm_closed_list_instruction", "evidence": "warm amber / cold blue / high contrast / desaturated / golden hour / neon-lit / silhouette backlight", "line_end": 92, "line_start": 91, "recommended_fix": "Pass the available style and camera options as a dynamic variable `{available_styles}` sourced from a project-level configuration.", "severity": "P2", "why_problematic": "Hardcoded lists of visual styles and lighting options within the prompt limit the visual language to a fixed set of tropes. These should be externalized to a style SOT or configuration to allow for project-specific visual direction."}], "path": "prompts/_base/scene_extractor_v2/18.202605150955/turn_scene_detail.md", "scan_kind": "prompt", "sha256": "a32ab2a3e97d6e51050ae5abda5d9ee002879725bc1ee1d626e9436b3d4c03d2"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 26, "chunk_start": 1, "chunk_summary": "The prompt contains hardcoded domain trope lists for scenario analysis that should be provided via a structured SOT.", "duration_ms": 14471, "findings": [{"category": "llm_closed_list_instruction", "evidence": "현대, 근미래, SF, 중세, 조선시대, 고대 등 ... 한국, 일본, 미국, 유럽, 우주, 가상세계 등 ... 리얼리즘, 판타지, 사이버펑크, 누아르, 코미디 등", "line_end": 10, "line_start": 5, "recommended_fix": "Remove hardcoded trope lists and replace them with dynamically injected categories or a reference to a structured world-building schema provided in the context.", "severity": "P1", "why_problematic": "The prompt provides hardcoded examples for era, region, genre, and style classification. This biases the LLM's analysis toward specific cultural and genre tropes (e.g., Joseon era, Hanbok) and creates maintenance debt. These categories should be injected from a structured Source of Truth (SOT) to ensure consistency across different projects and avoid regional/genre bias in the base prompt."}], "path": "prompts/_base/scene_generator/v2/style_rules_generator.md", "scan_kind": "prompt", "sha256": "45cdd96820cd73fe19915326811a36b83f7e5b4abc1d93a8a4d563673b8d24d6"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 8, "chunk_start": 1, "chunk_summary": "No actionable findings; the schema defines a structural requirement for scene summaries without scenario-specific pollution or semantic string judgment.", "duration_ms": 3274, "findings": [], "path": "prompts/_base/scene_summary/1.202603231200/summary_schema.json", "scan_kind": "prompt", "sha256": "3eebe99502b2b118d100b562767de2fb26fe2ebe9b1f4759ce47bc97faaaeca3"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 19, "chunk_start": 1, "chunk_summary": "No actionable findings; the prompt is a generic template using placeholders for screenplay extraction without hardcoded scenario pollution or semantic string judgments.", "duration_ms": 7954, "findings": [], "path": "prompts/_base/scene_stills/v2/user.md", "scan_kind": "prompt", "sha256": "b1bb4ffe42ae8067c44aa187fc08c411486fee93a4b97d13cd68210f4b430b3d"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 11, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 3904, "findings": [], "path": "prompts/_base/scene_summary/1.202603231200/system.md", "scan_kind": "prompt", "sha256": "a2bcc469aceb162567f95b226080394e40580343556be69f8fa67709f715d10f"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 20, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 2376, "findings": [], "path": "prompts/_base/scene_verify/1.202603231200/verify_schema.json", "scan_kind": "prompt", "sha256": "3fc6a5b81451494904a5435dfac61376b52940b9fe0b500dc2b1fa292085de45"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 45, "chunk_start": 1, "chunk_summary": "The system prompt provides structural instructions for extracting scene stills from a screenplay, using placeholders for language and emphasizing continuity and visual descriptions without hardcoding scenario-specific data or using pattern-based semantic routing.", "duration_ms": 13021, "findings": [], "path": "prompts/_base/scene_stills/v2/system.md", "scan_kind": "prompt", "sha256": "7848addcddf180703f4da529dd5ca23311af3e4601040cda8a01c329cb9179da"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 39, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 4533, "findings": [], "path": "prompts/_base/shot_cinematography/1.202603281644/cine_schema.json", "scan_kind": "prompt", "sha256": "372fd1f6b4cd399324f2b4fae119af028284e69783a824d1f96a717b392dea6d"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 29, "chunk_start": 1, "chunk_summary": "The prompt template contains a hardcoded visual style string in its instructions, which biases the LLM and creates a dependency on a specific global style suffix.", "duration_ms": 20328, "findings": [{"category": "scenario_dependent_prompt", "evidence": "Do NOT include \"Photorealistic cinematic still.\" — it will be added separately", "line_end": 12, "line_start": 12, "recommended_fix": "Replace the hardcoded string with a dynamic placeholder or a generic instruction to remove style-related suffixes that are handled by the post-processing/assembly layer.", "severity": "P1", "why_problematic": "Hardcoding a specific visual style string ('Photorealistic cinematic still') in the base translation prompt biases the LLM's semantic understanding of the scene toward photorealism. It also creates a tight coupling between the prompt logic and a specific global style suffix that should be managed via a structured style SOT or dynamic variable."}], "path": "prompts/_base/scene_image/2.202603251100/translate_prompt.md", "scan_kind": "prompt", "sha256": "87acaae286c16277ea90d909bed40342973d38f26c855fb09de14578f7534410"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 31, "chunk_start": 1, "chunk_summary": "The translation prompt contains hardcoded style prefixes, demographic examples, and shot-type restrictions that bias and limit the visual output of the image generation pipeline.", "duration_ms": 26515, "findings": [{"category": "scenario_dependent_prompt", "evidence": "e.g., \"a young Korean man\", \"an elderly woman\"", "line_end": 5, "line_start": 5, "recommended_fix": "Use abstract placeholders or remove the examples, ensuring character descriptions are strictly derived from the provided {ref_roles_text}.", "severity": "P2", "why_problematic": "Provides specific demographic examples that can bias the LLM's character descriptions toward a specific ethnicity or age group, rather than relying on the provided character metadata or reference roles."}, {"category": "scenario_dependent_prompt", "evidence": "Do NOT include camera angles or shot types (no \"close-up\", \"wide shot\", \"medium shot\")", "line_end": 10, "line_start": 10, "recommended_fix": "Allow shot types if they are present in the source prompt or manage them through a structured field in the prompt assembly.", "severity": "P1", "why_problematic": "Hard-strips cinematic intent from the prompt using a closed list of shot types. This is a semantic decision that limits the visual variety of the output and should be controlled by the scenario analysis or a specific shot-type SOT."}, {"category": "scenario_dependent_prompt", "evidence": "Keep \"Photorealistic cinematic still.\" at the beginning", "line_end": 11, "line_start": 11, "recommended_fix": "Move the style prefix to a configuration variable or include it within the {style_context} variable.", "severity": "P1", "why_problematic": "Hardcodes a specific visual style (photorealism) into the base translation prompt, preventing the pipeline from supporting other styles (e.g., stylized, illustrative) without modifying the base prompt."}], "path": "prompts/_base/scene_image/1.202603181600/translate_prompt.md", "scan_kind": "prompt", "sha256": "69eee740ad09dcf011198809308df6603cba9fa1a103bca31afa4442c254f5a8"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 45, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 2900, "findings": [], "path": "prompts/_base/shot_dependency/1.202603281907/dependency_schema.json", "scan_kind": "prompt", "sha256": "96cfc2a753557c9dd9a966a801067ea87312c6d9efc1f44826affa4d06557e91"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 16, "chunk_start": 1, "chunk_summary": "The system prompt for scene verification contains hardcoded logic for specific narrative tropes like possession, which should be handled via external world rules.", "duration_ms": 12171, "findings": [{"category": "scenario_dependent_prompt", "evidence": "빙의/영혼 상태: 다른 인물의 몸에 들어간 경우, 원래 몸은 visible=false, 빙의된 몸은 visible=true", "line_end": 7, "line_start": 7, "recommended_fix": "Move trope-specific visibility rules to a scenario-specific 'World Rules' or 'SOT' section that is appended to the prompt only when relevant.", "severity": "P2", "why_problematic": "This hardcodes a specific narrative trope (possession/soul swap) into the base verification logic. Such domain-specific rules should be injected via a structured World Rule SOT rather than being part of the global system prompt, as they may bias or confuse the LLM in scenarios where these mechanics do not apply."}], "path": "prompts/_base/scene_verify/1.202603231200/system.md", "scan_kind": "prompt", "sha256": "0fb80ccb798115177554a94674cd9f2e24bd77573c9032454e08f7c2033daf0b"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 10, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 5686, "findings": [], "path": "prompts/_base/shot_cinematography/1.202603281644/user.md", "scan_kind": "prompt", "sha256": "0e2703c156ca88fba4e9c0bafbdc004ecaeed6e6b4753a96c6f87c14aabd9395"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 8, "chunk_start": 1, "chunk_summary": "No actionable findings; the prompt provides generic structural instructions for shot dependency analysis without scenario-specific pollution or closed-list semantic classifiers.", "duration_ms": 3801, "findings": [], "path": "prompts/_base/shot_dependency/1.202603281907/user.md", "scan_kind": "prompt", "sha256": "12e3d3b0b1a32ccf46ea21de6814d3930dc22db25940b40e3b24257a159aaa5d"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 16, "chunk_start": 1, "chunk_summary": "No actionable findings; the system prompt defines generic shot dependency logic for visual consistency without scenario-specific pollution or hardcoded semantic lists.", "duration_ms": 5639, "findings": [], "path": "prompts/_base/shot_dependency/1.202603281907/system.md", "scan_kind": "prompt", "sha256": "48baa6819e70f3aaa8c611114eae2436be5975e525f1f84ff42bcb804b92657e"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 35, "chunk_start": 1, "chunk_summary": "The prompt includes a blacklist of natural language phrases designed to bypass a brittle downstream substring-based validator that controls render success.", "duration_ms": 29801, "findings": [{"category": "semantic_string_judgment", "evidence": "NEVER produce the phrases \"from the reference\", \"from Reference image N\", \"from a reference image\" ... These phrases trigger a downstream phantom-reference validator and will fail the render", "line_end": 26, "line_start": 23, "recommended_fix": "Replace the downstream substring-based 'phantom-reference' validator with a semantic LLM-based check or validate against structured metadata rather than natural language prompt content.", "severity": "P1", "why_problematic": "The pipeline relies on a brittle substring-based validator to fail/pass renders based on natural language output. This forces the prompt to maintain a blacklist of phrases, which is a form of pattern-based semantic judgment that can lead to false positives in valid story descriptions."}], "path": "prompts/_base/scene_image/3.202605101200/translate_prompt.md", "scan_kind": "prompt", "sha256": "7b0e7b75cbaccc81a2777037a2609d31a17197a7002f1c8f37f5deb851fb8b71"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 669, "chunk_start": 1, "chunk_summary": "The prompt contains several closed-list semantic classifiers for demographics, violence tropes, and keyword-based logic routing for framing and motion, which should be driven by structured world/rule SOTs.", "duration_ms": 278309, "findings": [{"category": "llm_closed_list_instruction", "evidence": "Asian, East Asian, South Asian, Southeast Asian, Black, Middle Eastern, Hispanic, Caucasian", "line_end": 424, "line_start": 403, "recommended_fix": "Move demographic classification labels to a structured visual world rule SOT and have the prompt reference those categories dynamically.", "severity": "P1", "why_problematic": "The prompt provides a hardcoded list of demographic and ethnic labels for the LLM to use when describing characters. This should be part of a structured world/rule SOT rather than being hardcoded in the system prompt."}, {"category": "llm_closed_list_instruction", "evidence": "attacker / assailant / aggressor / predator / pursuer, tearing flesh, ripped skin, gaping wound, blood spray, spurting blood", "line_end": 503, "line_start": 482, "recommended_fix": "Remove hardcoded trope lists and instead provide high-level instructions to match the tone and intensity defined in the scenario or genre SOT.", "severity": "P1", "why_problematic": "The prompt provides a specific 'vocabulary palette' and genre-based constraints for violence. This biases the LLM towards specific tropes and descriptors instead of allowing the world/genre SOT to define the appropriate tone."}, {"category": "semantic_string_judgment", "evidence": "Focus on / close on / tight on / detail on", "line_end": 48, "line_start": 48, "recommended_fix": "Use structured framing metadata to decide entity representation rather than parsing natural language focus phrases.", "severity": "P1", "why_problematic": "Instructs the LLM to switch from entity IDs to common nouns based on the presence of specific natural language phrasing patterns, which is a form of pattern-based semantic routing."}, {"category": "llm_closed_list_instruction", "evidence": "사진, 포스터, 그림, 초상화, 모니터, TV, 거울, 창유리 반사, 투영", "line_end": 119, "line_start": 119, "recommended_fix": "Define media representation status in the entity or scene schema rather than relying on a hardcoded list of nouns in the prompt.", "severity": "P1", "why_problematic": "Provides a closed list of media types to determine whether an entity is a 2D representation or a physical person, which affects ID usage routing."}, {"category": "semantic_string_judgment", "evidence": "close-up, CU, MCU, ECU, XCU, extreme close-up, 클로즈업, 손가락이, 손이, 눈이, 얼굴이", "line_end": 341, "line_start": 339, "recommended_fix": "Rely on structured shot metadata (framing_scale) rather than scanning natural language descriptions for body parts or abbreviations.", "severity": "P1", "why_problematic": "Uses a list of specific body part keywords and shot type abbreviations to determine the framing scale. This is keyword-based routing of visual logic."}, {"category": "semantic_string_judgment", "evidence": "running, riding, walking, moving, chasing, pedaling, rowing", "line_end": 533, "line_start": 529, "recommended_fix": "Use structured action tags or motion metadata to trigger reframing strategies instead of keyword matching over scenario text.", "severity": "P1", "why_problematic": "Uses a list of specific motion verbs to trigger a 'Reframe' strategy for complex scenes. This is keyword-based routing of story/visual logic."}], "path": "prompts/_base/scene_detail/13.202605022141/system.md", "scan_kind": "prompt", "sha256": "bd52343fbc9124efa30e5b1d7f6c01ac3ce9d04e0109a517ea410346d04c2b17"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 10, "chunk_start": 1, "chunk_summary": "The cinematography system prompt contains a hardcoded narrative arc that biases shot selection toward a specific dramatic structure.", "duration_ms": 15309, "findings": [{"category": "scenario_dependent_prompt", "evidence": "긴장 고조 → 폭발 → 감정 정리", "line_end": 5, "line_start": 5, "recommended_fix": "Generalize the instruction to 'Consider the emotional curve of the episode as defined in the scenario context' and remove the hardcoded sequence of beats.", "severity": "P1", "why_problematic": "The prompt defines the 'emotional curve' using a specific three-stage dramatic arc (tension-explosion-resolution). This forces the DP agent to apply a specific narrative framework to all scenarios, which is a form of scenario-specific pollution that should instead be derived from the actual story content or a structured SOT."}], "path": "prompts/_base/shot_cinematography/1.202603281644/system.md", "scan_kind": "prompt", "sha256": "6dab0ae518fa9afbc0765dd5483006880024038b649b86c0bd89985d79f5e858"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 48, "chunk_start": 1, "chunk_summary": "The shot dependency schema contains scenario-specific prop and character state examples in field descriptions that bias the LLM's semantic analysis.", "duration_ms": 17162, "findings": [{"category": "scenario_dependent_prompt", "evidence": "Ignore the blood on the floor.", "line_end": 28, "line_start": 28, "recommended_fix": "Replace with generic examples of transient environmental details.", "severity": "P2", "why_problematic": "Hardcoded scenario-specific prop example in a base schema description biases the LLM toward specific genres or content types."}, {"category": "scenario_dependent_prompt", "evidence": "immobile characters (dead/unconscious bodies)", "line_end": 33, "line_start": 33, "recommended_fix": "Use generic descriptions for immobile entities such as 'characters in a fixed state'.", "severity": "P2", "why_problematic": "Hardcoded domain trope used to define character state logic in a base schema."}], "path": "prompts/_base/shot_dependency_t2i/4.202604141200/schema.json", "scan_kind": "prompt", "sha256": "2d312ae0285a109344860368af584c3bf03391ecc6b98147eba6f55996319124"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 63, "chunk_start": 1, "chunk_summary": "The schema defines the structure for shot dependency analysis, including technical enums for reference usage and generic examples for visual element descriptions, with no scenario-specific pollution or pattern-based semantic routing found.", "duration_ms": 12916, "findings": [], "path": "prompts/_base/shot_dependency_t2i/7.202605151200/schema.json", "scan_kind": "prompt", "sha256": "edbaf7ecd82b9f03edd7c25f2e50dffb5123e9d8e47b18360858ffa8f4eac42e"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 48, "chunk_start": 1, "chunk_summary": "The schema contains a scenario-specific example in a field description that could bias LLM output.", "duration_ms": 21094, "findings": [{"category": "scenario_dependent_prompt", "evidence": "Ignore the blood on the floor.", "line_end": 28, "line_start": 28, "recommended_fix": "Replace the specific example with a generic one, such as 'Ignore the specific furniture' or 'Ignore the lighting color'.", "severity": "P2", "why_problematic": "The example uses a specific narrative prop ('blood on the floor') which pollutes the base schema with scenario-specific imagery, potentially biasing the LLM toward certain genres or specific visual states during shot dependency analysis."}], "path": "prompts/_base/shot_dependency_t2i/3.202604101200/schema.json", "scan_kind": "prompt", "sha256": "e1110749ca0f6123bfd92fba4d812142d41ee64c0ef8de54150dbce893fa4819"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 54, "chunk_start": 1, "chunk_summary": "The system prompt for shot dependency analysis contains scenario-specific examples and tropes (crime/thriller elements) that pollute the general instruction set.", "duration_ms": 21662, "findings": [{"category": "scenario_dependent_prompt", "evidence": "\"the woman in red\", \"blood stains\", \"broken glass\", \"police tape and detectives\", \"stairwell\"", "line_end": 49, "line_start": 37, "recommended_fix": "Replace scenario-specific examples with generic placeholders or abstract descriptions (e.g., 'the person in the background', 'the object on the table') to maintain genre and scenario neutrality.", "severity": "P1", "why_problematic": "The prompt uses specific story tropes (crime/thriller) and concrete props/places as examples for visual descriptions and constraints. This introduces scenario-specific pollution into a general pipeline component, potentially biasing the LLM's output for arbitrary open-world scenarios that do not fit these tropes."}], "path": "prompts/_base/shot_dependency_t2i/3.202604101200/system.md", "scan_kind": "prompt", "sha256": "bcd7a786e015d61be9a20b6bcbe8f65ca80edf63d458e9e6ca7b9a6e4d23f3a5"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 30, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 2550, "findings": [], "path": "prompts/_base/shot_director/1.202603301500/analyze_schema.json", "scan_kind": "prompt", "sha256": "08294dc471c016f741a49298cd16b4273ae0b90c735ffd3271bf6cd516064692"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 19, "chunk_start": 1, "chunk_summary": "The prompt provides a clean, structured template for shot-level entity visibility and variant analysis without scenario-specific pollution.", "duration_ms": 5998, "findings": [], "path": "prompts/_base/shot_director/1.202603301500/analyze.md", "scan_kind": "prompt", "sha256": "bada04f94da97c924810efb1fddf90e196b64ed9128cb3f95edc757027999014"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 48, "chunk_start": 1, "chunk_summary": "The schema contains scenario-specific examples and tropes in field descriptions that bias LLM output for shot continuity.", "duration_ms": 20254, "findings": [{"category": "scenario_dependent_prompt", "evidence": "E.g. 'Ignore the standing man by the door.'", "line_end": 28, "line_start": 28, "recommended_fix": "Replace the concrete example with a generic description of the expected string format or a more abstract example like 'Ignore specific foreground objects or characters that have moved.'", "severity": "P2", "why_problematic": "The description uses a concrete story-specific example to instruct the LLM, which can bias the model towards specific character/prop types or phrasing styles instead of remaining scenario-agnostic."}, {"category": "scenario_dependent_prompt", "evidence": "immobile characters (dead/unconscious bodies)", "line_end": 33, "line_start": 33, "recommended_fix": "Use more neutral or comprehensive examples for immobile characters, such as 'characters who remain stationary between shots (e.g., sleeping, sitting, or otherwise unmoving).'", "severity": "P2", "why_problematic": "The instruction includes a specific domain trope ('dead/unconscious bodies') as the primary example of 'immobile characters'. This biases the LLM's semantic understanding of character continuity towards violent or specific states, potentially missing other immobile states (e.g., sleeping, sitting still)."}], "path": "prompts/_base/shot_dependency_t2i/5.202604201700/schema.json", "scan_kind": "prompt", "sha256": "3a74b98165eeee59e8366e1b6c281594b7ba5e510491bc78d4f28ab0b4778a41"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 19, "chunk_start": 1, "chunk_summary": "The prompt template provides a structural framework for shot-level entity and variant analysis without scenario-specific pollution or hardcoded semantic classifiers.", "duration_ms": 5594, "findings": [], "path": "prompts/_base/shot_director/2.202604031800/analyze.md", "scan_kind": "prompt", "sha256": "bada04f94da97c924810efb1fddf90e196b64ed9128cb3f95edc757027999014"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 30, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 2296, "findings": [], "path": "prompts/_base/shot_director/3.202605101200/analyze_schema.json", "scan_kind": "prompt", "sha256": "92ed45caf3f0f85bfa823b37c90ca389abbed3fd23948158cbeb86025521dbcb"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 30, "chunk_start": 1, "chunk_summary": "The prompt contains scenario-specific character names and transformation examples that pollute the base system instruction.", "duration_ms": 8913, "findings": [{"category": "scenario_dependent_prompt", "evidence": "백련이 요괴화된 후이면 → C01 대신 C02", "line_end": 22, "line_start": 20, "recommended_fix": "Replace specific character names and transformation descriptions with generic placeholders (e.g., 'Character A', 'Transformation State') to ensure the prompt is reusable across different scenarios.", "severity": "P1", "why_problematic": "The system prompt uses a specific character name ('백련') and a specific plot event ('요괴화' - monster transformation) as examples. This introduces scenario-specific pollution into a base pipeline prompt, which should remain agnostic of the story content and rely on structured SOT data."}], "path": "prompts/_base/shot_director/1.202603301500/system.md", "scan_kind": "prompt", "sha256": "0c3045ce2f16e1e6dde41099d05cb54c7575f5578699c372d7dbd8787d299e34"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 19, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 4930, "findings": [], "path": "prompts/_base/shot_director/3.202605101200/analyze.md", "scan_kind": "prompt", "sha256": "637e8b7ffe25d85477a81053e7c14b5a338580755092c8e9269d277773acf28b"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 31, "chunk_start": 1, "chunk_summary": "The prompt contains scenario-specific character names and story tropes as examples for ID resolution logic.", "duration_ms": 7880, "findings": [{"category": "scenario_dependent_prompt", "evidence": "백련이 요괴화된 후이면 → C01 대신 C02... 백련이 아직 변형 전이면 → C01", "line_end": 23, "line_start": 21, "recommended_fix": "Replace specific character names and story-specific transformations with abstract placeholders like 'Character A' and 'Variant Form B' to maintain scenario-agnostic logic.", "severity": "P1", "why_problematic": "The prompt uses a specific character name ('백련') and a specific story trope ('요괴화' - monster transformation) to instruct the LLM on ID mapping. This pollutes the base prompt with scenario-specific data that should be derived from the provided SOT, potentially biasing the LLM's interpretation of other scenarios."}], "path": "prompts/_base/shot_director/2.202604031800/system.md", "scan_kind": "prompt", "sha256": "75690487f0fc6810f35a9fc26b86fb8c4e8b63025e4ac386713128c5ca9444ac"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 112, "chunk_start": 1, "chunk_summary": "The system prompt contains genre-specific logic and examples (crime/thriller tropes) for handling character states, which should be generalized or moved to a structured SOT.", "duration_ms": 28203, "findings": [{"category": "scenario_dependent_prompt", "evidence": "죽은/의식불명/움직이지 않는 인물 처리 (매우 중요)", "line_end": 70, "line_start": 61, "recommended_fix": "Replace the specific state checks with a generic instruction to check for a 'static_status' field in the entity metadata provided in the context.", "severity": "P1", "why_problematic": "The prompt hardcodes specific story tropes (death, unconsciousness) as a special logic branch for visual continuity. This forces the LLM to perform semantic classification based on a closed list of states that may not apply to all scenarios and should instead be derived from a structured 'static/dynamic' property in the SOT."}, {"category": "scenario_dependent_prompt", "evidence": "Ignore the detective walking in. Keep the body on the floor as-is.", "line_end": 97, "line_start": 97, "recommended_fix": "Use neutral, generic examples like 'the person entering the room' or 'the object on the floor'.", "severity": "P2", "why_problematic": "The example uses scenario-specific roles ('detective') and states ('body on the floor'), which can bias the LLM toward specific narrative genres during shot analysis."}, {"category": "scenario_dependent_prompt", "evidence": "the body lying face-down on the floor\", \"the unconscious man slumped against the wall", "line_end": 111, "line_start": 111, "recommended_fix": "Use abstract placeholders or generic descriptions for stationary entities in examples.", "severity": "P2", "why_problematic": "Provides specific visual descriptions of death and injury as templates for the 'keep_elements' field, polluting the prompt with domain-specific tropes."}], "path": "prompts/_base/shot_dependency_t2i/5.202604201700/system.md", "scan_kind": "prompt", "sha256": "34132df6e045a8a6b3d80bf8b739c1a3909494262e39226c368c0a7e3c721686"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 30, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 3249, "findings": [], "path": "prompts/_base/shot_director/4.202605121200/analyze_schema.json", "scan_kind": "prompt", "sha256": "92ed45caf3f0f85bfa823b37c90ca389abbed3fd23948158cbeb86025521dbcb"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 30, "chunk_start": 1, "chunk_summary": "No actionable findings; the schema defines technical ID structures for shot analysis without scenario-specific pollution or semantic string judgment.", "duration_ms": 3729, "findings": [], "path": "prompts/_base/shot_director/5.202605131800/analyze_schema.json", "scan_kind": "prompt", "sha256": "92ed45caf3f0f85bfa823b37c90ca389abbed3fd23948158cbeb86025521dbcb"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 19, "chunk_start": 1, "chunk_summary": "No actionable findings; the prompt is a generic template for shot-level entity and variant analysis using structured context blocks.", "duration_ms": 3949, "findings": [], "path": "prompts/_base/shot_director/5.202605131800/analyze.md", "scan_kind": "prompt", "sha256": "637e8b7ffe25d85477a81053e7c14b5a338580755092c8e9269d277773acf28b"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 19, "chunk_start": 1, "chunk_summary": "The prompt is a generic template for scene analysis and shot-level entity visibility determination, using placeholders for dynamic context and providing structural instructions without scenario-specific pollution.", "duration_ms": 8940, "findings": [], "path": "prompts/_base/shot_director/4.202605121200/analyze.md", "scan_kind": "prompt", "sha256": "637e8b7ffe25d85477a81053e7c14b5a338580755092c8e9269d277773acf28b"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 40, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 3455, "findings": [], "path": "prompts/_base/shot_essence_extraction/1.202604281800/schema.json", "scan_kind": "prompt", "sha256": "3c9b5c6022405d9e046aab60fd5451dd5a211847cf184ab5d28728a75d11c8a1"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 175, "chunk_start": 1, "chunk_summary": "The prompt contains scenario-specific tropes and keyword-based semantic filters (e.g., detectives, prisoners, dead bodies) that pollute the base logic with crime-genre assumptions.", "duration_ms": 24175, "findings": [{"category": "llm_closed_list_instruction", "evidence": "detective / prisoner / woman in apron / dead body on the bed", "line_end": 156, "line_start": 149, "recommended_fix": "Abstract the forbidden list to focus on 'sentient entities' or 'characters' generally, and move genre-specific examples to a scenario-specific configuration or few-shot layer.", "severity": "P1", "why_problematic": "The prompt uses a hardcoded list of domain-specific tropes and keywords to enforce semantic boundaries for 'non-person' entities. This biases the LLM toward crime/thriller scenarios and may fail to catch characters in other genres (e.g., sci-fi, fantasy) while hardcoding specific visual states into the base system prompt."}, {"category": "scenario_dependent_prompt", "evidence": "detective walking in\", \"police tape\", \"body on the floor", "line_end": 111, "line_start": 101, "recommended_fix": "Replace scenario-specific examples with generic descriptions of movement and temporary objects (e.g., 'a person walking', 'a temporary prop').", "severity": "P1", "why_problematic": "Instructional examples for the ignore_elements field are heavily biased toward a crime scene scenario. This 'scenario pollution' can lead the LLM to over-index on these types of entities or fail to generalize when analyzing unrelated story genres."}, {"category": "scenario_dependent_prompt", "evidence": "small reddish mark on the wrist", "line_end": 169, "line_start": 169, "recommended_fix": "Use a generic visual continuity example, such as 'a specific pattern on a surface' or 'a unique texture'.", "severity": "P2", "why_problematic": "Uses an overly specific visual detail as a reference example for zoom_in_detail, which can bias the LLM's attention toward similar specific body marks or medical details in other contexts."}], "path": "prompts/_base/shot_dependency_t2i/7.202605151200/system.md", "scan_kind": "prompt", "sha256": "4bb9564d103d4c10a4183bbc190f58568e1564cf199cf2e4defb057a3542b378"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 40, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 3463, "findings": [], "path": "prompts/_base/shot_essence_extraction/2.202604290900/schema.json", "scan_kind": "prompt", "sha256": "a851516da452004e07f0749581b4b54ff060f0bab91c2a5faea5e61f4263c9f4"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 66, "chunk_start": 1, "chunk_summary": "The prompt contains scenario-specific pollution in examples, hardcoded semantic logic for character states, and instructions that discard structured entity IDs in favor of ambiguous natural language.", "duration_ms": 45337, "findings": [{"category": "llm_closed_list_instruction", "evidence": "죽은, 의식불명, 심하게 다친 인물... 이 인물은 환경의 일부입니다", "line_end": 50, "line_start": 31, "recommended_fix": "Generalize the instruction to refer to 'immobile entities' and rely on the '[고정 인물 상태]' (Fixed Character State) metadata provided in the input.", "severity": "P1", "why_problematic": "Hardcodes a semantic rule for visual continuity based on specific story tropes (death/injury). This forces the LLM to perform open-world interpretation of character states to apply a visual routing rule (keep vs ignore), which should be generalized to 'immobile entities' and driven by structured SOT metadata."}, {"category": "semantic_string_judgment", "evidence": "엔티티 ID (C01, O02, P03, L04 등) 사용 절대 금지 → 보통명사만 사용", "line_end": 47, "line_start": 46, "recommended_fix": "Require the inclusion of Entity IDs alongside natural language descriptions in the output (e.g., a JSON object with 'id' and 'description' fields) to maintain traceability.", "severity": "P1", "why_problematic": "Forbidding structured IDs in the output forces the LLM to generate natural language descriptions that cannot be programmatically mapped back to the SOT. This prevents automated validation of continuity rules (e.g., ensuring a specific character is not ignored) and relies on ambiguous string matching in downstream visual generation steps."}, {"category": "scenario_dependent_prompt", "evidence": "\"the detective walking in\", \"the body on the floor\", \"police tape\", \"the unconscious man slumped against the wall\"", "line_end": 66, "line_start": 53, "recommended_fix": "Replace scenario-specific examples with generic placeholders or a broader range of genre-neutral examples.", "severity": "P2", "why_problematic": "The prompt contains scenario-specific examples (crime/thriller tropes) that can bias the LLM's descriptive style and logic across different genres. These examples should be generic or diverse to avoid scenario pollution."}], "path": "prompts/_base/shot_dependency_t2i/4.202604141200/system.md", "scan_kind": "prompt", "sha256": "ef8a0207d89aa2890223bd015f171e783fe9ee1379456693dd6f6666770c136a"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 52, "chunk_start": 1, "chunk_summary": "The prompt contains hardcoded linguistic patterns for visibility routing and scenario-specific character/plot examples that pollute the base system prompt.", "duration_ms": 18354, "findings": [{"category": "semantic_string_judgment", "evidence": "X[를을] (응시하|...)... Y[의] (얼굴|...)", "line_end": 32, "line_start": 17, "recommended_fix": "Remove specific linguistic patterns and replace with high-level semantic principles for visibility (e.g., 'If the description focuses on a character's reaction to an unseen entity, mark the entity as off-camera').", "severity": "P1", "why_problematic": "The prompt instructs the LLM to use specific Korean grammatical patterns and verb lists to determine entity visibility (off-camera vs in-frame). This is a semantic judgment that should be handled by general reasoning or a structured SOT, not hardcoded phrase structures."}, {"category": "scenario_dependent_prompt", "evidence": "혜수, 수리영, 인우, 백련, 요괴화", "line_end": 44, "line_start": 19, "recommended_fix": "Replace scenario-specific names and plot points with generic placeholders like 'Character A', 'Character B', and 'Variant Form'.", "severity": "P1", "why_problematic": "The system prompt contains specific character names and plot-specific transformation states ('요괴화') as examples. This pollutes the base prompt with scenario-specific data and can bias the LLM's behavior across different stories."}, {"category": "llm_closed_list_instruction", "evidence": "off-camera, off-screen, 화면 밖, 프레임 밖", "line_end": 24, "line_start": 23, "recommended_fix": "Instruct the LLM to identify off-camera status based on the spatial context of the scene description rather than a fixed list of keywords.", "severity": "P2", "why_problematic": "The prompt provides a closed list of phrases to be used as semantic classifiers for visibility. This restricts the LLM's natural language understanding and may lead to missed detections of off-camera status in varied descriptions."}], "path": "prompts/_base/shot_director/3.202605101200/system.md", "scan_kind": "prompt", "sha256": "7ca09dd515995d49bb7bdc176d72b83cd47cbb0abe3c51f3b68d9cfd44f8b8ec"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 40, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 4180, "findings": [], "path": "prompts/_base/shot_essence_extraction/3.202605081814/schema.json", "scan_kind": "prompt", "sha256": "a851516da452004e07f0749581b4b54ff060f0bab91c2a5faea5e61f4263c9f4"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 57, "chunk_start": 1, "chunk_summary": "The prompt contains scenario-specific character names and hard-coded semantic classification rules for specific story tropes like bloodstains and injury states.", "duration_ms": 14548, "findings": [{"category": "scenario_dependent_prompt", "evidence": "민숙이 거실 바닥에 엎어진 채 누워있다", "line_end": 39, "line_start": 39, "recommended_fix": "Replace specific names with generic placeholders like '인물 A' or '주인공' to avoid biasing the LLM toward specific character contexts.", "severity": "P2", "why_problematic": "Uses a concrete character name ('민숙') in a base system prompt example, which constitutes scenario-specific pollution in a generic extraction template."}, {"category": "llm_closed_list_instruction", "evidence": "\"사망/부상/의식불명 인물\"의 자세는 essence ... 그 인물 옆 혈흔은 atmospheric ... \"흐트러진 머리카락\"은 peripheral", "line_end": 57, "line_start": 53, "recommended_fix": "Remove specific trope-to-category mappings. Instead, provide abstract criteria for what constitutes 'essence' vs 'atmospheric' based on the shot's focus, or allow the SOT to define importance levels for specific props.", "severity": "P1", "why_problematic": "Hard-codes semantic classification and routing logic for specific visual tropes (bloodstains, injury, hair). This forces open-world story elements into fixed categories regardless of their narrative importance in a specific shot (e.g., a close-up on bloodstains should be essence, but this rule forces it to atmospheric/background)."}], "path": "prompts/_base/shot_essence_extraction/1.202604281800/system.md", "scan_kind": "prompt", "sha256": "defda41e43a87df346ef6492d49a4a4934de5e7cb29ef21c1b32e5dced13ed69"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 87, "chunk_start": 1, "chunk_summary": "The system prompt for shot essence extraction contains scenario-specific character names and unique props in its few-shot examples, polluting a base pipeline component.", "duration_ms": 13293, "findings": [{"category": "scenario_dependent_prompt", "evidence": "\"민숙\", \"수리영\", \"인형 백팩\"", "line_end": 76, "line_start": 44, "recommended_fix": "Replace specific character names with generic placeholders (e.g., '인물 A', '여성') and specific props with common objects (e.g., '가방', '상자') to ensure the prompt is truly scenario-agnostic.", "severity": "P1", "why_problematic": "The base system prompt uses specific character names and unique props (e.g., 'doll backpack') in its few-shot examples. This introduces scenario-specific pollution into a generic pipeline component, which should remain agnostic to specific story content to avoid biasing the LLM or leaking domain-specific nomenclature into other scenarios."}], "path": "prompts/_base/shot_essence_extraction/2.202604290900/system.md", "scan_kind": "prompt", "sha256": "e667671629fae98f391973efc2b937071a52de05aeb37cb687e5926506bfda8f"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 43, "chunk_start": 1, "chunk_summary": "The provided JSON schema defines the structure for shot extraction and contains no scenario-specific pollution or pattern-based semantic logic.", "duration_ms": 8618, "findings": [], "path": "prompts/_base/shot_extract/10.202604151200/shot_schema.json", "scan_kind": "prompt", "sha256": "190c5ba6e252a60c370adc3f9eaa9f5d3d43034f60d363d6cd145976a2066af9"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 68, "chunk_start": 1, "chunk_summary": "The prompt instructs the LLM to determine entity visibility using hardcoded linguistic patterns and closed phrase lists, which creates brittle semantic judgment for shot direction.", "duration_ms": 20285, "findings": [{"category": "llm_closed_list_instruction", "evidence": "X[를을] (응시하|올려다보|내려다보|바라보|쳐다보|마주보|노려보|돌아보)... Y[의] (얼굴|눈|표정|상체|뒷모습|시선|옆얼굴|옆모습) (클로즈업|CU|ECU|MCU|샷|숏)", "line_end": 37, "line_start": 33, "recommended_fix": "Replace the pattern-based instruction with a high-level semantic requirement: 'Exclude entities that are the target of a gaze if the shot is a close-up focusing solely on the observer's face/reaction.'", "severity": "P1", "why_problematic": "The prompt forces the LLM to use a pseudo-regex pattern to identify gaze targets and exclude them from visibility. This limits the LLM's natural language understanding and fails on variations of these expressions or different languages/styles not captured by the list."}, {"category": "llm_closed_list_instruction", "evidence": "영어: `off-camera`, `off-screen` ... 한국어: `화면 밖`, `프레임 밖` ", "line_end": 41, "line_start": 38, "recommended_fix": "Instruct the LLM to identify off-camera status based on the spatial relationship and framing described in the text, using these phrases as examples rather than an exhaustive list.", "severity": "P2", "why_problematic": "Hardcoding specific technical phrases as the primary signals for off-camera status can lead the LLM to ignore contextual cues that imply the same state without using these exact words."}, {"category": "llm_closed_list_instruction", "evidence": "(차단|막다|가리다|block|obstruct) (대상)[을를]?", "line_end": 45, "line_start": 43, "recommended_fix": "Define the rule in terms of physical occlusion: 'If an entity is explicitly described as being completely hidden or blocked by another object or character, exclude it from visible_entity_ids.'", "severity": "P1", "why_problematic": "Uses a closed list of verbs to define physical blocking. This is a semantic judgment that should be derived from the LLM's understanding of the scene's physical layout rather than keyword matching."}, {"category": "llm_closed_list_instruction", "evidence": "\"(상대) 의 목소리를 듣고 굳어진 (주체) 의 얼굴\"", "line_end": 49, "line_start": 47, "recommended_fix": "Generalize the instruction to focus on the 'Reaction-only' concept: 'If a character is mentioned only as a source of sound or a trigger for another character's reaction, and the framing is tight on the reacting character, exclude the trigger character.'", "severity": "P1", "why_problematic": "Hardcodes a specific sentence structure as a heuristic for excluding characters. This is a brittle pattern-based approach to a complex narrative interpretation task."}], "path": "prompts/_base/shot_director/5.202605131800/system.md", "scan_kind": "prompt", "sha256": "95ea6973e6cdc22d2e6442dffe5405333a24d9b5e3fb354a82586cec7d09b041"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 52, "chunk_start": 1, "chunk_summary": "The prompt uses hardcoded linguistic patterns and keyword lists to instruct the LLM on determining entity visibility, which is a brittle approach to semantic classification.", "duration_ms": 26746, "findings": [{"category": "llm_closed_list_instruction", "evidence": "Gaze-target close-up 패턴 — `X[를을] (응시하|올려다보|내려다보|바라보|쳐다보|마주보|노려보|돌아보)... Y[의] (얼굴|눈|표정|상체|뒷모습|시선|옆얼굴|옆모습) (클로즈업|CU|ECU|MCU|샷|숏)`", "line_end": 33, "line_start": 15, "recommended_fix": "Remove the rigid string patterns and keywords. Instead, provide general principles for determining visibility based on camera focus, spatial occlusion, and explicit staging directions. Rely on the LLM's semantic understanding rather than pattern matching.", "severity": "P1", "why_problematic": "The prompt instructs the LLM to determine entity visibility (off-camera vs in-frame) using a closed list of linguistic patterns, specific keywords, and rigid sentence structures. This is brittle and fails to account for the variety of ways a scenario might describe spatial positioning, leading to incorrect visible_entity_ids if the text deviates from these specific examples."}], "path": "prompts/_base/shot_director/4.202605121200/system.md", "scan_kind": "prompt", "sha256": "85a48ad01787123a671f3bab97913a81c187b49850cd83ea4c16224882b64dd9"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 2, "chunk_start": 1, "chunk_summary": "No actionable findings.", "duration_ms": 2778, "findings": [], "path": "prompts/_base/shot_extract/9.202604081200/system.md", "scan_kind": "prompt", "sha256": "79a456aff543da28f549491040bff2129b50f55106e5ee82bb685d0d3c71a6b1"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 43, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 5883, "findings": [], "path": "prompts/_base/shot_extract/9.202604081200/shot_schema.json", "scan_kind": "prompt", "sha256": "190c5ba6e252a60c370adc3f9eaa9f5d3d43034f60d363d6cd145976a2066af9"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 64, "chunk_start": 1, "chunk_summary": "The prompt contains hardcoded lists of domain tropes (e.g., scales, possession, mutants) used to instruct the LLM on how to classify character variants and describe entities.", "duration_ms": 17385, "findings": [{"category": "llm_closed_list_instruction", "evidence": "인간형(외계인/귀신/돌연변이 포함)이면 인종/국적을 반드시 포함", "line_end": 35, "line_start": 35, "recommended_fix": "Generalize the instruction to apply to any humanoid entity not in the character list, or move entity-type definitions to a structured world SOT.", "severity": "P2", "why_problematic": "Hardcodes specific entity types (alien, ghost, mutant) as the trigger for a specific description rule. This is a domain-specific trope list that biases the LLM toward certain genres."}, {"category": "llm_closed_list_instruction", "evidence": "나이 변화, 변장/성형 전후, 빙의... 부상, 출혈, 창백해짐, 피멍, 화상... 눈 색, 비늘, 손톱/송곳니, 꼬리", "line_end": 51, "line_start": 41, "recommended_fix": "Define 'Variant' vs 'State' using abstract criteria (e.g., identity-altering vs. temporary condition) and provide the specific trope classifications via a project-specific SOT or configuration.", "severity": "P1", "why_problematic": "The prompt uses a hardcoded list of tropes to define what constitutes a 'Variant' (identity change) versus a 'State' (temporary change). This forces the LLM to perform semantic classification based on a closed list of examples (like 'scales' or 'possession') rather than a generic rule or a world-specific SOT."}], "path": "prompts/_base/shot_extract/10.202604151200/system.md", "scan_kind": "prompt", "sha256": "56bf7f72f43848cfb87ac325aced74faf8004d1882b0647d368f0bbda5cbdf15"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 12, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 2480, "findings": [], "path": "prompts/_base/shot_selection/2.202604151200/selection_schema.json", "scan_kind": "prompt", "sha256": "29fd968ac8bb9494412292d8b26498f707175904197badce7f5b5266c770c455"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 87, "chunk_start": 1, "chunk_summary": "The prompt contains scenario-specific entity/prop mappings in examples and hardcodes semantic classification rules for specific visual tropes (blood, broken glass) to bypass technical limitations of the background consistency system.", "duration_ms": 23854, "findings": [{"category": "semantic_string_judgment", "evidence": "사건의 영구 흔적 (혈흔, 깨진 유리, 부상 흔적)은 essence", "line_end": 83, "line_start": 13, "recommended_fix": "Define these rules in a structured visual logic SOT or metadata that can be updated without modifying the core system prompt, or allow the LLM to determine essence based on narrative importance rather than specific prop types.", "severity": "P1", "why_problematic": "Hardcodes a semantic rule that specific visual tropes (blood, broken glass, injury marks) must be classified as 'essence' to compensate for technical limitations of the background consistency system (chain bg). This forces the LLM to perform pattern-based judgment on open-world content using a closed list of examples rather than narrative logic."}, {"category": "scenario_dependent_prompt", "evidence": "description: \"C08이 P03을 들어 올린다.\" ... essence: [\"여인이 인형 백팩을 들어 올린다\"]", "line_end": 67, "line_start": 60, "recommended_fix": "Replace scenario-specific IDs and props in examples with generic placeholders (e.g., 'Character A', 'Object B') or use widely applicable generic examples.", "severity": "P1", "why_problematic": "Uses specific entity IDs (C08, P03) and a concrete prop (doll backpack) from a specific scenario as a ground-truth example. This pollutes the base prompt with scenario-specific data and biases the LLM's understanding of ID-to-entity mapping for arbitrary scenarios."}], "path": "prompts/_base/shot_essence_extraction/3.202605081814/system.md", "scan_kind": "prompt", "sha256": "fee50340f8b33be5a0da31f20d912212ff323c0523df5d522db52a3dd15ce8d6"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 15, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 6600, "findings": [], "path": "prompts/_base/shot_selection/2.202604151200/user.md", "scan_kind": "prompt", "sha256": "bf609f6b3d17164956ad029e9399bb51d2a5d379ffe6736f09d11e3c774789f3"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 12, "chunk_start": 1, "chunk_summary": "No actionable findings; the file contains a standard JSON schema for technical shot index selection without scenario-specific pollution or semantic string judgment.", "duration_ms": 2264, "findings": [], "path": "prompts/_base/shot_selection/3.202604181300/selection_schema.json", "scan_kind": "prompt", "sha256": "29fd968ac8bb9494412292d8b26498f707175904197badce7f5b5266c770c455"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 80, "chunk_start": 1, "chunk_summary": "The prompt contains hardcoded lists of linguistic patterns and story tropes used to enforce semantic constraints and character state classification.", "duration_ms": 20793, "findings": [{"category": "llm_closed_list_instruction", "evidence": "\"~하자\" / \"~하면서\" / \"~하며\" / \"~하고\" / \"~한 뒤\" / \"~한 후\" / \"~하고 나서\", \"and then\", \"while ~ing\"", "line_end": 19, "line_start": 18, "recommended_fix": "Replace the negative token list with a high-level semantic requirement for 'single-frame temporal consistency' and provide abstract examples of temporal vs. static descriptions.", "severity": "P1", "why_problematic": "Enforces the 'single moment' semantic constraint using a hardcoded list of linguistic patterns. This is brittle and prevents the LLM from using natural language to describe complex single-frame states that might coincidentally use these tokens."}, {"category": "llm_closed_list_instruction", "evidence": "\"나이 변화, 변장/성형 전후, 빙의\", \"부상, 출혈, 창백해짐, 피멍, 화상\", \"눈 색, 비늘, 손톱/송곳니, 꼬리\"", "line_end": 57, "line_start": 49, "recommended_fix": "Inject the transformation/state classification rules from a structured world-rule SOT or character metadata rather than hardcoding tropes in the base prompt.", "severity": "P1", "why_problematic": "Hardcodes a list of story-specific tropes and physical conditions to define the 'transformation' vs 'state' boundary. This logic (what constitutes a character variant) is scenario-dependent and should be externalized to a world-rule SOT."}, {"category": "scenario_dependent_prompt", "evidence": "\"한국인 경찰\", \"동양인 노파\"", "line_end": 63, "line_start": 63, "recommended_fix": "Use generic placeholders or instruct the LLM to derive background character descriptions from the scene's cultural/geographic context provided in the SOT.", "severity": "P2", "why_problematic": "Hardcoded demographic examples for background characters can bias the LLM's open-world generation toward specific ethnicities or roles not necessarily present in the current scenario."}], "path": "prompts/_base/shot_extract/10.202604151200/user.md", "scan_kind": "prompt", "sha256": "0be1caec39403c4af11874a53831d28579ed1a6b24c29c2363a18ed2f4add03e"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 80, "chunk_start": 1, "chunk_summary": "The prompt defines character variant logic and entity description requirements using hardcoded trope lists and demographic examples.", "duration_ms": 21587, "findings": [{"category": "llm_closed_list_instruction", "evidence": "나이 변화, 변장/성형 전후, 빙의... 부상, 출혈, 창백해짐, 피멍, 화상... 눈 색, 비늘, 손톱/송곳니, 꼬리", "line_end": 57, "line_start": 47, "recommended_fix": "Move the definition of 'variant' (what constitutes a visual identity change) to a structured world-rule SOT or a scenario-specific configuration that is injected into the prompt.", "severity": "P1", "why_problematic": "The prompt hardcodes a semantic boundary for 'character variants' using a specific list of visual tropes (fantasy, action, horror). This logic determines whether a character is treated as a new entity variant or a state change, which directly affects entity membership and naming. This should be defined in a structured world-rule SOT as it varies significantly by genre."}, {"category": "scenario_dependent_prompt", "evidence": "인간형이면 인종/국적을 반드시 포함 (예: '한국인 경찰', '동양인 노파')", "line_end": 63, "line_start": 63, "recommended_fix": "Replace hardcoded examples with a generic instruction to provide 'essential visual identifiers' or pull required attribute types from a structured entity-generation schema.", "severity": "P2", "why_problematic": "This instruction mandates specific demographic attributes (race/nationality) for unknown characters based on hardcoded examples. This biases the LLM's visual descriptions and may lead to inappropriate or redundant descriptors in scenarios where such attributes are not the primary visual identifier."}], "path": "prompts/_base/shot_extract/11.202604201230/user.md", "scan_kind": "prompt", "sha256": "0be1caec39403c4af11874a53831d28579ed1a6b24c29c2363a18ed2f4add03e"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 15, "chunk_start": 1, "chunk_summary": "The shot selection prompt uses generic heuristics and technical placeholders without scenario-specific pollution or hardcoded story examples.", "duration_ms": 5644, "findings": [], "path": "prompts/_base/shot_selection/3.202604181300/user.md", "scan_kind": "prompt", "sha256": "bf609f6b3d17164956ad029e9399bb51d2a5d379ffe6736f09d11e3c774789f3"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 60, "chunk_start": 1, "chunk_summary": "The prompt contains hardcoded semantic classification rules for character transformations and demographic requirements for extras.", "duration_ms": 19256, "findings": [{"category": "llm_closed_list_instruction", "evidence": "변형이란 얼굴이 크게 달라지거나... 괄호 표기하지 않는 것 (절대 포함 금지): - 일시적 상태: 부상, 출혈... - 부분적 변화: 눈 색 변화, 비늘 올라옴...", "line_end": 42, "line_start": 31, "recommended_fix": "Move transformation criteria to a structured World Rule SOT or a configuration object that can be injected per-scenario.", "severity": "P1", "why_problematic": "Hardcodes the definition of character 'variants' (transformations) using a closed list of semantic examples. This logic dictates visual identity syntax but is rigid and scenario-agnostic, preventing genre-specific definitions of what constitutes a significant visual change (e.g., a tail might be a major transformation in one genre but a minor detail in another)."}, {"category": "scenario_dependent_prompt", "evidence": "인간형(외계인, 로봇, 귀신, 돌연변이 등이라도 인간과 외모가 유사한 경우 포함)이면 인종/국적을 반드시 포함한다 (예: '한국인 경찰', '동양인 노파')", "line_end": 47, "line_start": 47, "recommended_fix": "Generalize the requirement to 'visual descriptors' and provide demographic preferences via a separate style or world-building context.", "severity": "P2", "why_problematic": "Mandates the inclusion of race/nationality for all humanoid extras based on specific examples. This is a visual generation bias that may not be appropriate for all story worlds (e.g., non-Earth settings) and should be part of a style or world-building guide rather than a base extraction prompt."}], "path": "prompts/_base/shot_extract/9.202604081200/user.md", "scan_kind": "prompt", "sha256": "fd860cd60cc3bd90c17398fba9de0f683c5eb966e224d630a14de49ba462e252"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 41, "chunk_start": 1, "chunk_summary": "The shot selection system prompt defines filtering heuristics using generic storytelling categories and specific visual examples for exclusion.", "duration_ms": 23716, "findings": [{"category": "llm_closed_list_instruction", "evidence": "손이 물체에 닿기 직전, 문고리가 돌아가기 직전 등", "line_end": 37, "line_start": 37, "recommended_fix": "Replace specific prop examples with abstract descriptions of temporal transitions (e.g., 'pre-action anticipation' or 'mechanical initiation phases') or move these examples to a structured 'Visual Editing Rules' SOT.", "severity": "P2", "why_problematic": "The prompt uses specific visual props (hand, doorknob) and actions as hardcoded examples of 'unimportant' transitions. This biases the LLM's semantic judgment of what constitutes a 'simple connection' based on specific props rather than abstract narrative value, which may not apply to all genres or scenarios."}], "path": "prompts/_base/shot_selection/2.202604151200/system.md", "scan_kind": "prompt", "sha256": "46072f0cdaf8f0146257cfd826851eb9023b8851d941379bfb0401688a5ee0df"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 64, "chunk_start": 1, "chunk_summary": "The prompt uses closed-list semantic classifiers to define temporal stillness and character variants, and imposes real-world demographic requirements on humanoid entities.", "duration_ms": 42593, "findings": [{"category": "llm_closed_list_instruction", "evidence": "\"~하자\", \"~하면서\", \"~하며\", \"~하고\", \"~한 뒤\", \"~한 후\", \"~하고 나서\", \"and then\", \"while ~ing\", \"after ~ing\", \"as ~\"", "line_end": 18, "line_start": 16, "recommended_fix": "Define the 'still moment' concept conceptually rather than through a forbidden phrase list, or move temporal validation to a separate review step.", "severity": "P1", "why_problematic": "Uses a closed list of linguistic patterns to define the semantic boundary of a 'still moment'. This heuristic-based approach can lead to rejection of valid single-moment descriptions or force unnatural phrasing."}, {"category": "scenario_dependent_prompt", "evidence": "인간형(외계인/귀신/돌연변이 포함)이면 인종/국적을 반드시 포함", "line_end": 35, "line_start": 35, "recommended_fix": "Move visual description requirements for extras to a world-building SOT or allow the scenario context to dictate relevant attributes.", "severity": "P2", "why_problematic": "Forces real-world demographic attributes (race/nationality) onto all humanoid entities, which may be inappropriate for specific sci-fi or fantasy settings and introduces visual bias."}, {"category": "llm_closed_list_instruction", "evidence": "\"나이 변화, 분장/변장 전후, 외모가 근본적으로 바뀌는 상황\", \"종·형상 자체의 변화\", \"부상, 얼룩, 창백해짐, 멍, 화상 등\"", "line_end": 51, "line_start": 40, "recommended_fix": "Externalize variant classification rules to a scenario-specific SOT or a centralized world-rule configuration.", "severity": "P1", "why_problematic": "Hardcodes the semantic definition of character 'variants' versus 'states' using a fixed list of tropes. This logic drives character identity routing and should be defined in a structured World SOT to accommodate different story rules."}], "path": "prompts/_base/shot_extract/11.202604201230/system.md", "scan_kind": "prompt", "sha256": "963688c68f300adfc58f94aaeb3969619e87a4673b23c8870becc55d2d107c09"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 23, "chunk_start": 1, "chunk_summary": "The shot selection schema includes a specific narrative trope example in a description field, which can bias LLM reasoning.", "duration_ms": 27628, "findings": [{"category": "scenario_dependent_prompt", "evidence": "예: '서사 High / 시각 High — 관계 전환점'", "line_end": 13, "line_start": 13, "recommended_fix": "Replace the specific trope example with a generic format description or a placeholder that does not imply specific narrative content.", "severity": "P2", "why_problematic": "The schema description includes a specific narrative trope ('Relationship Turning Point') as an example. This biases the LLM's selection logic toward specific story patterns and introduces scenario-specific nomenclature into a base schema that should remain agnostic."}], "path": "prompts/_base/shot_selection/4.202604191600/selection_schema.json", "scan_kind": "prompt", "sha256": "b95a158c199c6e23b02de1744704f6b30a58d15bb787bb54b1c81c9fe9e28d82"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 23, "chunk_start": 1, "chunk_summary": "The prompt provides generic shot selection guidelines based on narrative and visual importance without scenario-specific pollution or pattern-based routing.", "duration_ms": 24422, "findings": [], "path": "prompts/_base/shot_selection/4.202604191600/user.md", "scan_kind": "prompt", "sha256": "a89e5594c73fbfa03694f12b69dbdd9361fb9f07228f57fb5623631c87860c27"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 78, "chunk_start": 1, "chunk_summary": "The prompt contains hard-coded narrative filters and trope-based selection examples that bias open-world story analysis toward specific storytelling patterns.", "duration_ms": 26024, "findings": [{"category": "llm_closed_list_instruction", "evidence": "## 절대 금지 사항 ... ## 선택하지 말 것 (판단 예시 — 범용 원칙)", "line_end": 65, "line_start": 54, "recommended_fix": "Move trope-specific selection logic to a structured SOT or context-aware configuration to allow for different narrative styles (e.g., 'Action' vs 'Slice-of-Life') rather than hard-coding them as universal principles.", "severity": "P1", "why_problematic": "The prompt hard-codes narrative importance based on a closed list of tropes (chase, transport, work) and action phases. This forces a specific 'efficiency-first' storytelling logic that biases the LLM against atmospheric or character-driven moments that do not fit these specific 'transition point' definitions, potentially suppressing valid visual storytelling in non-action genres."}], "path": "prompts/_base/shot_selection/4.202604191600/system.md", "scan_kind": "prompt", "sha256": "1d8df13f0af94210131a5239840e497ddf3092a46e456e79b66ed659ea71893e"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 103, "chunk_start": 1, "chunk_summary": "The schema contains scenario-specific prop examples and semantic state classifications within field descriptions that bias LLM output.", "duration_ms": 25379, "findings": [{"category": "scenario_dependent_prompt", "evidence": "(CCTV/phone/binoculars)", "line_end": 13, "line_start": 13, "recommended_fix": "Remove specific examples or move them to a separate technical reference.", "severity": "P2", "why_problematic": "Includes specific device examples which may bias the LLM toward these common tropes even if the story specifies a different device (e.g., a futuristic scanner or a magic mirror)."}, {"category": "scenario_dependent_prompt", "evidence": "'one foot on pedal', 'leaning against doorframe', 'crouching behind desk', 'slumping into chair'", "line_end": 24, "line_start": 24, "recommended_fix": "Remove specific prop examples. Use abstract descriptions of 'action-grounded' or 'state-grounded' poses, or move examples to a separate style-guide SOT.", "severity": "P1", "why_problematic": "The description embeds specific prop-based examples (pedal, doorframe, desk, chair) which biases the LLM toward these specific scenarios and props instead of deriving poses from the actual story context."}, {"category": "llm_closed_list_instruction", "evidence": "'unconscious', 'dead', 'severely_injured'", "line_end": 25, "line_start": 25, "recommended_fix": "Separate physical gaze direction from character state. Use a dedicated state field or allow the gaze target to be a reference to an entity/direction without hardcoding semantic outcomes.", "severity": "P1", "why_problematic": "The gaze_target field mixes physical directions with semantic character states. This forces the LLM to classify story-level health/consciousness states into a closed string list for a visual field."}], "path": "prompts/_base/shot_staging/10.202605141617/schema.json", "scan_kind": "prompt", "sha256": "8d5f6ec72e827987a68e155d2d0112e5458fc855379b83cee32d439eeb82e11e"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 51, "chunk_start": 1, "chunk_summary": "The prompt defines shot selection logic using a narrative/visual matrix and provides specific action-based examples and prohibitions to classify narrative importance.", "duration_ms": 35831, "findings": [{"category": "llm_closed_list_instruction", "evidence": "연결 순간 단독 선택 금지... 일상 이동 남용 금지... 대사만 오가는 반복 정면 샷... 인물 A가 인물 B에게 다가가 접촉하는 장면... 추격/달리기 장면", "line_end": 48, "line_start": 38, "recommended_fix": "Define narrative importance through abstract criteria (e.g., 'state transitions', 'character agency', 'thematic resonance') and move specific cinematic heuristics into a structured 'Director's Handbook' or genre-specific SOT.", "severity": "P2", "why_problematic": "The prompt hardcodes narrative importance judgments based on a closed list of action tropes and cinematic patterns (e.g., 'contact' vs 'approach', 'chases', 'transportation', 'talking heads'). This forces the LLM to apply specific storytelling rules that may not be universally applicable across all genres or specific narrative intentions, potentially filtering out shots that carry significant tension or atmosphere."}], "path": "prompts/_base/shot_selection/3.202604181300/system.md", "scan_kind": "prompt", "sha256": "e164bf0a32ff4287aed21d6a4e3e16ebc708a478697794774feb375e4ba7a3ae"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 77, "chunk_start": 1, "chunk_summary": "The prompt contains a logical contradiction between strict token matching and semantic bypass detection, using specific examples like 'portal' for 'door'.", "duration_ms": 220065, "findings": [{"category": "semantic_string_judgment", "evidence": "owned 객체의 의미적 우회 표현 (예: `portal` 로 `door` 우회, `screen` 으로 `TV` 우회)", "line_end": 32, "line_start": 21, "recommended_fix": "Enforce strict matching as per line 7 and ensure that any valid aliases (like 'portal' for a specific door) are included in the 'owned_list' provided to the prompt.", "severity": "P1", "why_problematic": "This instructs the LLM to perform open-world semantic mapping based on specific examples, which contradicts the 'exact match' instruction in line 7. It forces the LLM to guess intent for 'bypass' words not present in the structured owned_list, leading to inconsistent validation."}], "path": "prompts/_base/scene_detail_owned_judge/3.202605051746/system.md", "scan_kind": "prompt", "sha256": "954aaf54f2737cc38b337e7db7e60d54282fe0d8d0887ab71bf0a8c0fa29a1bc"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 194, "chunk_start": 1, "chunk_summary": "The prompt contains scenario-specific examples for pose exceptions and hardcoded semantic labels for character states that bias open-world story analysis.", "duration_ms": 11718, "findings": [{"category": "llm_closed_list_instruction", "evidence": "법정 선서, 장례식 고별, 점호, 연설단, 결혼식 서약", "line_end": 100, "line_start": 99, "recommended_fix": "Remove specific scenario examples and replace with a generalized rule based on the 'formality' or 'ritualistic nature' of the scene as defined in the world/scene SOT.", "severity": "P1", "why_problematic": "The prompt provides a closed list of specific scenario types (courtroom, funeral, etc.) to justify exceptions for the 'standing' pose rule. This biases the LLM to only allow static poses in these specific tropes rather than deriving the logic from the scene's emotional context."}, {"category": "llm_closed_list_instruction", "evidence": "\"closed\" 또는 \"unconscious\" ... \"dead\" ... \"severely_injured\"", "line_end": 137, "line_start": 135, "recommended_fix": "Allow the gaze_target to be a natural language description or move character state (dead/injured) to a separate structured status field.", "severity": "P1", "why_problematic": "These are hardcoded semantic labels for character states being used as 'gaze_target' values. This forces the LLM to perform a classification of the character's medical/physical state into a fixed string list rather than describing the visual focus."}, {"category": "scenario_dependent_prompt", "evidence": "커튼 틈새, 책장 사이 ... 바닥 혈흔 질감, 유리 결로, 먼지 입자, 깨진 유리", "line_end": 151, "line_start": 146, "recommended_fix": "Move these examples to a separate 'style/technique' reference SOT or use more abstract cinematic terms (e.g., 'occlusion', 'texture focus', 'environmental reflection').", "severity": "P2", "why_problematic": "The prompt includes highly specific prop and environment examples (blood texture, broken glass, curtains) to inspire 'creative framing'. While intended as examples, they often leak into LLM outputs as default 'creative' choices regardless of the actual scenario context."}], "path": "prompts/_base/shot_staging/7.202604181200/system.md", "scan_kind": "prompt", "sha256": "2fabcde5001adb9f1a75f521e0635cdc2fd48518069742d128419e6b6f01f319"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 120, "chunk_start": 1, "chunk_summary": "The prompt contains scenario-specific character states as hardcoded gaze target values and includes genre-specific trope examples in framing suggestions.", "duration_ms": 19303, "findings": [{"category": "llm_closed_list_instruction", "evidence": "\"unconscious\", \"dead\", \"severely_injured\"", "line_end": 70, "line_start": 68, "recommended_fix": "Generalize the gaze_target instructions to focus on visual direction or eye state (e.g., 'eyes closed', 'fixed gaze') rather than medical/status classifications.", "severity": "P1", "why_problematic": "The prompt forces the LLM to classify character health/consciousness states into specific string tokens for the 'gaze_target' field. This is a semantic judgment that should be handled by the scenario's state or described visually rather than being a hardcoded nomenclature in the staging prompt."}, {"category": "scenario_dependent_prompt", "evidence": "바닥 혈흔 질감", "line_end": 82, "line_start": 82, "recommended_fix": "Replace with neutral texture examples like 'surface grain' or 'material patterns'.", "severity": "P2", "why_problematic": "The use of 'bloodstain texture' as a framing example introduces scenario-specific (thriller/horror) pollution into a base prompt, which can bias the model's creative suggestions."}], "path": "prompts/_base/shot_staging/6.202604151200/system.md", "scan_kind": "prompt", "sha256": "4d8afb513ec44b4b4f3321b9d5ecad19dd055c1617559cda5b0a753f6cb2f89d"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 108, "chunk_start": 1, "chunk_summary": "The schema contains scenario-specific prop examples and closed-list semantic character states in field descriptions that bias open-world generation.", "duration_ms": 25306, "findings": [{"category": "scenario_dependent_prompt", "evidence": "(CCTV/phone/binoculars)", "line_end": 18, "line_start": 18, "recommended_fix": "Use abstract terms like 'optical_instrument' or 'electronic_display'.", "severity": "P2", "why_problematic": "Specific modern-day props used as examples for a visual perception mode bias the LLM toward contemporary settings."}, {"category": "scenario_dependent_prompt", "evidence": "'one foot on pedal', 'leaning against doorframe', 'crouching behind desk', 'slumping into chair'", "line_end": 29, "line_start": 29, "recommended_fix": "Replace specific prop examples with abstract descriptions of physical interaction (e.g., 'interacting with environment', 'weight shifted on support').", "severity": "P1", "why_problematic": "Hardcoded prop-specific examples in the schema description bias the LLM's pose generation toward modern/indoor settings, polluting the open-world story context."}, {"category": "llm_closed_list_instruction", "evidence": "'closed', 'unconscious', 'dead', 'severely_injured'", "line_end": 30, "line_start": 30, "recommended_fix": "Separate character state from gaze target and keep gaze_target focused on spatial vectors or entity IDs.", "severity": "P2", "why_problematic": "Character health and consciousness states are mixed into a spatial gaze target field as a closed list, forcing semantic classification of character state into a fixed set of strings."}], "path": "prompts/_base/shot_staging/11.202605150319/schema.json", "scan_kind": "prompt", "sha256": "563bb3a1f8e2fa6ff7915841c59e1a92c848206f06a407e58c093531aaa3ef1b"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 292, "chunk_start": 1, "chunk_summary": "The prompt contains several instances of closed-list semantic classification for open-world concepts and scenario-specific trope pollution.", "duration_ms": 36642, "findings": [{"category": "scenario_dependent_prompt", "evidence": "법정 선서, 장례식 고별, 점호, 연설단, 결혼식 서약", "line_end": 99, "line_start": 99, "recommended_fix": "Replace specific scenario examples with abstract criteria for when a static pose is semantically significant (e.g., 'ceremonial or formal contexts').", "severity": "P2", "why_problematic": "Hardcoded list of specific scenario tropes used to justify exceptions to a technical rule (static poses). This pollutes the prompt with domain-specific examples that should be handled by general logic or SOT."}, {"category": "llm_closed_list_instruction", "evidence": "\"closed\" 또는 \"unconscious\", \"dead\", \"severely_injured\"", "line_end": 137, "line_start": 135, "recommended_fix": "Move character state tracking (dead, unconscious) to a separate structured field or SOT, and keep gaze_target strictly for spatial entities or directions.", "severity": "P1", "why_problematic": "Instructs the LLM to use semantic character states as spatial gaze targets. This forces the LLM to perform semantic judgment on character status and map it to a specific string label, mixing state tracking with spatial metadata."}, {"category": "llm_closed_list_instruction", "evidence": "directionality_class, 반드시 emit ... 5 class 중 의미 기반으로 하나 선택", "line_end": 170, "line_start": 164, "recommended_fix": "Define object directionality in a structured world SOT (Entity/Prop metadata) rather than requiring the LLM to classify it per shot.", "severity": "P1", "why_problematic": "Forces the LLM to classify arbitrary open-world objects into a closed set of 5 semantic categories (content_surface, reflective_surface, etc.) to drive visual orientation logic. This is a pattern-based semantic judgment that should be part of the object's metadata."}, {"category": "llm_closed_list_instruction", "evidence": "reason=\"movement_direction\", reason=\"points_to_anchor\", reason=\"looks_to_anchor\", reason=\"shared_space_relation\", reason=\"required_background_position\", reason=\"primary_subject_isolation\"", "line_end": 227, "line_start": 216, "recommended_fix": "Derive the need for spatial contracts from structured scene analysis or SOT-defined interactions rather than LLM classification of 'reasons'.", "severity": "P1", "why_problematic": "Requires the LLM to classify the underlying spatial logic of a scene into a closed list of reasons to trigger a spatial contract. This is a semantic judgment that routes how spatial constraints are applied."}], "path": "prompts/_base/shot_staging/10.202605141617/system.md", "scan_kind": "prompt", "sha256": "25b643418f6c0dfd17a291bf51b2ff4620ccf52b2042de11d73a50970d02bfc0"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 278, "chunk_start": 1, "chunk_summary": "The system prompt contains scenario-specific trope examples to justify poses and hardcoded semantic labels for character states as gaze targets.", "duration_ms": 27799, "findings": [{"category": "scenario_dependent_prompt", "evidence": "법정 선서, 장례식 고별, 점호, 연설단, 결혼식 서약", "line_end": 87, "line_start": 85, "recommended_fix": "Replace specific scenario examples with abstract criteria for 'justified static poses' (e.g., formal ceremonies, ritualistic stillness) or move these to a scenario-specific configuration.", "severity": "P2", "why_problematic": "The prompt uses specific scenario tropes (courtroom, funeral, etc.) as hardcoded examples to justify an exception to the 'no standing' rule. This biases the LLM towards these specific contexts and should be handled by a more generic rule or a structured world-rule SOT."}, {"category": "llm_closed_list_instruction", "evidence": "\"distant\", \"void\", \"closed\", \"unconscious\", \"dead\", \"severely_injured\"", "line_end": 123, "line_start": 119, "recommended_fix": "Define these states in a shared schema or enum, and ensure the LLM receives character status as structured input rather than inferring it from narrative text to emit these specific strings.", "severity": "P2", "why_problematic": "The prompt instructs the LLM to classify character gaze and physical states into a closed list of semantic strings. These labels represent semantic interpretations of character status that should be derived from structured state data rather than inferred and hardcoded in the base prompt."}], "path": "prompts/_base/shot_staging/11.202605150319/system.md", "scan_kind": "prompt", "sha256": "8b681e3cbcd7e287aa4d96d09a39025aabe0d3ca290fae1fe055093d6fde82b9"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 28, "chunk_start": 1, "chunk_summary": "The JSON schema defines the structure for shot validation and contains no scenario-specific pollution or semantic string judgment logic.", "duration_ms": 4122, "findings": [], "path": "prompts/_base/shot_validator/1.202604181200/validator_schema.json", "scan_kind": "prompt", "sha256": "862a49f67970651da50e3ec83673cdffa63f9f82720588b170c09b1cc79f691a"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 68, "chunk_start": 1, "chunk_summary": "The schema defines shot staging parameters but contains closed-list instructions that force the LLM to classify narrative states and visual tropes into hardcoded categories.", "duration_ms": 31068, "findings": [{"category": "llm_closed_list_instruction", "evidence": "voyeur, hallucination, dream, memory", "line_end": 22, "line_start": 11, "recommended_fix": "Transition these fields to use values defined by a Style SOT or allow for open-ended visual treatment descriptions.", "severity": "P2", "why_problematic": "Hardcodes a limited set of narrative and visual tropes into the schema descriptions. This restricts open-world flexibility and forces the LLM to map scenario-specific visual contexts into a closed set of predefined modes, which should ideally be driven by a style-specific SOT."}, {"category": "llm_closed_list_instruction", "evidence": "'unconscious', 'dead', 'severely_injured'", "line_end": 40, "line_start": 40, "recommended_fix": "Separate character physical status into a dedicated field or allow natural language descriptions of eye/facial state.", "severity": "P2", "why_problematic": "Overloads the gaze_target field with narrative character health states. This forces the LLM to perform semantic classification of a character's physical condition within a field intended for spatial orientation."}], "path": "prompts/_base/shot_staging/6.202604151200/schema.json", "scan_kind": "prompt", "sha256": "a1309f9ee204f3c59147ca6606b725b242c3457b91ef808098e78be53a209964"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 28, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 3117, "findings": [], "path": "prompts/_base/shot_validator/2.202604201230/validator_schema.json", "scan_kind": "prompt", "sha256": "862a49f67970651da50e3ec83673cdffa63f9f82720588b170c09b1cc79f691a"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 68, "chunk_start": 1, "chunk_summary": "The schema contains scenario-specific prop examples (CCTV, phone, pedal, desk) and hardcoded narrative states (dead, unconscious) in field descriptions, biasing the LLM toward modern settings and specific character conditions.", "duration_ms": 34962, "findings": [{"category": "scenario_dependent_prompt", "evidence": "through_device (CCTV/phone/binoculars)", "line_end": 21, "line_start": 21, "recommended_fix": "Remove specific prop examples or replace them with abstract categories (e.g., 'optical instrument', 'remote sensor').", "severity": "P2", "why_problematic": "Hardcoded examples of modern technology bias the LLM's interpretation of 'through_device' for non-modern or fantasy scenarios where such devices do not exist."}, {"category": "scenario_dependent_prompt", "evidence": "'one foot on pedal', 'leaning against doorframe', 'crouching behind desk', 'slumping into chair'", "line_end": 39, "line_start": 39, "recommended_fix": "Use abstract pose descriptions (e.g., 'braced against a surface') and move variety guidance to a general style SOT rather than hardcoding prop-dependent examples.", "severity": "P2", "why_problematic": "The description uses specific modern/interior props as examples for body poses and includes a negative constraint on the word 'standing'. This biases the LLM in scenarios where these objects are unavailable and uses a token-based heuristic to force visual variety. It also contains a hardcoded reference to a specific Korean section name in another prompt."}, {"category": "llm_closed_list_instruction", "evidence": "'closed', 'unconscious', 'dead', 'severely_injured'", "line_end": 40, "line_start": 40, "recommended_fix": "Separate visual eye-state from narrative status, or ensure these states are provided by the character's current state metadata.", "severity": "P2", "why_problematic": "Narrative character states are hardcoded as valid 'gaze_target' values. This forces the LLM to perform semantic classification of character health/status within a field intended for spatial targeting, which should be driven by a character status SOT."}], "path": "prompts/_base/shot_staging/7.202604181200/schema.json", "scan_kind": "prompt", "sha256": "e36ce04980cfd7c8a26d7f8a7d8bfcde76b3683397e34b01a40da4229f8de226"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 204, "chunk_start": 1, "chunk_summary": "The prompt contains scenario-specific examples for pose exceptions, hardcoded semantic labels for character states, and specific visual trope examples that bias open-world generation.", "duration_ms": 19994, "findings": [{"category": "scenario_dependent_prompt", "evidence": "법정 선서, 장례식 고별, 점호, 연설단, 결혼식 서약", "line_end": 100, "line_start": 99, "recommended_fix": "Replace specific scenario names with abstract categories or move the exception logic to a structured scene attribute (e.g., is_ceremonial: true).", "severity": "P1", "why_problematic": "Specific scenario tropes (courtroom, funeral, etc.) are used to define logic exceptions for character poses. This biases the LLM towards these specific contexts and should be abstracted into a 'formal_context' or 'ceremonial' flag in the SOT rather than being hardcoded in the base prompt."}, {"category": "llm_closed_list_instruction", "evidence": "\"dead\" 또는 \"severely_injured\"", "line_end": 137, "line_start": 136, "recommended_fix": "Allow natural language descriptions for gaze targets or use a standardized character state enum from the SOT.", "severity": "P2", "why_problematic": "Hardcodes specific semantic states as valid gaze targets. This is a closed-list classifier for open-world character states that might be better handled by natural language description or a broader state enum from the SOT."}, {"category": "scenario_dependent_prompt", "evidence": "TV 빛만으로 조명, 블라인드 줄무늬 그림자, 역광 실루엣, 촛불, 네온", "line_end": 151, "line_start": 146, "recommended_fix": "Use more abstract descriptions of lighting and framing techniques (e.g., 'high contrast lighting', 'obstructed view') instead of specific prop-based examples.", "severity": "P2", "why_problematic": "Specific visual tropes and props are provided as examples for creative framing. This can bias the LLM to inject these specific elements (like TV light or neon) into scenarios where they may not be contextually appropriate."}], "path": "prompts/_base/shot_staging/9.202605121441/system.md", "scan_kind": "prompt", "sha256": "c50794ebcd115531b25470b3f448fe88a1da533227d11dd0c698fa58a7a8e96a"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 53, "chunk_start": 1, "chunk_summary": "The shot validator prompt uses a closed list of temporal connectors and scenario-specific action tropes to enforce the 'single moment' rule.", "duration_ms": 18145, "findings": [{"category": "llm_closed_list_instruction", "evidence": "- \"~하자\", \"~하면서\", \"~하며\", \"~하고\", \"~한 뒤\", \"~한 후\", \"~하고 나서\" ... \"and then\", \"while ~ing\"", "line_end": 15, "line_start": 11, "recommended_fix": "Replace the forbidden phrase list with a conceptual definition of temporal progression and provide diverse examples of 'state' vs 'action' that do not rely on specific substrings.", "severity": "P1", "why_problematic": "The prompt instructs the LLM to classify shot validity based on a hardcoded list of natural language connectors. This is a pattern-based semantic judgment that can lead to brittle validation across different writing styles or languages."}, {"category": "scenario_dependent_prompt", "evidence": "\"피묻은 손으로 칼을 쥐고 있는\", \"총을 겨누며\", \"총을 겨눈 채\"", "line_end": 27, "line_start": 19, "recommended_fix": "Use genre-neutral examples (e.g., 'holding an object', 'gazing at a horizon') to define the visual boundaries of a single moment.", "severity": "P2", "why_problematic": "The validation logic is illustrated using specific action/thriller tropes (bloody hands, guns). This scenario-specific pollution biases the LLM's understanding of 'static states' toward a narrow set of genres."}], "path": "prompts/_base/shot_validator/1.202604181200/system.md", "scan_kind": "prompt", "sha256": "897c56b4d93b85ede692fac15cd87c537b13236d10a70e6c483ca3a7e88ff8f2"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 28, "chunk_start": 1, "chunk_summary": "No actionable findings; the file defines a technical JSON schema for shot validation without scenario-specific pollution or semantic string judgment.", "duration_ms": 4576, "findings": [], "path": "prompts/_base/shot_validator/3.202604301730/validator_schema.json", "scan_kind": "prompt", "sha256": "862a49f67970651da50e3ec83673cdffa63f9f82720588b170c09b1cc79f691a"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 68, "chunk_start": 1, "chunk_summary": "The schema contains several instances of scenario-specific pollution in descriptions and closed-list semantic classifiers that restrict open-world visual and story logic.", "duration_ms": 37286, "findings": [{"category": "llm_closed_list_instruction", "evidence": "hallucination, dream, memory, reflection, through_device (CCTV/phone/binoculars), projection", "line_end": 21, "line_start": 21, "recommended_fix": "Allow natural language descriptions for visual treatment or move these to a structured style SOT that can be extended per scenario.", "severity": "P1", "why_problematic": "This field uses a closed list of semantic tropes to drive visual routing ('Affects visual treatment'). This restricts the open-world nature of visual storytelling to a fixed set of predefined categories rather than allowing the scenario to define its own visual modes."}, {"category": "scenario_dependent_prompt", "evidence": "'one foot on pedal', 'leaning against doorframe', 'crouching behind desk', 'slumping into chair'", "line_end": 39, "line_start": 39, "recommended_fix": "Use abstract or generic examples (e.g., 'leaning against a surface', 'interacting with a tool') and remove specific prop references from the base schema.", "severity": "P2", "why_problematic": "The description contains specific props (pedal, doorframe, desk, chair) as examples for body poses. This can bias the LLM towards these objects even when they are not present in the current scenario context."}, {"category": "llm_closed_list_instruction", "evidence": "'unconscious', 'dead', 'severely_injured'", "line_end": 40, "line_start": 40, "recommended_fix": "Separate character physical state from gaze target, or allow natural language for state-driven gaze descriptions.", "severity": "P1", "why_problematic": "Semantic character states are used as a closed-list classifier for a visual property (gaze). This forces the LLM to map complex character states to a few hardcoded strings to communicate visual intent, which should instead be derived from a character state SOT."}, {"category": "scenario_dependent_prompt", "evidence": "'screen facing camera', 'back panel visible', 'reflecting character face'", "line_end": 53, "line_start": 53, "recommended_fix": "Replace with generic orientation examples such as 'front side facing camera' or 'angled away from viewer'.", "severity": "P2", "why_problematic": "The orientation field uses specific props (screen, back panel) and scenario-specific visual outcomes (reflecting face) as examples, which biases the LLM's generation for arbitrary background elements."}], "path": "prompts/_base/shot_staging/8.202604201230/schema.json", "scan_kind": "prompt", "sha256": "e36ce04980cfd7c8a26d7f8a7d8bfcde76b3683397e34b01a40da4229f8de226"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 53, "chunk_start": 1, "chunk_summary": "The shot validator system prompt defines generic linguistic rules for enforcing a 'still moment' constraint without scenario-specific pollution or hard-coded story logic.", "duration_ms": 14818, "findings": [], "path": "prompts/_base/shot_validator/2.202604201230/system.md", "scan_kind": "prompt", "sha256": "28c26605172c1f961c834db04f18e77be2180fb843f729e2390b6fede68afcfb"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 76, "chunk_start": 1, "chunk_summary": "The schema defines semantic classification logic for background elements and overloads character health/state into spatial gaze fields.", "duration_ms": 28847, "findings": [{"category": "semantic_string_judgment", "evidence": "Must NOT use 'standing' alone — use action-grounded or state-grounded poses such as 'one foot on pedal', 'leaning against doorframe'", "line_end": 39, "line_start": 39, "recommended_fix": "Remove the hard negative constraint and move pose variety guidance to a style-guide SOT that doesn't rely on specific prop examples in the schema.", "severity": "P2", "why_problematic": "Implements a hard negative constraint on natural language ('standing') and provides specific prop-based examples (pedal, doorframe, desk) which biases the LLM towards certain environmental tropes. It also references an external system prompt 'body_pose 다양화' for guidance, indicating scattered logic."}, {"category": "llm_closed_list_instruction", "evidence": "'unconscious', 'dead', 'severely_injured'", "line_end": 40, "line_start": 40, "recommended_fix": "Move character status (dead, injured, unconscious) to a dedicated character_state field and keep gaze_target strictly for spatial or object targets.", "severity": "P1", "why_problematic": "The gaze_target field is overloaded with character health and consciousness states. This forces the LLM to use specific semantic strings to signal character status within a field intended for spatial orientation, leading to brittle visual routing and schema drift."}, {"category": "llm_closed_list_instruction", "evidence": "directionality_class", "line_end": 62, "line_start": 58, "recommended_fix": "Derive directionality from a structured world-state or object-property SOT rather than asking the LLM to classify it on-the-fly during shot staging.", "severity": "P1", "why_problematic": "The LLM is instructed to perform semantic classification of arbitrary background elements into a closed list (content_surface, reflective_surface, etc.) to drive conditional description requirements. The instruction 'Judge by meaning, not by surface vocabulary' forces the LLM to perform open-world semantic judgment to satisfy schema validation."}], "path": "prompts/_base/shot_staging/9.202605121441/schema.json", "scan_kind": "prompt", "sha256": "44994153c2f52d4664486a69bc901a4127e4dd1ade16d371a2a695b9812a3208"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 194, "chunk_start": 1, "chunk_summary": "The prompt defines a closed list of semantic character states to be used as values in a spatial field and introduces potential schema drift by mixing English keywords with Korean natural language.", "duration_ms": 32159, "findings": [{"category": "llm_closed_list_instruction", "evidence": "\"closed\" 또는 \"unconscious\", \"dead\", \"severely_injured\"", "line_end": 137, "line_start": 135, "recommended_fix": "Separate character state (e.g., 'status') from spatial gaze target. Define these states in a shared schema or SOT rather than hardcoding them as gaze target values.", "severity": "P1", "why_problematic": "The prompt instructs the LLM to classify character states into a closed list of English string tokens within the 'gaze_target' field. This overloads a spatial property with semantic status information and creates a hidden dependency on these specific strings for downstream visual logic or T2I prompt construction."}, {"category": "schema_or_enum_drift", "evidence": "(\"휴대전화\", \"벽의 표식\", \"창가의 사진\") vs (\"distant\", \"void\", \"dead\")", "line_end": 138, "line_start": 132, "recommended_fix": "Standardize the language of the 'gaze_target' field (preferably English) and use a consistent format for distinguishing between entities and keywords.", "severity": "P2", "why_problematic": "The 'gaze_target' field is instructed to contain a mix of Korean natural language (for objects), character names (from context), and English keywords (for states/directions). This inconsistency makes the field difficult to parse, validate, or translate reliably in the downstream pipeline."}], "path": "prompts/_base/shot_staging/8.202604201230/system.md", "scan_kind": "prompt", "sha256": "6bb30298d30171e9739986b031673d04ed9a203d64406d3ffabc5031a0af9f4e"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 38, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 10051, "findings": [], "path": "prompts/_base/shot_validator/4.202605061408/validator_schema.json", "scan_kind": "prompt", "sha256": "c1c4cf0621c3162a2e79183c04809bb894ec4ab0750d387f96a1175969f40372"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 16, "chunk_start": 1, "chunk_summary": "No actionable findings; the prompt template uses generic placeholders for scene, camera, lighting, and entity traits without scenario-specific pollution.", "duration_ms": 3052, "findings": [], "path": "prompts/_base/t2i_composer/v1/user.md", "scan_kind": "prompt", "sha256": "81af21682d5f98b7f21ae45575b86c796400e419ed0d7465df66c1757c212882"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 38, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 8627, "findings": [], "path": "prompts/_base/shot_validator/5.202605081700/validator_schema.json", "scan_kind": "prompt", "sha256": "0d269a0576fdd7f1b9eb1cf590b1b4ee71ba3fb68d1af49309fd1ff4ba9cfdc8"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 32, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 6425, "findings": [], "path": "prompts/_base/t2i_review/1.202604051200/entity_schema.json", "scan_kind": "prompt", "sha256": "ce4e5fc5d797fe55a29afa2ad41803aae4f9bbf5c354c826da43f3eb79ca8067"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 32, "chunk_start": 1, "chunk_summary": "The system prompt is generally well-structured for T2I conversion but contains a genre-specific negative constraint in the boilerplate list.", "duration_ms": 14539, "findings": [{"category": "scenario_dependent_prompt", "evidence": "\"near-future\"", "line_end": 32, "line_start": 32, "recommended_fix": "Remove 'near-future' from the base boilerplate blacklist. Genre-specific negative constraints should be handled via a structured style SOT or a scenario-specific prompt layer.", "severity": "P2", "why_problematic": "The term 'near-future' is a specific genre or setting description, unlike 'photorealistic' or 'cinematic lighting' which are generic T2I quality tags. Including it in a base system prompt's negative constraints indicates scenario-specific pollution that could suppress valid setting descriptions if the system is used for diverse genres."}], "path": "prompts/_base/t2i_composer/v1/system.md", "scan_kind": "prompt", "sha256": "c39f835ea9988a6962b8aefb08faafd0d9610bce33845981ab7d2aed217a1912"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 201, "chunk_start": 1, "chunk_summary": "The prompt contains multiple closed-list keyword classifiers and linguistic patterns used to drive semantic shot validation and entity mapping logic.", "duration_ms": 20839, "findings": [{"category": "llm_closed_list_instruction", "evidence": "\"~하자\", \"~하면서\", \"and then\", \"while ~ing\"", "line_end": 16, "line_start": 12, "recommended_fix": "Shift to high-level semantic principles or use a structured grammar validator if strictness is required.", "severity": "P1", "why_problematic": "Uses a closed list of linguistic patterns to decide if a description violates the 'single moment' rule, which can lead to brittle validation of open-world story text."}, {"category": "llm_closed_list_instruction", "evidence": "locomotion: running / sprinting / walking / striding / climbing", "line_end": 41, "line_start": 36, "recommended_fix": "Define these categories in a structured World/Action SOT and pass them as context rather than hardcoding in the system prompt.", "severity": "P1", "why_problematic": "Hardcodes specific action categories to trigger motion-direction preservation logic, biasing the LLM toward a fixed set of verbs for open-world motion analysis."}, {"category": "semantic_string_judgment", "evidence": "entity name 정확 일치 또는 description 안 character 표현이 entity name substring 일치", "line_end": 86, "line_start": 80, "recommended_fix": "Use unique identifiers or a more robust semantic similarity check backed by a character registry.", "severity": "P1", "why_problematic": "Instructs the LLM to use substring matching for entity mapping, which is a pattern-based semantic judgment that can lead to false positives in character identification."}, {"category": "llm_closed_list_instruction", "evidence": "stabbing, slashing, piercing, 찌름, 베기, 칼날", "line_end": 115, "line_start": 113, "recommended_fix": "Move action classification to a dedicated semantic analysis step or use a broader ontological definition.", "severity": "P1", "why_problematic": "Hardcodes violence-related keywords to trigger 'active contact' freeze rules, creating a closed-world classifier for open-world actions."}, {"category": "llm_closed_list_instruction", "evidence": "얼굴, 손, 다리, 팔, 머리, 가슴, 목, 입, 눈, 어깨, 등, 발, 무릎, 허벅지, face, hand, leg, arm", "line_end": 161, "line_start": 159, "recommended_fix": "Rely on the structured entity map and scene director's present_entity_ids rather than keyword detection.", "severity": "P1", "why_problematic": "Uses a hardcoded list of body parts and basic actions to detect 'visible-human-action', which is a brittle way to determine entity presence and affects fail-fast routing."}], "path": "prompts/_base/shot_validator/4.202605061408/system.md", "scan_kind": "prompt", "sha256": "376168b0e08ec20e48185adf92a96fab18f8349c34821e0a27f177ec851a3015"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 33, "chunk_start": 1, "chunk_summary": "The file defines a standard JSON schema for T2I prompt review results and does not contain scenario-specific pollution or problematic semantic logic.", "duration_ms": 11677, "findings": [], "path": "prompts/_base/t2i_review/1.202604051200/scene_schema.json", "scan_kind": "prompt", "sha256": "8313e00221e938e3c4d6aa202f2de8a06b4aaf15430d28dd46b3ffc37afaae3e"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 201, "chunk_start": 1, "chunk_summary": "The prompt uses substring matching for entity resolution and closed-list keyword patterns to classify human actions and temporal sequences, which drives routing and validation logic.", "duration_ms": 23545, "findings": [{"category": "semantic_string_judgment", "evidence": "entity name substring 일치... name / stable_traits substring 매칭", "line_end": 86, "line_start": 80, "recommended_fix": "Remove substring matching instructions. Rely on the LLM's semantic understanding of the entity map or use a dedicated entity resolution step that handles ambiguity through context rather than string patterns.", "severity": "P1", "why_problematic": "Instructing the LLM to use substring matching to resolve entity IDs (C##) from natural language descriptions is a brittle heuristic. It risks incorrect character tagging if common nouns in the description overlap with entity names or traits."}, {"category": "llm_closed_list_instruction", "evidence": "신체 부위 표현 (얼굴, 손, 다리, 팔, 머리, 가슴, 목, 입, 눈, 어깨, 등, 발, 무릎, 허벅지, face, hand, leg, arm 등) 등장", "line_end": 161, "line_start": 159, "recommended_fix": "Define 'visible-human-action' semantically (e.g., 'any action performed by or involving a human figure') and allow the LLM to use its internal knowledge to identify these cases instead of relying on a token list.", "severity": "P2", "why_problematic": "The prompt defines 'visible-human-action' using a closed list of body parts and verbs. This classification drives a fail-fast condition (Line 172), which can lead to false negatives if a human action is described using synonyms or specific terms not included in the list."}, {"category": "llm_closed_list_instruction", "evidence": "\"~하자\", \"~하면서\", \"~하며\", \"~하고\", \"~한 뒤\", \"~한 후\", \"~하고 나서\" ... \"and then\", \"while ~ing\", \"after ~ing\", \"as ~\"", "line_end": 16, "line_start": 14, "recommended_fix": "Focus the instruction on the semantic concept of a 'single shutter moment' (1/1000s) and provide examples of sequential vs. static logic rather than a list of forbidden strings.", "severity": "P2", "why_problematic": "Enforcing the 'single moment' rule via a closed list of temporal connectors is a pattern-based judgment. It may fail to catch sequential actions described without these specific words or incorrectly flag valid descriptions where these words are used non-sequentially."}], "path": "prompts/_base/shot_validator/5.202605081700/system.md", "scan_kind": "prompt", "sha256": "376168b0e08ec20e48185adf92a96fab18f8349c34821e0a27f177ec851a3015"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 28, "chunk_start": 1, "chunk_summary": "The prompt contains scenario-specific examples and instructions for semantic judgment regarding nationality, proper nouns, and cultural items that should be driven by a structured SOT.", "duration_ms": 21979, "findings": [{"category": "scenario_dependent_prompt", "evidence": "직원, 경찰, 행인 등 / \"Incheon\" → \"인천\" / 특정 문화권의 고유 공간/물건/관습", "line_end": 17, "line_start": 15, "recommended_fix": "Remove scenario-specific examples like 'Incheon'. Replace the open-ended cultural restoration instruction with a reference to a structured glossary or world-rule SOT that defines which terms must remain in their original language and what that language is for the current scenario.", "severity": "P1", "why_problematic": "The prompt uses scenario-specific examples (Incheon, Korean names) and instructs the LLM to perform semantic classification of 'common nouns' and 'cultural items' based on its internal bias. This assumes a Korean-centric scenario and forces the LLM to decide what constitutes a cultural object or 'original language' without a structured World/Rule SOT."}, {"category": "schema_or_enum_drift", "evidence": "지명·상호명 등이 영어로 번역된 경우 (예: \"Incheon\" → \"인천\")", "line_end": 16, "line_start": 16, "recommended_fix": "Clarify whether the T2I prompt should contain English or original-language proper nouns, and ensure the example matches the direction of the transformation.", "severity": "P2", "why_problematic": "There is a logical contradiction between the instruction 'translated to English' and the example provided ('Incheon' -> '인천'), where the suggestion is Korean. Additionally, this contradicts line 12 which states T2I prompts are English."}], "path": "prompts/_base/t2i_review/1.202604051200/scene_system.md", "scan_kind": "prompt", "sha256": "8048a007d041cb810d4a54179483e3f9fc065507b8ccc7247e91cf44d267c8f8"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 24, "chunk_start": 1, "chunk_summary": "The prompt contains scenario-specific examples and enforces semantic visual requirements that should be driven by structured world rules.", "duration_ms": 29940, "findings": [{"category": "scenario_dependent_prompt", "evidence": "(예: \"Incheon\" → \"인천\"이어야 함)", "line_end": 13, "line_start": 13, "recommended_fix": "Remove the specific example or move it to a scenario-specific configuration. Define translation/transliteration rules in a structured SOT.", "severity": "P1", "why_problematic": "Uses a specific real-world location ('Incheon') as a hard-coded example to define a translation rule. This pollutes the base prompt with scenario-specific data and implies a potentially problematic requirement to use Korean characters in English T2I prompts."}, {"category": "llm_closed_list_instruction", "evidence": "1. **국적/인종 누락**: 인간형 인물이나 사진/그림 속 인물에 국적/인종이 빠진 경우", "line_end": 12, "line_start": 12, "recommended_fix": "Make this check optional or drive it from a structured 'required_attributes' list in the entity SOT.", "severity": "P2", "why_problematic": "Enforces a mandatory semantic visual attribute (nationality/race) for all human entities. This is an open-world visual decision that should be governed by a world-rule SOT or scenario context rather than a hard-coded instruction in a base review prompt."}], "path": "prompts/_base/t2i_review/1.202604051200/entity_system.md", "scan_kind": "prompt", "sha256": "34225c1c41ebf7143c8ec08b1c334a417ed1961c809bca720ca529fd9d7ab00b"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 32, "chunk_start": 1, "chunk_summary": "The schema defines a review structure that uses substring-based replacement and hardcodes specific semantic validation categories like ethnicity.", "duration_ms": 24112, "findings": [{"category": "llm_closed_list_instruction", "evidence": "\"enum\": [\"missing_ethnicity\", \"proper_noun_translated\", \"awkward_translation\"]", "line_end": 16, "line_start": 16, "recommended_fix": "Generalize the validation types to allow for arbitrary attribute checks (e.g., 'missing_required_attribute') where the specific attribute is determined by the world-rule or entity definition.", "severity": "P1", "why_problematic": "Hardcoding 'missing_ethnicity' as a primary validation category enforces a specific visual requirement that may not be universally applicable (e.g., for non-human entities or stylized characters). This closed-list approach biases the review process toward specific visual traits that should instead be driven by the scenario's SOT or style guide."}, {"category": "blind_string_mutation", "evidence": "\"target\": {\"type\": \"string\", \"description\": \"T2I 원문에서 정확히 찾을 수 있는 치환 대상\"}, \"suggestion\": {\"type\": \"string\", \"description\": \"target을 대체할 문자열\"}", "line_end": 18, "line_start": 17, "recommended_fix": "Implement a structured update mechanism that targets specific entity attributes or prompt components (e.g., updating a 'physical_description' field) rather than performing raw string substitution on the final prompt text.", "severity": "P1", "why_problematic": "The schema facilitates direct substring replacement ('target' to 'suggestion') in the T2I prompt based on LLM judgment. This is a blind mutation pattern that can fail if the LLM provides an inexact match or if the same substring appears in multiple contexts, potentially corrupting the prompt's semantic structure or visual intent."}], "path": "prompts/_base/t2i_review/2.202605081200/entity_schema.json", "scan_kind": "prompt", "sha256": "70626235b41084ce75cadea8f5fd5a67081c1eebd0c06388b9d628364f45b409"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 94, "chunk_start": 1, "chunk_summary": "The review prompt contains several instances of hard-coded semantic judgment patterns, demographic injection rules, and scenario-specific pollution in examples.", "duration_ms": 30420, "findings": [{"category": "llm_closed_list_instruction", "evidence": "missing_ethnicity — 보통명사 인물의 국적/인종 누락... suggestion: 인종 형용사를 포함한 형태 (예: \"an Asian man in a security uniform\")", "line_end": 19, "line_start": 16, "recommended_fix": "Remove demographic injection logic from the reviewer prompt and ensure common noun demographics are handled by the scene generation SOT or character metadata.", "severity": "P1", "why_problematic": "Instructs the LLM to inject specific demographic adjectives (race/ethnicity) into common nouns based on a closed-list logic. This forces visual decisions that should be driven by a structured world/character SOT rather than a blind reviewer rule."}, {"category": "semantic_string_judgment", "evidence": "\"the existing tabletop / kitchen / desk / curtain / doorway\" ... \"low at ground/floor/quay level\" ... \"Figure A occupies the right foreground...\"", "line_end": 70, "line_start": 35, "recommended_fix": "Replace hard-coded phrase lists with abstract physical/spatial constraints or move the validation logic to a structured geometric/physical validator.", "severity": "P1", "why_problematic": "Uses closed lists of props, camera positions, and spatial descriptions to judge visual/physical validity and trigger prompt mutations. This pattern-based semantic judgment is brittle and fails for open-world scenarios not covered by these specific phrases (e.g., 'quay level' is highly specific)."}, {"category": "scenario_dependent_prompt", "evidence": "\"dark bitter herbal drink\", \"kitchenette\", \"worn wooden table\" ... \"casual jacket\", \"bench\", \"can\"", "line_end": 78, "line_start": 46, "recommended_fix": "Use generic or abstract examples (e.g., 'a specific beverage', 'a piece of furniture') to demonstrate the review logic without polluting the prompt with scenario-specific details.", "severity": "P2", "why_problematic": "The examples contain scenario-specific props and detailed descriptions that can bias the LLM's review behavior towards specific story contexts or tropes."}], "path": "prompts/_base/t2i_review/2.202604301730/scene_system.md", "scan_kind": "prompt", "sha256": "c9a6b5c28305b18838dfd3e4b3ae6b3d928ea8bb384a8506b2c9aa99e158d8a2"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 43, "chunk_start": 1, "chunk_summary": "The schema defines a T2I review structure that uses substring-based replacement for prompt editing and a hardcoded list of semantic issue categories.", "duration_ms": 34949, "findings": [{"category": "llm_closed_list_instruction", "evidence": "\"enum\": [\"missing_ethnicity\", \"proper_noun_translated\", \"awkward_translation\", \"close_framing_existing_ref\", \"physical_inconsistency\", \"unshared_fg_bg_actors\"]", "line_end": 26, "line_start": 19, "recommended_fix": "Move these categories to a dynamic configuration or a structured 'Quality Rule' SOT that the LLM can reference, allowing the review criteria to evolve without schema changes.", "severity": "P1", "why_problematic": "The review process is restricted to a hardcoded set of semantic categories. This forces the LLM to map open-world visual/story issues into a closed list of domain tropes (e.g., ethnicity, actor sharing) that should instead be defined by a structured Rule/Quality SOT."}, {"category": "blind_string_mutation", "evidence": "\"target\": {\"type\": \"string\", \"description\": \"T2I 원문에서 정확히 찾을 수 있는 치환 대상 (unique sub-string)\"}, \"suggestion\": {\"type\": \"string\", \"description\": \"target을 대체할 문자열\"}", "line_end": 29, "line_start": 28, "recommended_fix": "Use a structured prompt representation (e.g., an object with specific fields for actors, setting, and style) so that updates can be applied to specific nodes rather than via raw string replacement.", "severity": "P1", "why_problematic": "The schema facilitates prompt editing via substring replacement ('target' and 'suggestion'). This is a 'blind replace' pattern that can lead to corruption of the visual prompt if the target string is not unique or appears as a substring of other words, rather than using a structured prompt update mechanism."}], "path": "prompts/_base/t2i_review/2.202604301730/scene_schema.json", "scan_kind": "prompt", "sha256": "b481b4477ee4914863820fb5bf579a72c75c82ced97d42960de588671e2bcf9f"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 53, "chunk_start": 1, "chunk_summary": "The schema defines a review structure that utilizes blind string replacement for T2I prompt refinement, which is a high-risk pattern for visual semantic mutation.", "duration_ms": 16474, "findings": [{"category": "blind_string_mutation", "evidence": "\"target\": {\"type\": \"string\", \"description\": \"T2I 원문에서 정확히 찾을 수 있는 치환 대상 (unique sub-string)\"}, \"suggestion\": {\"type\": \"string\", \"description\": \"target을 대체할 문자열\"}", "line_end": 39, "line_start": 38, "recommended_fix": "Transition to a structured prompt update mechanism where the LLM identifies specific semantic components (e.g., 'subject', 'lighting', 'framing') to be modified, rather than performing raw string substitution.", "severity": "P1", "why_problematic": "The schema instructs the LLM to perform direct substring replacement ('blind replace') on the T2I prompt text. This bypasses structured semantic control and risks corrupting the prompt if the LLM identifies an incorrect or non-unique substring, or if the replacement creates grammatical or semantic incoherence in the final visual prompt."}], "path": "prompts/_base/t2i_review/2.202605081200/scene_schema.json", "scan_kind": "prompt", "sha256": "d598177de93e41da9cbb507e3f064450a97016639329dacc408740a12e76a223"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 23, "chunk_start": 1, "chunk_summary": "The prompt defines hard-coded semantic validation rules for nationality, proper nouns, and translation quality that should be driven by a structured SOT.", "duration_ms": 38710, "findings": [{"category": "llm_closed_list_instruction", "evidence": "1. **국적/인종 누락**: 인간형 인물이나 사진/그림 속 인물에 국적/인종이 빠진 경우", "line_end": 11, "line_start": 11, "recommended_fix": "Move visual requirements like mandatory nationality/race to a structured style SOT or entity-specific metadata, and instruct the reviewer to check against those specific requirements.", "severity": "P1", "why_problematic": "This hard-codes a visual requirement (nationality/race) for all humanoid entities. This is a visual policy decision that should be part of a structured style SOT or entity schema. Forcing this at the reviewer level without checking if the source scenario requires it leads to hallucinated requirements or biased visual generation."}, {"category": "llm_closed_list_instruction", "evidence": "2. **고유명사 번역**: 지명·상호명 등 고유명사가 영어로 번역되어 원어 뉘앙스가 손실된 경우... 3. **원어 어색**", "line_end": 13, "line_start": 12, "recommended_fix": "Provide a structured glossary or entity mapping in the context and instruct the reviewer to validate translations against that mapping.", "severity": "P1", "why_problematic": "These instructions require the LLM to make subjective semantic judgments on 'nuance loss' and 'awkwardness' for open-world proper nouns (places, businesses). This logic should be supported by a structured glossary or entity SOT to ensure consistent handling of names and places across the pipeline, rather than relying on LLM intuition."}], "path": "prompts/_base/t2i_review/2.202604301730/entity_system.md", "scan_kind": "prompt", "sha256": "c79668a8ab97b4ebf26f285cf54001935906c4a9888103ec25a773426fc4ece4"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 23, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 24021, "findings": [], "path": "prompts/_base/t2i_review/2.202605081200/entity_system.md", "scan_kind": "prompt", "sha256": "c79668a8ab97b4ebf26f285cf54001935906c4a9888103ec25a773426fc4ece4"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 32, "chunk_start": 1, "chunk_summary": "The schema defines a T2I review structure that uses string-level replacement for prompt correction and hardcodes specific semantic error categories.", "duration_ms": 46927, "findings": [{"category": "llm_closed_list_instruction", "evidence": "\"enum\": [\"missing_ethnicity\", \"proper_noun_translated\", \"awkward_translation\"]", "line_end": 16, "line_start": 16, "recommended_fix": "Move these validation rules to a dynamic configuration or a structured 'Rule SOT' that the LLM references, and allow the 'type' field to be a more flexible string or a broader set of categories provided at runtime.", "severity": "P1", "why_problematic": "Hardcoding specific semantic error categories like 'missing_ethnicity' and 'proper_noun_translated' into the schema forces the LLM to apply these specific visual and linguistic policies regardless of the scenario context. These rules should be part of a dynamic SOT (Source of Truth) rather than fixed schema enums."}, {"category": "blind_string_mutation", "evidence": "\"target\": {\"type\": \"string\", \"description\": \"T2I 원문에서 정확히 찾을 수 있는 치환 대상\"}, \"suggestion\": {\"type\": \"string\", \"description\": \"target을 대체할 문자열\"}", "line_end": 18, "line_start": 17, "recommended_fix": "Replace the string-replacement mechanism with structured feedback that allows the pipeline to re-generate the prompt from the original entity/scene data, or use a more robust merging strategy that doesn't rely on raw string matching.", "severity": "P1", "why_problematic": "The schema is designed to facilitate string-level search-and-replace ('target' and 'suggestion') to 'fix' T2I prompts. This is a fragile pattern that can lead to unintended mutations if the target string appears in multiple contexts or if the LLM selects an ambiguous substring. It bypasses structured prompt generation."}], "path": "prompts/_base/t2i_review/2.202604301730/entity_schema.json", "scan_kind": "prompt", "sha256": "70626235b41084ce75cadea8f5fd5a67081c1eebd0c06388b9d628364f45b409"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 23, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 17517, "findings": [], "path": "prompts/_base/t2i_review/2.202605081600/entity_system.md", "scan_kind": "prompt", "sha256": "c79668a8ab97b4ebf26f285cf54001935906c4a9888103ec25a773426fc4ece4"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 53, "chunk_start": 1, "chunk_summary": "The file defines a JSON schema for T2I prompt review results, including technical IDs and a set of semantic error categories; no actionable findings were identified.", "duration_ms": 15783, "findings": [], "path": "prompts/_base/t2i_review/2.202605081600/scene_schema.json", "scan_kind": "prompt", "sha256": "e772190324d90ec45265b2eff9a613eeb44aabde279e42fef8ede2bd505481be"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 32, "chunk_start": 1, "chunk_summary": "The schema defines a review structure that uses hardcoded semantic error categories and facilitates prompt correction via string replacement.", "duration_ms": 16666, "findings": [{"category": "llm_closed_list_instruction", "evidence": "\"enum\": [\"missing_ethnicity\", \"proper_noun_translated\", \"awkward_translation\"]", "line_end": 16, "line_start": 16, "recommended_fix": "Allow the LLM to provide a natural language 'category' or 'reason' and move specific checks like ethnicity into a separate, dynamically injected rule-set or SOT.", "severity": "P2", "why_problematic": "Hardcodes specific semantic error types for T2I review. 'missing_ethnicity' is a specific visual requirement that may not be universally applicable to all open-world scenarios (e.g., non-human entities or abstract scenes), yet it is baked into the validator's classification logic."}, {"category": "blind_string_mutation", "evidence": "\"target\": {\"type\": \"string\", \"description\": \"T2I 원문에서 정확히 찾을 수 있는 치환 대상\"}, \"suggestion\": {\"type\": \"string\", \"description\": \"target을 대체할 문자열\"}", "line_end": 18, "line_start": 17, "recommended_fix": "Use structured prompt reconstruction where the LLM provides the full corrected prompt or specific attribute updates rather than performing blind string substitution on the raw prompt text.", "severity": "P1", "why_problematic": "Establishes a pattern of fixing T2I prompts through string-based find-and-replace. This is fragile in open-world generation as it relies on the LLM identifying an exact substring and can lead to corrupted prompts if the target is ambiguous or if the replacement breaks sentence structure."}], "path": "prompts/_base/t2i_review/3.202605121200/entity_schema.json", "scan_kind": "prompt", "sha256": "70626235b41084ce75cadea8f5fd5a67081c1eebd0c06388b9d628364f45b409"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 32, "chunk_start": 1, "chunk_summary": "The schema defines a review mechanism using a closed list of semantic issue types and a substring-based replacement pattern for T2I prompt mutation.", "duration_ms": 28770, "findings": [{"category": "llm_closed_list_instruction", "evidence": "\"enum\": [\"missing_ethnicity\", \"proper_noun_translated\", \"awkward_translation\"]", "line_end": 16, "line_start": 16, "recommended_fix": "Move review categories to a dynamic configuration or a scenario-specific SOT that defines what aspects of an entity (e.g., ethnicity, age, style) must be validated.", "severity": "P2", "why_problematic": "This hardcodes a narrow set of semantic issue types for the LLM to use during review. It biases the validator toward specific domain tropes (like ethnicity) and linguistic checks, while potentially ignoring other critical visual or narrative discrepancies not covered by the enum."}, {"category": "blind_string_mutation", "evidence": "\"target\": {\"type\": \"string\", \"description\": \"T2I 원문에서 정확히 찾을 수 있는 치환 대상\"}, \"suggestion\": {\"type\": \"string\", \"description\": \"target을 대체할 문자열\"}", "line_end": 18, "line_start": 17, "recommended_fix": "Instead of substring replacement, have the review process output structured corrections that are fed back into the prompt assembly pipeline to regenerate the prompt from the source of truth.", "severity": "P1", "why_problematic": "This schema defines a mechanism where the LLM performs semantic 'fixes' via substring replacement on the generated T2I prompt. This is a 'blind replace' pattern used to mutate visual meaning, which is fragile and bypasses structured SOT-based generation in favor of string-level patching."}], "path": "prompts/_base/t2i_review/2.202605081600/entity_schema.json", "scan_kind": "prompt", "sha256": "70626235b41084ce75cadea8f5fd5a67081c1eebd0c06388b9d628364f45b409"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 101, "chunk_start": 1, "chunk_summary": "The prompt file contains several review rules that rely on hardcoded natural language patterns, scenario-specific prop examples, and demographic injection logic that should be driven by structured world data.", "duration_ms": 39570, "findings": [{"category": "llm_closed_list_instruction", "evidence": "보통명사 인물(직원, 경찰, 행인 등)에 국적/인종이 빠진 경우 ... (예: \"an Asian man in a security uniform\")", "line_end": 19, "line_start": 16, "recommended_fix": "Remove the hardcoded ethnicity example and instruct the LLM to use the demographic rules provided in the {t2i_context} for all characters, including common nouns.", "severity": "P1", "why_problematic": "The prompt instructs the LLM to classify 'common nouns' and inject ethnicity based on a hardcoded example ('Asian man'). This demographic logic should come from a structured world SOT or scenario context, not hardcoded reviewer bias."}, {"category": "llm_closed_list_instruction", "evidence": "\"the existing X\" 표현 (the existing tabletop / kitchen / desk / curtain / doorway 등) ... the reference kitchenette sits softly out of focus", "line_end": 47, "line_start": 34, "recommended_fix": "Generalize the detection pattern to look for any reference to 'existing' or 'reference' assets without listing specific props, or move prop-specific logic to a scenario-specific configuration.", "severity": "P1", "why_problematic": "The rule uses a closed list of specific prop names (tabletop, kitchen, desk, etc.) and natural language patterns to detect reference leaks. This is fragile and contains scenario-specific pollution in a base prompt."}, {"category": "semantic_string_judgment", "evidence": "카메라 \"low at ground/floor/quay level\" + 묘사 \"<surface> visible behind subject's hands\" ... Wet dock planks visible behind her hands", "line_end": 63, "line_start": 52, "recommended_fix": "Define physical consistency rules using abstract spatial relationships or structured camera/subject metadata rather than specific natural language string pairs.", "severity": "P1", "why_problematic": "Physical consistency is judged using specific string combinations and scenario-specific examples ('quay level', 'wet dock planks'). This is a pattern-based semantic judgment of open-world physics."}, {"category": "semantic_string_judgment", "evidence": "\"Figure A occupies the right foreground... Figure B sits hunched...\" ... C01O01 in a casual jacket sits hunched on the bench", "line_end": 79, "line_start": 68, "recommended_fix": "Instruct the LLM to ensure spatial anchors (shared surfaces) exist for all multi-actor shots based on the scene description, without relying on specific phrasing examples.", "severity": "P1", "why_problematic": "Spatial consistency between foreground and background actors is detected using specific phrasing patterns and scenario-specific props ('casual jacket', 'bench', 'can')."}], "path": "prompts/_base/t2i_review/2.202605081200/scene_system.md", "scan_kind": "prompt", "sha256": "fc75a0c93cea005c8c05ac5e668c5021624adc1615537900a46b594ff4bfd59b"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 23, "chunk_start": 1, "chunk_summary": "The review prompt contains instructions that enforce arbitrary visual attributes and subjective translation judgments, leading to potential hallucination and inconsistent prompt mutations.", "duration_ms": 30394, "findings": [{"category": "semantic_string_judgment", "evidence": "1. **국적/인종 누락**: 인간형 인물이나 사진/그림 속 인물에 국적/인종이 빠진 경우", "line_end": 11, "line_start": 11, "recommended_fix": "Modify the instruction to verify that the prompt is consistent with the provided entity context, rather than mandating specific attributes that may not be present in the source.", "severity": "P1", "why_problematic": "This instruction mandates the inclusion of nationality or race in T2I prompts even when not specified in the source scenario. This compels the generation pipeline to make arbitrary visual decisions, leading to hallucinated character traits and potential bias in the final images."}, {"category": "semantic_string_judgment", "evidence": "2. **고유명사 번역**: 지명·상호명 등 고유명사가 영어로 번역되어 원어 뉘앙스가 손실된 경우 (원본 언어 표기로 복원); 3. **원어 어색**: 원어가 자연스러운데 영어로 번역되어 어색한 표현", "line_end": 13, "line_start": 12, "recommended_fix": "Implement a project-specific glossary or translation SOT to handle proper nouns and idiomatic expressions consistently, rather than relying on heuristic LLM review.", "severity": "P2", "why_problematic": "These instructions rely on the LLM's subjective judgment of 'nuance' and 'naturalness' to trigger prompt mutations. This bypasses structured translation controls and can result in inconsistent handling of proper nouns and expressions across different scenarios."}], "path": "prompts/_base/t2i_review/3.202605121200/entity_system.md", "scan_kind": "prompt", "sha256": "c79668a8ab97b4ebf26f285cf54001935906c4a9888103ec25a773426fc4ece4"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 101, "chunk_start": 1, "chunk_summary": "The prompt contains several instances of semantic judgment based on closed phrase lists and scenario-specific examples (props, ethnicities, translation nuances) which should be managed via structured SOTs.", "duration_ms": 34058, "findings": [{"category": "semantic_string_judgment", "evidence": "인종 형용사가 누락된 보통명사, 고유명사가 영어로 번역되어 원어보다 어색한 경우", "line_end": 30, "line_start": 16, "recommended_fix": "Move demographic requirements and translation policies to a structured SOT (Source of Truth) that the LLM can reference.", "severity": "P1", "why_problematic": "Instructs the LLM to perform subjective semantic classification (ethnicity requirement, translation 'awkwardness') based on string patterns rather than structured world rules."}, {"category": "llm_closed_list_instruction", "evidence": "the existing tabletop / kitchen / desk / curtain / doorway, low at ground/floor/quay level, shared bench/shared table", "line_end": 74, "line_start": 35, "recommended_fix": "Define detection logic using abstract semantic categories and move specific prop/scenario examples to a separate, dynamically injected context.", "severity": "P1", "why_problematic": "Uses a closed list of specific props and phrases to define semantic detection logic for open-world visual scenarios, biasing the reviewer toward specific tropes."}, {"category": "scenario_dependent_prompt", "evidence": "dark bitter herbal drink, Wet dock planks, C01O01 in a casual jacket sits hunched on the bench", "line_end": 78, "line_start": 46, "recommended_fix": "Use generic or placeholder examples that demonstrate the structure of the fix without introducing specific story elements.", "severity": "P2", "why_problematic": "Examples contain highly specific scenario details that pollute the general system prompt and may bias the LLM's judgment."}], "path": "prompts/_base/t2i_review/2.202605081600/scene_system.md", "scan_kind": "prompt", "sha256": "fc75a0c93cea005c8c05ac5e668c5021624adc1615537900a46b594ff4bfd59b"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 101, "chunk_start": 1, "chunk_summary": "The T2I review prompt uses hardcoded phrase patterns and specific prop examples to define semantic validation rules for reference leakage, physical consistency, and spatial anchoring.", "duration_ms": 23035, "findings": [{"category": "llm_closed_list_instruction", "evidence": "\"the existing tabletop / kitchen / desk / curtain / doorway 등\"", "line_end": 39, "line_start": 35, "recommended_fix": "Replace the specific prop list with a general semantic rule instructing the LLM to identify any environment-anchored 'existing' or 'reference' descriptions that contradict the close-framing context.", "severity": "P1", "why_problematic": "The prompt instructs the LLM to detect reference leakage using a closed list of specific props. This biases the validator toward these examples and may miss other environment elements (e.g., 'existing balcony', 'existing street') that cause the same hallucination issue in close-up shots."}, {"category": "llm_closed_list_instruction", "evidence": "\"low at ground/floor/quay level\" + 묘사 \"<surface> visible behind subject's hands\"", "line_end": 55, "line_start": 53, "recommended_fix": "Define the physical principle (e.g., 'vertical alignment between camera height and visible ground/surface planes') rather than matching specific phrase combinations.", "severity": "P1", "why_problematic": "It defines physical inconsistency through hardcoded string combinations and specific props like 'quay level'. This is a pattern-based semantic judgment that fails to generalize to other camera/surface height conflicts."}, {"category": "llm_closed_list_instruction", "evidence": "\"Figure A occupies the right foreground... Figure B sits hunched in the left background.\"", "line_end": 70, "line_start": 69, "recommended_fix": "Instruct the LLM to verify the presence of a shared spatial anchor (surface, room, or interaction) whenever actors are split across depth planes, regardless of the specific phrasing used.", "severity": "P1", "why_problematic": "The prompt uses specific sentence structures as 'detection patterns' for missing spatial anchors. This makes the validator fragile to variations in how the LLM describes foreground/background separation."}], "path": "prompts/_base/t2i_review/3.202605121200/scene_system.md", "scan_kind": "prompt", "sha256": "2dd803f08f25f9eaf706987a34cbf0882152270a51a711909f911e3a7fd5910f"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 53, "chunk_start": 1, "chunk_summary": "The schema defines a review structure that utilizes substring-based replacement for prompt refinement, which constitutes a blind string mutation pattern.", "duration_ms": 23218, "findings": [{"category": "blind_string_mutation", "evidence": "\"target\": {\"type\": \"string\", \"description\": \"T2I 원문에서 정확히 찾을 수 있는 치환 대상 (unique sub-string)\"}", "line_end": 39, "line_start": 38, "recommended_fix": "Shift from substring replacement to a structured delta format or full prompt re-generation where the LLM provides the entire corrected field, or use specific attribute overrides instead of arbitrary string surgery.", "severity": "P1", "why_problematic": "The schema codifies a 'find-and-replace' mechanism for prompt correction. Relying on LLMs to identify 'unique sub-strings' for mutation is fragile and constitutes blind string replacement to decide visual/story meaning, rather than using structured re-generation or attribute-based updates."}], "path": "prompts/_base/t2i_review/3.202605121200/scene_schema.json", "scan_kind": "prompt", "sha256": "e772190324d90ec45265b2eff9a613eeb44aabde279e42fef8ede2bd505481be"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 32, "chunk_start": 1, "chunk_summary": "The file defines a JSON schema for T2I entity review results, including issue types and string replacement suggestions; no actionable findings.", "duration_ms": 22743, "findings": [], "path": "prompts/_base/t2i_review/4.202605150957/entity_schema.json", "scan_kind": "prompt", "sha256": "70626235b41084ce75cadea8f5fd5a67081c1eebd0c06388b9d628364f45b409"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 30, "chunk_start": 1, "chunk_summary": "The system prompt contains scenario-specific entity names as examples and hard-codes a photorealistic visual style, which biases the converter against arbitrary story genres.", "duration_ms": 10102, "findings": [{"category": "scenario_dependent_prompt", "evidence": "\"Soul Ride vehicle\", \"Dr. Nex's laboratory\", \"Club House\"", "line_end": 8, "line_start": 6, "recommended_fix": "Replace specific names with generic placeholders like '[Proper Noun] [Object]' or '[Character Name]'s [Location]' to demonstrate the transformation rule without scenario pollution.", "severity": "P1", "why_problematic": "The prompt uses concrete story-specific names and props as negative examples. This pollutes the base system prompt with scenario-specific nomenclature that should be abstracted to ensure the LLM handles any arbitrary story without bias from previous projects."}, {"category": "scenario_dependent_prompt", "evidence": "Photorealistic style — All prompts target photorealistic image generation.", "line_end": 14, "line_start": 14, "recommended_fix": "Inject the target visual style as a variable or instruction derived from the scenario's global visual configuration (SOT).", "severity": "P1", "why_problematic": "This hard-codes a specific visual style (photorealism) into the base converter logic. It prevents the pipeline from supporting stylized, animated, or genre-specific visual aesthetics (e.g., noir, cyberpunk, anime) which should be driven by the scenario's visual SOT rather than a fixed system instruction."}], "path": "prompts/_base/t2i_visual_converter/v1/system.md", "scan_kind": "prompt", "sha256": "22e04b568a05dded27946c131181ffdbeaf9a219f0ec8841b81ab5e6e3ce4107"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 23, "chunk_start": 1, "chunk_summary": "The file contains a generic T2I prompt quality review template with no scenario-specific pollution or hardcoded semantic string patterns.", "duration_ms": 25594, "findings": [], "path": "prompts/_base/t2i_review/4.202605150957/entity_system.md", "scan_kind": "prompt", "sha256": "c79668a8ab97b4ebf26f285cf54001935906c4a9888103ec25a773426fc4ece4"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 19, "chunk_start": 1, "chunk_summary": "The text cleanup prompt defines standard screenplay formatting markers and PDF artifact removal rules without scenario-specific pollution.", "duration_ms": 5260, "findings": [], "path": "prompts/_base/text_cleanup/1.202603231200/system.md", "scan_kind": "prompt", "sha256": "1f0e6a5f8a2b730e03543b26f06b0115d2d33a901754bd22a90a556e69aed4a5"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 53, "chunk_start": 1, "chunk_summary": "The schema defines a T2I review structure that uses substring-based replacement for prompt correction, introducing risks of blind string mutation.", "duration_ms": 21073, "findings": [{"category": "blind_string_mutation", "evidence": "\"target\": {\"type\": \"string\", \"description\": \"T2I 원문에서 정확히 찾을 수 있는 치환 대상 (unique sub-string)\"}", "line_end": 39, "line_start": 38, "recommended_fix": "Instead of substring replacement, the review should return a fully reconstructed prompt or use a structured representation (e.g., a list of entities and attributes) where specific nodes can be updated without string-matching ambiguity.", "severity": "P1", "why_problematic": "The review process relies on the LLM identifying a 'unique sub-string' for replacement. This is a fragile pattern for mutating natural language prompts as it can lead to unintended collisions, partial replacements, or broken syntax when the same token appears multiple times or in different contexts, directly affecting visual semantics."}], "path": "prompts/_base/t2i_review/4.202605150957/scene_schema.json", "scan_kind": "prompt", "sha256": "e772190324d90ec45265b2eff9a613eeb44aabde279e42fef8ede2bd505481be"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 6, "chunk_start": 1, "chunk_summary": "No actionable findings; the prompt is a generic template using standard placeholders for scene data without scenario-specific pollution or hardcoded semantic classifiers.", "duration_ms": 2838, "findings": [], "path": "prompts/_base/variation_recommender/v1/user.md", "scan_kind": "prompt", "sha256": "26ea9daa3ec839d9e40cddc474d9064b683c569ca0022b371336e5a0062268ba"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 67, "chunk_start": 1, "chunk_summary": "The system prompt contains hardcoded visual style examples and a specific background requirement for character entities that may bias or restrict open-world generation.", "duration_ms": 16681, "findings": [{"category": "scenario_dependent_prompt", "evidence": "청록색 발광, 지하 극저온 저장 시설, 산업적 조명", "line_end": 49, "line_start": 19, "recommended_fix": "Replace specific genre-heavy examples with more neutral or varied examples, or move style-specific guidance to a dynamic style SOT.", "severity": "P2", "why_problematic": "Specific sci-fi tropes and lighting styles used as 'good' examples can bias the LLM towards these aesthetics (e.g., cyan glow, industrial lighting) regardless of the actual input scenario's genre or mood."}, {"category": "scenario_dependent_prompt", "evidence": "흰 배경 프로필", "line_end": 59, "line_start": 59, "recommended_fix": "Remove the hardcoded background instruction or make it a variable injected from the project's visual style configuration.", "severity": "P1", "why_problematic": "Hardcodes a specific visual requirement (white background) for character entities. This is a visual decision that should be driven by a style SOT or the specific technical needs of the downstream generation task, not fixed in the base prompt."}], "path": "prompts/_base/t2i_visual_converter/v3/system.md", "scan_kind": "prompt", "sha256": "ef3ffa834b6c9af453aea1efa068bd68622a45ec743ff156c0ebed61d2e106ee"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 23, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 7590, "findings": [], "path": "prompts/_base/variation_recommender/v1/system.md", "scan_kind": "prompt", "sha256": "fca58f81e9c38c42201663b5f78b7e10aba0c78b8fc518ea6788c29f9ed4254f"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 88, "chunk_start": 1, "chunk_summary": "The system prompt defines a rigid visual classification system and contains significant scenario-specific pollution in its examples, biasing the T2I converter toward sci-fi and dystopian tropes.", "duration_ms": 19269, "findings": [{"category": "llm_closed_list_instruction", "evidence": "Three shot types only: 1. Establishing shot... 2. Relationship shot... 3. Action moment shot", "line_end": 18, "line_start": 15, "recommended_fix": "Remove the 'only' constraint and provide a broader, non-exhaustive list of cinematic shot types, or allow the LLM to determine the shot type based on the scenario context.", "severity": "P1", "why_problematic": "This forces all visual storytelling into three narrow semantic categories. It prevents the LLM from utilizing a full cinematic vocabulary (e.g., close-ups, POV, inserts) for open-world scenarios, potentially losing critical narrative detail by shoehorning scenes into these three buckets."}, {"category": "scenario_dependent_prompt", "evidence": "corridor of glowing human pods, dark sci-fi facility, tactical soldier, mechanical devices on their necks", "line_end": 63, "line_start": 46, "recommended_fix": "Replace scenario-specific examples with genre-neutral structural examples (e.g., 'A person reading a book in a sunlit library') to demonstrate the 'One Shot = One Sentence' rule without biasing the content.", "severity": "P1", "why_problematic": "The 'Good vs Bad' examples are heavily polluted with specific sci-fi and dystopian world-building elements. This biases the LLM's visual generation toward these specific tropes even when the input scenario might be a different genre, and hardcodes props (like neck devices) that should be defined in a structured SOT."}, {"category": "scenario_dependent_prompt", "evidence": "corridor of glowing pods, restrained man staring through a transparent capsule door", "line_end": 88, "line_start": 86, "recommended_fix": "Use diverse, genre-agnostic examples in the final template section.", "severity": "P2", "why_problematic": "The final template examples reinforce the sci-fi/dystopian bias found earlier in the prompt, further narrowing the LLM's expected output range to specific scenario types."}], "path": "prompts/_base/t2i_visual_converter/v2/system.md", "scan_kind": "prompt", "sha256": "de33e55bab9b51c2a8589cea6b0a0c4b69f6949d5900e1ab1dd602b69007e788"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 22, "chunk_start": 1, "chunk_summary": "The schema for visual world rules contains a list of specific domain tropes in a description field, which biases LLM scenario analysis.", "duration_ms": 9665, "findings": [{"category": "llm_closed_list_instruction", "evidence": "possession, transformation, ghost, time_period, costume, technology 등", "line_end": 9, "line_start": 9, "recommended_fix": "Remove specific trope examples from the schema description or move them to a dynamic configuration/SOT that defines valid rule types for the specific project context.", "severity": "P2", "why_problematic": "Hardcoding specific tropes in the schema description biases the LLM's scenario analysis, potentially forcing open-world story rules into a narrow set of predefined categories."}], "path": "prompts/_base/visual_world_rules/1.202603231200/rules_schema.json", "scan_kind": "prompt", "sha256": "f4e01be690df111c3eb600bf1433632e03937c4eefcf262fb4b2a7f882f93c1b"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 101, "chunk_start": 1, "chunk_summary": "The prompt defines several semantic validation and mutation rules for T2I prompts using hardcoded natural language patterns, demographic examples, and scenario-specific props like 'quay' and 'tabletop'.", "duration_ms": 27910, "findings": [{"category": "llm_closed_list_instruction", "evidence": "suggestion: 인종 형용사를 포함한 형태 (예: \"an Asian man in a security uniform\")", "line_end": 19, "line_start": 16, "recommended_fix": "Remove specific demographic examples. Instruct the LLM to refer to the provided {t2i_context} or a global demographic rule-set for appropriate ethnicity assignment.", "severity": "P1", "why_problematic": "The prompt provides a specific demographic ('Asian') as a hardcoded example for correcting missing ethnicities. This biases the LLM to inject specific demographics into open-world scenarios rather than deriving them from a structured world SOT."}, {"category": "llm_closed_list_instruction", "evidence": "\"the existing X\" 표현 (the existing tabletop / kitchen / desk / curtain / doorway 등)", "line_end": 39, "line_start": 34, "recommended_fix": "Generalize the detection logic to look for any 'existing' or 'reference' keywords relative to the entities defined in the scene context rather than a hardcoded list of props.", "severity": "P1", "why_problematic": "The detection pattern for reference leaks relies on a hardcoded list of common props ('tabletop', 'kitchen', etc.). This is a closed-list semantic classifier that may miss scenario-specific props or incorrectly flag valid descriptions."}, {"category": "semantic_string_judgment", "evidence": "카메라 \"low at ground/floor/quay level\" + 묘사 \"<surface> visible behind subject's hands\"", "line_end": 55, "line_start": 52, "recommended_fix": "Abstract the physical contradiction logic. Instead of hardcoding 'quay', use generic spatial relationships (e.g., 'ground-level camera' vs 'high-surface interaction') and ensure the list of surfaces is derived from the scene's layout metadata.", "severity": "P1", "why_problematic": "This rule attempts to perform physical/spatial validation using specific string combinations. The inclusion of 'quay level' suggests scenario-specific pollution (likely from a harbor/dock scenario) being used as a general heuristic."}, {"category": "blind_string_mutation", "evidence": "target: T2I 프롬프트 원문에서 정확히 찾을 수 있는 문자열 (sub-string 매치) ... suggestion: target을 대체할 문자열 — 시스템이 1회 치환 적용", "line_end": 89, "line_start": 88, "recommended_fix": "Use a more robust mutation strategy, such as returning the full corrected prompt or using unique block identifiers (e.g., [L##]) to scope the replacement, rather than raw substring matching.", "severity": "P0", "why_problematic": "The system performs a blind substring replacement based on the LLM's semantic judgment. If the LLM identifies a common word as a 'target' (as warned in line 91), it can lead to unintended corruption of the T2I prompt across the entire string."}], "path": "prompts/_base/t2i_review/4.202605150957/scene_system.md", "scan_kind": "prompt", "sha256": "04722eef9c00a2548c604fff074d849a8b04cfd358ed8dd74d1ff385df58789e"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 32, "chunk_start": 1, "chunk_summary": "The prompt contains hardcoded visual logic for specific narrative tropes and scenario-specific examples that bias open-world extraction.", "duration_ms": 16051, "findings": [{"category": "semantic_string_judgment", "evidence": "빙의/소울라이드: 인물 A가 인물 B의 몸에 빙의한 경우, 이미지에는 B의 외형을 그려야 함 (A의 얼굴이 아님)", "line_end": 8, "line_start": 8, "recommended_fix": "Remove the specific visual instruction. Instruct the LLM to extract the visual manifestation of possession as defined by the scenario text or a separate world-rule configuration.", "severity": "P1", "why_problematic": "This hardcodes a specific visual interpretation for a narrative trope (possession) directly into the system prompt. It forces a single visual solution (Person B's appearance) rather than allowing the scenario or a structured world-rule SOT to define how possession is visually manifested in a specific story."}, {"category": "scenario_dependent_prompt", "evidence": "조선시대, 한복", "line_end": 22, "line_start": 16, "recommended_fix": "Replace specific cultural examples with generic placeholders or a broader range of cross-genre examples (e.g., 'Historical/Fantasy/Sci-fi' and 'Period-appropriate attire').", "severity": "P2", "why_problematic": "The prompt uses specific domain tropes (Korean historical era and clothing) as examples. This can bias the LLM toward these specific cultural contexts even when analyzing scenarios from different cultures or genres, leading to 'hallucinated' cultural markers in the extracted rules."}], "path": "prompts/_base/visual_world_rules/1.202603231200/system.md", "scan_kind": "prompt", "sha256": "90dbd8a806ab24a0a4b7502a9f266d591305b8048c83c7eee00719f7167681aa"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 28, "chunk_start": 1, "chunk_summary": "The schema contains scenario-specific mechanics and trope-based examples in field descriptions that bias LLM interpretation of world rules.", "duration_ms": 14462, "findings": [{"category": "llm_closed_list_instruction", "evidence": "possession, transformation, ghost, time_period, costume, technology 등", "line_end": 9, "line_start": 9, "recommended_fix": "Use more abstract category examples (e.g., 'physical_law', 'character_state', 'environmental_effect') or move trope-specific examples to a separate reference document.", "severity": "P2", "why_problematic": "The description provides a list of specific tropes as examples for rule types. This biases the LLM toward classifying open-world story rules into these specific buckets rather than identifying novel or scenario-appropriate categories."}, {"category": "scenario_dependent_prompt", "evidence": "예: A가 B의 몸을 소울라이드 중이면 A는 물리적 존재가 아님", "line_end": 20, "line_start": 20, "recommended_fix": "Replace the specific 'soul-ride' example with a generic logical description of how to determine physical presence based on the provided rules.", "severity": "P1", "why_problematic": "Uses a highly specific story mechanic ('soul-ride') as the primary example for determining physical presence. This pollutes the base schema with domain-specific logic that should be defined in a scenario-specific SOT, potentially confusing the LLM when dealing with different types of non-physicality."}], "path": "prompts/_base/visual_world_rules/2.202603231200/rules_schema.json", "scan_kind": "prompt", "sha256": "46c17d2b62805067b29d8a682a27ff4899ea59712200b705bd466a0238654743"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 31, "chunk_start": 1, "chunk_summary": "The prompt contains hardcoded cinematography and lighting tropes as examples, which biases the LLM's visual recommendations for open-world scenarios.", "duration_ms": 21999, "findings": [{"category": "scenario_dependent_prompt", "evidence": "Examples: \"tight close-up on face\", \"wide establishing shot\", \"over-shoulder framing\", \"low angle hero shot\"", "line_end": 23, "line_start": 23, "recommended_fix": "Replace hardcoded examples with a reference to a dynamic style/framing SOT or use more abstract guidance.", "severity": "P2", "why_problematic": "Hardcoded framing tropes in the system prompt bias the LLM toward specific shot types. These should be derived from a structured style SOT to ensure consistency with the specific scenario's art direction."}, {"category": "scenario_dependent_prompt", "evidence": "Examples: \"warm golden hour lighting\", \"cold blue moonlight\", \"high contrast noir shadows\", \"desaturated muted tones\"", "line_end": 29, "line_start": 29, "recommended_fix": "Inject valid lighting/color variations from a project-level configuration or use abstract instructions.", "severity": "P2", "why_problematic": "Hardcoded lighting tropes (e.g., 'noir shadows', 'golden hour') bias the variation recommender. These visual moods should be provided by a world-rule SOT rather than being fixed in the base prompt."}], "path": "prompts/_base/variation_recommender/v2/system.md", "scan_kind": "prompt", "sha256": "98946fbc57be41829e28f7666a113f8ebbbfc29537285cdc3b3544928afd8b4c"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 56, "chunk_start": 1, "chunk_summary": "The prompt contains scenario-specific trope terminology, a closed-list semantic classifier for story tropes, and a hardcoded nationality bias in a base prompt.", "duration_ms": 18122, "findings": [{"category": "scenario_dependent_prompt", "evidence": "빙의/소울라이드", "line_end": 8, "line_start": 8, "recommended_fix": "Remove scenario-specific terms like '소울라이드' and use generic terms like '빙의' (possession) or '정신 지배' (mind control).", "severity": "P1", "why_problematic": "The term '소울라이드' (Soul-ride) is a specific story-world concept likely originating from a particular scenario, polluting the base prompt with domain-specific nomenclature."}, {"category": "llm_closed_list_instruction", "evidence": "rule_type은 다음 중 선택: possession, transformation, ghost, projection, superpower, body_deformation, time_period, costume, technology, other", "line_end": 28, "line_start": 28, "recommended_fix": "Allow the LLM to generate descriptive category tags or move the trope taxonomy to a separate, extensible SOT configuration.", "severity": "P1", "why_problematic": "This forces the LLM to classify open-world story phenomena into a closed set of categories. This limits the system's ability to handle novel or hybrid tropes not covered by the list."}, {"category": "scenario_dependent_prompt", "evidence": "All human characters are Korean unless stated otherwise.", "line_end": 52, "line_start": 52, "recommended_fix": "Move nationality/ethnicity defaults to a scenario-specific configuration or a dynamic variable injected during prompt assembly.", "severity": "P1", "why_problematic": "Hardcoding a specific nationality ('Korean') as a default in a base prompt biases the visual generation for all scenarios, even those set in different cultures or worlds."}], "path": "prompts/_base/visual_world_rules/2.202603231200/system.md", "scan_kind": "prompt", "sha256": "34f4794d17c562eaff205c234b292577955e5b36d355cceec322455d6b04f63e"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 28, "chunk_start": 1, "chunk_summary": "The schema contains scenario-specific examples and genre-specific trope lists in field descriptions that bias LLM generation.", "duration_ms": 13243, "findings": [{"category": "llm_closed_list_instruction", "evidence": "possession, transformation, ghost, time_period, costume, technology 등", "line_end": 9, "line_start": 9, "recommended_fix": "Remove the specific trope examples or move them to a separate 'available_rule_types' enum/SOT if they are intended to be a closed set.", "severity": "P2", "why_problematic": "The description provides a hardcoded list of genre tropes which biases the LLM to categorize world rules into these specific buckets rather than discovering them from the scenario text."}, {"category": "scenario_dependent_prompt", "evidence": "예: A가 B의 몸을 소울라이드 중이면 A는 물리적 존재가 아님", "line_end": 20, "line_start": 20, "recommended_fix": "Replace the specific 'soulride' example with a generic physical/metaphysical logic example (e.g., 'if a character is a hologram').", "severity": "P1", "why_problematic": "The example uses a specific story mechanic ('soulride') which pollutes the base schema with scenario-specific logic, potentially biasing the LLM's reasoning for unrelated stories."}], "path": "prompts/_base/visual_world_rules/3.202604161200/rules_schema.json", "scan_kind": "prompt", "sha256": "830f0847e0a6eb24d60fc073694e60db73610a983bae401101e2b3a2a4fee69f"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 67, "chunk_start": 1, "chunk_summary": "The system prompt contains scenario-specific examples and hardcoded visual style constraints that should be abstracted or driven by a structured SOT.", "duration_ms": 38538, "findings": [{"category": "scenario_dependent_prompt", "evidence": "\"중년의 보안 요원\", \"지하 극저온 저장 시설\", \"산업적 조명\"", "line_end": 49, "line_start": 46, "recommended_fix": "Replace concrete scenario details with generic placeholders like [인물], [장소], [조명] or provide genre-neutral examples to demonstrate the formatting rules.", "severity": "P2", "why_problematic": "The use of specific sci-fi and industrial scenario examples in a base system prompt can bias the LLM's descriptive style and vocabulary choice for unrelated genres (e.g., fantasy or period drama)."}, {"category": "scenario_dependent_prompt", "evidence": "\"흰 배경 프로필\"", "line_end": 59, "line_start": 59, "recommended_fix": "Replace the hardcoded style with a variable placeholder like {character_reference_style} that can be populated based on the project's visual requirements.", "severity": "P2", "why_problematic": "Hardcoding a 'white background profile' style for character entities restricts the visual variety of reference images. This visual decision should be driven by a style SOT or configuration rather than being fixed in the base prompt."}], "path": "prompts/_base/t2i_visual_converter/v4/system.md", "scan_kind": "prompt", "sha256": "cfa07e3aa9b0fa723d4c1a5485c2716600c1227bbc446ad1f63a9a5423ff9a9c"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 29, "chunk_start": 1, "chunk_summary": "The JSON schema contains domain trope lists and scenario-specific logic examples within field descriptions that bias LLM categorization and world-rule analysis.", "duration_ms": 13131, "findings": [{"category": "llm_closed_list_instruction", "evidence": "possession, transformation, ghost, time_period, costume, technology 등", "line_end": 9, "line_start": 9, "recommended_fix": "Remove the specific trope examples from the description or move them to a separate configuration file that defines valid rule categories for the specific project context.", "severity": "P1", "why_problematic": "The description provides a hardcoded list of domain tropes to guide the LLM's classification of rule types. This biases the LLM toward specific genres and should instead be derived from a structured world-rule SOT or the scenario context."}, {"category": "scenario_dependent_prompt", "evidence": "예: A의 영혼이 B의 몸에 전이된 경우 A는 물리적 존재가 아님", "line_end": 20, "line_start": 20, "recommended_fix": "Replace the specific example with a generic instruction regarding the determination of physical presence based on the story's internal logic.", "severity": "P2", "why_problematic": "The description uses a specific story trope (soul transfer/possession) to define the logic for physical existence. This pollutes the schema with scenario-specific logic that may bias the LLM's judgment in unrelated scenarios."}], "path": "prompts/_base/visual_world_rules/6.202605021400/rules_schema.json", "scan_kind": "prompt", "sha256": "c2d9af79cac5595c1a405bf3805e945791b8dbc25cecd56cb85e222e6a328849"}
{"candidate_reason": "python scope discovery", "chunk_end": 1, "chunk_start": 1, "chunk_summary": "No actionable findings; the file contains only a standard package docstring.", "duration_ms": 2886, "findings": [], "path": "prototype_ui/__init__.py", "scan_kind": "python", "sha256": "493fac3de22464f34f55a9b71a5c97cdf64c4cfde52ee5a5a776066ea7dd84b6"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 63, "chunk_start": 1, "chunk_summary": "The prompt contains project-specific terminology, a closed-list trope classifier for open-world story elements, and a culturally biased default for character nationality.", "duration_ms": 30066, "findings": [{"category": "scenario_dependent_prompt", "evidence": "빙의/소울라이드", "line_end": 8, "line_start": 8, "recommended_fix": "Use generic terms like 'Possession' or 'Remote Control' and move project-specific tropes to a dynamic scenario-specific configuration.", "severity": "P2", "why_problematic": "The term 'Soulride' is project-specific domain nomenclature. Including it in a base system prompt as a primary extraction target pollutes the prompt with scenario-specific concepts that should be defined in a structured world-rule SOT."}, {"category": "llm_closed_list_instruction", "evidence": "rule_type은 다음 중 선택: possession, transformation, ghost, projection, superpower, body_deformation, time_period, costume, technology, other", "line_end": 28, "line_start": 28, "recommended_fix": "Allow the LLM to generate descriptive category tags or move the trope list to a dynamic configuration injected from the world-building SOT.", "severity": "P1", "why_problematic": "This is a closed-list semantic classifier for open-world story elements. It forces diverse narrative phenomena into a fixed set of tropes, which acts as a semantic bottleneck and requires prompt updates for new story genres or mechanics."}, {"category": "scenario_dependent_prompt", "evidence": "All human characters are Korean unless stated otherwise.", "line_end": 52, "line_start": 52, "recommended_fix": "Remove the specific nationality from the base prompt and instruct the LLM to derive the default nationality/race from the scenario's 'region' or 'era' metadata.", "severity": "P1", "why_problematic": "Hardcoding a specific nationality/race as the default example in a base prompt introduces a strong visual bias. This can lead to incorrect image generation for scenarios set in different cultural contexts or locations."}], "path": "prompts/_base/visual_world_rules/3.202604161200/system.md", "scan_kind": "prompt", "sha256": "c88c8c3f17189939a56bec5ae58079d422534c132a079f8131ce736aaaf18717"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 29, "chunk_start": 1, "chunk_summary": "The schema contains scenario-specific trope examples and work-specific mechanics in property descriptions which can bias LLM generation.", "duration_ms": 24296, "findings": [{"category": "scenario_dependent_prompt", "evidence": "possession, transformation, ghost, time_period, costume, technology", "line_end": 9, "line_start": 9, "recommended_fix": "Move trope examples to a separate documentation or dynamic context; keep the schema description generic.", "severity": "P2", "why_problematic": "Hardcoded trope examples in the schema description bias the LLM toward specific genres and may lead to forced classification of open-world rules into these categories."}, {"category": "scenario_dependent_prompt", "evidence": "예: A가 B의 몸을 소울라이드 중이면 A는 물리적 존재가 아님", "line_end": 20, "line_start": 20, "recommended_fix": "Use a generic physical/non-physical example or remove the specific 'soul-ride' terminology.", "severity": "P2", "why_problematic": "Contains a specific story mechanic ('soul-ride') as an example. This pollutes the schema with project-specific or genre-specific logic that may not apply to all scenarios."}], "path": "prompts/_base/visual_world_rules/4.202604300936/rules_schema.json", "scan_kind": "prompt", "sha256": "04aea29a6e849b637517dd37837136f5727a19898bb0e6b34c63640af9fb6879"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 29, "chunk_start": 1, "chunk_summary": "The schema contains scenario-specific terminology and trope lists in descriptions used to guide LLM logic for physical presence and rule classification.", "duration_ms": 25371, "findings": [{"category": "scenario_dependent_prompt", "evidence": "예: A가 B의 몸을 소울라이드 중이면 A는 물리적 존재가 아님", "line_end": 20, "line_start": 20, "recommended_fix": "Replace the scenario-specific example with a generic logical principle regarding non-corporeal or internal states.", "severity": "P1", "why_problematic": "The schema description uses a specific story mechanic ('soul-ride') to instruct the LLM on how to determine physical presence. This pollutes the general world-rule schema with scenario-specific logic, biasing the LLM's semantic judgment of entity visibility."}, {"category": "llm_closed_list_instruction", "evidence": "possession, transformation, ghost, time_period, costume, technology 등", "line_end": 9, "line_start": 9, "recommended_fix": "Abstract the examples or reference an external SOT for valid rule categories.", "severity": "P2", "why_problematic": "Providing a list of specific genre tropes as examples for 'rule_type' biases the LLM toward these categories, which should ideally be derived from a structured world-rule SOT or the scenario context without pre-defined trope bias."}], "path": "prompts/_base/visual_world_rules/5.202605011300/rules_schema.json", "scan_kind": "prompt", "sha256": "04aea29a6e849b637517dd37837136f5727a19898bb0e6b34c63640af9fb6879"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 75, "chunk_start": 1, "chunk_summary": "The prompt defines extraction rules for visual world-building, but contains hard-coded semantic judgments for specific tropes and encourages the use of scenario-specific proper nouns in logic definitions.", "duration_ms": 31345, "findings": [{"category": "semantic_string_judgment", "evidence": "인물 A가 인물 B의 몸에 빙의한 경우, 이미지에는 B의 외형을 그려야 함 (A의 얼굴이 아님)", "line_end": 8, "line_start": 8, "recommended_fix": "Change the instruction to ask the LLM to extract the specific visual rule for possession from the scenario text rather than prescribing one.", "severity": "P1", "why_problematic": "This hard-codes a specific visual interpretation of the 'possession' trope (drawing the host's body only) as a global rule, preventing scenarios where a visual blend or the possessor's face is intended."}, {"category": "scenario_dependent_prompt", "evidence": "작품 고유명사를 사용하되, 범용 규칙이 아닌 이 작품에서만 필요한 판단 기준을 작성하세요.", "line_end": 46, "line_start": 45, "recommended_fix": "Use a structured schema for physical presence (e.g., mapping specific entity IDs to states like 'astral', 'physical', 'remote') instead of free-text rules using proper nouns.", "severity": "P1", "why_problematic": "Instructing the LLM to generate logic ('판단 기준') using scenario-specific proper nouns creates unstructured, non-standardized semantic rules that the downstream pipeline must interpret, leading to fragile character-presence logic."}, {"category": "scenario_dependent_prompt", "evidence": "All human characters are Korean unless stated otherwise.", "line_end": 64, "line_start": 64, "recommended_fix": "Replace the specific nationality with a placeholder or a more neutral instruction to identify nationality/race from the scenario context.", "severity": "P2", "why_problematic": "This example provides a specific ethnic bias ('Korean') in a general system prompt, which can lead the LLM to hallucinate this constraint for non-Korean scenarios if the scenario text is ambiguous."}], "path": "prompts/_base/visual_world_rules/4.202604300936/system.md", "scan_kind": "prompt", "sha256": "e63be2c9d268a106577abfb74b6e128a136cdd7b69740594dd970302e0896998"}
{"candidate_reason": "python scope discovery", "chunk_end": 86, "chunk_start": 1, "chunk_summary": "No actionable findings; this script is a technical utility for prompt versioning and manifest management.", "duration_ms": 3497, "findings": [], "path": "screenplay/prompts/create_version.py", "scan_kind": "python", "sha256": "aa9225404363cda2695e54cf40f61b0f294a5a61cd8ec3e268b56e8bc54044bf"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 110, "chunk_start": 1, "chunk_summary": "The prompt defines a system for extracting visual world rules from scenarios but relies on hard-coded trope classifications, specific visual logic for those tropes, and forces visual biases based on metadata strings.", "duration_ms": 31940, "findings": [{"category": "llm_closed_list_instruction", "evidence": "rule_type은 다음 중 선택: possession, transformation, ghost, projection, superpower, body_deformation, time_period, costume, technology, other", "line_end": 51, "line_start": 24, "recommended_fix": "Move the trope definitions and their associated visual logic to a dynamic configuration or a structured World Rule SOT that can be updated without modifying the core extraction prompt.", "severity": "P1", "why_problematic": "The prompt hard-codes a limited set of story tropes (possession, ghost, etc.) and their visual treatments (e.g., line 31: 'draw B's appearance, not A's face'). This forces a specific visual logic for open-world story elements that should be defined in a project-specific SOT or a more flexible world-rule schema."}, {"category": "scenario_dependent_prompt", "evidence": "All human characters are <region-derived demonym> unless stated otherwise.", "line_end": 98, "line_start": 98, "recommended_fix": "Allow the LLM to derive character appearance from the scenario text or a character-specific SOT rather than forcing a global demonym based on the region string.", "severity": "P1", "why_problematic": "This instruction forces a visual decision (race/nationality) based on a string pattern (the scenario's region). This creates a hard-coded bias that may conflict with specific character descriptions in the scenario or diverse casting requirements."}, {"category": "llm_closed_list_instruction", "evidence": "blood, gore 등 graphic 단어 자제 — dark, moody, tense로 추상화", "line_end": 106, "line_start": 106, "recommended_fix": "Use a separate safety/style filter or allow the LLM to describe the visual mood naturally without hard-coded word-to-word mapping.", "severity": "P2", "why_problematic": "This is a prompt-level instruction to perform semantic abstraction/replacement of specific tokens. While intended for safety, it is a form of blind mutation that can lose important visual context (e.g., a 'blood-stained letter' becomes a 'moody letter')."}], "path": "prompts/_base/visual_world_rules/6.202605021400/system.md", "scan_kind": "prompt", "sha256": "911f1af6897a9acde2ff8b3b295158bda139b9d20ef07df8af570f02730c4a42"}
{"candidate_reason": "python scope discovery", "chunk_end": 696, "chunk_start": 1, "chunk_summary": "The UI code manages prototype runs and reviews, but contains a hardcoded list of story entity categories for display grouping.", "duration_ms": 27774, "findings": [{"category": "scenario_dependent_code", "evidence": "ref_groups: Dict[str, list] = {\"character\": [], \"location\": [], \"prop\": []}", "line_end": 521, "line_start": 521, "recommended_fix": "Initialize ref_groups as an empty dictionary and allow the pipeline's entity 'type' field to dynamically define the grouping keys, or fetch the allowed entity types from a central world-building schema (SOT).", "severity": "P2", "why_problematic": "The UI hardcodes a specific story ontology (character, location, prop) as the primary buckets for entity grouping. This is a domain trope list that should be derived from the world guide schema or the pipeline's entity classification rather than being baked into the UI logic, as it biases the display toward specific story structures."}], "path": "prototype_ui/app.py", "scan_kind": "python", "sha256": "04d2c556662af2e50d3e8398a91b2e9ff141d9446be61dba6a0ad398f3b529d7"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 110, "chunk_start": 1, "chunk_summary": "The prompt contains several instances of prescriptive visual logic and scenario-specific pollution, including hard-coded nationality defaults and semantic mapping of visual tokens.", "duration_ms": 46359, "findings": [{"category": "llm_closed_list_instruction", "evidence": "빙의/소울라이드: ... 이미지에는 B의 외형을 그려야 함 (A의 얼굴이 아님)", "line_end": 36, "line_start": 31, "recommended_fix": "Remove prescriptive visual logic from the extraction targets. Instead, instruct the LLM to extract the scenario's own logic for these phenomena, or move these as default rules to a structured World Rule SOT.", "severity": "P1", "why_problematic": "The prompt prescribes specific visual handling for open-world tropes (possession, ghosts, etc.) as part of the extraction target definition. This hard-codes visual logic (e.g., whose face to show during possession) that should be derived from the scenario's internal logic or a separate world-building SOT, rather than being fixed in the base extraction prompt."}, {"category": "llm_closed_list_instruction", "evidence": "회상/F.B 장면의 인물·소품·혈흔 등은 ... 현재 씬 공간에는 물리적으로 존재하지 않는다.", "line_end": 72, "line_start": 68, "recommended_fix": "Provide more abstract examples that focus on the format and level of detail required, rather than prescribing the specific visual outcome for common tropes.", "severity": "P1", "why_problematic": "These 'correct examples' for director notes prescribe specific visual interpretations for scene types (flashbacks, hallucinations, CCTV). Providing these as the only examples often leads the LLM to copy them verbatim, forcing a specific visual logic on all scenarios regardless of their actual narrative needs."}, {"category": "scenario_dependent_prompt", "evidence": "인물의 기본 국적/인종 (예: \"All human characters are Korean unless stated otherwise.\")", "line_end": 98, "line_start": 98, "recommended_fix": "Replace the specific nationality with a placeholder (e.g., '[Default Nationality/Race]') and ensure this information is injected from a project-specific configuration.", "severity": "P1", "why_problematic": "Hard-codes a specific nationality ('Korean') as a mandatory example/default for the visual style summary. This pollutes the output with scenario-specific assumptions that should be provided via project-level metadata or extracted from the scenario text."}, {"category": "blind_string_mutation", "evidence": "(\"피\", \"blood\", \"gore\" 등 graphic 단어 자제 — \"dark\", \"moody\", \"tense\"로 추상화)", "line_end": 106, "line_start": 106, "recommended_fix": "Move safety and style filtering to a dedicated post-processing layer or a specialized style-transfer prompt that can handle these mappings more robustly without polluting the extraction logic.", "severity": "P1", "why_problematic": "Instructs the LLM to perform semantic mapping/suppression of specific visual tokens ('blood', 'gore') to abstract moods ('dark', 'moody'). This is a pattern-based mutation of visual meaning that biases the visual prompt generation process."}], "path": "prompts/_base/visual_world_rules/5.202605011300/system.md", "scan_kind": "prompt", "sha256": "5cfa36cdcea957d38284f66d947acad20b279b890f4757fabb1728f293c1abd3"}
{"candidate_reason": "python scope discovery", "chunk_end": 1327, "chunk_start": 1, "chunk_summary": "The script contains significant scenario-specific pollution, including hardcoded character names, visual guardrails, and project-specific file paths that bias the pipeline toward a single story.", "duration_ms": 18721, "findings": [{"category": "scenario_dependent_code", "evidence": "SPECIAL_ENTITY_GUARDRAILS = { \"DR.NEX\": { ... }, \"한치호\": { ... }, \"은성\": { ... }, \"서현\": { ... }, \"오리엔티스\": { ... } }", "line_end": 108, "line_start": 57, "recommended_fix": "Move these entity-specific guardrails into the project's World SOT or a separate configuration JSON loaded at runtime.", "severity": "P1", "why_problematic": "Hardcoded character and location names from a specific project ('SRD') are embedded in the code with specific visual instructions. This prevents the prototype from being used for arbitrary scenarios without manual code modification."}, {"category": "scenario_dependent_code", "evidence": "can_seed_from_episode1_cache = input_path.name == \"srd part 1 blue revision.pdf\"", "line_end": 420, "line_start": 418, "recommended_fix": "Use a hash of the input file content or a generic command-line argument to specify cache seeds rather than checking for a specific filename.", "severity": "P2", "why_problematic": "The logic for seeding analysis from cache is tied to a specific hardcoded filename, making the pipeline fragile and scenario-dependent."}, {"category": "scenario_dependent_prompt", "evidence": "\"Use realistic present-day / near-future Korean baseline clothing.\"", "line_end": 847, "line_start": 810, "recommended_fix": "Move these baseline visual rules into the World Guide or a style-specific SOT that is passed into the prompt generator.", "severity": "P1", "why_problematic": "Visual style instructions for characters are hardcoded with specific cultural and era-based tropes ('Korean', 'near-future') inside the prompt assembly logic, biasing all future scenarios."}, {"category": "scenario_dependent_code", "evidence": "if entity[\"name\"] == \"DR.NEX\":", "line_end": 865, "line_start": 862, "recommended_fix": "Ensure these descriptions are part of the entity's metadata in the structured analysis output (entities.json) rather than being hardcoded in the assembly logic.", "severity": "P1", "why_problematic": "The code performs a hardcoded string check on a character name to inject specific visual descriptions into the prompt."}, {"category": "semantic_string_judgment", "evidence": "score += 6 if relation.get(\"relation_family\") in DIRECT_RELATION_FAMILIES else 3", "line_end": 637, "line_start": 46, "recommended_fix": "Define relationship weights in a configuration file or the World SOT to allow for different story genres where different relationship types might carry more visual weight.", "severity": "P2", "why_problematic": "The script uses a hardcoded list of semantic relationship types (identity, kinship, etc.) to drive visual priority scoring for image generation."}], "path": "screenplay/prototype_episode_novel.py", "scan_kind": "python", "sha256": "b951af70e9eb3186fcf1de2330ba35e4a8625df24957da2b2fb4e28564470509"}
{"candidate_reason": "python scope discovery", "chunk_end": 166, "chunk_start": 1, "chunk_summary": "The script generates a comparison viewer for a specific project phase but contains hardcoded defect lists and scenario-specific failure explanations.", "duration_ms": 19221, "findings": [{"category": "scenario_dependent_code", "evidence": "DEFECTS = {(5, 13), (6, 1), (10, 6), (12, 8), (12, 16), (13, 6), (15, 2), (20, 5), (23, 4), (24, 2), (27, 2), (28, 4), (29, 7)}", "line_end": 53, "line_start": 52, "recommended_fix": "Migrate defect tracking to the database (e.g., a 'review_status' or 'is_defect' column in SceneStill) to allow the script to remain generic across different episodes.", "severity": "P1", "why_problematic": "Manual hardcoding of scene/shot indices as 'defects' encodes semantic quality judgments directly in code rather than using structured metadata or database flags. This makes the script non-reusable for other episodes and hides quality data from the primary SOT."}, {"category": "scenario_dependent_code", "evidence": "OpenAI safety filter가 prompt 거부 (혈흔/폭력 묘사)", "line_end": 125, "line_start": 125, "recommended_fix": "Use a generic failure message or pull the actual rejection reason from the generation logs/metadata if available.", "severity": "P2", "why_problematic": "Hardcodes a specific scenario-based reason (blood/violence) for image generation failure in the UI output, which biases the viewer's interpretation and may not apply to other episodes."}], "path": "scripts/build_phase91_compare_viewer.py", "scan_kind": "python", "sha256": "6854d49e00f7e4794bc7aa4bcdd5f7468c2a05641bb8a414d7b56fdb2a32a29c"}
{"candidate_reason": "python scope discovery", "chunk_end": 1512, "chunk_start": 1, "chunk_summary": "The file contains several instances of string-based semantic judgment for entity resolution and hardcoded scenario-specific filtering logic that affects story graph membership.", "duration_ms": 36620, "findings": [{"category": "scenario_dependent_code", "evidence": "--input \"screenplay/srd part 1 blue revision.pdf\"", "line_end": 323, "line_start": 318, "recommended_fix": "Remove scenario-specific defaults or move them to a configuration file or environment variables.", "severity": "P2", "why_problematic": "Hardcoded scenario-specific file paths and project names ('srd') are used as default arguments in a generic extraction utility, polluting the codebase with specific project context."}, {"category": "scenario_dependent_code", "evidence": "item[\"importance\"] in {\"major\", \"supporting\"} and has_reference_value(item)", "line_end": 846, "line_start": 817, "recommended_fix": "Move pruning logic to a configurable policy or allow the downstream consumer to decide which entities to filter based on the extracted metadata.", "severity": "P1", "why_problematic": "Hardcoded semantic filtering logic decides which entities are 'visible' or 'members' of the story graph based on importance levels and trait counts. This logic should be driven by a structured SOT or configuration, as 'minor' entities may still be required for specific visual contexts or downstream analysis."}, {"category": "semantic_string_judgment", "evidence": "identifiers = {normalize_name(str(item[\"name\"]))}", "line_end": 860, "line_start": 856, "recommended_fix": "Use unique persistent IDs (e.g., C##) or rely on the LLM to perform entity resolution against a provided stateful memory rather than post-processing string sets.", "severity": "P1", "why_problematic": "Entity identity is determined by a blind intersection of normalized name and alias strings. This heuristic fails in open-world scenarios where different characters share common names or titles (e.g., 'Guard 1', 'The Captain'), leading to incorrect entity merging and loss of story data."}, {"category": "semantic_string_judgment", "evidence": "return candidate_name if len(candidate_name) > len(current_name) else current_name", "line_end": 878, "line_start": 862, "recommended_fix": "Implement a more robust canonicalization strategy, perhaps by having the LLM explicitly designate the primary name during extraction.", "severity": "P2", "why_problematic": "Canonical name selection is based on string length heuristics. This is a blind mutation of story data that may prefer a descriptive phrase over a proper name simply because it is longer."}, {"category": "semantic_string_judgment", "evidence": "signature = \"||\".join([...normalized[\"relation_type\"], ...])", "line_end": 1034, "line_start": 1020, "recommended_fix": "Normalize relation types to a closed enum or use a semantic similarity check for merging relation facts.", "severity": "P1", "why_problematic": "Relation identity is determined by a string-based signature that includes 'relation_type', which is an open-world natural language string. This leads to duplicate or missed merges based on phrasing variations (e.g., 'is father of' vs 'father')."}], "path": "screenplay/extract_entities.py", "scan_kind": "python", "sha256": "ced37d522074f955edfd28eb9d87071bdb0373d430ae06d10612c5b1f5aaf60b"}
{"candidate_reason": "python scope discovery", "chunk_end": 365, "chunk_start": 1, "chunk_summary": "The file provides shared helpers for canary scripts, including an import wrapper for continuity-related constants that rely on closed-list string matching for open-world entities.", "duration_ms": 16510, "findings": [{"category": "semantic_string_judgment", "evidence": "_CONTINUITY_GENERIC_PERSON_NOUNS, _CONTINUITY_FURNITURE_LAYOUT_TOKENS, _ID_BODY_PART_TRIGGERS", "line_end": 52, "line_start": 44, "recommended_fix": "Move entity classification to a structured SOT or use an LLM-based semantic classifier that does not rely on hardcoded string lists. If these are used for validation, they should be derived from the world-state/schema rather than global constants.", "severity": "P1", "why_problematic": "These constants represent hardcoded lists of nouns and tokens used to identify and classify open-world story entities (people, furniture, body parts) for continuity and layout logic. Using closed phrase lists to decide story meaning or entity membership biases the pipeline against arbitrary scenarios."}], "path": "scripts/canary/_g4_4_common.py", "scan_kind": "python", "sha256": "1593f488a3f136878a569b58239ad98c694a7d20a049a80b1a08efca854a7d3e"}
{"candidate_reason": "python scope discovery", "chunk_end": 414, "chunk_start": 1, "chunk_summary": "The script performs semantic validation of camera consistency instructions in natural language prompts using regex patterns, which is a fragile method for judging visual meaning.", "duration_ms": 20016, "findings": [{"category": "semantic_string_judgment", "evidence": "CAMERA_WORDING_PATTERNS: List[str] = [", "line_end": 53, "line_start": 48, "recommended_fix": "Replace regex-based detection with a structured 'camera_consistency' flag in the scene metadata or use an LLM-based semantic evaluator to verify the presence of the instruction regardless of specific wording.", "severity": "P1", "why_problematic": "The script uses regex to detect camera consistency instructions within natural language 't2i_prompt' strings. This is a pattern-based semantic judgment that fails to account for synonymous phrasing (e.g., 'keep the same perspective' vs 'match reference camera'), making the degradation guard fragile to LLM output variations that preserve meaning."}], "path": "scripts/canary/g4_2_camera_wording.py", "scan_kind": "python", "sha256": "3d8b8f7b9068a07103627f52f690743310a4b3ea9113377f5bf72533e049473d"}
{"candidate_reason": "python scope discovery", "chunk_end": 344, "chunk_start": 1, "chunk_summary": "The script is a technical canary utility for counting pre-computed validation violations and contains no actionable semantic string judgments or scenario-specific pollution.", "duration_ms": 13368, "findings": [], "path": "scripts/canary/g4_2_owned_violations.py", "scan_kind": "python", "sha256": "640c312ebfb54682bd80c7fd74571f16b335b82db308c70e2900b57bbab397b1"}
{"candidate_reason": "python scope discovery", "chunk_end": 191, "chunk_start": 1, "chunk_summary": "The script is a technical canary tool for measuring token count deltas in system prompts and contains no scenario-specific logic or semantic string judgments.", "duration_ms": 8237, "findings": [], "path": "scripts/canary/g4_2_token_count.py", "scan_kind": "python", "sha256": "f1f1828e6d072b262298c190d71090a8a0bcc1ab26ad19de0f11b897f9164764"}
{"candidate_reason": "python scope discovery", "chunk_end": 433, "chunk_start": 1, "chunk_summary": "This file provides shared infrastructure and schema validation for canary metric scripts, including centralized imports and configuration loading, with no actionable semantic string judgment or scenario pollution found.", "duration_ms": 22553, "findings": [], "path": "scripts/canary/_g4_5a_common.py", "scan_kind": "python", "sha256": "aa7cf81eed28e03241a860be82d88749b9801bc6711be54a4ba00a52def30678"}
{"candidate_reason": "python scope discovery", "chunk_end": 1219, "chunk_start": 1, "chunk_summary": "The file implements heuristic-based entity resolution using string similarity and hardcoded thresholds, and performs blind string replacement for cinematic term localization.", "duration_ms": 50704, "findings": [{"category": "semantic_string_judgment", "evidence": "choose_canonical_name", "line_end": 447, "line_start": 438, "recommended_fix": "Use a unique entity ID from a source-of-truth or allow the LLM to resolve canonical names based on context.", "severity": "P1", "why_problematic": "Uses string length and substring containment to decide which name variant is 'canonical' for an open-world entity. This is a brittle heuristic for managing story identity."}, {"category": "semantic_string_judgment", "evidence": "similarity_score", "line_end": 493, "line_start": 450, "recommended_fix": "Delegate entity resolution to a dedicated cross-scene linking step or use vector embeddings/LLM-based verification for identity matching.", "severity": "P1", "why_problematic": "Determines identity of open-world entities (characters, locations) using substring checks, token overlap ratios, and hardcoded thresholds (0.94, 0.88, 0.93). This logic directly routes entity IDs and reference attachments based on string patterns."}, {"category": "semantic_string_judgment", "evidence": "if best_index is not None and best_score >= 0.9:", "line_end": 607, "line_start": 607, "recommended_fix": "Use a more robust identity verification method or move thresholds to a configurable SOT.", "severity": "P1", "why_problematic": "Uses a hardcoded similarity threshold (0.9) to resolve visible entities to existing candidates. This is a pattern-based semantic judgment that can lead to incorrect entity linking in visual prompts."}, {"category": "blind_string_mutation", "evidence": "localized = localized.replace(english, translated)", "line_end": 711, "line_start": 711, "recommended_fix": "Use word-boundary regex or only translate exact matches of the entire field value.", "severity": "P2", "why_problematic": "Performs blind string replacement of technical terms within potentially natural-language strings. This can cause partial word corruption (e.g., 'Hard' -> '하드' inside 'Hardly')."}], "path": "screenplay/extract_scene_stills.py", "scan_kind": "python", "sha256": "86366ecdfa4a9b6c4c4db1c77aa737d838b663fc0d4881ba9048b6625800c9b6"}
{"candidate_reason": "python scope discovery", "chunk_end": 303, "chunk_start": 1, "chunk_summary": "The file provides shared helpers for canary scripts, centralizing several hardcoded keyword and phrase lists used for semantic validation of visual and demographic content.", "duration_ms": 35214, "findings": [{"category": "semantic_string_judgment", "evidence": "_ID_AGE_BANDS, _ID_BODY_PART_TRIGGERS, _ID_CLOSE_FACE_FORBIDDEN_PHRASES, _ID_ETHNICITY_COMPONENTS, _ID_REPRODUCTION_SURFACES", "line_end": 47, "line_start": 43, "recommended_fix": "Move these semantic definitions into a structured World/Rule SOT or use an LLM-based classifier that understands the concepts rather than relying on hardcoded keyword lists.", "severity": "P1", "why_problematic": "These constants represent hardcoded keyword and phrase lists used to perform semantic validation (detecting age, body parts, forbidden phrases, ethnicity, and surfaces) on open-world scenario and prompt content. This approach relies on closed-list string matching to judge visual and demographic meaning, which should instead be driven by a structured SOT or flexible LLM analysis."}], "path": "scripts/canary/_g4_3_common.py", "scan_kind": "python", "sha256": "1e69c0ca34b679827a51b155a453c8b48c1cdf3d8bf236a69491f7c4d1d7ae24"}
{"candidate_reason": "python scope discovery", "chunk_end": 157, "chunk_start": 1, "chunk_summary": "The script is a technical utility for measuring and comparing token counts between prompt versions using tiktoken and contains no scenario-specific logic or semantic string judgments.", "duration_ms": 6934, "findings": [], "path": "scripts/canary/g4_3_token_count.py", "scan_kind": "python", "sha256": "7bdb02e9183b29527a68722c34565b61f25296fe798eba6c7b3679ec48d6bb04"}
{"candidate_reason": "python scope discovery", "chunk_end": 394, "chunk_start": 1, "chunk_summary": "The script uses a hard-coded list of natural language regex patterns to validate the semantic content of generated t2i_prompts, which constitutes pattern-based semantic judgment.", "duration_ms": 30478, "findings": [{"category": "semantic_string_judgment", "evidence": "CLOSE_FORBIDDEN_PATTERNS: List[str] = [ ... r\"preserving the same room perspective\", ... ]", "line_end": 46, "line_start": 33, "recommended_fix": "If these constraints are part of a 'Rule E' logic, they should be validated against structured fields in the scene/shot metadata (e.g., background_binding.constraints) rather than scanning the final natural language prompt string.", "severity": "P1", "why_problematic": "The script performs pass/fail validation of open-world visual prompts by scanning for specific natural language phrases. This is a brittle semantic judgment that relies on string patterns rather than structured state or schema-based constraints, making it sensitive to minor wording variations in LLM output."}], "path": "scripts/canary/g4_2_close_forbidden.py", "scan_kind": "python", "sha256": "f7a04b4bc53a5e8190937521560d0dfb5a3511e0bde674f52f56a5d42b9f0d2a"}
{"candidate_reason": "prompt scope discovery", "chunk_end": 96, "chunk_start": 1, "chunk_summary": "The prompt uses closed lists of linguistic connectors, action categories, and prescriptive visual pose templates to drive semantic validation and rewriting, which limits generalization for open-world scenarios.", "duration_ms": 224242, "findings": [{"category": "llm_closed_list_instruction", "evidence": "\"- ~하자\", \"~하면서\", \"~하며\", \"~하고\", \"~한 뒤\", \"~한 후\", \"~하고 나서\", \"and then\", \"while ~ing\", \"after ~ing\", \"as ~\"", "line_end": 16, "line_start": 14, "recommended_fix": "Define the 'sequential action' constraint as a semantic principle (e.g., 'identify any temporal sequence between two distinct actions') and provide illustrative examples rather than a hardcoded list of forbidden phrases.", "severity": "P1", "why_problematic": "The prompt uses a closed list of specific Korean and English linguistic connectors to define what constitutes a 'sequential action' violation. This limits the LLM's ability to generalize to other ways of expressing temporal sequence in open-world story text and creates a maintenance burden."}, {"category": "llm_closed_list_instruction", "evidence": "locomotion: running / sprinting / walking / striding / climbing, riding/driving: riding (a bicycle / motorcycle / horse), driving, pedaling, water/swim: swimming, rowing, paddling, jumping/leaping: leaping, jumping over, vaulting, chasing/fleeing: chasing, fleeing, escaping", "line_end": 41, "line_start": 37, "recommended_fix": "Use a broader semantic definition for 'propulsive motion' or 'locomotion' to allow the LLM to generalize to any action involving physical displacement.", "severity": "P1", "why_problematic": "The prompt hardcodes a list of action categories to trigger specific 'motion direction' visual logic. This is a closed-list semantic classifier for open-world actions; if a scenario uses a verb not in this list (e.g., 'skating', 'sliding'), the logic may fail to trigger."}, {"category": "llm_closed_list_instruction", "evidence": "\"one knee bent in down-stroke\", \"one foot just lifted off the ground\", \"one arm lifted above water\"", "line_end": 59, "line_start": 55, "recommended_fix": "Define the principle of 'mid-action pose' and 'motion direction' (e.g., 'describe the physical tension and direction of movement in a single frozen frame') without prescribing specific limb positions.", "severity": "P1", "why_problematic": "These are prescriptive visual pose templates for specific actions. They force a specific 'mid-action' look that may not fit all artistic styles or scenario contexts. These domain-specific visual tropes should be part of a structured visual rule SOT rather than hardcoded in a validator prompt."}], "path": "prompts/_base/shot_validator/3.202604301730/system.md", "scan_kind": "prompt", "sha256": "9228ac56a603032a36f676e3844b5f61f13612156e99f0ea308ec358f636e412"}
{"candidate_reason": "python scope discovery", "chunk_end": 318, "chunk_start": 1, "chunk_summary": "No actionable findings.", "duration_ms": 7027, "findings": [], "path": "scripts/canary/g4_4_token_count.py", "scan_kind": "python", "sha256": "b3aae8ceabb34ecce3feed5d768660436db7feb0344c0ba0c6774446517c99ff"}
{"candidate_reason": "python scope discovery", "chunk_end": 259, "chunk_start": 1, "chunk_summary": "The script uses regex-based semantic pattern matching to validate and fail generated prompts based on phrasing heuristics.", "duration_ms": 22380, "findings": [{"category": "semantic_string_judgment", "evidence": "BODY_PART_FOCUS_PATTERN = re.compile(r\"\\b(?:\" + _TRIGGER_ALT + r\")\\s+C\\d{2}(?:O\\d{2})?'s\\s+\\w+\", re.IGNORECASE)", "line_end": 58, "line_start": 55, "recommended_fix": "Instead of regex-based detection on the final prompt string, the pipeline should emit structured focus/framing metadata (e.g., a 'focus_target' field in the shot schema) which can be validated against a schema or allowed enum.", "severity": "P1", "why_problematic": "This regex performs a semantic judgment by assuming any word following a possessive character ID and a specific trigger phrase is a 'body part'. It is used to fail/pass candidates (line 242), making it a gating semantic validator based on string patterns rather than structured metadata."}], "path": "scripts/canary/g4_3_body_part_focus.py", "scan_kind": "python", "sha256": "0a700dbad8f8dd8017eb6a0bf7dcb9aac0dc4c70f80154a95ec6c53a896f786e"}
{"candidate_reason": "python scope discovery", "chunk_end": 340, "chunk_start": 1, "chunk_summary": "The script performs semantic validation of visual prompts by using substring matching against a list of natural language keywords to identify reproduction surfaces.", "duration_ms": 19957, "findings": [{"category": "semantic_string_judgment", "evidence": "for surface in _ID_REPRODUCTION_SURFACES: ... idx = pl.find(s_lower, start)", "line_end": 91, "line_start": 82, "recommended_fix": "Use a structured SOT or a dedicated LLM-based classifier to identify the presence and span of reproduction surfaces instead of relying on a hardcoded list of keywords and substring searches.", "severity": "P1", "why_problematic": "The script identifies visual entities (reproduction surfaces) in the t2i_prompt using substring matching against a list of natural language keywords. This is a pattern-based semantic judgment used to determine validation failure (fail/pass behavior)."}, {"category": "semantic_string_judgment", "evidence": "for surf in _ID_REPRODUCTION_SURFACES: if surf.lower() in pl:", "line_end": 243, "line_start": 240, "recommended_fix": "Derive visual entity presence from structured metadata or a semantic analysis step rather than keyword matching.", "severity": "P1", "why_problematic": "Uses substring matching to set diagnostic flags ('has_reproduction_surface') which are included in the final validation report. This propagates pattern-based semantic judgments into the analysis output."}], "path": "scripts/canary/g4_3_reproduction_surface.py", "scan_kind": "python", "sha256": "fc1825509f95546cbbb4126b62e2a4c986ab5247cd2b18e33a155811a0da359f"}
{"candidate_reason": "python scope discovery", "chunk_end": 331, "chunk_start": 1, "chunk_summary": "The script performs semantic validation of generated natural-language prompts using keyword-based substring matching to detect demographic descriptors and reproduction surfaces.", "duration_ms": 21854, "findings": [{"category": "semantic_string_judgment", "evidence": "ethnicity.lower() in window ... age.lower() in window", "line_end": 105, "line_start": 95, "recommended_fix": "Replace substring checks with an LLM-based semantic classifier or validate against a structured SOT that defines required attributes for each ID.", "severity": "P1", "why_problematic": "The script uses substring matching against keyword lists (ethnicity and age bands) to determine if a character ID in a generated prompt is 'demographically described'. This is a brittle heuristic for semantic judgment of open-world natural language and directly affects the canary's pass/fail metrics."}, {"category": "semantic_string_judgment", "evidence": "surf.lower() in pl", "line_end": 223, "line_start": 221, "recommended_fix": "Transition to structured metadata for tracking reproduction surfaces or use an LLM for semantic detection.", "severity": "P2", "why_problematic": "Uses a keyword list (_ID_REPRODUCTION_SURFACES) to detect semantic concepts within natural language prompts for diagnostic flags. This relies on pattern-based semantic judgment rather than structured metadata."}], "path": "scripts/canary/g4_3_demographic_descriptor_present.py", "scan_kind": "python", "sha256": "861eb25c7736ab97614fca1766a55fa08f3243ea4c700d940cc9f63c90fdfbf4"}
{"candidate_reason": "python scope discovery", "chunk_end": 326, "chunk_start": 1, "chunk_summary": "The script uses substring matching on natural language prompts to enforce semantic constraints regarding layout continuity in atmosphere-reference shots.", "duration_ms": 20677, "findings": [{"category": "semantic_string_judgment", "evidence": "if token.lower() in prompt_lower: found.append(token)", "line_end": 79, "line_start": 76, "recommended_fix": "Replace the substring check with an LLM-based semantic judge or ensure the layout intent is captured in a structured metadata field during the scene analysis phase before prompt generation.", "severity": "P1", "why_problematic": "The script performs case-insensitive substring matching on the natural-language 't2i_prompt' to detect layout-related tokens. This is a brittle heuristic for semantic validation that cannot distinguish between layout instructions and natural descriptions or negations (e.g., 'no furniture'), leading to false positives or missed detections in open-world story text."}], "path": "scripts/canary/g4_4_atmosphere_no_layout_import.py", "scan_kind": "python", "sha256": "68f0854faf90767f2d109f4bb87a1f63526ffda0807d5edef6259158ab71f695"}
{"candidate_reason": "python scope discovery", "chunk_end": 342, "chunk_start": 1, "chunk_summary": "The script implements a canary validator that uses substring matching against a list of generic person nouns to semantically judge generated image prompts, directly affecting pipeline pass/fail status.", "duration_ms": 15298, "findings": [{"category": "semantic_string_judgment", "evidence": "for noun in _CONTINUITY_GENERIC_PERSON_NOUNS: if noun.lower() in window:", "line_end": 251, "line_start": 248, "recommended_fix": "Replace substring-based semantic detection with a structured check during prompt assembly or use an LLM-based evaluator to identify redundant character descriptions in context.", "severity": "P1", "why_problematic": "The script performs a substring check on generated natural-language prompts using a closed list of nouns to detect 'double descriptions'. This pattern-based semantic judgment determines the success or failure of the prompt version, which is a high-signal routing/validation risk for open-world story content."}], "path": "scripts/canary/g4_4_double_description.py", "scan_kind": "python", "sha256": "cce7b8dbf3fbb1ec3007dfef27b9f611b18652d15f1f749c85de733d7cd9a5a1"}
{"candidate_reason": "python scope discovery", "chunk_end": 286, "chunk_start": 1, "chunk_summary": "The script uses literal substring matching on natural language prompts to validate visual framing constraints, which drives pass/fail logic.", "duration_ms": 27581, "findings": [{"category": "semantic_string_judgment", "evidence": "phrase.lower() in pl", "line_end": 71, "line_start": 63, "recommended_fix": "Transition to a structured visual constraint validation where the LLM or a vision-language model evaluates the framing intent, or check for specific metadata flags in the scene analysis rather than searching for natural language patterns in the final prompt.", "severity": "P1", "why_problematic": "The script performs case-insensitive literal substring matching on the generated 't2i_prompt' to detect forbidden visual descriptions (e.g., 'his face fills the frame'). This uses a closed list of phrases to judge open-world visual meaning and determines the success or failure of the canary validation."}], "path": "scripts/canary/g4_3_close_framing_face_forbidden.py", "scan_kind": "python", "sha256": "9624919ccfa40373d76da9985eb3782a6b308651487995a83fc6286aad836642"}
{"candidate_reason": "python scope discovery", "chunk_end": 403, "chunk_start": 1, "chunk_summary": "The script is a technical utility for computing token count deltas between prompt versions using tiktoken and contains no semantic string judgments or scenario-specific pollution.", "duration_ms": 6295, "findings": [], "path": "scripts/canary/g4_5a_token_count.py", "scan_kind": "python", "sha256": "cce2c438351ed385bf49a1f0611d47eb1675a43cd0ac07ce195c93985f003685"}
{"candidate_reason": "python scope discovery", "chunk_end": 172, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 3207, "findings": [], "path": "scripts/canary/g4_6_shot_validator_character_ids_present.py", "scan_kind": "python", "sha256": "18b3785d8449ea6e4843eb30ebb9d7837fca706717039f37facee8e71ab375a1"}
{"candidate_reason": "python scope discovery", "chunk_end": 350, "chunk_start": 1, "chunk_summary": "The script uses hardcoded English verb lists and regex patterns to perform semantic classification of visual prompts for view-mixing violations.", "duration_ms": 19658, "findings": [{"category": "semantic_string_judgment", "evidence": "_VIEW_MIXING_FULL_BODY_VERBS", "line_end": 75, "line_start": 67, "recommended_fix": "Move semantic view classification to a structured SOT or an LLM-based validator that understands visual context beyond a fixed verb list.", "severity": "P1", "why_problematic": "Hardcoded list of English verbs ('stands', 'seated', 'walking', etc.) used to semantically classify a prompt as 'full-body' view. This is a closed-world heuristic for open-world visual descriptions."}, {"category": "semantic_string_judgment", "evidence": "_BODY_PART_FOCUS_PATTERN", "line_end": 82, "line_start": 79, "recommended_fix": "Use an LLM-based semantic analyzer to identify close-up or focus intent rather than relying on rigid regex patterns.", "severity": "P1", "why_problematic": "Uses a regex pattern to identify 'body-part focus' based on a closed list of triggers and a specific possessive syntax, which fails to capture the variety of natural language descriptions for close-ups."}, {"category": "semantic_string_judgment", "evidence": "any(v in window for v in _VIEW_MIXING_FULL_BODY_VERBS)", "line_end": 133, "line_start": 131, "recommended_fix": "Replace substring-based view detection with a vision-language model or a dedicated LLM classifier that evaluates the entire prompt context.", "severity": "P1", "why_problematic": "Uses substring matching against a fixed verb list to determine the visual composition of a scene, which is used to trigger validation failures."}], "path": "scripts/canary/g4_4_view_mixing.py", "scan_kind": "python", "sha256": "5d23431a948400cfd76c6c9927651d4686932d745a02470311e492e895644713"}
{"candidate_reason": "python scope discovery", "chunk_end": 73, "chunk_start": 1, "chunk_summary": "This canary script validates a hotfix for a routing failure where visual descriptions (e.g., 'face framing') in background labels caused incorrect reference classification.", "duration_ms": 10409, "findings": [{"category": "semantic_string_judgment", "evidence": "if \"face framing\" not in label.lower():", "line_end": 56, "line_start": 54, "recommended_fix": "Replace substring-based routing in the prompt service with structured metadata or explicit role enums that are independent of the visual description text.", "severity": "P1", "why_problematic": "The test confirms that the underlying routing logic (resolve_ref_roles) is sensitive to specific visual keywords like 'face framing' within natural language labels, leading to misclassification of reference roles (background vs. character)."}, {"category": "schema_or_enum_drift", "evidence": "if not any(\"BACKGROUND from a previous shot (SAME ROOM)\" in r for r in res.ref_roles):", "line_end": 66, "line_start": 60, "recommended_fix": "Ensure resolve_ref_roles returns structured category IDs or enums instead of searching for natural language substrings in the output.", "severity": "P2", "why_problematic": "The routing validation relies on matching long natural language strings rather than stable enum constants. This makes the pipeline fragile to minor phrasing changes in the prompt service or LLM instructions."}], "path": "scripts/canary/g4_6_label_routing_face_substring_fix.py", "scan_kind": "python", "sha256": "1b61ec123c27253fcb73efa7ee82ef939b4013d13ad542392464b83c5f2b1eb1"}
{"candidate_reason": "python scope discovery", "chunk_end": 299, "chunk_start": 1, "chunk_summary": "The script implements a canary validator that uses substring matching against keyword lists to enforce semantic compositional rules (Rule G) on generated T2I prompts.", "duration_ms": 17184, "findings": [{"category": "semantic_string_judgment", "evidence": "_has_any_token(prompt, _SPATIAL_INTERACTION_VERBS) and _has_any_token(prompt, _SPATIAL_SHARED_ANCHOR_KEYWORDS)", "line_end": 190, "line_start": 183, "recommended_fix": "Replace the substring-based detection logic with an LLM-based validator (e.g., gpt-4o-mini) as suggested in the file's own O-17 override comment, using a structured prompt to evaluate Rule G compliance based on the actual meaning of the prompt.", "severity": "P1", "why_problematic": "The script performs pass/fail validation on open-world natural language prompts by checking for the presence of specific verbs and anchor keywords. This pattern-based semantic judgment is brittle and cannot reliably capture the nuance of spatial interactions in diverse story scenarios, leading to false positives or missed violations."}], "path": "scripts/canary/g4_5a_fg_bg_shared_anchor.py", "scan_kind": "python", "sha256": "6969c350697873f9435c774a00914bbb90363bf6870fa902313252170e592ab3"}
{"candidate_reason": "python scope discovery", "chunk_end": 83, "chunk_start": 1, "chunk_summary": "No actionable findings; the script is a technical diagnostic tool using database IDs and technical constants without semantic string judgment or scenario pollution.", "duration_ms": 3013, "findings": [], "path": "scripts/g4_6_baseline_refs.py", "scan_kind": "python", "sha256": "61d46c477b6b42e0e9ba40695feea893a8fc2c9a09a317f347789f0fedad0ff2"}
{"candidate_reason": "python scope discovery", "chunk_end": 387, "chunk_start": 1, "chunk_summary": "The script uses hardcoded natural language tokens and substring proximity checks to perform semantic validation of image prompts, which is identified as a brittle pattern.", "duration_ms": 22134, "findings": [{"category": "semantic_string_judgment", "evidence": "_SPATIAL_CAMERA_LOW_TOKENS, _LOW_CONTRADICTION_TOKENS, and _detect_violations_in_window logic", "line_end": 160, "line_start": 59, "recommended_fix": "Migrate the Rule F consistency check to an LLM-based validator or a structured spatial reasoning engine as suggested in the module's own documentation.", "severity": "P1", "why_problematic": "The script performs semantic contradiction detection (Rule F) by scanning for specific natural language substrings (e.g., 'chest', 'floor', '가슴') within a character window in the t2i_prompt. This pattern-based judgment of open-world visual meaning is brittle and used to fail the pipeline."}], "path": "scripts/canary/g4_5a_camera_frame_consistency.py", "scan_kind": "python", "sha256": "9dbca1b9ee50a3a659c55a256a98bc33410d317cdca140e550e7ee6bd1af4340"}
{"candidate_reason": "python scope discovery", "chunk_end": 441, "chunk_start": 1, "chunk_summary": "The script implements the RO-8 algorithm for detecting visual framing contradictions (Rule J) using hardcoded keyword lists and substring matching against natural-language t2i_prompt text.", "duration_ms": 20645, "findings": [{"category": "semantic_string_judgment", "evidence": "_FULL_BODY_KEYWORDS: tuple[str, ...] = (\"stands\", \"seated\", \"leaning\", \"전신\")", "line_end": 93, "line_start": 88, "recommended_fix": "Move these semantic anchors to a structured World/Rule SOT or transition to the LLM-based validator (gpt-5.4-mini) as noted in the file's own comments at line 35.", "severity": "P1", "why_problematic": "Hardcoded list of natural language verbs used as a semantic classifier to determine the visual state (full-body) of a character. This is an open-world visual judgment implemented as a closed string list, which is prone to false negatives and scenario-specific bias."}, {"category": "semantic_string_judgment", "evidence": "for trigger in _ID_BODY_PART_TRIGGERS: ... if window_text == trigger.lower():", "line_end": 178, "line_start": 171, "recommended_fix": "Replace token-matching heuristics with a semantic analysis step that uses structured shot intent or an LLM judge to identify body-part focus.", "severity": "P1", "why_problematic": "Uses exact string matching on natural language tokens to identify 'body-part close-up' triggers. This heuristic-based semantic detection drives the pass/fail behavior of the canary validator."}, {"category": "semantic_string_judgment", "evidence": "if any(kw.lower() in tok_lower for kw in _FULL_BODY_KEYWORDS):", "line_end": 184, "line_start": 184, "recommended_fix": "Use a structured representation of character pose/framing or an LLM-based classifier to determine visual state.", "severity": "P1", "why_problematic": "Uses substring matching on natural language tokens to decide if a prompt describes a full-body shot. This is a pattern-based semantic judgment used to validate open-world story/visual meaning."}, {"category": "semantic_string_judgment", "evidence": "has_close = any(kw in prompt_lower for kw in close_kw_lower)", "line_end": 318, "line_start": 318, "recommended_fix": "Use structured shot metadata (e.g., framing type from the scene manifest) to determine the shot scope instead of parsing the generated prompt text.", "severity": "P1", "why_problematic": "Determines the 'close-framing' scope of a shot by checking for the presence of specific keywords in the generated prompt text. This routes the validation logic based on string patterns rather than structured metadata."}], "path": "scripts/canary/g4_5a_primary_framing.py", "scan_kind": "python", "sha256": "65690d96b72dae9628e56e37f36a69bff1f6a2a63510b4747423f8364c9ff7b3"}
{"candidate_reason": "python scope discovery", "chunk_end": 333, "chunk_start": 1, "chunk_summary": "The script is a generic data extraction utility for capturing test fixtures and contains no hardcoded scenario-specific logic or semantic string judgments.", "duration_ms": 6875, "findings": [], "path": "scripts/g4_6_capture_fixtures.py", "scan_kind": "python", "sha256": "f360c02eac689a2b1134cae372e60b471bff70ffbbafb3a512be4b01a3addf02"}
{"candidate_reason": "python scope discovery", "chunk_end": 359, "chunk_start": 1, "chunk_summary": "The script extracts entity IDs from natural-language prompts using regex to validate visual continuity, creating a dependency on prompt string patterns for semantic membership.", "duration_ms": 28985, "findings": [{"category": "semantic_string_judgment", "evidence": "extract_entity_set(prompt: str)", "line_end": 75, "line_start": 60, "recommended_fix": "Use a structured metadata field (e.g., 'entities' or 'continuity_elements') that explicitly lists the IDs present in the shot, rather than parsing them from the natural-language prompt text.", "severity": "P1", "why_problematic": "The script determines which characters (C##) and props (P##) are present in a shot by regex-scanning the natural-language 't2i_prompt' string. This uses pattern matching on generated text to decide 'visible entity membership', which is then used to fail or pass the canary. This makes the continuity check fragile to the LLM's phrasing rather than relying on a structured source of truth for entity presence."}], "path": "scripts/canary/g4_4_zoom_in_detail_no_new_entity.py", "scan_kind": "python", "sha256": "448c1707fa6227a093cffe9dbc6fa99f06948495066545e61845da4942e96d8d"}
{"candidate_reason": "python scope discovery", "chunk_end": 444, "chunk_start": 1, "chunk_summary": "The script uses hardcoded keyword lists and substring matching to detect visual composition violations in generated prompts, which is a brittle approach to semantic validation.", "duration_ms": 25176, "findings": [{"category": "semantic_string_judgment", "evidence": "_VIEW_MIXING_FULL_BODY_VERBS, _FACE_CLOSE_UP_KEYWORDS", "line_end": 90, "line_start": 74, "recommended_fix": "Centralize these definitions in a structured world/rule SOT and transition to an LLM-based validator for semantic judgment.", "severity": "P1", "why_problematic": "Hardcoded lists of verbs and keywords (including Korean terms like '눈', '얼굴') are used as semantic classifiers to judge open-world visual content. This approach is prone to false positives/negatives and lacks contextual awareness."}, {"category": "semantic_string_judgment", "evidence": "any(v.lower() in tok_lower for v in _VIEW_MIXING_FULL_BODY_VERBS), window_text == trigger.lower(), kw.lower() in prompt_lower", "line_end": 211, "line_start": 151, "recommended_fix": "Replace keyword-based detection with an LLM-based judge that can understand the relationship between character IDs and their described poses/framing.", "severity": "P1", "why_problematic": "The script uses blind substring matching and case-insensitive comparisons to determine if a prompt violates visual rules. This logic cannot distinguish between intended character actions and incidental mentions of keywords in the prompt text."}], "path": "scripts/canary/g4_5a_view_mixing_extension.py", "scan_kind": "python", "sha256": "fabe6f32b444d9eacc6b1565a2d96c0e176f1434099e1716a51ed90b76bd6689"}
{"candidate_reason": "python scope discovery", "chunk_end": 175, "chunk_start": 1, "chunk_summary": "no actionable findings", "duration_ms": 18992, "findings": [], "path": "scripts/canary/g4_6_visible_entities_contract.py", "scan_kind": "python", "sha256": "26e188497ef362a7306562bd4365352cb6826b2dc9b3c846952bd4f30f8fd2d9"}
{"candidate_reason": "python scope discovery", "chunk_end": 410, "chunk_start": 1, "chunk_summary": "The script replicates production logic for visual reference attachment, using a regex-based heuristic to classify camera framing from natural language strings.", "duration_ms": 31341, "findings": [{"category": "semantic_string_judgment", "evidence": "_CLOSE_FRAMING_RE.search(camera_direction)", "line_end": 314, "line_start": 233, "recommended_fix": "The staging or scenario analysis phase should emit a structured framing_type enum or a boolean is_close_up flag in the source of truth, which the image generation pipeline should consume directly instead of performing string matching.", "severity": "P1", "why_problematic": "Visual routing (deciding whether to include a background reference) is driven by a regex search on a natural language camera_direction string. This makes the pipeline sensitive to specific phrasing and prevents robust visual composition control."}], "path": "scripts/regen_phase91_with_model.py", "scan_kind": "python", "sha256": "d52417dadf361a3a2e1fa86d2e0a8df5001bacea669347a897a8f4349ab071bd"}
