Mirror softcore outfit in hard clothing state

This commit is contained in:
2026-06-28 10:14:51 +02:00
parent 5acda5227c
commit f681fe2949
2 changed files with 122 additions and 54 deletions
+18 -3
View File
@@ -6297,12 +6297,24 @@ def smoke_pair_route_policy() -> None:
_expect(clothing_route.as_dict() == clothing_legacy, "Typed pair clothing route should match legacy dict route")
_expect(clothing_route.woman_access == "lower", "Typed pair clothing route lost lower-access detection")
_expect(clothing_route.requires_body_exposure_scene is True, "Typed pair clothing route lost exposure-scene flag")
partial_common = {**clothing_common, "mode": "partially_removed"}
continuity_outfit = "button-down shirt tied at the waist over a fitted bralette and denim shorts"
partial_common = {**clothing_common, "mode": "partially_removed", "softcore_outfit": continuity_outfit}
partial_route = pair_clothing.resolve_hardcore_pair_clothing_result(**partial_common)
_expect(partial_route.requires_body_exposure_scene is True, "Partial lower-access clothing should request scene cleanup")
partial_lower = partial_route.hardcore_clothing_state.lower()
_expect("denim shorts" in partial_lower, "Partial lower-access clothing should name removed lower softcore garment")
_expect("below the hips" in partial_lower, "Partial lower-access clothing should describe lower-garment removal")
_expect("button-down shirt" in partial_lower and "fitted bralette" in partial_lower, "Partial lower-access clothing lost remaining softcore outfit styling")
implied_route = pair_clothing.resolve_hardcore_pair_clothing_result(
**{**clothing_common, "mode": "implied_nude", "softcore_outfit": continuity_outfit}
)
implied_lower = implied_route.hardcore_clothing_state.lower()
_expect("fabric slipping off" not in implied_lower, "Implied nude clothing should not fall back to generic fabric slipping")
_expect("denim shorts" in implied_lower and "fitted bralette" in implied_lower, "Implied nude clothing should mirror softcore outfit pieces")
structured_axis_clothing = pair_clothing.resolve_hardcore_pair_clothing_result(
**{
**clothing_common,
"softcore_outfit": continuity_outfit,
"hard_row": {
"role_graph": "generic adult action",
"item": "generic configured action",
@@ -6495,13 +6507,16 @@ def smoke_krea_pair_clothing_state() -> None:
prompt = _expect_text("krea_pair_clothing_state.krea_prompt", krea.get("krea_prompt"), 60)
lower = prompt.lower()
root_clothing = _clean_key(pair.get("hardcore_clothing_state"))
_expect("lower body is clear" in root_clothing, "pair root clothing state lost lower-body access wording")
_expect(
"below the hips" in root_clothing,
"pair root clothing state lost lower-body removal wording",
)
_expect(pair.get("default_man_hardcore_clothing"), "pair root default man hardcore clothing is missing")
_expect("metadata" in krea.get("method", ""), "pair clothing route did not use metadata")
_expect("clothing state:" not in lower, "Krea clothing route leaked raw clothing label")
_expect("visual clothing state" not in lower, "Krea clothing route fell back to visual clothing state label")
_expect("softcore outfit" not in lower and "teaser outfit" not in lower, "Krea clothing route leaked softcore outfit label")
_expect("lower body is clear" in lower, "Krea clothing route lost generated clothing continuity")
_expect("below the hips" in lower, "Krea clothing route lost generated lower-body clothing continuity")
_expect("the man keeps" in lower, "Krea clothing route lost partner clothing continuity")
_expect("outfit racks" not in lower and "shoe shelves" not in lower, "Krea pair formatter leaked unsanitized hard scene")
hard_scene = _clean_key(pair["hardcore_row"].get("scene_text"))