Source: https://guthlabs.ai/docs/instruments/complementary-analogous-triadic-color-scheme-generator/implementation/

instrument implementation / implementation-contract

# Complementary / Analogous / Triadic Color Scheme Generator implementation

A source-bound implementation contract for Complementary / Analogous / Triadic Color Scheme Generator; deployment and executable qualification remain separate.

Status: **VERIFIED_CLEAN**Lifecycle: **implementation-contract**

## Binding contract

This record describes what an executable surface must bind and validate. It does not claim that a public calculator, package, or production route is deployed.

**Record owner**: Guth Instruments

**Lifecycle**: verified-clean

**Evidence ID**: t5-045

**Effect**: Computation or source lookup only

## Input and validation requirements

- Hue input outside [0°,360°) must be normalized modulo 360°; negative modulo behavior must be defined explicitly.

- Hex parsing must define accepted forms, including #RGB, #RGBA, #RRGGBB, and alpha handling.

- Malformed hex strings, invalid HSL ranges, and missing components require validation errors.

- The generator must define how HSL colors are converted to RGB/hex, including rounding and color space assumptions.

- Zero saturation makes hue rotations visually identical; this is valid but may produce duplicate swatches.

- No division-by-zero occurs in the hue-rotation arithmetic itself, but color-conversion code must guard against degenerate chroma/lightness cases.

- The input label 'base color (hex/HSL)' is ambiguous unless the schema distinguishes the two formats and states whether HSL hue is degrees.

- A hex input does not uniquely specify a palette unless the conversion color space and preservation of saturation/lightness are specified.

## Required corrections

No binding erratum is attached to this unique-name record. Implementers must still preserve the declared units, domain, and failure behavior.

## Inspectable interface fixture

The sample below is evidence for interface and validation tests, not a production implementation.

````
{
  "inputs": {
    "base_color": {
      "format": "HSL",
      "hue_degrees": 0,
      "saturation_percent": 100,
      "lightness_percent": 40
    }
  },
  "expected_outputs": {
    "base": {
      "hsl": "hsl(0, 100%, 40%)",
      "hex": "#CC0000"
    },
    "complementary": [
      {
        "hue_degrees": 180,
        "hsl": "hsl(180, 100%, 40%)",
        "hex": "#00CCCC"
      }
    ],
    "triadic": [
      {
        "hue_degrees": 120,
        "hsl": "hsl(120, 100%, 40%)",
        "hex": "#00CC00"
      },
      {
        "hue_degrees": 240,
        "hsl": "hsl(240, 100%, 40%)",
        "hex": "#6600CC"
      }
    ],
    "analogous": [
      {
        "hue_degrees": 330,
        "hsl": "hsl(330, 100%, 40%)",
        "hex": "#CC0066"
      },
      {
        "hue_degrees": 30,
        "hsl": "hsl(30, 100%, 40%)",
        "hex": "#CC6600"
      }
    ],
    "split_complementary": [
      {
        "hue_degrees": 150,
        "hsl": "hsl(150, 100%, 40%)",
        "hex": "#00CC66"
      },
      {
        "hue_degrees": 210,
        "hsl": "hsl(210, 100%, 40%)",
        "hex": "#0066CC"
      }
    ]
  },
  "working": "Start with H=0°. Complementary: 0°+180°=180°. Triadic: 0°+120°=120° and 0°+240°=240°. Analogous: 0°-30°=-30°; normalize -30°+360°=330°, and 0°+30°=30°. Split-complementary: 0°+150°=150° and 0°+210°=210°. With S=100% and L=40%, chroma C=0.8, so the active channel is 0.8×255=204=CC and the inactive channel is 0; applying each hue sector gives #CC0000, #00CCCC, #00CC00, #6600CC, #CC0066, #CC6600, #00CC66, and #0066CC."
}
````

## Other records

[01**Overview**](<https://guthlabs.ai/docs/instruments/complementary-analogous-triadic-color-scheme-generator/>)[02**Mechanism**](<https://guthlabs.ai/docs/instruments/complementary-analogous-triadic-color-scheme-generator/mechanism/>)[04**Qualification**](<https://guthlabs.ai/docs/instruments/complementary-analogous-triadic-color-scheme-generator/qualification/>)

## Sources and evidence

These pointers bind the page to evidence. They do not grant authority or collapse verification into deployment.

- `VERIFIED_LEDGER.json`

- `evidence-tranche5/tranche5-results.json`
