{
  "schema_version": "1.0",
  "prepared_on": "2026-10-13",
  "local_service_region": "GTA; precise service area pending",
  "supplier_selected": false,
  "scope": "requirements only; no stock price shipping relationship or SKU facts invented",
  "categories": [
    {
      "category_id": "cleanser",
      "name": "Shampoo or gentle cleanser",
      "type": "consumer consumable",
      "selection_attributes": "Cleansing need; scalp comfort; colour compatibility; fragrance preferences",
      "repeat_purchase_assessment": "core replenishment hypothesis"
    },
    {
      "category_id": "conditioner",
      "name": "Rinse-out conditioner",
      "type": "consumer consumable",
      "selection_attributes": "Slip; weight; strand thickness; dryness; rinse instructions",
      "repeat_purchase_assessment": "core replenishment hypothesis"
    },
    {
      "category_id": "leave_in",
      "name": "Leave-in conditioner or detangler",
      "type": "consumer consumable",
      "selection_attributes": "Slip; weight; damp/dry use; ingredient sensitivities",
      "repeat_purchase_assessment": "profile-dependent replenishment"
    },
    {
      "category_id": "gel",
      "name": "Styling gel",
      "type": "consumer consumable",
      "selection_attributes": "Hold; finish; texture; residue; application moisture",
      "repeat_purchase_assessment": "core styling replenishment hypothesis"
    },
    {
      "category_id": "foam",
      "name": "Styling mousse or foam",
      "type": "consumer consumable",
      "selection_attributes": "Weight; volume versus definition; hold; application sequence",
      "repeat_purchase_assessment": "core styling replenishment hypothesis"
    },
    {
      "category_id": "cream",
      "name": "Styling cream",
      "type": "consumer consumable",
      "selection_attributes": "Richness; touchable hold; density and dryness fit",
      "repeat_purchase_assessment": "profile-dependent replenishment"
    },
    {
      "category_id": "paste",
      "name": "Styling paste or clay",
      "type": "consumer consumable",
      "selection_attributes": "Matte/shine; hold; workable length; washout",
      "repeat_purchase_assessment": "short-style replenishment hypothesis"
    },
    {
      "category_id": "heat_protectant",
      "name": "Heat protectant",
      "type": "consumer consumable",
      "selection_attributes": "Explicit thermal claim; damp/dry compatibility; tool routine; label directions",
      "repeat_purchase_assessment": "heat-user replenishment hypothesis"
    },
    {
      "category_id": "finish",
      "name": "Finishing oil or serum",
      "type": "consumer consumable",
      "selection_attributes": "Weight; finish; application area; no inferred thermal claim",
      "repeat_purchase_assessment": "optional replenishment"
    },
    {
      "category_id": "mask",
      "name": "Conditioning mask",
      "type": "consumer consumable",
      "selection_attributes": "Consumer use; rinse/leave-in; timing; weight; exact sequence",
      "repeat_purchase_assessment": "need-led replenishment"
    },
    {
      "category_id": "repair",
      "name": "Consumer repair treatment",
      "type": "consumer consumable",
      "selection_attributes": "Exact version; consumer scope; sequence; no automatic treatment stacking",
      "repeat_purchase_assessment": "need-led replenishment"
    },
    {
      "category_id": "pigmented_care",
      "name": "Pigmented colour maintenance",
      "type": "consumer consumable",
      "selection_attributes": "Current shade; desired tone; staining warnings; timing; processing history",
      "repeat_purchase_assessment": "selective; consultation if uncertain"
    },
    {
      "category_id": "refresh",
      "name": "Dry shampoo or refresh product",
      "type": "consumer consumable",
      "selection_attributes": "Colour residue; fragrance; scalp comfort; aerosol shipping if applicable",
      "repeat_purchase_assessment": "selective replenishment"
    },
    {
      "category_id": "dryer",
      "name": "Hair dryer",
      "type": "durable tool",
      "selection_attributes": "Canadian electrical/model suitability; heat/air controls; manual; attachments; warranty",
      "repeat_purchase_assessment": "durable acquisition/replacement"
    },
    {
      "category_id": "diffuser",
      "name": "Diffuser",
      "type": "durable accessory",
      "selection_attributes": "Exact dryer/model fit; attachment locking; manual",
      "repeat_purchase_assessment": "durable accessory"
    },
    {
      "category_id": "brush",
      "name": "Brush",
      "type": "durable tool",
      "selection_attributes": "Detangling versus tension/round-brush role; bristles; strand/profile suitability",
      "repeat_purchase_assessment": "durable acquisition/replacement"
    },
    {
      "category_id": "comb",
      "name": "Comb",
      "type": "durable tool",
      "selection_attributes": "Wide-tooth versus fine/sectioning; task fit; smooth edges",
      "repeat_purchase_assessment": "durable acquisition/replacement"
    },
    {
      "category_id": "clips",
      "name": "Sectioning clips",
      "type": "durable accessory",
      "selection_attributes": "Grip; snagging; length/density fit",
      "repeat_purchase_assessment": "durable accessory"
    },
    {
      "category_id": "rollers",
      "name": "Rollers or heatless setting aid",
      "type": "durable accessory",
      "selection_attributes": "Diameter; length; tension/comfort; wet/dry directions",
      "repeat_purchase_assessment": "durable accessory"
    },
    {
      "category_id": "iron",
      "name": "Curling or straightening tool",
      "type": "durable tool",
      "selection_attributes": "Tool type; adjustable heat; manual; Canadian model; dry-hair/approved-use rules",
      "repeat_purchase_assessment": "durable acquisition/replacement"
    },
    {
      "category_id": "ties_pins",
      "name": "Gentle ties and pins",
      "type": "accessory",
      "selection_attributes": "Length/density; comfort; traction; removable without pulling",
      "repeat_purchase_assessment": "occasional replacement"
    },
    {
      "category_id": "clipper",
      "name": "Consumer clipper",
      "type": "durable tool",
      "selection_attributes": "Exact guard fit; manual; cutting length; visibility; Canadian model",
      "repeat_purchase_assessment": "durable acquisition/replacement"
    },
    {
      "category_id": "clipper_care",
      "name": "Clipper maintenance supplies",
      "type": "maintenance consumable",
      "selection_attributes": "Exact model-approved oil/cleaning; sanitation directions",
      "repeat_purchase_assessment": "small replenishment hypothesis"
    },
    {
      "category_id": "temporary_colour",
      "name": "Consumer temporary colour or root camouflage",
      "type": "consumer consumable",
      "selection_attributes": "No-lift scope; shade; washout; transfer; ingredient/label restrictions",
      "repeat_purchase_assessment": "selective replenishment"
    },
    {
      "category_id": "clip_ins",
      "name": "Removable clip-in extension or wig",
      "type": "durable wearable",
      "selection_attributes": "Attachment; weight; texture/colour match; cleaning; sensitivities; fit",
      "repeat_purchase_assessment": "durable; specialist assessment if needed"
    },
    {
      "category_id": "professional_service",
      "name": "Professional cut chemical or installation service",
      "type": "service requirement",
      "selection_attributes": "Verified stylist skill; hair history; suitability; resource/travel availability",
      "repeat_purchase_assessment": "consultation; not a consumer kit"
    }
  ],
  "tasks": [
    {
      "task_id": "T01",
      "goal": "Cleanse and condition",
      "diy_level": "beginner",
      "hair_needs": "all textures; all lengths",
      "required_category_ids": [
        "cleanser",
        "conditioner"
      ],
      "optional_category_ids": [
        "comb",
        "leave_in"
      ],
      "selection_and_feasibility": "Maintain routine",
      "source_ids": [
        "S07",
        "B11"
      ],
      "evidence_type": "source-informed editorial requirements and feasibility inference",
      "tutorial_ids": [
        "U03"
      ],
      "required_tools": [],
      "required_consumables": [
        "cleanser",
        "conditioner"
      ],
      "service_requirements": [],
      "optional_products_and_tools": [
        "comb",
        "leave_in"
      ],
      "consultation_fallback": "Routine review or hands-on lesson if suitability, instructions or technique are uncertain",
      "non_sku_prerequisites": [
        "Exact label or tool instructions; suitable hair condition; enough working length for chosen style"
      ]
    },
    {
      "task_id": "T02",
      "goal": "Lightweight wave definition",
      "diy_level": "beginner",
      "hair_needs": "wavy; fine or low density; medium/long",
      "required_category_ids": [
        "cleanser",
        "conditioner",
        "foam"
      ],
      "optional_category_ids": [
        "gel",
        "comb",
        "diffuser",
        "dryer"
      ],
      "selection_and_feasibility": "Choose one foam or suitable gel; avoid automatic rich cream",
      "source_ids": [
        "B06",
        "B11",
        "B13"
      ],
      "evidence_type": "source-informed editorial requirements and feasibility inference",
      "tutorial_ids": [
        "U03",
        "U04",
        "U10"
      ],
      "required_tools": [],
      "required_consumables": [
        "cleanser",
        "conditioner",
        "foam"
      ],
      "service_requirements": [],
      "optional_products_and_tools": [
        "gel",
        "comb",
        "diffuser",
        "dryer"
      ],
      "consultation_fallback": "Routine review or hands-on lesson if suitability, instructions or technique are uncertain",
      "non_sku_prerequisites": [
        "Exact label or tool instructions; suitable hair condition; enough working length for chosen style"
      ]
    },
    {
      "task_id": "T03",
      "goal": "Natural curl wash and define",
      "diy_level": "beginner",
      "hair_needs": "curly; short/long; varied density",
      "required_category_ids": [
        "cleanser",
        "conditioner",
        "gel"
      ],
      "optional_category_ids": [
        "cream",
        "leave_in",
        "comb",
        "dryer",
        "diffuser"
      ],
      "selection_and_feasibility": "Styler choices are alternatives; air drying is valid",
      "source_ids": [
        "S07",
        "S04",
        "B06",
        "B11"
      ],
      "evidence_type": "source-informed editorial requirements and feasibility inference",
      "tutorial_ids": [
        "U03",
        "U04"
      ],
      "required_tools": [],
      "required_consumables": [
        "cleanser",
        "conditioner",
        "gel"
      ],
      "service_requirements": [],
      "optional_products_and_tools": [
        "cream",
        "leave_in",
        "comb",
        "dryer",
        "diffuser"
      ],
      "consultation_fallback": "Routine review or hands-on lesson if suitability, instructions or technique are uncertain",
      "non_sku_prerequisites": [
        "Exact label or tool instructions; suitable hair condition; enough working length for chosen style"
      ]
    },
    {
      "task_id": "T04",
      "goal": "Coily wash and go",
      "diy_level": "intermediate",
      "hair_needs": "coily; short/long; density and dryness matter",
      "required_category_ids": [
        "cleanser",
        "conditioner",
        "gel",
        "comb"
      ],
      "optional_category_ids": [
        "leave_in",
        "cream",
        "clips",
        "dryer",
        "diffuser"
      ],
      "selection_and_feasibility": "Sectioning/definition lesson optional; match rich/light preference",
      "source_ids": [
        "S08",
        "S23",
        "B05",
        "B11"
      ],
      "evidence_type": "source-informed editorial requirements and feasibility inference",
      "tutorial_ids": [
        "U03",
        "U05"
      ],
      "required_tools": [
        "comb"
      ],
      "required_consumables": [
        "cleanser",
        "conditioner",
        "gel"
      ],
      "service_requirements": [],
      "optional_products_and_tools": [
        "leave_in",
        "cream",
        "clips",
        "dryer",
        "diffuser"
      ],
      "consultation_fallback": "Routine review or hands-on lesson if suitability, instructions or technique are uncertain",
      "non_sku_prerequisites": [
        "Exact label or tool instructions; suitable hair condition; enough working length for chosen style"
      ]
    },
    {
      "task_id": "T05",
      "goal": "Two-strand twists",
      "diy_level": "intermediate",
      "hair_needs": "curly/coily; sufficient working length",
      "required_category_ids": [
        "conditioner",
        "comb",
        "cream"
      ],
      "optional_category_ids": [
        "leave_in",
        "gel",
        "clips"
      ],
      "selection_and_feasibility": "Setting product alternative selected by hold; comfortable tension",
      "source_ids": [
        "S08",
        "B05",
        "B02"
      ],
      "evidence_type": "source-informed editorial requirements and feasibility inference",
      "tutorial_ids": [
        "U01",
        "U05"
      ],
      "required_tools": [
        "comb"
      ],
      "required_consumables": [
        "conditioner",
        "cream"
      ],
      "service_requirements": [],
      "optional_products_and_tools": [
        "leave_in",
        "gel",
        "clips"
      ],
      "consultation_fallback": "Routine review or hands-on lesson if suitability, instructions or technique are uncertain",
      "non_sku_prerequisites": [
        "Exact label or tool instructions; suitable hair condition; enough working length for chosen style"
      ]
    },
    {
      "task_id": "T06",
      "goal": "Twist-out or braid-out",
      "diy_level": "intermediate",
      "hair_needs": "curly/coily; medium/long",
      "required_category_ids": [
        "conditioner",
        "comb",
        "cream"
      ],
      "optional_category_ids": [
        "gel",
        "clips",
        "dryer",
        "diffuser",
        "leave_in"
      ],
      "selection_and_feasibility": "Allow complete setting/drying per guide; no outcome guarantee",
      "source_ids": [
        "S08",
        "B05",
        "B02"
      ],
      "evidence_type": "source-informed editorial requirements and feasibility inference",
      "tutorial_ids": [
        "U01",
        "U05"
      ],
      "required_tools": [
        "comb"
      ],
      "required_consumables": [
        "conditioner",
        "cream"
      ],
      "service_requirements": [],
      "optional_products_and_tools": [
        "gel",
        "clips",
        "dryer",
        "diffuser",
        "leave_in"
      ],
      "consultation_fallback": "Routine review or hands-on lesson if suitability, instructions or technique are uncertain",
      "non_sku_prerequisites": [
        "Exact label or tool instructions; suitable hair condition; enough working length for chosen style"
      ]
    },
    {
      "task_id": "T07",
      "goal": "Bantu knot set",
      "diy_level": "intermediate",
      "hair_needs": "curly/coily; sufficient length",
      "required_category_ids": [
        "comb",
        "cream"
      ],
      "optional_category_ids": [
        "gel",
        "clips",
        "ties_pins"
      ],
      "selection_and_feasibility": "Comfort and hair condition; lesson if technique unfamiliar",
      "source_ids": [
        "B05",
        "B02"
      ],
      "evidence_type": "source-informed editorial requirements and feasibility inference",
      "tutorial_ids": [
        "U01",
        "U05"
      ],
      "required_tools": [
        "comb"
      ],
      "required_consumables": [
        "cream"
      ],
      "service_requirements": [],
      "optional_products_and_tools": [
        "gel",
        "clips",
        "ties_pins"
      ],
      "consultation_fallback": "Routine review or hands-on lesson if suitability, instructions or technique are uncertain",
      "non_sku_prerequisites": [
        "Exact label or tool instructions; suitable hair condition; enough working length for chosen style"
      ]
    },
    {
      "task_id": "T08",
      "goal": "Curl refresh",
      "diy_level": "beginner",
      "hair_needs": "wavy/curly/coily; existing set",
      "required_category_ids": [
        "gel"
      ],
      "optional_category_ids": [
        "leave_in",
        "foam",
        "refresh"
      ],
      "selection_and_feasibility": "Water or owned suitable refresh product may suffice; no purchase forced",
      "source_ids": [
        "B11"
      ],
      "evidence_type": "source-informed editorial requirements and feasibility inference",
      "tutorial_ids": [
        "U03"
      ],
      "required_tools": [],
      "required_consumables": [
        "gel"
      ],
      "service_requirements": [],
      "optional_products_and_tools": [
        "leave_in",
        "foam",
        "refresh"
      ],
      "consultation_fallback": "Routine review or hands-on lesson if suitability, instructions or technique are uncertain",
      "non_sku_prerequisites": [
        "Exact label or tool instructions; suitable hair condition; enough working length for chosen style"
      ]
    },
    {
      "task_id": "T09",
      "goal": "Sleek existing bob",
      "diy_level": "intermediate",
      "hair_needs": "straight/wavy; chin/shoulder cut already present",
      "required_category_ids": [
        "comb",
        "brush",
        "dryer",
        "heat_protectant"
      ],
      "optional_category_ids": [
        "clips",
        "finish",
        "iron"
      ],
      "selection_and_feasibility": "Heated tool only if hair and manual suitable; new shape T22",
      "source_ids": [
        "S01",
        "B01",
        "B02",
        "B08"
      ],
      "evidence_type": "source-informed editorial requirements and feasibility inference",
      "tutorial_ids": [
        "U01"
      ],
      "required_tools": [
        "comb",
        "brush",
        "dryer"
      ],
      "required_consumables": [
        "heat_protectant"
      ],
      "service_requirements": [],
      "optional_products_and_tools": [
        "clips",
        "finish",
        "iron"
      ],
      "consultation_fallback": "Routine review or hands-on lesson if suitability, instructions or technique are uncertain",
      "non_sku_prerequisites": [
        "Exact label or tool instructions; suitable hair condition; enough working length for chosen style",
        "Appropriate electrical setup and exact manual; product wet/dry compatibility"
      ]
    },
    {
      "task_id": "T10",
      "goal": "Soft textured bob",
      "diy_level": "beginner",
      "hair_needs": "straight/wavy; existing bob",
      "required_category_ids": [
        "paste"
      ],
      "optional_category_ids": [
        "foam",
        "comb",
        "brush"
      ],
      "selection_and_feasibility": "One lightweight styler chosen; heat optional with requirements",
      "source_ids": [
        "S01",
        "B01",
        "B04"
      ],
      "evidence_type": "source-informed editorial requirements and feasibility inference",
      "tutorial_ids": [
        "U06"
      ],
      "required_tools": [],
      "required_consumables": [
        "paste"
      ],
      "service_requirements": [],
      "optional_products_and_tools": [
        "foam",
        "comb",
        "brush"
      ],
      "consultation_fallback": "Routine review or hands-on lesson if suitability, instructions or technique are uncertain",
      "non_sku_prerequisites": [
        "Exact label or tool instructions; suitable hair condition; enough working length for chosen style"
      ]
    },
    {
      "task_id": "T11",
      "goal": "Voluminous layered blowout",
      "diy_level": "intermediate",
      "hair_needs": "straight/wavy; existing medium/long layers",
      "required_category_ids": [
        "dryer",
        "brush",
        "heat_protectant"
      ],
      "optional_category_ids": [
        "foam",
        "rollers",
        "clips",
        "finish"
      ],
      "selection_and_feasibility": "Products style existing layers; new cut T23",
      "source_ids": [
        "S06",
        "S20",
        "B01",
        "B02",
        "B08",
        "B13"
      ],
      "evidence_type": "source-informed editorial requirements and feasibility inference",
      "tutorial_ids": [
        "U01",
        "U10"
      ],
      "required_tools": [
        "dryer",
        "brush"
      ],
      "required_consumables": [
        "heat_protectant"
      ],
      "service_requirements": [],
      "optional_products_and_tools": [
        "foam",
        "rollers",
        "clips",
        "finish"
      ],
      "consultation_fallback": "Routine review or hands-on lesson if suitability, instructions or technique are uncertain",
      "non_sku_prerequisites": [
        "Exact label or tool instructions; suitable hair condition; enough working length for chosen style",
        "Appropriate electrical setup and exact manual; product wet/dry compatibility"
      ]
    },
    {
      "task_id": "T12",
      "goal": "Curtain fringe styling",
      "diy_level": "intermediate",
      "hair_needs": "existing fringe; straight/wavy",
      "required_category_ids": [
        "dryer",
        "brush",
        "heat_protectant"
      ],
      "optional_category_ids": [
        "clips",
        "foam"
      ],
      "selection_and_feasibility": "Style fringe already cut; fringe cutting T24",
      "source_ids": [
        "S01",
        "B02"
      ],
      "evidence_type": "source-informed editorial requirements and feasibility inference",
      "tutorial_ids": [
        "U01"
      ],
      "required_tools": [
        "dryer",
        "brush"
      ],
      "required_consumables": [
        "heat_protectant"
      ],
      "service_requirements": [],
      "optional_products_and_tools": [
        "clips",
        "foam"
      ],
      "consultation_fallback": "Routine review or hands-on lesson if suitability, instructions or technique are uncertain",
      "non_sku_prerequisites": [
        "Exact label or tool instructions; suitable hair condition; enough working length for chosen style",
        "Appropriate electrical setup and exact manual; product wet/dry compatibility"
      ]
    },
    {
      "task_id": "T13",
      "goal": "Heatless waves or roller volume",
      "diy_level": "beginner",
      "hair_needs": "straight/wavy; medium/long; enough length",
      "required_category_ids": [
        "rollers"
      ],
      "optional_category_ids": [
        "comb",
        "clips",
        "foam"
      ],
      "selection_and_feasibility": "Temporary set; manual and comfort; no universal curl duration",
      "source_ids": [
        "S20",
        "B01"
      ],
      "evidence_type": "source-informed editorial requirements and feasibility inference",
      "tutorial_ids": [],
      "required_tools": [
        "rollers"
      ],
      "required_consumables": [],
      "service_requirements": [],
      "optional_products_and_tools": [
        "comb",
        "clips",
        "foam"
      ],
      "consultation_fallback": "Routine review or hands-on lesson if suitability, instructions or technique are uncertain",
      "non_sku_prerequisites": [
        "Exact label or tool instructions; suitable hair condition; enough working length for chosen style"
      ]
    },
    {
      "task_id": "T14",
      "goal": "Heated loose waves",
      "diy_level": "intermediate",
      "hair_needs": "straight/wavy/curly; sufficient length; suitable condition",
      "required_category_ids": [
        "iron",
        "heat_protectant",
        "comb"
      ],
      "optional_category_ids": [
        "clips",
        "finish",
        "foam"
      ],
      "selection_and_feasibility": "Exact tool manual and product wet/dry rules; lesson if unsure",
      "source_ids": [
        "S20",
        "B02",
        "B08"
      ],
      "evidence_type": "source-informed editorial requirements and feasibility inference",
      "tutorial_ids": [
        "U01"
      ],
      "required_tools": [
        "iron",
        "comb"
      ],
      "required_consumables": [
        "heat_protectant"
      ],
      "service_requirements": [],
      "optional_products_and_tools": [
        "clips",
        "finish",
        "foam"
      ],
      "consultation_fallback": "Routine review or hands-on lesson if suitability, instructions or technique are uncertain",
      "non_sku_prerequisites": [
        "Exact label or tool instructions; suitable hair condition; enough working length for chosen style",
        "Appropriate electrical setup and exact manual; product wet/dry compatibility"
      ]
    },
    {
      "task_id": "T15",
      "goal": "Style short textured crop",
      "diy_level": "beginner",
      "hair_needs": "short; straight/wavy/curly; existing shape",
      "required_category_ids": [
        "paste"
      ],
      "optional_category_ids": [
        "comb",
        "dryer",
        "heat_protectant"
      ],
      "selection_and_feasibility": "Hold/finish preference; styling does not create taper",
      "source_ids": [
        "S01",
        "S13",
        "B04",
        "B02"
      ],
      "evidence_type": "source-informed editorial requirements and feasibility inference",
      "tutorial_ids": [
        "U01",
        "U06"
      ],
      "required_tools": [],
      "required_consumables": [
        "paste"
      ],
      "service_requirements": [],
      "optional_products_and_tools": [
        "comb",
        "dryer",
        "heat_protectant"
      ],
      "consultation_fallback": "Routine review or hands-on lesson if suitability, instructions or technique are uncertain",
      "non_sku_prerequisites": [
        "Exact label or tool instructions; suitable hair condition; enough working length for chosen style"
      ]
    },
    {
      "task_id": "T16",
      "goal": "Style existing pixie",
      "diy_level": "beginner",
      "hair_needs": "short; existing pixie; any supported texture",
      "required_category_ids": [
        "paste"
      ],
      "optional_category_ids": [
        "cream",
        "comb",
        "dryer",
        "heat_protectant"
      ],
      "selection_and_feasibility": "Choose one styler; new precision cut T22",
      "source_ids": [
        "S01",
        "B01",
        "B04"
      ],
      "evidence_type": "source-informed editorial requirements and feasibility inference",
      "tutorial_ids": [
        "U06"
      ],
      "required_tools": [],
      "required_consumables": [
        "paste"
      ],
      "service_requirements": [],
      "optional_products_and_tools": [
        "cream",
        "comb",
        "dryer",
        "heat_protectant"
      ],
      "consultation_fallback": "Routine review or hands-on lesson if suitability, instructions or technique are uncertain",
      "non_sku_prerequisites": [
        "Exact label or tool instructions; suitable hair condition; enough working length for chosen style"
      ]
    },
    {
      "task_id": "T17",
      "goal": "Low bun ponytail or half-up",
      "diy_level": "beginner",
      "hair_needs": "medium/long; all textures where length permits",
      "required_category_ids": [
        "comb",
        "ties_pins"
      ],
      "optional_category_ids": [
        "gel",
        "clips",
        "finish"
      ],
      "selection_and_feasibility": "Comfortable tension; complex event style lesson/pro",
      "source_ids": [
        "S20",
        "B01"
      ],
      "evidence_type": "source-informed editorial requirements and feasibility inference",
      "tutorial_ids": [],
      "required_tools": [
        "comb",
        "ties_pins"
      ],
      "required_consumables": [],
      "service_requirements": [],
      "optional_products_and_tools": [
        "gel",
        "clips",
        "finish"
      ],
      "consultation_fallback": "Routine review or hands-on lesson if suitability, instructions or technique are uncertain",
      "non_sku_prerequisites": [
        "Exact label or tool instructions; suitable hair condition; enough working length for chosen style"
      ]
    },
    {
      "task_id": "T18",
      "goal": "Simple braid",
      "diy_level": "intermediate",
      "hair_needs": "medium/long; all textures; enough length",
      "required_category_ids": [
        "comb",
        "ties_pins"
      ],
      "optional_category_ids": [
        "leave_in",
        "gel",
        "clips"
      ],
      "selection_and_feasibility": "Simple styling only; installed/protective extensions T30",
      "source_ids": [
        "S08",
        "S20"
      ],
      "evidence_type": "source-informed editorial requirements and feasibility inference",
      "tutorial_ids": [],
      "required_tools": [
        "comb",
        "ties_pins"
      ],
      "required_consumables": [],
      "service_requirements": [],
      "optional_products_and_tools": [
        "leave_in",
        "gel",
        "clips"
      ],
      "consultation_fallback": "Routine review or hands-on lesson if suitability, instructions or technique are uncertain",
      "non_sku_prerequisites": [
        "Exact label or tool instructions; suitable hair condition; enough working length for chosen style"
      ]
    },
    {
      "task_id": "T19",
      "goal": "Colour aftercare",
      "diy_level": "beginner",
      "hair_needs": "colour-treated; current shade/history known",
      "required_category_ids": [
        "cleanser",
        "conditioner"
      ],
      "optional_category_ids": [
        "mask",
        "repair",
        "heat_protectant",
        "pigmented_care"
      ],
      "selection_and_feasibility": "Pigmented products require verified shade compatibility",
      "source_ids": [
        "S03",
        "S14",
        "B08"
      ],
      "evidence_type": "source-informed editorial requirements and feasibility inference",
      "tutorial_ids": [],
      "required_tools": [],
      "required_consumables": [
        "cleanser",
        "conditioner"
      ],
      "service_requirements": [],
      "optional_products_and_tools": [
        "mask",
        "repair",
        "heat_protectant",
        "pigmented_care"
      ],
      "consultation_fallback": "Routine review or hands-on lesson if suitability, instructions or technique are uncertain",
      "non_sku_prerequisites": [
        "Exact label or tool instructions; suitable hair condition; enough working length for chosen style"
      ]
    },
    {
      "task_id": "T20",
      "goal": "Condition dry-feeling lengths",
      "diy_level": "beginner",
      "hair_needs": "dry; any texture; weight matched",
      "required_category_ids": [
        "conditioner"
      ],
      "optional_category_ids": [
        "mask",
        "leave_in",
        "finish"
      ],
      "selection_and_feasibility": "Cosmetic feel/manageability; no medical/growth claim",
      "source_ids": [
        "S14",
        "B05",
        "B07"
      ],
      "evidence_type": "source-informed editorial requirements and feasibility inference",
      "tutorial_ids": [
        "U05",
        "U09"
      ],
      "required_tools": [],
      "required_consumables": [
        "conditioner"
      ],
      "service_requirements": [],
      "optional_products_and_tools": [
        "mask",
        "leave_in",
        "finish"
      ],
      "consultation_fallback": "Routine review or hands-on lesson if suitability, instructions or technique are uncertain",
      "non_sku_prerequisites": [
        "Exact label or tool instructions; suitable hair condition; enough working length for chosen style"
      ]
    },
    {
      "task_id": "T21",
      "goal": "Consumer repair routine",
      "diy_level": "beginner",
      "hair_needs": "processed or damaged-feeling; exact product known",
      "required_category_ids": [
        "repair"
      ],
      "optional_category_ids": [
        "conditioner",
        "mask"
      ],
      "selection_and_feasibility": "Use one exact-version protocol; optional care must respect sequence",
      "source_ids": [
        "B09",
        "B10"
      ],
      "evidence_type": "source-informed editorial requirements and feasibility inference",
      "tutorial_ids": [
        "U07",
        "U08"
      ],
      "required_tools": [],
      "required_consumables": [
        "repair"
      ],
      "service_requirements": [],
      "optional_products_and_tools": [
        "conditioner",
        "mask"
      ],
      "consultation_fallback": "Routine review or hands-on lesson if suitability, instructions or technique are uncertain",
      "non_sku_prerequisites": [
        "Exact label or tool instructions; suitable hair condition; enough working length for chosen style"
      ]
    },
    {
      "task_id": "T22",
      "goal": "Create bob pixie or precision shape",
      "diy_level": "professional recommended",
      "hair_needs": "all textures; transformation",
      "required_category_ids": [
        "professional_service"
      ],
      "optional_category_ids": [],
      "selection_and_feasibility": "Cut assessment and plan; aftercare T09/T10/T16",
      "source_ids": [
        "S01",
        "S17"
      ],
      "evidence_type": "source-informed editorial requirements and feasibility inference",
      "tutorial_ids": [],
      "required_tools": [],
      "required_consumables": [],
      "service_requirements": [
        "professional_service"
      ],
      "optional_products_and_tools": [],
      "consultation_fallback": "Professional assessment before task",
      "non_sku_prerequisites": [
        "Exact label or tool instructions; suitable hair condition; enough working length for chosen style"
      ]
    },
    {
      "task_id": "T23",
      "goal": "Create layers shag or wolf cut",
      "diy_level": "professional recommended",
      "hair_needs": "all textures; transformation",
      "required_category_ids": [
        "professional_service"
      ],
      "optional_category_ids": [],
      "selection_and_feasibility": "Density/growth/shrinkage assessed; aftercare T11",
      "source_ids": [
        "S01",
        "S12",
        "S17"
      ],
      "evidence_type": "source-informed editorial requirements and feasibility inference",
      "tutorial_ids": [],
      "required_tools": [],
      "required_consumables": [],
      "service_requirements": [
        "professional_service"
      ],
      "optional_products_and_tools": [],
      "consultation_fallback": "Professional assessment before task",
      "non_sku_prerequisites": [
        "Exact label or tool instructions; suitable hair condition; enough working length for chosen style"
      ]
    },
    {
      "task_id": "T24",
      "goal": "Create or reshape fringe",
      "diy_level": "professional recommended",
      "hair_needs": "all textures; new fringe",
      "required_category_ids": [
        "professional_service"
      ],
      "optional_category_ids": [],
      "selection_and_feasibility": "Precision/growth pattern; styling T12",
      "source_ids": [
        "S01",
        "S15"
      ],
      "evidence_type": "source-informed editorial requirements and feasibility inference",
      "tutorial_ids": [],
      "required_tools": [],
      "required_consumables": [],
      "service_requirements": [
        "professional_service"
      ],
      "optional_products_and_tools": [],
      "consultation_fallback": "Professional assessment before task",
      "non_sku_prerequisites": [
        "Exact label or tool instructions; suitable hair condition; enough working length for chosen style"
      ]
    },
    {
      "task_id": "T25",
      "goal": "Uniform guarded clipper maintenance",
      "diy_level": "intermediate",
      "hair_needs": "short; suitable scalp; exact tool",
      "required_category_ids": [
        "clipper",
        "comb",
        "clipper_care"
      ],
      "optional_category_ids": [
        "clips"
      ],
      "selection_and_feasibility": "Two-mirror visibility also required; manufacturer manual; lesson",
      "source_ids": [
        "S13",
        "B03"
      ],
      "evidence_type": "source-informed editorial requirements and feasibility inference",
      "tutorial_ids": [
        "U02"
      ],
      "required_tools": [
        "clipper",
        "comb"
      ],
      "required_consumables": [
        "clipper_care"
      ],
      "service_requirements": [],
      "optional_products_and_tools": [
        "clips"
      ],
      "consultation_fallback": "Routine review or hands-on lesson if suitability, instructions or technique are uncertain",
      "non_sku_prerequisites": [
        "Exact label or tool instructions; suitable hair condition; enough working length for chosen style",
        "Large mirror plus handheld rear-view mirror; safe visibility and model-approved cleaning"
      ]
    },
    {
      "task_id": "T26",
      "goal": "Skin fade taper or curl reshaping",
      "diy_level": "professional recommended",
      "hair_needs": "short; precision or texture shaping",
      "required_category_ids": [
        "professional_service"
      ],
      "optional_category_ids": [],
      "selection_and_feasibility": "No inference of expertise from clipper possession",
      "source_ids": [
        "S01",
        "S13",
        "S23"
      ],
      "evidence_type": "source-informed editorial requirements and feasibility inference",
      "tutorial_ids": [],
      "required_tools": [],
      "required_consumables": [],
      "service_requirements": [
        "professional_service"
      ],
      "optional_products_and_tools": [],
      "consultation_fallback": "Professional assessment before task",
      "non_sku_prerequisites": [
        "Exact label or tool instructions; suitable hair condition; enough working length for chosen style"
      ]
    },
    {
      "task_id": "T27",
      "goal": "Temporary no-lift colour or root camouflage",
      "diy_level": "intermediate",
      "hair_needs": "shade/history/label suitability verified",
      "required_category_ids": [
        "temporary_colour"
      ],
      "optional_category_ids": [
        "comb",
        "clips"
      ],
      "selection_and_feasibility": "Exact consumer label only; no developer substitution; unsure -> consult",
      "source_ids": [
        "A01"
      ],
      "evidence_type": "source-informed editorial requirements and feasibility inference",
      "tutorial_ids": [],
      "required_tools": [],
      "required_consumables": [
        "temporary_colour"
      ],
      "service_requirements": [],
      "optional_products_and_tools": [
        "comb",
        "clips"
      ],
      "consultation_fallback": "Routine review or hands-on lesson if suitability, instructions or technique are uncertain",
      "non_sku_prerequisites": [
        "Exact label or tool instructions; suitable hair condition; enough working length for chosen style",
        "Exact consumer label screening and protective supplies specified by that label; previous reaction -> no recommendation"
      ]
    },
    {
      "task_id": "T28",
      "goal": "Bleach balayage highlights or colour correction",
      "diy_level": "professional recommended",
      "hair_needs": "all textures; chemical transformation",
      "required_category_ids": [
        "professional_service"
      ],
      "optional_category_ids": [],
      "selection_and_feasibility": "Consultation/quote; aftercare categories only; no chemical recipe",
      "source_ids": [
        "S03",
        "S05",
        "S19",
        "A01"
      ],
      "evidence_type": "source-informed editorial requirements and feasibility inference",
      "tutorial_ids": [],
      "required_tools": [],
      "required_consumables": [],
      "service_requirements": [
        "professional_service"
      ],
      "optional_products_and_tools": [],
      "consultation_fallback": "Professional assessment before task",
      "non_sku_prerequisites": [
        "Exact label or tool instructions; suitable hair condition; enough working length for chosen style"
      ]
    },
    {
      "task_id": "T29",
      "goal": "Perm relaxer or chemical smoothing",
      "diy_level": "professional recommended",
      "hair_needs": "texture alteration; compatibility unknown until assessed",
      "required_category_ids": [
        "professional_service"
      ],
      "optional_category_ids": [],
      "selection_and_feasibility": "Separate from heat styling and conditioning; no procedural chemical tutorial",
      "source_ids": [
        "S06",
        "S09",
        "S19"
      ],
      "evidence_type": "source-informed editorial requirements and feasibility inference",
      "tutorial_ids": [],
      "required_tools": [],
      "required_consumables": [],
      "service_requirements": [
        "professional_service"
      ],
      "optional_products_and_tools": [],
      "consultation_fallback": "Professional assessment before task",
      "non_sku_prerequisites": [
        "Exact label or tool instructions; suitable hair condition; enough working length for chosen style"
      ]
    },
    {
      "task_id": "T30",
      "goal": "Installed extensions braids or loc transformation",
      "diy_level": "professional recommended",
      "hair_needs": "attachment/weight/texture/condition assessment",
      "required_category_ids": [
        "professional_service"
      ],
      "optional_category_ids": [],
      "selection_and_feasibility": "Installed systems and specialist protective work; maintenance tailored",
      "source_ids": [
        "S08",
        "S15",
        "S24"
      ],
      "evidence_type": "source-informed editorial requirements and feasibility inference",
      "tutorial_ids": [],
      "required_tools": [],
      "required_consumables": [],
      "service_requirements": [
        "professional_service"
      ],
      "optional_products_and_tools": [],
      "consultation_fallback": "Professional assessment before task",
      "non_sku_prerequisites": [
        "Exact label or tool instructions; suitable hair condition; enough working length for chosen style"
      ]
    },
    {
      "task_id": "T31",
      "goal": "Removable clip-ins or wig styling",
      "diy_level": "intermediate",
      "hair_needs": "sufficient support/fit; suitable hair/scalp",
      "required_category_ids": [
        "clip_ins",
        "comb"
      ],
      "optional_category_ids": [
        "brush",
        "clips"
      ],
      "selection_and_feasibility": "Attachment instructions and compatibility; lesson if uncertain",
      "source_ids": [
        "S20"
      ],
      "evidence_type": "source-informed editorial requirements and feasibility inference",
      "tutorial_ids": [],
      "required_tools": [
        "clip_ins",
        "comb"
      ],
      "required_consumables": [],
      "service_requirements": [],
      "optional_products_and_tools": [
        "brush",
        "clips"
      ],
      "consultation_fallback": "Routine review or hands-on lesson if suitability, instructions or technique are uncertain",
      "non_sku_prerequisites": [
        "Exact label or tool instructions; suitable hair condition; enough working length for chosen style"
      ]
    },
    {
      "task_id": "T32",
      "goal": "Temporary silk press or coily stretching",
      "diy_level": "intermediate",
      "hair_needs": "curly/coily; condition and heat history known",
      "required_category_ids": [
        "dryer",
        "brush",
        "heat_protectant",
        "comb"
      ],
      "optional_category_ids": [
        "iron",
        "clips",
        "finish"
      ],
      "selection_and_feasibility": "First-time/fragile/uncertain -> professional; no universal heat setting",
      "source_ids": [
        "S09",
        "B02",
        "B08"
      ],
      "evidence_type": "source-informed editorial requirements and feasibility inference",
      "tutorial_ids": [
        "U01"
      ],
      "required_tools": [
        "dryer",
        "brush",
        "comb"
      ],
      "required_consumables": [
        "heat_protectant"
      ],
      "service_requirements": [],
      "optional_products_and_tools": [
        "iron",
        "clips",
        "finish"
      ],
      "consultation_fallback": "Routine review or hands-on lesson if suitability, instructions or technique are uncertain",
      "non_sku_prerequisites": [
        "Exact label or tool instructions; suitable hair condition; enough working length for chosen style",
        "Appropriate electrical setup and exact manual; product wet/dry compatibility"
      ]
    },
    {
      "task_id": "T33",
      "goal": "Scalp cleansing routine",
      "diy_level": "beginner",
      "hair_needs": "cosmetic cleansing only; no painful/inflamed skin or sudden loss",
      "required_category_ids": [
        "cleanser"
      ],
      "optional_category_ids": [
        "comb"
      ],
      "selection_and_feasibility": "Clinical symptoms exit cosmetic quiz; no diagnosis/head-spa efficacy claim",
      "source_ids": [
        "S05",
        "A02"
      ],
      "evidence_type": "source-informed editorial requirements and feasibility inference",
      "tutorial_ids": [],
      "required_tools": [],
      "required_consumables": [
        "cleanser"
      ],
      "service_requirements": [],
      "optional_products_and_tools": [
        "comb"
      ],
      "consultation_fallback": "Routine review or hands-on lesson if suitability, instructions or technique are uncertain",
      "non_sku_prerequisites": [
        "Exact label or tool instructions; suitable hair condition; enough working length for chosen style"
      ]
    }
  ],
  "tutorials": [
    {
      "tutorial_id": "U01",
      "title": "Dyson Canada styling guides",
      "url": "https://www.dysoncanada.ca/en/hair-care/styling-guide",
      "compatibility": "styling; consumer; exact model/attachments",
      "source_id": "B02",
      "reviewed_on": "2026-10-13",
      "inspection": "official page/library text; not every embedded video played",
      "reuse": "link to source; no licence inferred"
    },
    {
      "tutorial_id": "U02",
      "title": "Wahl Haircuts 101",
      "url": "https://wahlusa.com/how-to/haircutting/haircuts-101",
      "compatibility": "consumer clipper maintenance; exact tool manual required",
      "source_id": "B03",
      "reviewed_on": "2026-10-13",
      "inspection": "official page/library text; not every embedded video played",
      "reuse": "link to source; no licence inferred"
    },
    {
      "tutorial_id": "U03",
      "title": "LUS texture tutorials",
      "url": "https://loveurcurls.ca/pages/lus-how-to-videos",
      "compatibility": "wavy/curly/kinky-coily/refresh; exact formula",
      "source_id": "B11",
      "reviewed_on": "2026-10-13",
      "inspection": "official page/library text; not every embedded video played",
      "reuse": "link to source; no licence inferred"
    },
    {
      "tutorial_id": "U04",
      "title": "Ouidad gel instructions",
      "url": "https://www.ouidad.com/products/advanced-climate-control-heat-and-humidity-gel",
      "compatibility": "exact gel; damp application; air dry or compatible diffuser",
      "source_id": "B06",
      "reviewed_on": "2026-10-13",
      "inspection": "official page/library text; not every embedded video played",
      "reuse": "link to source; no licence inferred"
    },
    {
      "tutorial_id": "U05",
      "title": "PATTERN cream instructions",
      "url": "https://patternbeauty.com/products/styling-cream",
      "compatibility": "exact cream; twists/braid-outs; rich formula",
      "source_id": "B05",
      "reviewed_on": "2026-10-13",
      "inspection": "official page/library text; not every embedded video played",
      "reuse": "link to source; no licence inferred"
    },
    {
      "tutorial_id": "U06",
      "title": "American Crew Fiber instructions",
      "url": "https://www.americancrew.com/products/fiber",
      "compatibility": "exact styler; damp or dry; matte hold",
      "source_id": "B04",
      "reviewed_on": "2026-10-13",
      "inspection": "official page/library text; not every embedded video played",
      "reuse": "link to source; no licence inferred"
    },
    {
      "tutorial_id": "U07",
      "title": "K18 consumer mask directions",
      "url": "https://www.k18hair.com/products/leave-in-molecular-repair-hair-mask-50-ml",
      "compatibility": "exact consumer mask; four-minute leave-in sequence",
      "source_id": "B09",
      "reviewed_on": "2026-10-13",
      "inspection": "official page/library text; not every embedded video played",
      "reuse": "link to source; no licence inferred"
    },
    {
      "tutorial_id": "U08",
      "title": "OLAPLEX current No.3PLUS guide",
      "url": "https://olaplex.com/blogs/news/your-guide-to-olaplex-no-3",
      "compatibility": "No.3PLUS only; not legacy No.3",
      "source_id": "B10",
      "reviewed_on": "2026-10-13",
      "inspection": "official page/library text; not every embedded video played",
      "reuse": "link to source; no licence inferred"
    },
    {
      "tutorial_id": "U09",
      "title": "Moroccanoil Light directions",
      "url": "https://www.moroccanoil.com/products/Moroccanoil-Treatment-Light",
      "compatibility": "exact version; finishing mids/ends",
      "source_id": "B07",
      "reviewed_on": "2026-10-13",
      "inspection": "official page/library text; not every embedded video played",
      "reuse": "link to source; no licence inferred"
    },
    {
      "tutorial_id": "U10",
      "title": "Living Proof foam directions",
      "url": "https://www.livingproof.com/products/full-texturizing-foam",
      "compatibility": "exact foam; volume/texture",
      "source_id": "B13",
      "reviewed_on": "2026-10-13",
      "inspection": "official page/library text; not every embedded video played",
      "reuse": "link to source; no licence inferred"
    }
  ],
  "supplier_mapping_template": {
    "mapping_id": null,
    "requirement_category_id": null,
    "task_ids": [],
    "supplier_name": null,
    "supplier_url": null,
    "supplier_sku": null,
    "variant_id": null,
    "brand": null,
    "product_name": null,
    "formulation_version": null,
    "category": null,
    "consumer_or_professional_scope": null,
    "compatibility": {
      "textures": [],
      "lengths": [],
      "strand_thickness": [],
      "density": [],
      "treatment_history": [],
      "tool_models": [],
      "hold": null,
      "finish": null,
      "weight": null,
      "allergen_fragrance_notes": null,
      "exclusions": []
    },
    "instructions_url": null,
    "label_evidence_url": null,
    "instructions_checked_at": null,
    "canadian_shipping": {
      "verified": null,
      "regions": [],
      "evidence_url": null,
      "checked_at": null,
      "dispatch_origin": null,
      "duties_taxes": null,
      "restrictions": null
    },
    "price": {
      "amount_minor_units": null,
      "currency": "CAD",
      "checked_at": null,
      "evidence_url": null
    },
    "stock": {
      "quantity": null,
      "state": "unknown",
      "checked_at": null,
      "evidence_url": null,
      "freshness_policy": null
    },
    "image": {
      "url": null,
      "rights_status": "unverified",
      "permission_evidence": null
    },
    "resale_authorization_evidence": null,
    "verification_status": "unverified",
    "verified_by": null,
    "verified_at": null,
    "notes": null
  },
  "supplier_mappings": [],
  "verification_states": [
    "unverified",
    "verified",
    "incompatible",
    "needs consultation",
    "unavailable",
    "stale"
  ],
  "required_external_prerequisites": [
    "Actual seller websites and catalogue permission",
    "Exact Canadian SKU/version and label",
    "CAD price/stock freshness agreement",
    "Consumer-use scope and compatibility",
    "Canadian shipping fulfilment returns and image rights",
    "Actual GTA staff skills travel area appointment fees and policy"
  ],
  "source_register_file": "source-register.md",
  "rating_definition": "Editorial feasibility inference, not a manufacturer certification or promise of outcomes"
}
