# AI review guidelines

<!-- Role: the guiding principles a review pass follows when it proposes a change. Shown on
     /review?tab=guide, and carried to a pass in its packet. The PRECEDENTS (what was decided,
     case by case) are not here: they are generated from the decisions and notes into the
     register (PRECEDENTS.md, the guide tab) and a pass reads them from the packet.

     The shape is fixed and the page depends on it: one `## Headline` per guideline, then a short
     body. No version line, no dates, no session names, no "who decided". Why a rule exists and
     what it cost live in REVIEW-PROCESS.md; this file is what to DO. Add a guideline when an
     answer sets a precedent; change one when a later answer overrules it. -->

## List every kind you can see before you propose, and say which have no precedent

The first thing a pass writes is the survey: every kind of difference between rows that would
otherwise group, with two examples each, and whether the register holds a precedent for it. A new
kind is critical by construction and cannot be bulk-approved. The survey rules on nothing. It makes
sure a question is asked once, loudly, before a bulk button exists to hide it.

## Never assume the unmarked member of a set is the parent; ask which it is

Where some sibling names carry a word and one does not, the one without is not the parent by
default: it may be the default member (the women's scent beside a "for men", a "Classic" beside
named siblings, a no-age whisky beside aged siblings). List the marked and the unmarked and ask.
What the answer is belongs to the person at the review, never to this list.

## Every proposal names the kind of judgement it is

A register slug on every row, `sets` on the one lead that sets a new kind, `follows` on the rest.
The precedents themselves are generated from the answers and the notes (`PRECEDENTS.md`, the guide
tab); this list holds only how to behave, and changes by a commit with a reason, never by a pass.

## Say "product line" and "product variant" in full, every time

Never a bare "line", "variant" or "product", in a reason, a label, a heading or a sentence a person
reads. The short form costs a reader a second every time and sometimes a wrong turn: *"folds
straight into a line of the same name"* read as a row in a table rather than a product line, and the
sentence had to be read twice. The words are long on purpose, because they are the two things this
whole catalogue keeps apart: a product line is the thing a shopper searches for, and a product
variant is what a barcode names.

The same goes for anything built out of them. "The product line's product variants", not "its
variants". Held by a `main/tests/` gate over the review's own wording.

## A reason says why, in one or two plain sentences

Not what will happen, and never a reference to a document or a decision number. A person reading it
should be able to agree or disagree without opening anything else.

Good: *"These are the same brand. Paco Rabanne changed its name to Rabanne in 2023."*
Good: *"This is a set holding items from several product lines. The precedent is that those get
their own product line, because one product variant cannot sit under several product lines."*
Good, where nothing is settled yet: *"This is a set holding items from several product lines. There
is no precedent for this yet. I would make it its own product line, because otherwise one product variant
would have to sit under several."*

Bad: anything citing a section number, a pass name or a date. Bad: restating the mechanics, like
"moves with its product line under the header above". A reason is an argument, not a changelog.

## Never propose a value the shop's own text does not contain

Every proposed value quotes the words it was read from, exactly, with the field and the position.
Where the text does not say it, propose nothing: an empty field beats a guessed one, and a guess
that reads well is the hardest kind to catch later.

## Say which case you are looking at, and cite it

A proposal carries one line of reasoning a person can check without opening the data. When a
judgement turns on a distinction, name the distinction and quote the words that put this case on
one side of it.

## Rate attention by the consequence, not by how sure you are

Confidence measures the reading; attention measures what the answer does. A question that sets a
precedent or makes a new kind of thing is **critical**, however sure the pass is, and it stops being
critical once that precedent exists. A change that is genuinely arguable either way, or that
rewrites attributes across many product variants, is **high**. Something probably right is **medium**,
something with barely a decision in it is **low**, and something with nothing to decide is **none**,
listed only so a person can mark it seen.

## Confidence is honest, or it is empty

Confidence says how surely the words mean the value. Anything that would be a guess is left empty
rather than given a low number, because a low number still reads as a measurement. Below 0.7 is
what a person reads by hand.

## The programmatic stage errs toward separate; every join is proposed

A rule may split. It may not join. Two brands, two product lines or two product variants that look alike
stay apart until a person says otherwise, so a wrong join never arrives silently. This is why the
catalogue holds duplicates before a review, and why that is the correct starting state.

## The brand question is answered before anything under it

Every other suggestion on a brand assumes the brands as they stand. So a brand fold is proposed on
both brands it names, and nothing else on either is decided until it is answered.

## A rename with no shared words is the pass's job, not a rule's

No key, fold or string distance joins a house that changed its name. Bringing those is the clearest
reason the pass exists. The evidence is the reasoning, said plainly, rather than an invented
citation.

## A containment overlap is a candidate, never a conclusion

One brand's name appearing inside another's does not make them one row: a shopper tells a founder's
product line from a diffusion product line. Raise it, give a reason beyond the containment itself, and where there
is none, leave them apart and say so.

## A brand's display name is what the brand itself would use

Not whichever spelling is currently most common: that changes with the next collection, and a name
that moves when a shop adds stock is a tally, not a name. Where nothing is set, propose one. Where
a person set one, propose against it rather than over it.

## Concentrations, shades and flavours are attributes, not separate product lines

One product line holds its Eau de Toilette, its Elixir and its Parfum; one product line holds every
shade of a lipstick. They are told apart by an attribute so a shopper compares them on one page.

## One product line per age, and a finish sits inside it

An aged spirit's age names its product line. A cask or finish edition of that age is a member of it, told
apart by an attribute. Whether a finish the brand markets as its own range is still a member is open
and raised per case.

## A set, a kit, a refill: which case it is decides where it goes

Nothing is decided here in advance, and the pass raises each one. Two distinctions do the work.
A refill that fits exactly one product line is a member of it; a refill sold across a range belongs
to none. A set naming one product line is that product line at another size; a coffret spanning several is
its own thing. Where the words do not say which, propose nothing and ask.

## A person's answer is never overwritten, and a note is read before proposing again

A suggestion that contradicts a decision is shown as a disagreement and never applied. A question
deferred with a note is re-proposed only by a pass that has read the note and answers it.

## A confirmed listing is not reviewed again unless its words change

A price moving is never a reason to re-ask. What was settled stays settled until the shop writes
something different.

## Prefer an existing product line to a new one

Adopting the product line the catalogue already holds keeps its address, its history and anything decided
about it. Mint a new one only when no existing product line fits.
