diff --git a/docs/prompt-architecture-improvement-plan.md b/docs/prompt-architecture-improvement-plan.md index 99d3f15..0c7987b 100644 --- a/docs/prompt-architecture-improvement-plan.md +++ b/docs/prompt-architecture-improvement-plan.md @@ -21,6 +21,11 @@ The map audit currently sees: - 23 expression pools. - 24 composition pools. - A new Krea2 resolution node with width/height/API aspect outputs. +- Registered route policy validation, so action/position families stay covered + by SDXL family tags, caption labels, and SDXL incompatibility-filter keys. +- Route simulation family coverage, so representative generated rows exercise + every registered action and position family except documented special cases + covered by dedicated smoke fixtures. ## Architectural Finding @@ -536,8 +541,9 @@ Improve later: - keep `tools/prompt_map_audit.py` passing; it now checks referenced expression/composition/scene pools, item-template axes, object-template - metadata values for both string and object templates, and critical route - documentation plus expected smoke coverage. + metadata values for both string and object templates, registered formatter + policy coverage for route families, and critical route documentation plus + expected smoke coverage. ### Node / UI Path @@ -667,6 +673,9 @@ Near-term: outputs so source contact/guidance/presentation wording stays metadata-driven. - Cover generated fallback role routes through Krea, SDXL, and natural caption outputs so solo and same-sex paths do not remain untested edge behavior. +- Keep route simulation coverage updated when adding action or position + families, so generated Krea2, SDXL, and natural-caption paths prove the new + family reaches formatter metadata routes. Medium-term: diff --git a/docs/prompt-pool-routing-map.md b/docs/prompt-pool-routing-map.md index 8793487..aa29662 100644 --- a/docs/prompt-pool-routing-map.md +++ b/docs/prompt-pool-routing-map.md @@ -902,6 +902,9 @@ The script does not import ComfyUI. It parses the repo and prints: - effective category route coverage so each normalized category path has usable item, scene, expression, composition, and hardcore route metadata before runtime fallbacks can hide a gap. +- registered route policy validation: registered route families have SDXL tags, + caption labels, and valid incompatibility filters before a new action or + position family can drift between formatter routes. - location theme camera-profile validation so `Location Theme` presets and their scene entries resolve to structured scene-camera profiles instead of falling back to generic camera prose. @@ -1000,6 +1003,8 @@ issues for: - POV routes emitting third-person camera text or losing first-person wording; - selected hardcore position filters appearing in `position_keys` but not as the primary `position_key`; +- route-family coverage for registered action and position families, excluding + only documented special cases that have their own smoke fixtures; - pose-axis rerolls changing cast/scene metadata or failing to move pose/action metadata. diff --git a/tools/prompt_map_audit.py b/tools/prompt_map_audit.py index c212dfe..0245025 100644 --- a/tools/prompt_map_audit.py +++ b/tools/prompt_map_audit.py @@ -77,6 +77,21 @@ ENTRY_ROUTE_SNIPPETS: tuple[str, ...] = ( "`naturalize_caption` -> `caption_format_route.py`", ) +AUDIT_DOC_SNIPPETS: tuple[tuple[str, str], ...] = ( + ( + "docs/prompt-pool-routing-map.md", + "registered route families have SDXL tags", + ), + ( + "docs/prompt-pool-routing-map.md", + "caption labels, and valid incompatibility filters", + ), + ( + "docs/prompt-pool-routing-map.md", + "route-family coverage for registered action and position families", + ), +) + PROMPT_ROW_READ_SCAN_GLOBS: tuple[str, ...] = ( "krea_*.py", "sdxl_*.py", @@ -683,6 +698,11 @@ def _routing_doc_errors() -> list[tuple[str, str, str]]: for snippet in ENTRY_ROUTE_SNIPPETS: if snippet not in route_map_text: errors.append(("(entry route)", "docs/prompt-pool-routing-map.md", f"missing entry snippet: {snippet}")) + for doc_name, snippet in AUDIT_DOC_SNIPPETS: + doc_path = ROOT / doc_name + doc_text = doc_path.read_text(encoding="utf-8") if doc_path.exists() else "" + if snippet not in doc_text: + errors.append(("(audit doc)", doc_name, f"missing audit snippet: {snippet}")) return errors