# Krea2 A/B Methodology Memory

This file is the persistent memory for SxCP Krea2 prompt A/B methodology.
Update it whenever the testing method improves.

## Current Method

Version: `2026-07-01-top-view-shaft-anchor-calibration`

1. Pull or construct the baseline from an actual SxCP/CodexMCPTest source case.
2. Keep the sampler seed fixed across the baseline and candidate.
3. Keep subject, location family, camera family, and target pose fixed unless
   the experiment explicitly tests one of those axes.
4. Change one prompt variable at a time when possible, usually the visual
   hierarchy for the target contact or pose.
5. Keep `sxcp_eval_out` positive-only. Do not place negative-conditioning
   phrases in the visible prompt.
6. Use location-compatible anchors only. For coworking/office scenes, use chair
   edge, desk edge, laptop table, glass partitions, repeated desk rows, plants,
   and window depth instead of bedroom or bedding anchors.
7. Treat a manual prompt win as proof that Krea2 responds to the wording, not
   proof that the SxCP generator already emits it.
8. Mirror a prompt win into the generator as a provisional improvement when
   leaving a category if same-seed evidence shows it improves over baseline and
   the wording is generator-safe. Keep the route `candidate` until the broader
   generator-patch evidence matrix proves it.
9. When a subject-first batch preserves appearance but repeatedly misses the
   atlas body plane, record it as weak-case evidence and consider stronger
   control before adding more generator text.
10. Score spatial orientation against the atlas before accepting evidence,
    and treat a contradictory room/background read as a rejection even when
    contact or limb placement is clear. Use background cues to decide whether
    the viewer or partner is high, low, standing, seated, supine, or on a
    support before grading pose/contact quality.
11. For hard text-only pose families, set an exploration budget before calling
    the route weak or deciding it needs stronger control. Eight prompt probes
    are only an early signal. Use batched wording-axis probes and aim for about
    fifty positive-only tries across meaningful axes before concluding that
    prompt text cannot reliably express the pose.
12. Do not require a perfect atlas hit before carrying progress forward. After
    the exploration budget, a repeatable partial that beats the baseline failure
    mode can become an accepted provisional generator improvement while the
    remaining miss stays documented for later seed/source expansion.
13. After patching generator wording, render one prompt produced by the actual
    code path before closing the category. Manual prompt-axis wins are not
    enough; the generated route can still drop the key contact hierarchy or add
    limiting positive-channel wording.
14. Manual prompt-axis exploration can stay hand-written while testing a wide
    range of new wording. Once a manual atlas prompt shows a promising axis,
    run a generator-reproduction checkpoint before treating it as route
    evidence: make the actual SxCP generator emit the closest equivalent final
    Krea prompt, compare that generated prompt against the manual winner, and
    record any missing hierarchy, wording order, restored detail, or
    scene/camera constraint. This avoids building a strong atlas prompt that the
    generator cannot reproduce.
15. Treat the final prompt that Krea receives and the rendered generator images
    as the source of truth. Tests are guardrails for known failures, not proof
    that the prompt will render the intended pose. If a test passes while the
    rendered image or prompt audit shows drift, update the test and the method
    rather than trusting the test.
16. Atlas/catalog prompt wording must use direct visual prompt sentences. Do
    not send option-list wording such as `or`, `may`, `optionally`, or `either`
    in pose cues, and do not append meta instructions such as `keep the visible
    partner...` or generic camera-layout prose to atlas routes. Krea2 is not an
    instruction-following LLM in this loop; prompt text should describe the
    image, not explain a policy.
17. Do not promote generator edits from a few isolated renders unless the final
    generated prompt is structurally wrong before rendering. For pose wording
    changes, collect prompt/image evidence across multiple women, source cases,
    and seeds when feasible, then patch only the repeated generator-safe
    hierarchy. Keep early wins as prompt-guide or provisional evidence.
18. Treat atlas prompt restore as a constrained final-prompt operation, not a
    free re-add of removed generator axes. Restored detail must support the
    atlas hierarchy without adding a second body/camera cue, hidden garment, or
    ambiguous subject. For clothing restore, keep softcore-continuity ownership
    explicit: use woman-owned wording such as `the woman wears ...` for visible
    clothes, keep partial-removal state when useful, and describe hidden lower
    garments as out of frame instead of naming visible shorts/pants that the
    atlas pose should not show. Strip raw `POV foreground clothing cue` or
    `POV foreground body cue` text from strict atlas prompts because it can make
    Krea2 assign clothing or body ownership to the viewer/man.
19. Use same-subject atlas refine decks before broad generator edits whenever
    possible. A deck such as
    `/media/unraid/comfyui/output/CodexMCP-Atlas-Refine` keeps the visible woman
    constant across atlas variants, so prompt/cue changes can be scored against
    pose ownership, workspace continuity, clothing visibility, and anatomy
    behavior without confusing subject drift for prompt behavior.
20. After the hard-pose exploration budget is met, separate repeatable partials
    from exact atlas hits. For `pov_blowjob_top_down_vertical_shaft`, 51
    text-only prompt/seed outcomes preserved contact and coworking continuity
    but repeatedly collapsed toward a forward/downward kneeling oral frame
    instead of the flatter atlas top view. Keep `mouth directly below the
    viewer's torso` plus `floor-plane-priority` as a provisional partial, and
    mark the exact flatter atlas family as needing stronger control/image
    guidance before more synonym-only prompt probes.
21. Before adding more target-pose words, do conflict analysis on clauses that
    fight the pose. A working prompt can still be dragged away by scene,
    clothing, foreground-body, camera-layout, or background-depth clauses that
    imply the wrong geometry. For overhead/top-view oral in a coworking lounge,
    the generic lounge tail with windows, repeated desk rows, and soft depth
    fights the atlas angle; rewrite the scene as sparse floor-plan evidence
    such as carpet texture and carpet tile seams before adding more `vertical`
    synonyms. The refinement loop is: keep the winning action/pose hierarchy
    fixed, remove or compress conflicting clauses, render, then only add back
    the smallest visible scene detail that still supports the target camera.
22. Do not generalize conflict analysis into a blanket “remove details” rule.
    Compare the atlas frame first and ask what it does better. If the atlas
    shows a room, support surface, furniture interaction, wall, or body-contact
    prop, add or rewrite those details. If the atlas shows a flat floor/ground
    plane, translate the scene into floor-plane evidence. For top-view oral, the
    working coworking translation is a minimal floor-plan tail such as
    `carpet texture, carpet tile seams`; adding desk rows and window depth
    fights the camera axis, while one cropped caster or desk foot should be
    tested only after the sparse floor-plane read is stable.
23. For `pov_blowjob_top_down_vertical_shaft`, floor-plane evidence alone is
    not the final rule. The atlas-22-style calibration needs the shaft/contact
    line as the first visual anchor: the centered shaft runs from the lower
    foreground to mouth contact, and the woman's face, eyelids, hair crown,
    shoulders, upper chest, neckline or bare upper torso, and one hand stack
    around that same axis. Viewer abdomen, thighs, and feet are lower-edge
    frame evidence after the shaft axis is established; they should not be the
    prompt's primary anchor. Translate body-proportion control into positive
    visibility hierarchy, for example `the centered shaft and mouth contact
    form the main vertical axis from the lower foreground to the woman's face`
    plus `the woman's face, hair crown, shoulders, upper chest, and one hand
    stack around the shaft-contact axis`. Avoid final-prompt phrasing such as
    `hips and ass stay visually secondary` or `mostly hidden`; that is useful
    as a human scoring note, but it is negative-style hierarchy inside positive
    conditioning.
24. Use large image-only atlas folders as cue-expansion pools, not as automatic
    generator truth. For top-view oral, the canonical curated atlas references
    live under
    `/media/unraid/davinci/Qwen_edit_lora/POV/dataset_v2/blowjob_top_view`,
    while
    `/media/unraid/davinci/Qwen_edit_lora/POV/dataset_v2/1.original/blowjob_top_view_1024`
    is a supplemental raw pool with the same family and more images. The larger
    pool is useful for defining repeated micro-axes: camera pitch, support-plane
    type, viewer foreground amount, partner upper-body stack, hand placement,
    eye direction, clothing/neckline anchors, and floor/furniture evidence. Keep
    the live catalog `reference_images` curated to a small stable set, and when a
    curated reference exists, prefer that canonical path in sidecar
    `reference_images`. Use the supplemental raw pool before authoring sidecar
    `append_cues`, especially for extra axes not present in the curated set. A
    cue should either repeat across several atlas images or be tied to a specific
    nearest reference image. Do not invent cue wording from a single mental model
    when the atlas folders can show the allowed variation directly.
25. When a manual calibration render succeeds after several failed top-view
    oral probes, compare the exact sidecar text before writing generator or
    sidecar memory. The 2026-07-01 manual renders
    `/media/unraid/comfyui/output/sxcp_accumulator/bwave_2/img_00135_.png`
    through
    `/media/unraid/comfyui/output/sxcp_accumulator/bwave_2/img_00139_.png`
    improved verticality by ordering the prompt as straight-down POV, shaft
    visibility, partner stack directly below the shaft, mouth contact, sparse
    floor plane. This is a word-order and anchor finding, not just a background
    removal finding. Future top-view oral variants should test shaft-first
    cue order against any abdomen-first or room-depth wording before patching
    the generator.
26. Choose sidecar prompt source by what the experiment is testing. Use
    `append_cues` for small micro-position alternates that can safely sit after
    the baseline prompt. Use exact `text` replacement when the winning evidence
    depends on word order, removes a conflicting baseline clause, or translates
    the scene tail into a different camera-compatible surface. For
    `pov_blowjob_top_down_vertical_shaft`, shaft-first calibration must be an
    exact-text candidate because appending shaft-axis cues after abdomen-first
    and deep coworking-room wording does not faithfully simulate the manual
    prompt win.

## Promotion Gates

- One clean fixed-seed A/B can be recorded as evidence for that source case.
- A prompt-guide rule needs repeated evidence across distinct subjects,
  locations, or seeds, unless the generated prompt is structurally wrong before
  rendering.
- A catalog variant remains candidate until the rule repeats under controlled
  conditions.
- A provisional generator patch is allowed when leaving a category if the best
  tested wording improves over baseline on a fixed seed. It should preserve the
  selected subject, outfit, location, and camera semantics, and it must not patch
  in a scene workaround that only solved one render.
- A proven/default generator patch still needs the broader evidence matrix below,
  unless the generated prompt is structurally wrong before rendering.

## Generator Mirroring

After a manual A/B prompt win, do not assume the SxCP generator mirrors the
wording. Add a failing regression against the final formatter output first, then
patch the narrow route boundary that owns the wording. The regression should
assert the accepted hierarchy terms and reject the failure mode that caused the
bad render, such as scene-incompatible anchors or negative-conditioning text in
the positive prompt.

After the route patch, run a generated-route probe through `sxcp_eval_out` with
the same sampler seed when feasible. Use the actual formatter output, not a
hand-normalized prompt. If the generated route regresses compared with the
manual prompt-axis winner, record the failed generated-route image as the
baseline, tighten the route wording, and validate again before logging the
candidate as generated-route evidence.

Generator-reproduction checkpoint:

1. Keep the manual winner as the reference prompt and summarize its required
   visual hierarchy.
2. Build the closest equivalent prompt through the normal SxCP nodes and Krea2
   formatter.
3. Diff the final generated prompt against the manual reference for missing
   pose hierarchy, changed ordering, restored details, scene anchors, camera
   framing, and option/meta wording.
4. If the generated prompt cannot reproduce the manual hierarchy, fix the
   generator path or record the gap before adding more image evidence.
5. Only count generated-route evidence after the final generated prompt
   preserves the manual winner's essential atlas hierarchy.

For location-specific wins, split the implementation:

- the action or role graph owns the pose/contact hierarchy;
- the final Krea formatter owns scene-compatible anchor expansion because it can
  see the selected scene, camera, and composition;
- existing route phrases that downstream tests rely on should be preserved
inside the stronger wording when they do not conflict with the A/B evidence.

## Atlas Detail Restore Hygiene

When re-enabling removed atlas prompt details such as clothing, face expression,
body touch, or camera-presentation text, audit the final Krea prompt before
judging the rendered image. The restore node should not undo the reason the
atlas route was strict in the first place.

- Restore details must be subordinate to the pose sentence. If a restored clause
  adds another POV foreground, body-owner, camera-layout, or optional/policy
  instruction, remove or rewrite it before rendering.
- Do not append raw category-axis detail into positive conditioning when a
  structured route already has a safer representation. Clothing restore should
  flow through the pair clothing continuity path, then through Krea cleanup, not
  through raw `clothing_detail`.
- For POV clothing, separate viewer body cues from partner clothing. The normal
  non-atlas foreground-clothing cue can help generic POV prompts, but strict
  atlas prompts already own the foreground through the atlas pose. Strip
  `POV foreground clothing cue` and `POV foreground body cue` from strict atlas
  final prompts.
- Visible partner clothing needs explicit subject ownership. Prefer
  `the woman wears ...` over bare fragments such as `button-down shirt ...`,
  because bare clothing fragments can be assigned to the viewer/man.
- If the atlas crop hides a lower garment, keep the partial-removal semantics
  without making the garment visible. For side-profile oral body-line, the useful
  wording is `The woman's lower garments are pulled aside out of frame; the
  woman wears the button-down shirt tied at the waist and a fitted bralette from
  the same outfit`.
- For side-profile oral body-line specifically, restored clothing must not steal
  the camera-owner body plane. The adult male viewer's abdomen/navel/pelvis/near
  thigh remain the foreground ownership cues; clothing is a partner detail only.

## Same-Subject Atlas Refine Decks

Use same-subject generated reference folders as controlled prompt decks before
building seedable atlas cue variants. The current first deck is:

```text
/media/unraid/comfyui/output/CodexMCP-Atlas-Refine
```

Build a manifest before analysis:

```bash
python tools/krea2_atlas_refine_manifest.py --folder /media/unraid/comfyui/output/CodexMCP-Atlas-Refine --subject-id atlas_refine_same_woman_001 --print-manifest
```

Print coverage before choosing the next pose to test:

```bash
python tools/krea2_atlas_refine_manifest.py --folder /media/unraid/comfyui/output/CodexMCP-Atlas-Refine --subject-id atlas_refine_same_woman_001 --print-coverage-report
```

The coverage report classifies each atlas entry as `needs_prompt_cleanup`,
`baseline_only`, `needs_visual_score`, `ready_for_seed_selection`,
`ready_for_catalog_review`, `rejected_only`, or `unknown_variant`.
`needs_prompt_cleanup` means the prompt-noise audit found option/meta/negative
wording in the baseline prompt or sidecar variants; clean that text before
scoring, authoring more alternates, or selecting cue seeds. `baseline_only`
means the prompt/image pair is clean but has no sidecar prompt variants yet; run
MCP probes or add reviewed sidecar candidates before seed selection.
`ready_for_catalog_review` means at least one seedable append-cue variant exists
and can be exported with `--print-catalog-cue-draft`.

Print prompt-noise findings before scoring or promoting a deck:

```bash
python tools/krea2_atlas_refine_manifest.py --folder /media/unraid/comfyui/output/CodexMCP-Atlas-Refine --subject-id atlas_refine_same_woman_001 --print-prompt-noise-report
```

The prompt-noise report is read-only. It flags option-list words such as `or`,
`may`, `optionally`, and `either`, meta/policy fragments such as
`keep the visible partner`, `context stays`, `camera layout`, and leaked
`POV foreground ... cue` text, plus positive-channel negative-conditioning
phrases such as `no`, `without`, or `do not`. It also flags exact repeated
direct phrases because duplicated pose clauses often make Krea2 weight the wrong
axis. Treat findings as prompt cleanup tasks before fixed-seed evidence is
promoted. Do not auto-rewrite them into new cues; rewrite the source prompt or
sidecar text manually, then rebuild the manifest and rerun the audit. Coverage
carries the same issue counts, so a noisy entry stays `needs_prompt_cleanup`
even if it also has unscored or seedable sidecar variants.

For a file-oriented cleanup queue, print a prompt-cleanup sheet:

```bash
python tools/krea2_atlas_refine_manifest.py --folder /media/unraid/comfyui/output/CodexMCP-Atlas-Refine --subject-id atlas_refine_same_woman_001 --print-prompt-cleanup-sheet
```

The cleanup sheet groups prompt-noise issues by editable source text. Baseline
issues point at the `.txt` prompt file; sidecar variant issues point at the
same-stem `.json` sidecar, including the `prompt_variant_id` and append-cue
index when relevant. The sheet preserves `current_text`,
`current_text_sha256`, `source_prompt_sha256`, issue excerpts, and blank
`replacement_text` / `cleanup_notes` fields for manual review. Do not apply the
sheet mechanically; use it as a checklist, edit the prompt or sidecar source by
hand, rebuild the manifest, and confirm coverage no longer reports
`needs_prompt_cleanup`.

When using the sheet as an apply artifact, fill `replacement_text` manually and
validate it first:

```bash
python tools/krea2_atlas_refine_manifest.py --validate-prompt-cleanup-sheet --prompt-cleanup-sheet-json /tmp/sxcp-prompt-cleanup-sheet-filled.json
```

Validation rejects blank replacements, replacements that still contain
option/meta/negative prompt noise, unsupported contexts, missing target
metadata, stale `current_text_sha256`, stale baseline `source_prompt_sha256`,
and replacements identical to the original text. After validation, apply only
against the source folder that produced the sheet:

```bash
python tools/krea2_atlas_refine_manifest.py --apply-prompt-cleanup-sheet --prompt-cleanup-sheet-json /tmp/sxcp-prompt-cleanup-sheet-filled.json --folder /media/unraid/comfyui/output/CodexMCP-Atlas-Refine
```

Apply is validation-first and drift-aware. It updates prompt files or the
targeted sidecar prompt-variant field, preserves unrelated sidecar metadata,
and allows a repeated apply when the target already equals the reviewed
replacement. Rebuild the manifest and rerun coverage after applying.

For baseline-only entries, print sidecar scaffolds before hand-authoring cue
variants:

```bash
python tools/krea2_atlas_refine_manifest.py --folder /media/unraid/comfyui/output/CodexMCP-Atlas-Refine --subject-id atlas_refine_same_woman_001 --print-sidecar-scaffold
```

The scaffold is read-only and does not write sidecar files. It only includes
known catalog entries with no existing prompt variants, preserves the same-stem
sidecar filename, baseline seed/cue/score slots, source prompt hash, and a blank
`prompt_variant_template`. Fill the template with user-authored `append_cues` or
exact `text`; do not let the scaffold invent cue wording.

Before authoring alternates for a baseline-only pose, print a baseline score
sheet and grade the existing image/prompt pair:

```bash
python tools/krea2_atlas_refine_manifest.py --folder /media/unraid/comfyui/output/CodexMCP-Atlas-Refine --subject-id atlas_refine_same_woman_001 --print-baseline-score-sheet
```

The baseline score sheet is also read-only. It preserves prompt/image paths,
prompt hashes, seed metadata, cue axes, and score slots for each baseline entry.
`needs_visual_score` means no score fields are filled yet; `partially_scored`
means some baseline gates are filled but the preservation assessment is not
complete. Use the sheet to decide whether a baseline is already valid, whether
the first sidecar variants should be small same-scene frame changes, or whether
the pose needs stronger structural prompt/control work before seed alternates.

After manually filling baseline scores, convert the scored sheet into a
baseline score update draft:

```bash
python tools/krea2_atlas_refine_manifest.py --print-baseline-score-update-draft --baseline-score-sheet-json /tmp/sxcp-baseline-score-sheet-scored.json
```

The draft records only top-level baseline metadata: `seed_metadata`,
`cue_axes`, `score`, `score_state`, source prompt hash, and manual analysis
notes. It skips unknown or fully unscored entries and deliberately does not
carry `prompt_variants`; prompt alternates stay owned by the sidecar
promotion/seed-selection path.

Validate the baseline score draft before writing sidecars:

```bash
python tools/krea2_atlas_refine_manifest.py --validate-baseline-score-update-draft --baseline-score-update-draft-json /tmp/sxcp-baseline-score-update-draft.json
```

Validation rejects sidecar filename drift, missing prompt hashes, empty score
updates, forbidden negative-conditioning fields, and any accidental
`prompt_variants` contamination. Partial or rejected baseline scores are allowed
as evidence but reported as warnings, so partial progress can be preserved
without pretending it is seedable.

Only after validation, apply the baseline score draft:

```bash
python tools/krea2_atlas_refine_manifest.py --apply-baseline-score-update-draft --baseline-score-update-draft-json /tmp/sxcp-baseline-score-update-draft.json --folder /media/unraid/comfyui/output/CodexMCP-Atlas-Refine
```

Baseline score apply is validation-first. It writes top-level sidecar
`seed_metadata`, `cue_axes`, `score`, `baseline_score_state`,
`baseline_source_prompt_sha256`, and `baseline_analysis_notes`, while preserving
any existing `prompt_variants` exactly. Rebuild the manifest after applying;
the baseline score sheet should then rescan the same entries as
`scored_pass`, `partially_scored`, or `scored_rejected` according to the saved
baseline evidence.

The manifest is the bridge between generated artifacts and the seed/cue system.
It records each prompt/image pair, validates the inferred `variant_key` against
the catalog, preserves prompt text and a prompt hash, records missing pairs, and
reserves seed slots for `sampler_seed`, `generator_seed`, `atlas_cue_seed`,
`micro_position_seed`, and `workspace_seed`. Fill those seed slots when the
source workflow exposes them; leave them null only when the historical artifact
does not contain that metadata. Cue-selection commands may target
`generator_seed`, `atlas_cue_seed`, `micro_position_seed`, or `workspace_seed`,
but never `sampler_seed`; that slot is reserved for the actual render sampler
seed returned by the job.

Optional same-stem JSON sidecars can enrich scanned entries without changing the
prompt/image filenames. For `pov_example_00001_.txt` and
`pov_example_00001_.png`, add `pov_example_00001_.json` with `seed_metadata`,
`cue_axes`, `score`, and `notes`. The manifest keeps explicit null slots for
missing fields so unfilled seed or score data is visible instead of silently
absent.

Image-only atlas reference pools sit upstream from sidecars. First make a
labeled contact sheet, cluster the references by visible micro-axis, then choose
the nearest atlas target for each proposed cue. Store those nearest targets in a
sidecar prompt variant's `reference_images` list so the reference provenance
travels through prompt batches, result sheets, promotion reports, sidecar
updates, catalog cue drafts, and later rescans. Prefer canonical curated
references such as `blowjob_top_view/22_blowjob_top_view.png` when a matching
curated frame exists; use `1.original/...` paths for supplemental raw-pool frames
that do not have a curated counterpart. This field is still provenance, not
proof: a generated prompt/image pair must show that the same cue preserves the
current subject, workspace, clothing ownership, and prompt-noise gates before the
cue is eligible for seed selection or catalog promotion. Do not promote an
image-only reference cue directly into the generator.

Before authoring top-view oral cue variants, print a read-only reference-pool
report:

```bash
python tools/krea2_atlas_refine_manifest.py --print-reference-pool-report --variant-key pov_blowjob_top_down_vertical_shaft --reference-pool-folder 1.original/blowjob_top_view_1024
```

The report compares the canonical catalog `atlas_folders` against supplemental
raw folders by image id. Use `catalog_reference_images` and matched canonical
paths as preferred `reference_images`; use `supplemental_extra_images` to mine
extra cue axes when a raw frame has no curated counterpart.

Then print a blank cue-review sheet from the same pool:

```bash
python tools/krea2_atlas_refine_manifest.py --print-reference-cue-review-sheet --variant-key pov_blowjob_top_down_vertical_shaft --reference-pool-folder 1.original/blowjob_top_view_1024
```

Fill `observed_positive_cues`, `cue_axes`, and `review_notes` only from visual
inspection. The sheet provides `reference_images_template` for canonical
catalog refs, but leaves it blank for raw-only supplemental extras so those
images start as cue-mining evidence rather than automatic sidecar references.

After filling the review sheet, print a candidate draft:

```bash
python tools/krea2_atlas_refine_manifest.py --print-reference-cue-candidate-draft --reference-cue-review-sheet-json /tmp/sxcp-reference-cue-review-filled.json
```

The candidate draft converts reviewed canonical rows into sidecar-ready
`prompt_variant` objects with `append_cues`, `reference_images`, `cue_axes`, and
seed slots. It skips blank rows, option/meta/negative prompt-noise cues, missing
variant ids, duplicate variant ids, and raw-only supplemental rows without a
canonical reference. Copy a candidate into a same-stem sidecar only after
choosing the baseline deck it should modify, then test it through the normal MCP
batch/result-sheet/promotion path.

To attach reviewed candidates to a same-subject baseline deck for testing,
print a sidecar authoring draft:

```bash
python tools/krea2_atlas_refine_manifest.py --folder /media/unraid/comfyui/output/CodexMCP-Atlas-Refine --subject-id atlas_refine_same_woman_001 --print-reference-cue-sidecar-author-draft --reference-cue-candidate-draft-json /tmp/sxcp-reference-cue-candidate-draft.json --variant-key pov_blowjob_top_down_vertical_shaft
```

Validate and apply that draft only against the same folder:

```bash
python tools/krea2_atlas_refine_manifest.py --validate-reference-cue-sidecar-author-draft --reference-cue-sidecar-author-draft-json /tmp/sxcp-reference-cue-sidecar-author-draft.json
python tools/krea2_atlas_refine_manifest.py --apply-reference-cue-sidecar-author-draft --reference-cue-sidecar-author-draft-json /tmp/sxcp-reference-cue-sidecar-author-draft.json --folder /media/unraid/comfyui/output/CodexMCP-Atlas-Refine
```

The author draft is pre-test only. It writes unscored prompt variants into the
same-stem sidecar after checking the baseline prompt hash for drift. Rebuild the
manifest after applying; coverage should move from `baseline_only` to
`needs_visual_score`, and the next step is a fixed-seed MCP batch, not catalog
promotion.

Sidecars can also define explicit `prompt_variants` for seedable cue probes.
Each variant must provide an `id` and exactly one of `text` or `append_cues`;
the batch builder does not invent cue wording. Variant ids must be unique within
the sidecar because they are the stable identity for cue-seed selection, upsert
apply, and evidence roundtrips. If an explicit `prompt_source.prompt_variant_id`
is present, it must match the enclosing variant `id`. Use `append_cues` for small
micro-position changes that should read like another frame from the same scene,
such as a hand moving higher, feet moving farther forward, a body angle tilting,
or a workspace surface becoming more prominent. Keep every cue positive-only and
send batches through the normal `sxcp_eval_out` path:

```bash
python tools/krea2_atlas_refine_manifest.py --folder /media/unraid/comfyui/output/CodexMCP-Atlas-Refine --subject-id atlas_refine_same_woman_001 --print-batch --variant-key pov_footjob_frontal_sole_stroke --sampler-seed 123
```

Validate the printed batch with `tools/sxcp_prompt_batch.py` before using
`run-batch --run`. A sidecar prompt variant is candidate evidence only until
its returned image is scored against the atlas reference and the same-subject
baseline.

After `run-batch --run` writes a result JSON, convert the exact batch/results
pair into a visual scoring sheet before editing sidecars or generator wording:

```bash
python tools/krea2_atlas_refine_manifest.py --print-result-sheet --batch-json /tmp/sxcp-batch.json --result-json /tmp/sxcp-results.json --notes "visual scoring pending"
```

The result sheet is not an automatic judge. It preserves the fixed sampler
seed, probe order, returned image paths, exact prompt text, cue-axis metadata,
and empty score slots for manual atlas comparison. Fill those slots only after
checking the generated images against the atlas reference for pose ownership,
workspace continuity, clothing visibility, subject identity, expression/eye
control, anatomy, and prompt noise.

After the result sheet is manually scored, print a promotion report before
editing a sidecar or generator route:

```bash
python tools/krea2_atlas_refine_manifest.py --print-promotion-report --result-sheet-json /tmp/sxcp-result-sheet-scored.json
```

The promotion report is intentionally conservative. A probe is only a
`seedable_candidate` when pose ownership, workspace continuity, clothing
visibility, subject identity, and prompt noise are all scored `pass`, and the
remaining visual axes at least show progress rather than failure. Missing scores
stay `needs_visual_score`; failed preservation gates stay `rejected`. The report
also scans candidate text with the prompt-noise audit and rejects noisy text even
if the manual `prompt_noise` score was filled as `pass`.

For ready candidates, print a sidecar update draft instead of editing the
sidecar directly:

```bash
python tools/krea2_atlas_refine_manifest.py --print-sidecar-update-draft --promotion-report-json /tmp/sxcp-promotion-report.json
```

The draft uses only exact tested prompt text from `seedable_candidate` probes.
It preserves the original same-stem sidecar filename, cue axes, seed metadata,
visual score evidence, and returned image path. Stable `matrix_evidence` carried
by a result-sheet probe is preserved through the promotion report and sidecar
draft. Explicit unstable `matrix_evidence` rejects the probe before promotion,
so the sidecar draft cannot replace a matrix-proven variant with weaker
single-batch evidence. Review the draft before copying anything into a sidecar;
rejected or unscored candidates are skipped.

Validate the draft before applying any sidecar edit:

```bash
python tools/krea2_atlas_refine_manifest.py --validate-sidecar-update-draft --sidecar-update-draft-json /tmp/sxcp-sidecar-update-draft.json
```

The validation gate rejects drafts with missing image evidence, failed
preservation scores, missing cue-axis movement, duplicate prompt-variant ids,
or forbidden negative-conditioning fields. Treat a failing validation report as
a prompt/evidence issue to resolve before editing sidecars.

Only after validation passes, apply the draft to the atlas-refine folder:

```bash
python tools/krea2_atlas_refine_manifest.py --apply-sidecar-update-draft --sidecar-update-draft-json /tmp/sxcp-sidecar-update-draft.json --folder /media/unraid/comfyui/output/CodexMCP-Atlas-Refine
```

Apply is validation-first and idempotent. It upserts `prompt_variants` by id
inside the target same-stem sidecar, preserves unrelated sidecar fields, rejects
ambiguous existing `prompt_variants` lists with missing or duplicate ids, and
does not touch rejected or unscored candidates.

After applying, rebuild the manifest and batch from the same folder as a
roundtrip check. The applied sidecar should rescan with the exact tested prompt
text, cue axes, seed metadata, visual evidence, and score evidence; the next
`--print-batch` output should regenerate the same tested prompt variant by id.
For matrix-proven sidecar variants, stable `matrix_evidence` stays attached to
the normal batch probe and the result sheet built from that batch.

For generator-style single-variant selection, use the cue seed selector rather
than relying on sidecar order:

```bash
python tools/krea2_atlas_refine_manifest.py --folder /media/unraid/comfyui/output/CodexMCP-Atlas-Refine --subject-id atlas_refine_same_woman_001 --print-seed-selection --variant-key pov_footjob_frontal_sole_stroke --selection-seed 202 --seed-slot atlas_cue_seed
```

The selector is deterministic for the same seed and only chooses sidecar
variants with seedable visual evidence. Eligible variants are sorted by
`prompt_variant_id` before the seed is applied, so reordering a sidecar JSON file
does not change what a cue seed means. Unscored or rejected variants are listed
as ineligible instead of entering the seed pool. If a selected sidecar variant
has stable `matrix_evidence`, the selector keeps that matrix proof attached to
the selected candidate. Variants with no matrix evidence still use single-image
promotion evidence, but variants with explicit unstable matrix evidence are
ineligible until retested or corrected. Downstream reuse does not trust
`stable: true` by itself: malformed stable matrix evidence, such as duplicated
declared sampler seeds, non-matching matrix jobs, or cue-seed metadata that no
longer matches the matrix selection seed, is treated as unstable and kept out of
the seed pool.

To render the selected alternate frame through the normal MCP batch helper, use
the selected-batch exporter. It emits the baseline and selected candidate only:

```bash
python tools/krea2_atlas_refine_manifest.py --folder /media/unraid/comfyui/output/CodexMCP-Atlas-Refine --subject-id atlas_refine_same_woman_001 --print-seed-selected-batch --variant-key pov_footjob_frontal_sole_stroke --selection-seed 202 --sampler-seed 101 --seed-slot atlas_cue_seed
```

Then validate/run it with `tools/sxcp_prompt_batch.py` as usual. The candidate
probe carries the selected cue seed in the requested seed slot plus the sidecar
evidence that justified the variant. Probe `seed_metadata.sampler_seed` is the
actual sampler seed for that render job; cue, micro-position, generator, and
workspace seed slots remain prompt-variant provenance. Do not use
`sampler_seed` as `--seed-slot`; the tooling rejects it so the cue seed cannot
overwrite the render seed. Matrix-proven variants also keep their full stable
`matrix_evidence` on the selected probe.

For repeatability checks across several sampler seeds and cue seeds, print a
seed matrix:

```bash
python tools/krea2_atlas_refine_manifest.py --folder /media/unraid/comfyui/output/CodexMCP-Atlas-Refine --subject-id atlas_refine_same_woman_001 --print-seed-matrix --variant-key pov_footjob_frontal_sole_stroke --selection-seeds 202,203 --sampler-seeds 101,102 --seed-slot atlas_cue_seed
```

The matrix is read-only and sampler-major. Each job embeds a normal
seed-selected prompt batch with the baseline and selected candidate only, plus
the selected prompt variant id, exact candidate prompt text, cue seed, sampler
seed, cue axes, and evidence provenance. Use it to queue controlled repeats
where sampler seed changes image stochasticity and `atlas_cue_seed` changes the
selected alternate frame. Sampler seed lists and cue seed lists must contain
distinct values; duplicate seeds are rejected because they inflate apparent
repeatability without adding new evidence. A matrix with only one unique sampler
seed can still be inspected, but it cannot become stable sidecar evidence; stable
proof requires at least two unique sampler seeds before manual hard-pose
thresholds are considered.

After matrix jobs return images, create one matrix result sheet instead of
manually merging per-job notes:

```bash
python tools/krea2_atlas_refine_manifest.py --print-seed-matrix-result-sheet --seed-matrix-json /tmp/sxcp-seed-matrix.json --seed-matrix-results-json /tmp/sxcp-seed-matrix-results.json --notes "matrix scoring pending"
```

The matrix result sheet matches returned results by matrix job id, then reuses
the normal result-sheet format inside each job. It preserves sampler seed, cue
seed, selected prompt variant id, exact candidate prompt text, returned image
path, and empty score slots for manual atlas scoring. Missing or extra job ids
are errors because they break matrix comparability. Duplicate matrix job ids are
also rejected before result matching, since one returned image must not stand in
for two sampler/cue slots.

After manually scoring the matrix result sheet, print the matrix promotion
report:

```bash
python tools/krea2_atlas_refine_manifest.py --print-seed-matrix-promotion-report --seed-matrix-result-sheet-json /tmp/sxcp-seed-matrix-result-sheet-scored.json
```

The promotion report applies the same preservation gates as a single result
sheet, then groups jobs by selected prompt variant and cue seed. A group is
stable only when every declared sampler seed in that group is present, at least
two unique sampler seeds are covered, and every covered job is a
`seedable_candidate`; failed jobs keep their blockers, such as subject identity
or workspace continuity failures, attached to the group, omitted sampler seeds
add `missing_sampler_coverage`, and one-sampler groups add
`insufficient_sampler_coverage`. The declared `sampler_seeds` and
`selection_seeds` lists must not contain duplicates, because repeated
declarations can inflate apparent coverage without adding a new render or cue
seed. If `selection_seeds` is present, every job's `selection_seed` must be in
that declared cue-seed set. If `sampler_seeds` is present, every job's
`sampler_seed` must be in that declared render-seed set, and a selected-variant /
cue-seed group may contain each sampler seed only once. Promotion also rechecks
that each matrix result-sheet job has a unique id, so stale or hand-edited sheets
cannot inflate stable evidence by duplicating a job. The selected prompt variant
id recorded on the matrix job must also match the scored candidate prompt
variant id; a mismatch means the sheet no longer proves the selected alternate.
Every job's `seed_slot` must match the matrix result sheet's `seed_slot`, so
atlas-cue evidence cannot be mixed with workspace, generator, or micro-position
evidence in one stable group.
Jobs in the same selected-variant/cue-seed group must also keep the same
`variant_key`, `source_entry_id`, and `source_stem`, so evidence from another
pose family or atlas artifact cannot be folded into a stable sidecar candidate.
They must also keep the same exact candidate prompt text across sampler jobs;
the promotion report records a prompt-text hash for the group, and prompt-text
drift under the same variant id is rejected because it no longer proves one
repeatable wording.
Treat stable groups as repeatability evidence for a sidecar/catalog cue; treat
unstable groups as wording, coverage, or control work before promotion.

For stable groups, print a matrix sidecar update draft before editing sidecars:

```bash
python tools/krea2_atlas_refine_manifest.py --print-matrix-sidecar-update-draft --seed-matrix-promotion-report-json /tmp/sxcp-seed-matrix-promotion-report.json
```

The draft emits only stable groups. It preserves the same-stem sidecar filename,
the exact selected prompt variant text, prompt source provenance, representative
single-image evidence for compatibility, and `matrix_evidence` containing all
passing sampler seeds, returned image paths, visual scores, cue seed, and job
ids. Stable groups fail closed if any listed job id is missing from the promotion
report, so a hand-edited report cannot write sidecar evidence for jobs it does
not carry. A stable group may not repeat a `job_id`, because one returned image
must not count as multiple matrix samples. Each referenced job must still belong
to the stable group's identity: same selected prompt variant, cue seed, seed
slot, pose `variant_key`, `source_entry_id`, `source_stem`, and exact candidate
prompt text. Stable groups
also fail closed when their declared `sampler_seeds` do not match the sampler
seeds on their listed `job_ids`, so a draft cannot inflate repeatability
evidence by claiming an unreferenced render seed. Their `job_count`,
`promotion_ready_count`, and `blocked_count` must also match the referenced
jobs; emitted matrix evidence derives these counts from `job_ids` instead of
trusting editable group summaries. Unstable cue groups are listed as skipped
with their blockers and must not be copied into sidecars.
Even if a hand-edited promotion report marks a group stable, matrix sidecar draft
generation rejects groups whose referenced `job_ids` cover fewer than two unique
sampler seeds.

Validate a matrix draft with the matrix-specific gate before applying it:

```bash
python tools/krea2_atlas_refine_manifest.py --validate-matrix-sidecar-update-draft --matrix-sidecar-update-draft-json /tmp/sxcp-matrix-sidecar-update-draft.json
```

This gate rejects unstable matrix evidence, failed per-sampler visual scores,
missing or insufficient sampler coverage, forbidden negative-conditioning fields,
and mismatched cue seed metadata: the prompt variant's
`seed_metadata[matrix_evidence.seed_slot]` must match
`matrix_evidence.selection_seed`. It also rejects duplicated matrix evidence job
ids or sampler seeds, duplicated declared matrix sampler seeds, stable evidence
with fewer than two unique sampler seeds, and matrix evidence rows whose `turn`
is missing or not an integer. It also
checks the representative single-image evidence used for compatibility with the
normal seed selector, including requiring an integer `evidence.turn`. That
representative evidence must match the
`matrix_evidence.jobs` row for its `evidence.seed`, including image path, turn,
and visual score.

Only after validation passes, apply the matrix draft to the atlas-refine folder:

```bash
python tools/krea2_atlas_refine_manifest.py --apply-matrix-sidecar-update-draft --matrix-sidecar-update-draft-json /tmp/sxcp-matrix-sidecar-update-draft.json --folder /media/unraid/comfyui/output/CodexMCP-Atlas-Refine
```

Matrix apply is validation-first and idempotent. It upserts prompt variants by
id, preserves unrelated sidecar fields, and keeps the full `matrix_evidence` so
later rescans still know which cue seed and sampler seeds proved the alternate
frame repeatable.

When a selected batch returns images, convert it with `--print-result-sheet`
like any other batch. The result sheet preserves the seed-selection report at
the sheet level and the selected prompt variant id on the candidate probe, so
manual visual scoring remains tied to the exact cue seed and sidecar alternate.
If the selected probe carried stable `matrix_evidence`, the result sheet keeps
that matrix proof beside the new image path and empty score slots.

For the generator node path, `atlas_cue_seed` on `SxCP Krea2 Pose Variant` and
the family-specific `SxCP Krea2 POV ... Filter` nodes selects among explicit
catalog `prompt_variant_cues` for the selected atlas variant. This is not the
sampling seed and it does not invent prompt wording. Use `-1` when the broader
generator pose seed should continue choosing cue-set alternates. Use a fixed
`atlas_cue_seed` when testing the same catalog alternate across subjects,
locations, or sampler seeds. The selected index is stored in
`krea2_prompt_variant_indices`, preserved through row building, and shown in the
node summary as `cue_indices=variant:index`.

To bridge scored sidecar alternates back toward the generator catalog, preserve
`append_cues` provenance through the refine loop. A full prompt win can remain a
sidecar `text` candidate, but only an explicit append-cue delta should become a
reviewable catalog `prompt_variant_cues` candidate. Print that review draft with:

```bash
python tools/krea2_atlas_refine_manifest.py --folder /media/unraid/comfyui/output/CodexMCP-Atlas-Refine --subject-id atlas_refine_same_woman_001 --print-catalog-cue-draft --variant-key pov_footjob_frontal_sole_stroke
```

The catalog cue draft is read-only. It skips unscored, rejected, or exact-text
only sidecar variants and emits only seedable append-cue candidates with visual
evidence, cue axes, seed metadata, and the exact tested prompt hash. Stable
matrix evidence is preserved on catalog candidates; explicit unstable matrix
or malformed stable matrix evidence is skipped and listed with an
`unstable_matrix_evidence` blocker. Review the draft manually before editing
`categories/krea2_pov_pose_variants.json`; do not infer catalog cue wording from
a whole prompt diff.

Use the manifest entries as baseline frames, not as proven generator fixes. For
each variant, score the current image/prompt against:

- atlas pose and contact ownership;
- same-subject identity preservation;
- workspace lounge consistency and surface relationship;
- clothing visibility and subject ownership;
- face/eye/expression retention when the face is visible;
- anatomy/proportion sanity;
- prompt noise, duplicate cues, and ambiguous ownership.

Only add seedable cue alternates after the baseline frame is understood. Store
alternates by axis, such as contact depth, hand position, foot position, body
angle, camera height, workspace surface, clothing visibility, expression/eye
detail, and anatomy shape detail. A seed change should feel like selecting
another frame from the same scene rather than random prompt drift.

## MCP Command Memory

Use the checked helper instead of ad hoc Python snippets for bridge calls. The
approved command prefix is:

```bash
/media/p5/miniforge3/bin/python tools/sxcp_mcp_client.py
```

Common calls:

```bash
/media/p5/miniforge3/bin/python tools/sxcp_mcp_client.py list-tools
/media/p5/miniforge3/bin/python tools/sxcp_mcp_client.py call-tool comfy_pull --arguments-json '{"channel":"sxcp_eval_in"}'
/media/p5/miniforge3/bin/python tools/sxcp_mcp_client.py call-tool comfy_push --arguments-json '{"channel":"sxcp_eval_out","seed":5656565656,"text":"PROMPT_ONLY_POSITIVE_CONDITIONING"}'
```

For batched prompt-axis search, prepare a JSON batch and use the offline command
renderer before touching the bridge manually:

```bash
python tools/sxcp_prompt_batch.py validate --batch-json /tmp/sxcp-batch.json
python tools/sxcp_prompt_batch.py print-push-commands --batch-json /tmp/sxcp-batch.json
python tools/sxcp_prompt_batch.py print-result-template --batch-json /tmp/sxcp-batch.json
python tools/sxcp_prompt_batch.py run-batch --batch-json /tmp/sxcp-batch.json --result-json /tmp/sxcp-results.json --previous-turn 80 --run
python tools/sxcp_prompt_batch.py validate-results --batch-json /tmp/sxcp-batch.json --result-json /tmp/sxcp-results.json
python tools/sxcp_prompt_batch.py print-eval-entry-draft --batch-json /tmp/sxcp-batch.json --result-json /tmp/sxcp-results.json --variant-key pov_example_variant --baseline-image /absolute/baseline.png --candidate-id controlled_subject_first
```

Use `run-batch --run` for normal batch execution. It pushes one positive prompt,
polls `sxcp_eval_in` until the turn advances and an absolute PNG appears with
the fixed sampler seed, writes the filled result JSON, then sends the next
prompt. Omit `--run` for a dry-run command preview. Run `validate-results` after
the batch and before drafting evidence. It checks that every probe returned a
new ordered turn, an absolute PNG image path, and the same sampler seed as the
batch. This keeps batched prompt search as image-presence collection first and
bulk analysis second. The batch helper validates without stripping atlas
metadata such as cue axes, seed metadata, selection data, evidence, and stable
`matrix_evidence`.

Before drafting evidence, compare atlas references and generated images for
spatial orientation, not only limb/contact similarity. First decide the
atlas's surface and camera-height relationship, then check whether the
generated background supports the same read. Use the background as a
camera-height witness: ceiling, upper walls, and high partition lines usually
support a low viewer looking upward; floor, carpet, table tops, platform edges,
or furniture behind the body can reveal a higher camera, seated support, or a
different surface. If the atlas target has the viewer flat on his back or the
partner mounted over him, do not accept a candidate only because contact is
clear; the room geometry must also support that flat/low read. Reject the
candidate before generator mirroring when the background says the bodies are on
a different surface or at a different height than the atlas.

`print-eval-entry-draft` rejects `geometry_only` candidates by default. Use
`--allow-geometry-only` only when the entry is explicitly labeled as
non-controlled prompt-axis evidence rather than subject/look-controlled A/B
evidence.

Keep `sxcp_eval_out` prompt-only and positive-only. Do not use
`sxcp_eval_negative_out` for Krea2 tuning.

## Generator-Patch Evidence Matrix

Do prompt and image exploration before editing production generator wording. A
normal pose-wording generator patch needs all of this evidence first:

- at least three distinct source cases with different visible subjects;
- at least two sampler seeds, unless the source prompt is structurally wrong
  before rendering;
- location-family coverage when the proposed wording changes scene anchors;
- one baseline and one candidate per source case, with subject, location family,
  camera family, and sampler seed fixed inside each pair;
- positive-only candidate prompts, with no negative-conditioning phrases in the
  positive prompt.

A generated-route probe that works before the full matrix is useful evidence.
If it is the best tested improvement when leaving the category, it can become a
`provisional_generator_patch` with final prompt regression coverage. It should
not become a proven `generator_patch` decision until the matrix repeats and the
final generated prompt is regression-tested.

## Hard-Pose Exploration Budget

Use this budget for atlas poses where early prompt-only results repeatedly miss
the core spatial read.

- Define the failure threshold before the run. The default threshold is about
  fifty positive-only prompt tries across distinct wording axes before declaring
  the pose text-insufficient or moving it to a stronger-control bucket.
- Run the search in batches, usually six to twelve prompts at a time. Send each
  prompt through `sxcp_eval_out`, wait for the image path, then analyze the
  batch together instead of overreacting to one render.
- Keep a short axis ledger for each batch: intended wording axis, seed, source
  subject, best image, repeated failure mode, and words that literalized or
  harmed the result.
- Treat a small failed batch as direction, not a conclusion. If a batch shows a
  repeated failure such as head height, camera height, viewer/partner elevation,
  or background-plane mismatch, the next batch should vary that axis directly.
- Stop early only for a strong positive result that is worth repeating on a
  second source or seed, or for a hard technical blocker. A weak but improving
  result should feed the next wording batch rather than ending the category.
- If the threshold run finds a repeatable partial that is materially better
  than baseline, accept the partial target explicitly and mirror only that
  generator-safe improvement. Keep the route candidate and mark the evidence as
  needing expansion when the full atlas target is still unsolved.

## Current Fingering Test Pattern

The prior bedding-based fingering prompt is invalid as a general rule because
it solved a lower-foreground artifact by adding bedroom context to an office
scene. The corrected test pattern keeps the coworking location intact:

- baseline: generic POV fingering/manual-contact wording from the same source
  case;
- candidate: foreground hand first, open-thigh geometry second, visible woman
  face/torso third, office chair and coworking depth fourth;
- anchors: black office chair seat/arms, desk edge, laptop table corners, glass
  partitions, repeated desk rows, plants, tall-window depth;
- rejection trigger: any result that fixes contact by changing the scene family
  instead of improving the pose hierarchy.

## Improvement Log

- `2026-07-01`: Added large image-only atlas folders to the cue-expansion
  method after inspecting the canonical
  `/media/unraid/davinci/Qwen_edit_lora/POV/dataset_v2/blowjob_top_view`
  folder and the 27-image supplemental raw pool at
  `/media/unraid/davinci/Qwen_edit_lora/POV/dataset_v2/1.original/blowjob_top_view_1024`.
  The curated folder remains the preferred `reference_images` source when a
  matching frame exists; the supplemental pool defines extra allowed micro-axes
  before sidecar authoring. Cue wording still needs fixed-seed generated
  evidence before sidecar, catalog, or generator promotion.
- `2026-07-01`: Added atlas-22 image-to-prompt calibration for
  `pov_blowjob_top_down_vertical_shaft` after manual renders
  `/media/unraid/comfyui/output/sxcp_accumulator/bwave_2/img_00100_.png` and
  `/media/unraid/comfyui/output/sxcp_accumulator/bwave_2/img_00101_.png`
  produced the strongest verticality so far. The retained rule is not “remove
  background”; it is floor/support-plane scene translation plus positive
  upper-body-stack hierarchy. Viewer abdomen/thigh cues should remain lower-edge
  anchors, while face, hair crown, shoulders, upper chest or neckline, and hand
  carry the partner geometry. Keep phrases like `hips and ass stay visually
  secondary` as human scoring notes, not final positive prompt text.
- `2026-07-01`: Corrected the top-view oral anchor after manual sidecar renders
  `/media/unraid/comfyui/output/sxcp_accumulator/bwave_2/img_00135_.png`,
  `/media/unraid/comfyui/output/sxcp_accumulator/bwave_2/img_00136_.png`,
  `/media/unraid/comfyui/output/sxcp_accumulator/bwave_2/img_00137_.png`, and
  `/media/unraid/comfyui/output/sxcp_accumulator/bwave_2/img_00139_.png`.
  The strongest same-seed verticality came from making the centered shaft and
  mouth contact the primary axis, then stacking the woman's face, hair crown,
  shoulders, upper chest, and hand around it. Abdomen/thigh/feet wording belongs
  after that as lower-frame evidence. Sparse floor-plane wording remains useful
  because deep coworking-room tails fight the overhead angle.
- `2026-07-01`: Added exact-text reference cue candidates for order-sensitive
  atlas tests. The reference cue review path can now carry
  `prompt_variant_template.text` through candidate draft, sidecar authoring, and
  prompt-batch export as `prompt_source.kind = text`. Use this for
  shaft-first/top-view oral calibration and other cases where append-cues would
  leave the older conflicting baseline hierarchy in front of the tested wording.
- `2026-07-01`: Added explicit sidecar prompt-variant batches for
  same-subject atlas refine decks. `krea2_atlas_refine_manifest.py` now keeps
  sidecar `prompt_variants` and can print an `sxcp_prompt_batch`-compatible
  positive-only probe batch for one catalog `variant_key`. Cue text must come
  from the sidecar as exact `text` or `append_cues`; the batch builder may
  combine and preserve seed/cue metadata, but it must not create new pose
  wording by itself.
- `2026-07-01`: Added atlas result-sheet generation after prompt batches return
  images through the MCP loop. The sheet keeps batch/result order, sampler seed,
  prompt text, image paths, cue axes, and unfilled score slots together so
  visual analysis can be written against the exact generated artifacts before
  sidecar promotion or generator patches.
- `2026-07-01`: Added conservative promotion reports for scored atlas result
  sheets. Reports recover the sidecar prompt variant id, keep cue/seed metadata,
  and classify candidates as `seedable_candidate`, `needs_visual_score`, or
  `rejected` using preservation gates for pose ownership, workspace continuity,
  clothing visibility, subject identity, and prompt noise. The report does not
  auto-edit sidecars or generator wording.
- `2026-07-01`: Added sidecar update drafts for seedable atlas candidates. The
  draft emits reviewable `prompt_variants` grouped by original same-stem sidecar
  filename, uses only exact tested prompt text, and carries cue axes, seed
  metadata, image evidence, and visual scores forward. It deliberately skips
  rejected or unscored candidates and does not write sidecar files.
- `2026-07-01`: Added sidecar update draft validation before any sidecar edit.
  The validator rejects drafts with missing cue-axis movement, missing image
  evidence, failed preservation scores, duplicate prompt-variant ids, or
  forbidden negative-conditioning fields, keeping sidecar promotion tied to
  exact scored artifacts rather than hand-cleaned prompt text.
- `2026-07-01`: Added validation-first sidecar draft apply. The apply command
  writes reviewed `prompt_variants` into same-stem sidecar JSON files, upserts
  by variant id so repeated applies do not duplicate variants, and preserves
  unrelated sidecar metadata.
- `2026-07-01`: Added applied-sidecar roundtrip evidence preservation. Manifest
  scanning now keeps prompt-variant `evidence` from sidecars and generated
  prompt batches carry that evidence forward, so a promoted seedable cue remains
  tied to the exact tested prompt, image path, and visual score evidence after
  it is written to the sidecar.
- `2026-07-01`: Added deterministic atlas cue-seed selection for applied
  sidecar variants. `--print-seed-selection` chooses a stable prompt variant for
  a seed slot such as `atlas_cue_seed`, but only from variants whose evidence
  passes the seedable-candidate preservation gates. Unproven sidecar variants
  are reported as ineligible so seed selection does not silently use weak cues.
- `2026-07-01`: Cue-seed selection now sorts eligible candidates by
  `prompt_variant_id` before indexing by seed. Reordering sidecar JSON no longer
  changes which alternate frame a given cue seed selects.
- `2026-07-01`: Manifest ingestion now rejects duplicate sidecar
  `prompt_variants[].id` values before selection or batching, keeping cue-seed
  identity and sidecar upserts unambiguous.
- `2026-07-01`: Manifest ingestion now also rejects sidecar variants whose
  explicit `prompt_source.prompt_variant_id` does not match the enclosing
  variant `id`, so provenance cannot point at a different cue.
- `2026-07-01`: Sidecar update validation now enforces the same
  `prompt_source.prompt_variant_id` identity rule for normal and matrix drafts
  before apply writes durable sidecar state.
- `2026-07-01`: Sidecar apply now also rejects ambiguous existing
  `prompt_variants` lists before upsert, so apply cannot silently preserve or
  rewrite duplicate prompt-variant ids.
- `2026-07-01`: Added seed-selected prompt batch export. The exporter turns a
  deterministic cue-seed selection into an `sxcp_prompt_batch`-compatible JSON
  with baseline plus the selected candidate only, preserving exact prompt text,
  selected seed-slot metadata, and evidence provenance for MCP evaluation.
- `2026-07-01`: Prompt batches now stamp the actual render sampler seed into
  every probe's `seed_metadata.sampler_seed`, including matrix jobs with sampler
  overrides, while preserving the other seed slots as cue/provenance metadata.
- `2026-07-01`: Cue-selection seed slots now explicitly reject `sampler_seed`
  in seed selection and matrix sidecar validation. The sampler seed remains the
  render seed; cue, generator, micro-position, and workspace slots carry prompt
  alternate provenance.
- `2026-07-01`: Added seed-matrix export for atlas alternates. The matrix builds
  normal seed-selected batches for every sampler-seed / cue-seed pair, keeping
  sampler stochasticity and `atlas_cue_seed` selection separate while preserving
  exact selected prompt text and visual evidence in each job.
- `2026-07-01`: Added seed-matrix result sheets. Completed matrix jobs can now
  be converted into one scoring artifact that preserves each job id, sampler
  seed, cue seed, selected variant, exact prompt text, returned image path, and
  empty score slots, while rejecting duplicate, missing, or extra matrix result
  ids.
- `2026-07-01`: Added seed-matrix promotion reports. Scored matrix jobs are
  aggregated with the same preservation gates as single-result promotion and
  grouped by selected prompt variant plus cue seed, marking groups stable only
  when every sampler seed passes. Promotion now rejects duplicate or missing
  result-sheet job ids, duplicate declared sampler or cue seeds, jobs outside
  declared sampler/cue seed sets, duplicate sampler jobs inside one cue group,
  selected/candidate prompt-variant id mismatches, job-level seed-slot drift, and
  variant/source-entry/stem drift before grouping stable evidence.
- `2026-07-01`: Added matrix sidecar update drafts for stable cue groups.
  `--print-matrix-sidecar-update-draft` skips unstable groups and emits reviewed
  sidecar prompt-variant updates with representative evidence plus full
  `matrix_evidence` across passing sampler seeds. Stable groups now fail closed
  if any referenced promotion-report job id is missing.
- `2026-07-01`: Added matrix sidecar validation and apply. Stable matrix drafts
  now have `--validate-matrix-sidecar-update-draft` and
  `--apply-matrix-sidecar-update-draft`, preserving full sampler/cue evidence
  through idempotent sidecar upserts instead of relying on manual copy-paste.
- `2026-07-01`: Preserved seed-selection metadata through selected-batch result
  sheets. After MCP returns images for a selected batch, the result sheet keeps
  the sheet-level selection report and candidate-level selected prompt variant
  id, preventing later visual scores from losing the cue seed that produced the
  frame.
- `2026-07-01`: Propagated stable matrix evidence through seed selection,
  selected-batch export, and selected-batch result sheets, so a matrix-proven
  sidecar alternate keeps its cue seed, sampler seeds, job ids, image paths, and
  score evidence attached during later single-frame retests.
- `2026-07-01`: Added a seed-selection gate for explicit unstable matrix
  evidence. Legacy single-image variants remain selectable, but a variant that
  carries `matrix_evidence` must have `stable: true` before it can enter the cue
  seed pool.
- `2026-07-01`: Extended the same matrix-evidence gate to catalog cue drafts and
  coverage. Stable matrix proof is preserved on generator-catalog cue candidates;
  explicit unstable matrix evidence blocks catalog-review readiness.
- `2026-07-01`: Preserved stable matrix evidence through normal prompt-batch
  exports and their result sheets, so regular all-variant retests keep the same
  repeatability proof as seed-selected retests.
- `2026-07-01`: Made `tools/sxcp_prompt_batch.py` metadata-preserving when it
  loads batches. Validation and runner paths keep atlas cue axes, seed metadata,
  selection data, evidence, and stable matrix evidence available to downstream
  scoring tools.
- `2026-07-01`: Preserved stable matrix evidence through normal promotion
  reports and sidecar update drafts, preventing regular single-batch retests from
  overwriting a matrix-proven sidecar variant with a metadata-poorer copy.
- `2026-07-01`: Blocked explicit unstable matrix evidence in normal promotion
  reports. A result-sheet probe carrying `matrix_evidence.stable: false` is
  rejected with `unstable_matrix_evidence` and skipped by sidecar update drafts.
- `2026-07-01`: Connected catalog atlas cue seeds to the generator node path.
  `atlas_cue_seed` on Krea2 pose/filter nodes now records deterministic
  `krea2_prompt_variant_indices` for explicit catalog `prompt_variant_cues`,
  and prompt row assembly preserves those indices instead of overwriting them
  with the broader pose seed. This makes catalog cue alternates reproducible as
  same-scene frame changes while keeping sampler seed and cue seed separate.
- `2026-07-01`: Preserved append-cue provenance through atlas-refine promotion
  and added a read-only catalog cue draft. Batch probes, result sheets,
  promotion reports, and applied sidecars now keep `prompt_source`, so
  `--print-catalog-cue-draft` can propose catalog `prompt_variant_cues` only
  from scored seedable append-cue deltas instead of inventing alternates from a
  full prompt.
- `2026-07-01`: Added an atlas-refine coverage report for live decks. The report
  counts baseline-only entries, unscored sidecar variants, seedable candidates,
  rejected variants, and catalog-cue-ready append-cue candidates, making the
  next MCP/scoring action explicit before changing generator/catalog wording.
- `2026-07-01`: Added read-only sidecar scaffolds for baseline-only atlas
  entries. `--print-sidecar-scaffold` emits same-stem sidecar filenames,
  baseline metadata slots, source prompt hashes, and a blank prompt-variant
  template so user-authored cue variants can be added without inventing wording
  or writing files automatically.
- `2026-07-01`: Added a read-only baseline score sheet for same-subject atlas
  decks. `--print-baseline-score-sheet` exports every baseline prompt/image
  pair with score slots and score state, separating fully unscored baselines
  from partially scored ones before sidecar variants or catalog cue alternates
  are promoted.
- `2026-07-01`: Added validation-first baseline score sidecar updates.
  Manually scored baseline sheets can now produce a baseline score update draft,
  validate it, and apply top-level `score`, seed, cue-axis, prompt-hash, and
  analysis-note metadata back into same-stem sidecars without carrying or
  modifying `prompt_variants`. Partial baseline progress is preserved as
  warning-level evidence instead of being promoted as a seedable alternate.
- `2026-07-01`: Added a read-only atlas prompt-noise report. The report scans
  baseline prompts and sidecar prompt-variant text/cues for option-list words,
  meta/policy instructions, leaked POV foreground cue labels, and
  positive-channel negative-conditioning phrases before those prompts become
  fixed-seed evidence.
- `2026-07-01`: Integrated prompt-noise findings into atlas coverage. A known
  entry with noisy baseline or sidecar prompt text now reports
  `needs_prompt_cleanup` before `baseline_only`, `needs_visual_score`, or
  seed-selection states, so noisy prompts cannot silently advance as repeatable
  seed/cue evidence.
- `2026-07-01`: Added a manual prompt-cleanup sheet for atlas prompt-noise
  findings. `--print-prompt-cleanup-sheet` groups issues by editable source
  text, points baseline issues to prompt files and sidecar issues to
  same-stem JSON prompt variants, and leaves `replacement_text` blank so cleanup
  remains human-reviewed rather than generated by the tooling.
- `2026-07-01`: Added validation-first prompt-cleanup apply. Filled cleanup
  sheets can now be validated for nonblank/noise-free manual replacements and
  applied to prompt files or targeted sidecar variant text/cues while preserving
  unrelated sidecar metadata and rejecting drift.
- `2026-07-01`: Added `current_text_sha256` to prompt-cleanup sheet items and
  validation. Manual cleanup artifacts now prove their editable source text was
  not altered inside the sheet before replacement text is applied.
- `2026-07-01`: Added `source_prompt_sha256` to prompt-cleanup sheet items and
  validation. Manual cleanup artifacts now stay tied to the exact atlas baseline
  prompt identity used by batch, sidecar, and promotion evidence.
- `2026-07-01`: Seed matrices now reject duplicate sampler or cue seeds before
  jobs are emitted, so stable matrix evidence cannot be inflated by repeated
  copies of the same generated condition.
- `2026-07-01`: Seed-matrix promotion now requires each stable cue group to cover
  every declared sampler seed. Edited or incomplete matrix result sheets report
  `missing_sampler_coverage` instead of promoting partial evidence.
- `2026-07-01`: Stable matrix evidence now requires at least two unique sampler
  seeds. One-sampler matrices remain inspectable but report
  `insufficient_sampler_coverage`, and sidecar validation/draft generation reject
  hand-edited stable evidence below that repeatability floor.
- `2026-07-01`: Matrix sidecar drafts now verify stable groups' declared
  `sampler_seeds` against their referenced `job_ids`, so hand-edited promotion
  reports cannot write sidecar evidence that claims unreferenced render seeds.
- `2026-07-01`: Matrix sidecar drafts now reject stable groups whose
  `job_count`, `promotion_ready_count`, or `blocked_count` drift from their
  referenced jobs, and emitted matrix evidence uses job-derived counts.
- `2026-07-01`: Matrix sidecar drafts now reject stable groups with duplicated
  `job_ids`, so one returned matrix image cannot be counted as multiple
  repeatability samples.
- `2026-07-01`: Matrix sidecar drafts now reject stable groups whose referenced
  jobs drift from the group's selected prompt variant, cue seed, seed slot, pose
  variant, or source sidecar identity.
- `2026-07-01`: Matrix sidecar validation now rejects duplicated
  `matrix_evidence.jobs` ids and duplicated per-job sampler seeds, so a manually
  edited sidecar draft cannot count one evidence row twice.
- `2026-07-01`: Matrix sidecar validation now rejects duplicated declared
  `matrix_evidence.sampler_seeds`, keeping declared render-seed coverage aligned
  with the unique matrix evidence rows.
- `2026-07-01`: Matrix sidecar validation now rejects cue seed drift between
  `seed_metadata[matrix_evidence.seed_slot]` and
  `matrix_evidence.selection_seed`.
- `2026-07-01`: Matrix sidecar validation now requires representative
  single-image `evidence` to match the `matrix_evidence.jobs` row for its
  sampler seed, keeping normal seed-selector compatibility evidence tied to the
  matrix proof.
- `2026-07-01`: Downstream seed selection and catalog cue drafts now treat
  malformed stable `matrix_evidence` as unstable, so `stable: true` alone cannot
  reintroduce hand-edited matrix proof after sidecar rescan.
- `2026-07-01`: Downstream matrix evidence reuse now also requires
  `seed_metadata[matrix_evidence.seed_slot]` to match
  `matrix_evidence.selection_seed`, so cue-seed metadata drift cannot enter seed
  selection after sidecar rescan.
- `2026-07-01`: Matrix sidecar validation and downstream stable-evidence reuse
  now reject matrix evidence job rows whose `turn` is missing or not an integer.
- `2026-07-01`: Matrix sidecar validation now rejects representative
  single-image `evidence.turn` values that are missing or not integers before
  comparing them to matrix evidence rows.
- `2026-07-01`: Extended prompt-noise detection to exact repeated direct
  phrases. Duplicate pose clauses now surface as `duplicate_phrase` cleanup
  issues before they can be scored, promoted, or used for seed selection.
- `2026-07-01`: Added a promotion-time prompt-noise gate. Result-sheet
  candidates carrying option/meta/negative/duplicate prompt noise are rejected
  with `prompt_noise_issue` even when manual visual scores mark prompt noise as
  pass.
- `2026-07-01`: Added same-subject atlas refine deck ingestion after
  `/media/unraid/comfyui/output/CodexMCP-Atlas-Refine` was prepared with one
  prompt/image pair per atlas variant for a stable subject. Future seed/cue
  tuning should first build a manifest with
  `tools/krea2_atlas_refine_manifest.py`, confirm every prompt/image pair maps
  to a catalog `variant_key`, and use the manifest's seed slots to distinguish
  sampler, generator, atlas-cue, micro-position, and workspace-surface changes.
  This makes cue seeds behave like alternate frames from the same scene rather
  than uncontrolled prompt drift.
- `2026-07-01`: Added explicit `--print-manifest` support to the atlas-refine
  CLI. The default no-mode output still prints the manifest, but scripts and
  notes can now request that artifact by name like the other report modes.
- `2026-07-01`: Added atlas detail-restore hygiene after side-profile oral
  clothing restore preserved the shirt/bralette but emitted ownerless wording
  and earlier leaked `POV foreground clothing cue` into strict atlas prompts.
  Future atlas restores must audit the final Krea prompt, strip raw foreground
  clothing/body cue clauses, keep restored clothing explicitly partner-owned,
  and preserve partial-removal semantics without making hidden lower garments
  visible. For side-profile oral body-line, use `the woman wears ...` for
  visible clothes and keep lower garments `pulled aside out of frame` so the
  adult male viewer's abdomen/navel/pelvis/near thigh remain the only
  foreground body-owner cues.
- `2026-06-30`: Added side-camera/result-label separation after ballsucking
  seed `5757575757` produced attractive low side-camera oral views while still
  collapsing the requested contact object onto the shaft/glans. Future scoring
  should record that as side-view oral evidence and keep target-contact evidence
  separate.
- `2026-06-30`: Added generated-route validation discipline after footjob turn
  `183` kept large foreground soles but hid the shaft/contact that manual probes
  had preserved. Future provisional generator patches should render the exact
  final Krea prompt once after the code change; if shared route wording adds
  limiting positive-channel language, clean it before sending the validation
  prompt.
- `2026-06-30`: Added a hard-pose exploration budget after ballsucking wording
  tests produced only eight early probes before the first weak-case note. Future
  hard text-only poses should use batched wording-axis search and aim for about
  fifty positive-only tries before concluding the pose needs stronger control.
- `2026-06-30`: Added partial-acceptance discipline after ballsucking produced
  repeatable tongue/lips-on-testicles results that beat the shaft/glans
  baseline but did not fully solve mouth-wrapped contact. Future hard-pose exits
  should preserve repeatable progress as a provisional generator patch while
  keeping the remaining miss in the expansion queue.
- `2026-06-30`: Added ballsucking target-object refinement after sampler seed
  `9797979797` repeated the `scrotal skin is the nearest mouth surface` branch
  on turns `288` and `293`. Score target-object ownership separately from the
  side-low camera family: a route can preserve face/thigh geometry while still
  drifting to shaft/base contact. Avoid promoting balls-first center-object
  wording when it creates multi-subject or body-layout artifacts.
- `2026-06-30`: Added ballsucking generated-route validation after sampler seed
  `9898989898` repeated the patched scrotal-skin route on turns `296` and
  `297`. Validation can accept a provisional target-object improvement while
  still keeping the pose queued when the remaining miss is full mouth-wrapped
  testicle contact.
- `2026-06-30`: Added ballsucking fresh weak-case evidence after sampler seed
  `5959595959` tested lip-oval, sideways mouth pocket, and chin-pelvis upward
  seal wording across three women. The batch preserved low-pelvis/cheek-thigh
  geometry in places, but every branch returned to shaft/glans collapse or
  generic oral contact. Do not retry those axes as generator defaults; the next
  search should change the target-object control strategy rather than adding
  more mouth-shape synonyms.
- `2026-06-30`: Added ballsucking occlusion weak-case evidence after sampler
  seed `6060606060` tested foreground occlusion, under-scrotum tongue shelf,
  and hand-guided scrotum wording across three women. The generated route
  remained the best partial while those axes became shaft-centered or
  hand/shaft-dominant. Do not retry occlusion or hand-support synonyms as
  generator defaults; the next useful move is a different target-object strategy
  or stronger control.
- `2026-06-30`: Added ballsucking mouth-axis mixed-case evidence after sampler
  seed `6161616161` tested exact mouth-sucking, single-testicle, hanging balls
  below shaft, side-mouth wrap, and chin-pelvis lower-mouth wording across
  three women. The generated-route controls stayed the best repeated partials
  on two subjects, side-mouth and chin-pelvis variants produced isolated useful
  partials, and the rest drifted back to shaft/glans contact. Record isolated
  partials as axis hints, but do not patch generator wording unless a branch
  repeats across subjects or beats the generated-route controls.
- `2026-06-30`: Added ballsucking pelvis-valley weak-case evidence after
  sampler seed `7171717171` tested flat pelvis-valley, thigh tunnel,
  pubic-hair mouth-line, low-cushion chin-anchor, and pelvis-edge target-first
  wording across three women. The flat pelvis-valley branch repeated a strong
  body-plane correction on three subjects, matching the atlas viewer-flat
  thigh-wall read better, but it stayed shaft-centered. Score body-plane
  orientation and target-object contact separately; do not patch a route when
  it improves orientation while regressing the target.
- `2026-06-30`: Stopped the ballsucking text-only loop after sampler seed
  `7272727272` combined `flat-valley scrotal-skin` target wording with the
  prior side-low route across three women. The hybrid repeated the body-plane
  hint on turns `368`, `374`, and `380`, but the target stayed shaft-centered,
  while side-low flat-valley variants only gave look hints. Preserve the
  current side-low scrotal-skin partial, do not patch the hybrid axes, and move
  future full-target work toward stronger pose/control evidence rather than
  more positive-prompt synonyms.
- `2026-06-30`: Promoted blowjob side-profile POV after sampler seed
  `5858585858` produced a three-woman generated-route repeat on turns `298`,
  `301`, and `304`. When the current generated route repeats across multiple
  subjects on a fresh seed and alternate branches do not beat it cleanly, mark
  the route proven instead of continuing to queue it. Keep attractive
  side-camera-style self-body crop results as a separate look branch when they
  risk drifting toward external side framing.
- `2026-06-29`: Added the multisource/generator-safe method after an overfit
  single-character coworking test produced a visually usable but invalid
  bedding foreground. Future A/B runs must test at least two source cases before
  promoting wording that is meant to become a durable guide or generator rule.
- `2026-06-29`: Added generator mirroring discipline after the accepted
  fingering wording proved Krea2 behavior but not generator output. Future
  mirroring changes need a red-green regression at final Krea formatter output,
  not just a guide entry.
- `2026-06-29`: Tightened generator-patch promotion after the fingering
  generated-route probe looked good but had too little image coverage. Future
  pose-wording generator edits need a broader seed, subject, and location matrix
  before production route code changes.
- `2026-06-29`: Added semantic-axis discipline after source 52 fingering tests.
  If a candidate succeeds by changing ownership, viewpoint, location family, or
  role semantics, record it as a weak-case or prompt note unless that semantic
  change is the intended generator behavior. Do not count it as direct evidence
  for the original route even when the image is visually cleaner.
- `2026-06-29`: Added provisional generator-patch discipline after the user
  clarified that leaving a category should still carry forward same-seed progress
  over baseline. Future category exits should patch the generator with the best
  generator-safe improvement, record it as `provisional_generator_patch`, and
  keep the catalog route as `candidate` until repeated evidence proves it.
- `2026-06-29`: Applied the category-exit rule to spread/open-thigh presentation
  after two source subjects improved on the same sampler seed. For setup poses
  that are not structurally broken before rendering, prefer at least two source
  subjects before mirroring a provisional generator patch, and keep the
  observation explicit about remaining weak points such as insufficient V-frame
  width or outfit closure.
- `2026-06-29`: Applied the same category-exit rule to blowjob top-view after
  two source subjects improved on sampler seed `4242424242`. When the baseline is already usable,
  record the improvement narrowly: name the axis that got better, keep the route
  candidate, and avoid overstating the finding as proven until another seed
  repeats it.
- `2026-06-29`: Corrected blowjob top-view criteria after atlas review and a
  same-seed source-`46` probe showed that vertical shaft alignment alone can
  still render as frontal/eye-height oral. Future top-view evidence must show
  steep overhead camera geometry: viewer abdomen at the lower edge, camera
  looking down from above the viewer chest/abdomen, and the woman's hair crown,
  shoulders, and hands visible from above.
- `2026-06-29`: Refined blowjob top-view prompt-axis search after the user
  rejected horizontally biased probes. Run several prompt-only probes before
  editing the generator, wait for `sxcp_eval_in` to advance to the new turn, and
  compare each image against the atlas verticality criteria. The useful axis is
  `nadir-angle` or `bird's-eye` plus standing male POV, nearby floor plane
  dominating the image, the woman directly below between the viewer's feet, and
  top-down office anchors. Avoid `plumb-line` and `map` in generator prompts
  because Krea2 can literalize them as drawn graphics.
- `2026-06-29`: For quick wording-axis search, prefer a batched prompt-probe
  loop before analysis-heavy iteration. Prepare several positive-only alternate
  prompts that isolate likely wording axes, send them one at a time through
  `sxcp_eval_out` with the same sampler seed, pull only until each new
  `sxcp_eval_in` turn and image path exists, then inspect the returned images as
  a batch. Use the bulk comparison to pick the best axis, identify literalized
  or harmful words, and only then update the generator, guide, catalog, or eval
  log.
- `2026-06-29`: Preserve prompt-order controls when testing anything beyond
  rough pose-axis discovery. Prompts that start with pose geometry and omit or
  move the subject/look block can reduce female-look adherence, so treat those
  runs as geometry-only probes. Durable A/B prompts should keep the original
  subject/look description first, then the pose hierarchy, then location and
  style/background anchors, unless the test is explicitly about prompt-order
  sensitivity.
- `2026-06-29`: Added result-validation discipline to the batched prompt helper.
  After sending a batch, fill the result template from `sxcp_eval_in`, run
  `validate-results`, and only then draft evidence. The validation step proves
  each probe returned an ordered turn, an absolute PNG artifact, and the fixed
  sampler seed before bulk analysis or log-entry drafting.
- `2026-06-29`: Added `run-batch` automation to the batched prompt helper. It
  removes manual push/pull copy-paste from normal A/B runs while keeping the same
  gates: positive-only prompts, fixed sampler seed, turn advancement, absolute
  PNG image path, and `validate-results` before evidence drafting.
- `2026-06-29`: Split missionary subcases after turns `77`-`84`. Turns `76` and
  `80` are valid angled/cushion missionary results, not failures. The flatter
  atlas examples need a different positive axis: woman flat across an elevated
  table/platform, viewer standing or braced at the foot edge, and viewer feet,
  shins, or side-dropping legs placed below the support edge. Patch this only
  into the raised-edge/edge-supported route; keep generic missionary available
  for angled valid views.
- `2026-06-29`: Folded-missionary tuning on seed `8989898989` used two
  subject-first batches before code changes. Turns `85`-`88` showed that
  compact knee-block and vertical-thigh-column wording can produce the folded
  high-leg geometry, but the shaft/contact disappears when knees and feet lead
  the hierarchy. Turns `89`-`92` then tested contact-first variants; turn `89`
  was accepted because it placed the viewer lower abdomen and large centered
  shaft/contact before the compact folded-knee block. This confirms the
  method: use the first batch to identify the failed axis, run a targeted
  second batch, then mirror only the accepted generator-safe hierarchy as a
  provisional patch.
- `2026-06-29`: Frontal cowgirl on seed `8989898989` used a baseline-plus-
  variants batch instead of comparing against a previous category. Turn `93`
  was a valid generic cowgirl baseline, so turn `95`'s wide horizontal thigh
  bridge improvement became a prompt-guide rule rather than a generator patch.
  When the baseline already hits the pose, record the useful atlas refinement
  and leave the generator unchanged unless repeated evidence shows a systemic
  weakness.
- `2026-06-29`: Cowgirl-alt on seed `8989898989` exposed a spatial-orientation
  blind spot. Turns `97`-`100` had readable contact and squat-like knees, but
  the background still read as a platform/high-camera setup. After rechecking
  the atlas, turns `101`-`104` tested flat-supine viewer wording with ceiling
  and upper-room cues; turn `104` was accepted. Future pose analysis must
  compare atlas and generated room geometry before accepting an image.
- `2026-06-29`: Reverse cowgirl on seed `8989898989` showed that a correct
  semantic label such as `facing away` can be ignored when the visual hierarchy
  still resembles frontal cowgirl. Future back-facing straddle tests should
  score facing direction before contact quality and should name the back, hips,
  and ass as the nearest largest shapes before viewer-leg and contact details.
  Treat over-shoulder glances as secondary refinements only after the
  back-facing straddle is already locked.
- `2026-06-29`: Reverse-cowgirl-alt on seed `8989898989` confirmed that atlas
  sibling folders can need separate generator routes even when the baseline is
  already valid. Normal reverse cowgirl is close back/hip dominant; reverse-alt
  is upright seated with vertical back/shoulders and viewer hands or thighs
  forming the lower frame. Keep those prompt hierarchies separate instead of
  merging all back-facing woman-on-top evidence into one route.
- `2026-06-29`: Added non-target-viewpoint discipline after blowjob side-profile
  oral produced an attractive side-camera result on seed `5656565656`. If a
  render is visually useful but reads as a different camera family, record it as
  a weak case for a future route and do not mirror it into the current POV
  generator path.
- `2026-06-29`: Added MCP command memory after repeated context loss around the
  bridge workflow. Future A/B calls should use the checked helper command
  `/media/p5/miniforge3/bin/python tools/sxcp_mcp_client.py ...`, with
  `comfy_push` to `sxcp_eval_out` for prompt-only positive conditioning and
  `comfy_pull` from `sxcp_eval_in` for returned prompt/image/seed payloads.
- `2026-06-29`: Added side-profile oral ownership discipline after source `46`
  improved with explicit adult-male foreground ownership while source `47`
  rejected a related `body-axis` cue by transferring the body surface to the
  woman. Future side-profile tests should name the foreground owner repeatedly
  and verify that the woman's body stays lateral before considering any
  generator mirroring.
- `2026-06-30`: Promoted the side-profile oral lateral-edge body-line axis
  after sampler seed `9753197531` repeated it across two visible women. Pure
  male-body-axis wording can expose the male as a photographed subject or let
  Krea2 transfer the central body surface away from the intended first-person
  view. Future generator patches should combine adult-male foreground ownership
  with explicit lateral entry from the left edge, mouth at the male abdomen
  line, and hand under the lips; keep the route provisional until another
  seed/source expansion repeats it.
- `2026-06-30`: Added side-profile oral generated-route contact validation
  after turn `206` kept the male body-line geometry but let the mouth float
  above the shaft while the hand became the contact anchor. Turn `207` improved
  after adding lips-touching and mouth-to-shaft-contact priority. Future
  generated-route validation for oral side-profile should score both viewpoint
  ownership and which body part actually anchors the contact.
- `2026-06-30`: Added the side-profile oral lower-right torso anchor after
  sampler seed `9595959595` repeated it on turns `279` and `283` across two
  visible women. The useful wording makes the adult male viewer's own torso
  start at the lower edge and run diagonally into the lower-right foreground,
  with navel, abdomen hair, pelvis, and near thigh marking the camera owner's
  body. Prefer this over generic body-axis wording, which can expose the male
  as a photographed side subject or transfer the axis onto the woman.
- `2026-06-30`: Added side-profile oral generated-route validation after
  sampler seed `9696969696` repeated the patched route on turns `284` and
  `285`. Count generated-route validation separately from prompt-axis search:
  it proves the formatter can carry the new wording, while promotion still
  requires broader source/seed evidence.
- `2026-06-30`: Promoted normal frontal cowgirl from guide-only to provisional
  generator patch after seed `2828282828` repeated the wide-thigh bridge axis
  across two visible women. When the baseline is already valid, a generator
  patch is still appropriate if a later seed repeats a narrow atlas refinement
  that improves geometry without harming subject/look, contact, or setting.
  Generated-route turn `216` validated the patched formatter route with viewer
  hands on outer thighs, wide foreground thigh bridge, upright torso, centered
  contact, and coworking depth. Keep the route candidate until another
  source/seed repeats the refinement.
- `2026-06-29`: Applied the category-exit rule to blowjob laying frontal after
  source `46` and source `50` improved on sampler seed `6767676767`. When
  baselines are already strong, preserve the exact improved axis: wide V-frame and low-horizontal torso hierarchy, while noting residual high-hip posture and
  keeping the generator patch provisional until another seed repeats it.
- `2026-06-29`: Applied the category-exit rule to blowjob sitting upright after
  source `46` and source `50` improved on sampler seed `7878787878`. When a
  baseline preserves the seated pose but floats the face above the contact
  point, prefer low-mouth seated hierarchy over generic `mouth aligned` wording:
  face lowered to the exact center contact point, open mouth covering the
  centered tip, and hands directly at the base. Record outfit looseness/drift as
  residual risk and keep the generator patch provisional until another seed
  repeats it.
