Add Krea2 folded missionary candidate

This commit is contained in:
2026-06-29 06:20:11 +02:00
parent f855c7b022
commit f73eb72d68
3 changed files with 70 additions and 1 deletions
+38
View File
@@ -443,6 +443,44 @@
"guide_section": "",
"notes": "Atlas shows repeated front-facing open-leg missionary geometry; keep separate from folded-leg missionary until fixed-seed Krea2 tests prove which wording is reliable."
}
},
{
"key": "pov_missionary_folded_high_leg_penetration",
"family": "missionary_folded",
"status": "candidate",
"atlas_folders": ["missionary_folded"],
"action_family": "penetration",
"position_keys": ["missionary", "folded_legs", "knees_to_chest", "front_entry"],
"canonical_geometry": "First-person folded missionary view from above the viewer's pelvis: the woman reclines on her back facing the viewer, knees folded high toward her chest, feet or ankles close to the camera, and the viewer's hands hold her calves or ankles while the central contact line stays below the raised legs.",
"prompt_cues": [
"POV folded missionary high-leg penetration position",
"woman reclines on her back with knees folded high toward her chest",
"feet or ankles sit close to the camera above the contact line",
"viewer hands hold her calves or ankles in the foreground",
"her face and torso remain visible between or behind the raised legs",
"central penetration line stays below the folded knees"
],
"avoid_cues": [
"normal open-leg missionary with knees spread low",
"rear-entry or doggy geometry",
"side-profile framing",
"legs cropped away or relaxed flat on the bed",
"feet replacing the penetration geometry as the main action"
],
"reference_images": [
"missionary_folded/16_missionary_folded.png",
"missionary_folded/50_missionary_folded.png",
"missionary_folded/80_missionary_folded.png"
],
"generator_hook": {
"module": "krea_pov_actions.py",
"route_terms": ["missionary_folded", "folded missionary", "knees-to-chest"]
},
"evidence": {
"fixed_seed_tests": [],
"guide_section": "",
"notes": "Atlas shows repeated high-leg folded missionary geometry; needs fixed-seed Krea2 tests before promotion to proven."
}
}
]
}
+9
View File
@@ -170,3 +170,12 @@ viewer is positioned between her legs from the lower foreground. Treat
`pov_missionary_open_leg_penetration` as a candidate until it has fixed-seed
Krea2 evidence. Keep this separate from `missionary_folded`, where the legs are
pressed much higher and need different wording.
### Missionary Folded / High-Leg Penetration
The `missionary_folded` folder repeats a high-leg first-person penetration
layout: the woman reclines on her back facing the viewer, her knees are folded
high toward her chest, feet or ankles sit close to the camera, and the viewer's
hands often hold her calves or ankles while the contact line stays below the
raised legs. Treat `pov_missionary_folded_high_leg_penetration` as a candidate
until it has fixed-seed Krea2 evidence.
+23 -1
View File
@@ -6787,6 +6787,7 @@ def smoke_krea2_pose_variant_catalog_policy() -> None:
penetration == [
"pov_doggy_top_down_rear_entry",
"pov_missionary_open_leg_penetration",
"pov_missionary_folded_high_leg_penetration",
],
f"Krea2 pose-variant penetration filtering changed unexpectedly: {penetration}",
)
@@ -6876,6 +6877,12 @@ def smoke_krea2_pose_variant_catalog_policy() -> None:
any("woman reclines on her back with knees open toward the viewer" in str(cue) for cue in missionary.get("prompt_cues", [])),
"Missionary variant lost open-leg reclined cue",
)
missionary_folded = krea2_pose_variant_catalog.get_variant("pov_missionary_folded_high_leg_penetration")
_expect(missionary_folded.get("status") == "candidate", "Folded missionary variant should remain a candidate until fixed-seed evidence exists")
_expect(
any("woman reclines on her back with knees folded high toward her chest" in str(cue) for cue in missionary_folded.get("prompt_cues", [])),
"Folded missionary variant lost high-leg folded cue",
)
refs = krea2_pose_variant_catalog.reference_paths("pov_boobjob_upright_cleavage")
_expect(refs and all(path.name.endswith(".png") for path in refs), "Boobjob reference paths are not image paths")
_expect(all("bg" not in str(path).lower() for path in refs), "Reference paths should not include background-only atlas images")
@@ -6957,9 +6964,12 @@ def smoke_krea2_tuning_report_policy() -> None:
missionary = by_key.get("pov_missionary_open_leg_penetration") or {}
_expect(missionary.get("coverage_state") == "needs_fixed_seed_tests", "Missionary report should need fixed-seed tests")
_expect(missionary.get("accepted_evidence_count") == 0, "Missionary report should not have accepted evidence yet")
missionary_folded = by_key.get("pov_missionary_folded_high_leg_penetration") or {}
_expect(missionary_folded.get("coverage_state") == "needs_fixed_seed_tests", "Folded missionary report should need fixed-seed tests")
_expect(missionary_folded.get("accepted_evidence_count") == 0, "Folded missionary report should not have accepted evidence yet")
summary = krea2_tuning_report.coverage_summary()
_expect(summary.get("status_counts", {}).get("proven") == 3, "Krea2 tuning report proven count changed")
_expect(summary.get("status_counts", {}).get("candidate") == 9, "Krea2 tuning report candidate count changed")
_expect(summary.get("status_counts", {}).get("candidate") == 10, "Krea2 tuning report candidate count changed")
_expect(
summary.get("variants_without_accepted_evidence") == [
"pov_ballsucking_low_head",
@@ -6971,6 +6981,7 @@ def smoke_krea2_tuning_report_policy() -> None:
"pov_blowjob_laying_frontal_oral",
"pov_blowjob_sitting_upright_oral",
"pov_missionary_open_leg_penetration",
"pov_missionary_folded_high_leg_penetration",
],
f"Krea2 tuning report missing-evidence set changed: {summary.get('variants_without_accepted_evidence')}",
)
@@ -6987,6 +6998,7 @@ def smoke_krea2_tuning_report_policy() -> None:
"pov_blowjob_laying_frontal_oral",
"pov_blowjob_sitting_upright_oral",
"pov_missionary_open_leg_penetration",
"pov_missionary_folded_high_leg_penetration",
],
"Krea2 tuning report next plans changed",
)
@@ -7076,6 +7088,15 @@ def smoke_krea2_tuning_report_policy() -> None:
any(str(path).endswith("missionary/101_missionary.png") for path in missionary_plan.get("reference_paths") or []),
"Missionary test plan lost atlas reference path",
)
missionary_folded_plan = plan_by_key["pov_missionary_folded_high_leg_penetration"]
_expect(
"woman reclines on her back with knees folded high toward her chest" in " ".join(missionary_folded_plan.get("prompt_cues") or []),
"Folded missionary test plan lost high-leg folded cue",
)
_expect(
any(str(path).endswith("missionary_folded/16_missionary_folded.png") for path in missionary_folded_plan.get("reference_paths") or []),
"Folded missionary test plan lost atlas reference path",
)
with tempfile.TemporaryDirectory() as tmpdir:
atlas_root = Path(tmpdir)
for folder in ("doggy", "doggy_control", "custom_pose", "custom_pose_control", "bg", "woman", "doggy_bg"):
@@ -7116,6 +7137,7 @@ def smoke_krea2_tuning_report_policy() -> None:
_expect("pov_blowjob_laying_frontal_oral" in markdown, "Krea2 tuning report markdown lost blowjob laying candidate variant")
_expect("pov_blowjob_sitting_upright_oral" in markdown, "Krea2 tuning report markdown lost blowjob sitting candidate variant")
_expect("pov_missionary_open_leg_penetration" in markdown, "Krea2 tuning report markdown lost missionary candidate variant")
_expect("pov_missionary_folded_high_leg_penetration" in markdown, "Krea2 tuning report markdown lost folded missionary candidate variant")
_expect("needs_fixed_seed_tests" in markdown, "Krea2 tuning report markdown lost coverage state")
_expect("Prompt cues" in markdown, "Krea2 tuning report markdown lost next-test cue section")
_expect("Avoid cues" in markdown, "Krea2 tuning report markdown lost next-test avoid section")