pipeline: consolidate content rules into EDITORIAL.md — the charter is now the source of truth; CLAUDE.md/TEAM.md/skills point to it
This commit is contained in:
@@ -46,7 +46,7 @@ A bundle must contain **at least 2 items that have a hero image** (`hero.<ext>`
|
|||||||
|
|
||||||
Re-use is allowed — a find can appear in multiple bundles under different themes. But by default, prefer surfacing **unbundled** finds first; only reach for re-uses when the theme genuinely calls for them.
|
Re-use is allowed — a find can appear in multiple bundles under different themes. But by default, prefer surfacing **unbundled** finds first; only reach for re-uses when the theme genuinely calls for them.
|
||||||
|
|
||||||
**Ineligible: tobacco- and alcohol-related finds.** The site no longer promotes either; a few legacy finds (wine, whisky, cocktail, bar items) predate the rule and stay published, but they must never be selected into a new bundle — not as expansion, not in the weekly catch, not even if the user's seed theme seems to invite them (flag it instead). Don't count them as "unbundled finds awaiting a home."
|
**Ineligible: tobacco- and alcohol-related finds.** The site no longer promotes either; a few legacy finds (wine, whisky, cocktail, bar items) predate the rule and stay published, but they must never be selected into a new bundle — not as expansion, not in the weekly catch, not even if the user's seed theme seems to invite them (flag it instead). Don't count them as "unbundled finds awaiting a home." (Restates `EDITORIAL.md` "Content rules" — the charter is the source of truth.)
|
||||||
|
|
||||||
### 2. Confirm the cluster
|
### 2. Confirm the cluster
|
||||||
|
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ Parse frontmatter. Note: `name`, `subtitle`, `link`, `linkText`, `amazonLink`, `
|
|||||||
|
|
||||||
If `promotedTo` is already set, abort: "This find has already been promoted to <slug>."
|
If `promotedTo` is already set, abort: "This find has already been promoted to <slug>."
|
||||||
|
|
||||||
If the find is tobacco- or alcohol-related (wine, whisky, cocktail, bar, smoking items — a few legacy finds predate the exclusion), abort: the site no longer promotes either, so these never graduate to reviews, even on explicit slug argument — explain why instead.
|
If the find is tobacco- or alcohol-related (wine, whisky, cocktail, bar, smoking items — a few legacy finds predate the exclusion), abort: the site no longer promotes either, so these never graduate to reviews, even on explicit slug argument — explain why instead. (Restates `EDITORIAL.md` "Content rules" — the charter is the source of truth.)
|
||||||
|
|
||||||
### 2. Pick a hero asset
|
### 2. Pick a hero asset
|
||||||
|
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ Aim for 4-7 clusters. Each cluster should:
|
|||||||
|
|
||||||
If a cluster can't meet the hero floor, **hold it back** rather than pad it with misfits or write it thin — record it as deferred (theme + items + which lack heroes) and revisit when enough hero-bearing finds emerge.
|
If a cluster can't meet the hero floor, **hold it back** rather than pad it with misfits or write it thin — record it as deferred (theme + items + which lack heroes) and revisit when enough hero-bearing finds emerge.
|
||||||
|
|
||||||
**Ineligible: tobacco- and alcohol-related finds.** Legacy finds of this kind (wine, whisky, cocktail, bar items) stay published but must never be clustered into a new bundle. Exclude them from the pool up front and list them as "ineligible (alcohol/tobacco)" rather than uncovered.
|
**Ineligible: tobacco- and alcohol-related finds.** Legacy finds of this kind (wine, whisky, cocktail, bar items) stay published but must never be clustered into a new bundle. Exclude them from the pool up front and list them as "ineligible (alcohol/tobacco)" rather than uncovered. (Restates `EDITORIAL.md` "Content rules" — the charter is the source of truth.)
|
||||||
|
|
||||||
Coverage check: after partitioning, every find should appear in at least one cluster (existing or new). If a find genuinely fits no theme, leave it uncovered and report it — don't pad a cluster with a misfit. Finds left homeless only because their cluster was deferred for the hero floor count as covered-pending — list them under the deferred cluster, not as uncovered.
|
Coverage check: after partitioning, every find should appear in at least one cluster (existing or new). If a find genuinely fits no theme, leave it uncovered and report it — don't pad a cluster with a misfit. Finds left homeless only because their cluster was deferred for the hero floor count as covered-pending — list them under the deferred cluster, not as uncovered.
|
||||||
|
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ Invoke from inside the `unique.rzen.dev` repo.
|
|||||||
|
|
||||||
A find qualifies if and only if it is **(a)** delightful, unusual, or distinctive in a way the audience would care about *and* **(b)** usable daily (relax to "memorable for a visitor" for travel). Drop generic mass-market items, ad-copy listicles, speculative / not-yet-shipping products, self-promo, and anything not traceable to a real currently-buyable / currently-visitable thing.
|
A find qualifies if and only if it is **(a)** delightful, unusual, or distinctive in a way the audience would care about *and* **(b)** usable daily (relax to "memorable for a visitor" for travel). Drop generic mass-market items, ad-copy listicles, speculative / not-yet-shipping products, self-promo, and anything not traceable to a real currently-buyable / currently-visitable thing.
|
||||||
|
|
||||||
**Hard exclusion — no tobacco or alcohol.** The site does not promote either in any form. Drop any item whose point is consuming, preparing, serving, storing, or celebrating alcohol or tobacco: spirits, wine, beer, cocktail kits, barware, decanters, wine openers, home-bar and whisky gear; cigars, pipes, vapes, ashtrays, smoking accessories. This is categorical — no exception for beautiful design, craftsmanship, or gift appeal, and it overrides every other signal. Borderline cases (dual-use glassware, non-alcoholic "spirits", brewery-adjacent merch) get skipped too: when in doubt, skip.
|
**Hard exclusion — no tobacco or alcohol.** The site does not promote either in any form. Drop any item whose point is consuming, preparing, serving, storing, or celebrating alcohol or tobacco: spirits, wine, beer, cocktail kits, barware, decanters, wine openers, home-bar and whisky gear; cigars, pipes, vapes, ashtrays, smoking accessories. This is categorical — no exception for beautiful design, craftsmanship, or gift appeal, and it overrides every other signal. Borderline cases (dual-use glassware, non-alcoholic "spirits", brewery-adjacent merch) get skipped too: when in doubt, skip. (Restates `EDITORIAL.md` "Content rules" — the charter is the source of truth.)
|
||||||
|
|
||||||
Crucially: do **not** filter by "is it the best of the day." Capture broadly. Selection happens in the shortlist step, and editorial treatment later.
|
Crucially: do **not** filter by "is it the best of the day." Capture broadly. Selection happens in the shortlist step, and editorial treatment later.
|
||||||
|
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ Enforce `EDITORIAL.md` (the voice charter: concise, to the point, inspiring deli
|
|||||||
Make an explicit pick decision **every run** — the pick is a daily editorial call, not a side effect of publishing reviews:
|
Make an explicit pick decision **every run** — the pick is a daily editorial call, not a side effect of publishing reviews:
|
||||||
|
|
||||||
- **The pick must be uncontroversial — it's the front page.** The homepage hero greets every visitor out of context, so keep it broadly, unmistakably benign. Never pick anything that could read as endorsing or depicting harm: weapons or anything that cuts, burns, or explodes; anything dangerous or injury-prone; how-to's for any of that; horror or disturbing media; or anything that could be taken as a call to negative action. (A knife is a bad pick.) Such items can still be finds and reviews — they just never get the hero. If your strongest candidate trips this, take the strongest one that doesn't, and note the swap in the digest.
|
- **The pick must be uncontroversial — it's the front page.** The homepage hero greets every visitor out of context, so keep it broadly, unmistakably benign. Never pick anything that could read as endorsing or depicting harm: weapons or anything that cuts, burns, or explodes; anything dangerous or injury-prone; how-to's for any of that; horror or disturbing media; or anything that could be taken as a call to negative action. (A knife is a bad pick.) Such items can still be finds and reviews — they just never get the hero. If your strongest candidate trips this, take the strongest one that doesn't, and note the swap in the digest.
|
||||||
- **No camping gear in the hero.** Camper trailers and other camping equipment never take the pick — they stay eligible as finds and (occasionally) reviews, just not the front page. If the strongest candidate is camping gear, take the strongest one that isn't.
|
- **No camping gear in the hero.** Camper trailers and other camping equipment never take the pick — they stay eligible as finds and (occasionally) reviews, just not the front page. If the strongest candidate is camping gear, take the strongest one that isn't. (Both hero rules restate `EDITORIAL.md` "Content rules" — the charter is the source of truth.)
|
||||||
- Candidates: reviews graduated this run plus the existing review pool.
|
- Candidates: reviews graduated this run plus the existing review pool.
|
||||||
- "Strongest" = best hero visual + broadest audience appeal; when torn, the one whose virtue is most immediately legible from the tile.
|
- "Strongest" = best hero visual + broadest audience appeal; when torn, the one whose virtue is most immediately legible from the tile.
|
||||||
- New reviews usually win (freshness matters on a daily site), but a weak new review must not displace a strong current hero.
|
- New reviews usually win (freshness matters on a daily site), but a weak new review must not displace a strong current hero.
|
||||||
|
|||||||
@@ -14,10 +14,7 @@ Unattended runs never pause for confirmation — they publish, log to `daily-fin
|
|||||||
|
|
||||||
## Conventions that bite
|
## Conventions that bite
|
||||||
|
|
||||||
- **`EDITORIAL.md` is the voice charter** — concise, to the point, inspiring delight (through specificity, never ad copy); word budgets per copy type. All audience-facing prose follows it; the pipeline runs a fresh-eyes copy-edit stage over each day's new copy.
|
- **`EDITORIAL.md` is the editorial charter** — the voice (concise, to the point, inspiring delight through specificity, never ad copy; word budgets per copy type) *and* the canonical content rules (no tobacco/alcohol anywhere; no camping gear or harm-adjacent items as pick of the day; rules apply forward only — published stays published). All audience-facing prose and every selection stage follow it; the pipeline runs a fresh-eyes copy-edit stage over each day's new copy. Skills restate the rules for their stage, but the charter wins on drift.
|
||||||
- **No tobacco or alcohol content** — hard editorial exclusion at every stage: never captured as finds, never selected into new bundles, never graduated to reviews. A few legacy alcohol finds (May–July 2026) stay published and keep their existing bundle spots, but they're ineligible for anything new.
|
|
||||||
- **No camping equipment as pick of the day** — camper trailers and other camping gear are fine as finds and occasional reviews, but never take the homepage hero.
|
|
||||||
- **Editorial rules are forward-looking** — what's published stays published; new exclusions apply only to future picks/finds/bundles/reviews, never to retroactive edits or unpublishing.
|
|
||||||
- Review heroes are auto-discovered from `src/content/reviews/<slug>/hero.<ext>` (`src/lib/hero.ts` glob) — name the file `hero.*`; no registration.
|
- Review heroes are auto-discovered from `src/content/reviews/<slug>/hero.<ext>` (`src/lib/hero.ts` glob) — name the file `hero.*`; no registration.
|
||||||
- The homepage "pick of the day" is `src/data/pick.json` (`{"hero": "<review-slug>"}`); falls back to the latest review.
|
- The homepage "pick of the day" is `src/data/pick.json` (`{"hero": "<review-slug>"}`); falls back to the latest review.
|
||||||
- Find slugs are globally unique although folders are date-bucketed; URLs stay flat at `/find/<slug>/`.
|
- Find slugs are globally unique although folders are date-bucketed; URLs stay flat at `/find/<slug>/`.
|
||||||
|
|||||||
+11
-2
@@ -1,6 +1,6 @@
|
|||||||
# Editorial voice charter
|
# Editorial charter
|
||||||
|
|
||||||
The standard for every audience-facing word on unique.rzen.dev — find bodies, review bodies, bundle blurbs and intros, subtitles, descriptions. Skills reference this file; the pipeline's copy-edit pass enforces it.
|
The standard for every audience-facing word on unique.rzen.dev — find bodies, review bodies, bundle blurbs and intros, subtitles, descriptions — and the canonical home of the content rules that bind what gets published at all. Skills reference this file; the pipeline's copy-edit pass enforces the voice, and each pipeline stage enforces the content rules that apply to it.
|
||||||
|
|
||||||
## The voice in one line
|
## The voice in one line
|
||||||
|
|
||||||
@@ -15,6 +15,15 @@ Concise, to the point, and above all **inspiring delight**.
|
|||||||
5. **Honest beats glossy.** Limitations stated plainly; corrections from fact-checking called out when they're interesting. Trust is the site's only currency.
|
5. **Honest beats glossy.** Limitations stated plainly; corrections from fact-checking called out when they're interesting. Trust is the site's only currency.
|
||||||
6. **The forward test.** Before publishing, ask: would a friend forward this to another friend with "look at this"? If not, find the detail that would make them — or cut deeper.
|
6. **The forward test.** Before publishing, ask: would a friend forward this to another friend with "look at this"? If not, find the detail that would make them — or cut deeper.
|
||||||
|
|
||||||
|
## Content rules
|
||||||
|
|
||||||
|
Voice governs how we say it; these govern what we publish. Skills restate the rule that applies to their stage, but this list is the source of truth — when they drift, this file wins.
|
||||||
|
|
||||||
|
1. **No tobacco or alcohol** — categorical, at every stage: never captured as finds, never selected into new bundles, never graduated to reviews. No exception for beautiful design, craftsmanship, or gift appeal; borderline cases (dual-use glassware, non-alcoholic "spirits", brewery-adjacent merch) get skipped too. A few legacy alcohol finds (May–July 2026) stay published and keep their bundle spots but are ineligible for anything new.
|
||||||
|
2. **Front-page safety** — the pick of the day is the front page and must be broadly, unmistakably benign. Never anything that could read as endorsing or depicting harm: weapons or anything that cuts, burns, or explodes; anything dangerous or injury-prone; how-to's for any of that; horror or disturbing media. Such items can still be finds and reviews — they just never get the hero.
|
||||||
|
3. **No camping gear in the hero** — camper trailers and other camping equipment never take the pick of the day. Fine as finds, occasional as reviews, never the front page.
|
||||||
|
4. **Rules look forward** — what's published is published. A new rule governs future picks, finds, bundles, and reviews only; it never triggers retroactive edits or unpublishing.
|
||||||
|
|
||||||
## Word budgets
|
## Word budgets
|
||||||
|
|
||||||
| Copy | Budget |
|
| Copy | Budget |
|
||||||
|
|||||||
@@ -24,13 +24,10 @@ Each role's prompt is its skill file — the canonical, version-controlled text.
|
|||||||
|
|
||||||
## House rules (bind every role)
|
## House rules (bind every role)
|
||||||
|
|
||||||
1. **`EDITORIAL.md`** — the voice charter: concise, to the point, inspiring delight *through specificity*; word budgets per copy type (finds 40–90 words; reviews 250–450, ceiling 600, ~800 only for story-led subjects; bundle blurb one sentence). Budgets are ceilings, not targets.
|
1. **`EDITORIAL.md` — the editorial charter, voice half**: concise, to the point, inspiring delight *through specificity*; word budgets per copy type (finds 40–90 words; reviews 250–450, ceiling 600, ~800 only for story-led subjects; bundle blurb one sentence). Budgets are ceilings, not targets.
|
||||||
2. **No tobacco or alcohol content** — categorical, at every stage: never captured, never bundled, never graduated. Legacy alcohol finds (May–July 2026) stay published but are ineligible for anything new.
|
2. **`EDITORIAL.md` — content rules half**: no tobacco/alcohol at any stage; front-page safety and no camping gear for the pick of the day; rules apply forward only (published stays published). The charter's "Content rules" section is the source of truth; skill restatements defer to it.
|
||||||
3. **Hero floor** — a bundle ships with ≥2 hero-bearing items (aim ~4; more for 7–8-item grids). Under-floor themes are held and logged, except the weekly catch, which widens instead of holding.
|
3. **Hero floor** — a bundle ships with ≥2 hero-bearing items (aim ~4; more for 7–8-item grids). Under-floor themes are held and logged, except the weekly catch, which widens instead of holding.
|
||||||
4. **Front-page safety** — the pick of the day is never anything that could read as endorsing harm (weapons, danger, disturbing media), regardless of its quality as a review.
|
4. **Repo conventions** — see `CLAUDE.md` ("Conventions that bite"): topics vocabulary, source name matching, Amazon link canonical form, slug uniqueness.
|
||||||
5. **No camping gear in the hero** — camper trailers and other camping equipment never take pick of the day; fine as finds, occasional as reviews.
|
|
||||||
6. **Editorial rules look forward** — published content stays published; new exclusions govern future picks, finds, bundles, and reviews only, never retroactive edits.
|
|
||||||
7. **Repo conventions** — see `CLAUDE.md` ("Conventions that bite"): topics vocabulary, source name matching, Amazon link canonical form, slug uniqueness.
|
|
||||||
|
|
||||||
## The copy editor's brief
|
## The copy editor's brief
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user