1 What we extract, and why
Two different kinds of information live in every brand document, and they need to be treated differently from the first pass — not just visually, but in what "done" means for each.
Logo files & usage rules, hex codes, font names
Have one correct answer. Worth extracting because they can be validated against the source and, later, machine-checked at generation time.
Tone, personality, example messaging
No single correct answer. Worth extracting anyway because copy generation needs a starting point — but it must stay visibly editable, never presented as "detected fact."
Do's/don'ts, conditional logo-by-background logic
The part most extraction demos skip. These are what a compliance-review step actually checks against later — so they're extracted as if/then logic, not prose.
Concretely, from the ZestyZing doc: logo lockups, clear-space and minimum-size rules, a six-color palette, two typefaces with usage rules, personality & tone attributes, four sample taglines, a photography brief, and digital-ad hierarchy rules. All fourteen-plus fields the working prototype surfaces map directly onto fields a creative-generation or review system would need to consume — nothing was added just to look thorough.
2 Where a human has to step in, and why
Every extracted field gets a confidence tier — High, Medium, or Low, never a raw percentage, since false precision is worse than an honest "we're not sure." High-confidence fields stay collapsed and pre-approved so the review doesn't feel like homework. Three moments in this document specifically demand a human call:
- A factual conflict. The palette section lists two different hex values for "Electric Teal" and "Zing Yellow" in the same page — one in the swatch legend, one in an earlier duplicate text block. Neither is obviously wrong from internal evidence alone, so the flow shows both candidates and asks which is correct, rather than silently trusting either.
- A subjective contradiction. The intro says the brand should be "bold without becoming chaotic"; the voice section lists "slightly chaotic" as a core tone attribute two pages later. This isn't a data error to fix — it's a real tension the document's authors left unresolved, and averaging it algorithmically would invent a position nobody actually holds.
- A rule with a gap. The logo-by-background rule is stated for two colors and shown (not stated) for three more in an example grid — but the sixth brand color, Leaf Green, has no worked example anywhere. Rather than silently guessing, the gap is named specifically so it can't quietly become a wrong default.
The common thread: this brand becomes an input to automated ad-creative generation and compliance review downstream. A wrong silent guess here doesn't just look sloppy in one screen — it mis-renders every ad generated against it afterward. That asymmetry is why confirmation is mandatory, not optional, before anything ships.
3 Handling ambiguity & contradiction
Data conflicts and subjective contradictions get deliberately different UI, because they're different problems:
"Use the swatch values — Teal #48D0CF, Yellow #F4C84A (recommended)" / "Use the duplicate-text values" / "Flag for the brand team — don't guess"Resolution options offered for the hex-code conflict — a pick-the-right-answer pattern
"Bold, not chaotic wins" / "Slightly chaotic wins" / "Write our own reconciliation"Resolution options offered for the tone contradiction — a pick-the-governing-read pattern, including a free-text escape hatch
Every flagged item quotes its source verbatim with a page number, so resolving a flag means verifying one specific claim in seconds — not re-reading the whole document. And every flag ships with a pre-selected, reasoned default, so the common case is one click, not a blank decision.
4 Assumptions & scope cuts
What's deliberately thin, and why that's the right call for this exercise: