# Clothing Seed Axis Design

## Goal

Allow a workflow to keep the same category, content item, pose, role, person,
scene, expression, composition, and branch structure while rerolling only the
clothing/outfit choices.

## Current Problem

Clothing currently shares the `content` seed axis in several places. That means a
user cannot change clothes without also risking changes to content-driven prompt
selection. In scene pairs, this is especially confusing because a softcore branch
content seed can pick the outfit that the hardcore branch later inherits through
clothing continuity.

The previous layer-seed fix made the visible seed authoritative, but it did not
separate clothing from content. A visible `content` seed is still doing two jobs:
content selection and clothing selection.

## Design

Add a new first-class `clothing` seed axis.

The `clothing` axis controls:

- prompt clothing mode selection, such as full, minimal, or random;
- clothing/outfit item selection for normal prompt rows;
- softcore branch outfit selection;
- pair partner outfit selection;
- scene wardrobe outfit selection where the wardrobe layer needs a seed;
- hard branch clothing continuity when it derives from the soft branch outfit.

The `content` axis continues to control:

- category item selection;
- content templates and item text;
- content-derived item axis values;
- pose-category content when an existing category treats the content item as
  pose-driven metadata.

Changing only `clothing_seed` should not change non-clothing prompt content.

## Seed Vocabulary

Update the shared seed policy:

- Add `clothing` to `SEED_LOCK_AXES`.
- Add a deterministic salt for `clothing`.
- Add aliases for `clothing_seed`, `outfit_seed`, and `wardrobe_seed`.
- Keep `item_seed` as a `content` alias because it describes content item
  selection, not clothing.
- Add `clothing` to reroll-axis choices.
- Add `content_clothing` for workflows that intentionally reroll both content
  and clothes together.
- Add `clothing_pose` for workflows that keep content stable but reroll clothes,
  pose, and role together.

`content_pose` should remain content + pose + role. It should not include
clothing after this split.

## Scene Layer Behavior

Update scene layer seed mappings:

- `wardrobe` defaults to the `clothing` axis.
- `softcore_branch` defaults to `clothing`, `pose`, and `role` only when no
  explicit reroll axis is selected.
- `hardcore_branch` remains `pose` and `role` by default.
- Explicit reroll axes use the shared vocabulary, including `clothing`,
  `content_clothing`, and `clothing_pose`.

This keeps the branch seed UI useful while making clothes-only rerolls obvious.

## Prompt Flow

Normal prompt rows should use separate RNGs:

- `content_rng` for category/subcategory item and content-template choices.
- `clothing_rng` for clothing mode and outfit choices.
- Existing pose, role, person, scene, expression, and composition RNGs remain
  unchanged.

Scene pair rows should use separate RNGs:

- soft branch clothing/outfit selection uses the soft branch `clothing` axis;
- soft branch pose uses the soft branch `pose` axis;
- hard branch content behavior remains independent from soft branch clothing;
- hard branch clothing continuity reads the selected soft branch outfit, so a
  clothing-only reroll changes inherited clothing but leaves the hard branch pose
  and content seeds alone.

## Compatibility

Existing workflows should continue to load.

Compatibility rules:

- Existing configs without `clothing_seed` fall back to the same effective base
  seed behavior as before.
- `outfit_seed` should map to `clothing` going forward.
- `content_seed` should not control clothing once `clothing_seed` or
  `outfit_seed` is present.
- The visible scene layer seed remains authoritative for all seed modes.
- `seed_trace` should include `clothing` when the clothing axis is configured or
  emitted by row generation.

This is a behavior improvement, not a schema break.

## Testing

Add smoke coverage proving:

- `seed_reroll_axis_choices()` includes `clothing`, `content_clothing`, and
  `clothing_pose`.
- `build_seed_lock_config_json(..., reroll_axis="clothing")` changes only
  `clothing_seed`.
- `build_seed_lock_config_json(..., reroll_axis="content_clothing")` changes
  both `content_seed` and `clothing_seed`.
- `content_pose` does not change `clothing_seed`.
- In a scene pair, changing only the soft branch clothing seed changes the
  softcore outfit and inherited hard clothing state.
- The same scene pair keeps non-clothing content, pose, role, person, scene, and
  composition seeds stable under a clothes-only reroll.
- Legacy `outfit_seed` is honored as a clothing seed.

## Out Of Scope

This design does not add a second visible seed widget to the existing scene layer
seed node. The node still has one visible seed field; the selected reroll axis
decides what that seed controls.

This design does not rewrite all prompt category data to distinguish fashion
categories from non-fashion content categories. It only separates RNG control
for clothing choices that the code already treats as clothing or outfit
selection.
