Brand Lock

The Brand Lock is the single source of truth for every requested graphic. Create it after intake and asset analysis, before paid generation.

It is not a new brand strategy document. It records supplied context, measured rules, and the minimum proposed visual decisions needed for this job.

Lock states

Mark each field as one of:

Also attach an evidence label from asset-analysis.md: source-declared, measured, visually-observed, or inferred.

Canonical shape

Use this structure internally. Keep it compact enough to copy relevant blocks verbatim into generation prompts.

{
  "version": 1,
  "brand_context": {
    "name": "",
    "offering": "",
    "industry": "",
    "positioning": "",
    "audience": "",
    "tone": []
  },
  "concept": {
    "name": "",
    "visual_premise": "",
    "research_principles": [],
    "reference_preferences": [],
    "avoid": []
  },
  "visual_axes": {
    "restrained_expressive": 50,
    "geometric_organic": 50,
    "familiar_experimental": 50
  },
  "authoritative_assets": {
    "logo": {
      "origin": "user_supplied | brandkit_generated",
      "source": "",
      "upload_or_job_id": "",
      "variants": {
        "color": "",
        "black": "",
        "white": ""
      },
      "status": "fixed"
    },
    "fonts": [],
    "references": []
  },
  "palette": {
    "origin": "user_supplied | brandkit_generated",
    "primary": [],
    "accent": [],
    "neutral": [],
    "semantic_roles": {},
    "forbidden": []
  },
  "typography": {
    "origin": "user_supplied | brandkit_generated",
    "display": {},
    "body": {},
    "fallbacks": [],
    "font_links": [],
    "specimen_svg": ""
  },
  "layout": {
    "grid": "",
    "margins": "",
    "spacing_scale": [],
    "alignment": "",
    "density": ""
  },
  "shape_language": {
    "corner_radii": [],
    "borders": [],
    "shadows": [],
    "forms": []
  },
  "graphic_devices": {
    "motifs": [],
    "patterns": [],
    "textures": [],
    "rules": []
  },
  "composition": {
    "hierarchy": "",
    "logo_placement": [],
    "image_behavior": "",
    "text_behavior": ""
  },
  "applications": {},
  "unknowns": []
}

For each exact token, retain its state, evidence, and source when ambiguity exists. Do not bloat every obvious field with metadata.

Required minimum

Before paid generation, the lock must contain the fields that the requested output actually uses:

If a missing value would materially affect a paid generation, ask once. If it only affects a reversible layout detail, make a proposed decision.

Prompt lock block

For every image-model call, include one compact block:

[BRAND LOCK — DO NOT DEVIATE]
Brand spelling: <exact>
Authoritative logo: <reference index/id and preservation instruction>
Palette: <exact hex + role>
Typography: <exact font/style when rendered>
Layout: <grid/alignment/spacing>
Shape language: <radius/border/forms>
Graphic device: <motif/pattern rule>
Must preserve: <fixed invariants>
Never: <forbidden treatments>

Repeat the block verbatim across related assets. Change only the asset-specific content, dimensions, and composition section.

Reference discipline

Per-format overrides

Store format differences under applications, not by changing core tokens. Examples:

An override must name its format and cannot contradict a fixed core rule.

Project-local approval persistence

The working Brand Lock may contain draft concept language, but final approvals live only in the local "$BRANDKIT_STATE" file.

When the user revises one rule:

  1. Save only the revised approved slot through the Brandkit state script.
  2. Keep every unrelated approved slot unchanged.
  3. Respect the returned list of invalidated downstream elements.
  4. Identify actual dependents from their required_slots.
  5. Regenerate/recompose only affected outputs and request approval again.