Fit & silhouette rules¶
Body-positive fit logic. Today, partial wiring (skin tone in Step 7); Phase 3 completes the wiring.
R1 — Body-positive language is a contract¶
Use these verbs in reasoning lines: - highlight (preferred features) - balance (proportions) - support (preferred silhouette) - improve (comfort) - increase (confidence)
Never use these verbs: - hide - flatter the flaw of - fix - minimize - correct - (anything labeling a body feature as a problem)
A future test will scan the reasoning trail for forbidden tokens and fail the build if any appear.
R2 — Optional fields, work-with-what's-given¶
The fit profile (Phase 3 fit_profile.json) has every measurement field optional. The agent works with whatever the user shares:
| Field | If provided, drives |
|---|---|
height |
Hemline rules, full-length-pant proportions |
shoulder_width |
Sleeve and shoulder structure choices |
bust, waist, hips, inseam |
Drape and proportion logic |
preferred_fit |
Tailored / relaxed / structured preference |
modesty_preference |
Coverage on top, hemline rules |
comfort_needs |
Fabric softness, no-stiff-collar flags |
style_goals |
Aesthetic prioritization (elevated, modernized, timeless) |
highlight_features |
Areas to draw attention to |
balance_areas |
Areas to bring into proportion |
When a field is missing, that constraint is not applied. No default values are inferred about the user's body.
R3 — Modesty preference¶
If modesty_preference = "moderate" or "high":
- Filter out tops with deep necklines, sleeveless tops (unless explicitly tagged as user-accepted), very short hemlines.
- Surface in the reasoning trail: "Selected '{name}' — its coverage supports your stated modesty preference."
R4 — Comfort preference¶
If comfort_needs includes "no stiff collars" or similar:
- Filter or deprioritize items tagged with the relevant fabric/construction property.
- Don't substitute comfort silently — the reasoning trail explains the trade-off.
R5 — Preferred fit¶
A user's preferred_fit (tailored / relaxed / structured) is a strong tiebreaker between candidate items of equivalent occasion and color score.
R6 — Style preferences as personality, not as filter¶
style_preferences like classic, elegant, minimal are NOT used to filter — they're used to prefer items tagged with those qualities when ranking candidates. A user who declares "minimal" gets a less-busy outfit; they don't get items removed from their own wardrobe.
R7 — Color is the most-wired piece today¶
Skin tone is the only fit-profile field already wired into the agent. Step 7 uses it for the 0–100 color harmony score with per-item flags. The remaining fit rules are documented here and live in the codebase as Phase 3 work.
R8 — Measurement-derived suggestions are preference-based, never prescriptive¶
When the user provides bust / waist / hip measurements, Wearly may surface a small set of preference-based styling suggestions derived from the predicted body-shape category. These suggestions are an opt-in helper for the Profile screen — they are never auto-applied, never appear in agent reasoning without the user confirming them, and never frame a body feature as something to fix.
Mapping (industry heuristic, body-positive framing):
| Predicted shape | Areas the user may choose to highlight | Areas the user may choose to balance | Fit preferences commonly associated |
|---|---|---|---|
hourglass |
waist, neckline | (proportions are already balanced — no suggestion) | tailored, fitted, structured |
pear |
neckline, shoulders, upper body | hips (via upper-body interest, not concealment) | structured upper, fluid lower |
apple (round midsection) |
neckline, legs, collarbone | midsection (via vertical lines and length) | relaxed, fluid |
rectangle (column) |
collarbone, waist, neckline | waist (via waist-defining cuts) | structured, tailored |
inverted triangle |
waist, hips, legs | shoulders (via lower-body interest, not concealment) | fluid upper, structured lower |
athletic (default fallback) |
(no specific suggestion — user choice) | (no specific suggestion — user choice) | (no suggestion) |
Preferred-fit from waist definition (weak heuristic):
- waist_definition ≥ 8 in → tailored or structured may suit (waist seaming reads as intentional)
- waist_definition < 4 in → relaxed or fluid may suit (drape reads more naturally)
- otherwise → no preferred-fit suggestion
Style goals & comfort needs are NEVER inferred from measurements. They are personal expression and must come from the user directly.
UX contract (enforced in profile_inference.suggest_profile_from_measurements):
1. The user must explicitly click "Analyze measurements" — suggestions are never computed silently.
2. Each suggestion shows the rule citation [fit-silhouette-rules#R8] so the user can read this section.
3. Suggestions never overwrite user-confirmed profile fields. If body_shape is already set with _body_shape_source: "user", the suggestion is shown as a comparison but the user-confirmed value is preserved unless the user clicks "Apply suggestions".
4. Every suggestion uses body-positive verbs only (highlight, balance, support). Forbidden tokens (hide, fix, minimize, correct, flaw, slimming) are blocked by fit_tool.check_value_for_forbidden_language at write time.
5. The suggestion panel surfaces a confidence label (high / medium / low / weak heuristic) for each field so the user can weigh it.
Why this is a rule, not invented styling advice:
The shape → balance / highlight mappings are widely-documented industry heuristics found in the styling literature surveyed in docs/evidence-and-references.md §3.4. Wearly's contribution is the framing (user-declared proportion preferences, never image-inferred, always editable, body-positive language) — not the proportion suggestions themselves. The Hokka (2024) reference makes explicit that a small set of shape categories is a documented limitation of inclusive design, so Wearly surfaces these mappings as preference-based options rather than prescriptive advice.
Source basis¶
Primary category: Body-shape-aware / fit-aware styling (docs/evidence-and-references.md §3.4).
Secondary: Human-centered AI (§3.6).
Current basis: Industry fit heuristics + the body-positive language contract, enforced at runtime by fit_tool.check_reasoning_for_forbidden_language().
Important framing: The body-shape category labels (hourglass / pear / apple / etc.) are industry heuristics, not scientific taxonomy. Wearly treats them as user-declared proportion preferences — a proxy for a small set of proportion-related styling rules, never as a claim about the user's body. See docs/evidence-and-references.md §4 and book/06-fit-profile-logic.md.
Verified citation: Hokka, J. (2024). "Gender and the Diversity of the Human Body as Challenges for the Inclusive Design of Wearable Technology." Fashion Practice 16(1). DOI: 10.1080/17569370.2023.2250153. Cited for the inclusive-design framing — body diversity is a documented challenge for prescriptive design, supporting Wearly's treatment of body-shape labels as user-declared rather than computed.