From 3af5185ae9be01578ae201c27f694e81004bab4f Mon Sep 17 00:00:00 2001 From: rzen Date: Thu, 16 Jul 2026 17:39:23 -0400 Subject: [PATCH] =?UTF-8?q?pipeline:=20consolidate=20content=20rules=20int?= =?UTF-8?q?o=20EDITORIAL.md=20=E2=80=94=20the=20charter=20is=20now=20the?= =?UTF-8?q?=20source=20of=20truth;=20CLAUDE.md/TEAM.md/skills=20point=20to?= =?UTF-8?q?=20it?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .claude/skills/build-bundle/SKILL.md | 2 +- .claude/skills/build-review/SKILL.md | 2 +- .claude/skills/cluster-bundles/SKILL.md | 2 +- .claude/skills/daily-finds/SKILL.md | 2 +- .claude/skills/daily-pipeline/SKILL.md | 2 +- CLAUDE.md | 5 +---- EDITORIAL.md | 13 +++++++++++-- TEAM.md | 9 +++------ 8 files changed, 20 insertions(+), 17 deletions(-) diff --git a/.claude/skills/build-bundle/SKILL.md b/.claude/skills/build-bundle/SKILL.md index eb2bf89..a80228f 100644 --- a/.claude/skills/build-bundle/SKILL.md +++ b/.claude/skills/build-bundle/SKILL.md @@ -46,7 +46,7 @@ A bundle must contain **at least 2 items that have a hero image** (`hero.` 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 diff --git a/.claude/skills/build-review/SKILL.md b/.claude/skills/build-review/SKILL.md index 048ba9d..623b48d 100644 --- a/.claude/skills/build-review/SKILL.md +++ b/.claude/skills/build-review/SKILL.md @@ -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 ." -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 diff --git a/.claude/skills/cluster-bundles/SKILL.md b/.claude/skills/cluster-bundles/SKILL.md index a01d379..5a28202 100644 --- a/.claude/skills/cluster-bundles/SKILL.md +++ b/.claude/skills/cluster-bundles/SKILL.md @@ -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. -**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. diff --git a/.claude/skills/daily-finds/SKILL.md b/.claude/skills/daily-finds/SKILL.md index 01fd91b..248b0f1 100644 --- a/.claude/skills/daily-finds/SKILL.md +++ b/.claude/skills/daily-finds/SKILL.md @@ -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. -**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. diff --git a/.claude/skills/daily-pipeline/SKILL.md b/.claude/skills/daily-pipeline/SKILL.md index c518c74..357462a 100644 --- a/.claude/skills/daily-pipeline/SKILL.md +++ b/.claude/skills/daily-pipeline/SKILL.md @@ -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: - **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. - "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. diff --git a/CLAUDE.md b/CLAUDE.md index 2d9f4a3..f0cba24 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -14,10 +14,7 @@ Unattended runs never pause for confirmation — they publish, log to `daily-fin ## 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. -- **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. +- **`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. - Review heroes are auto-discovered from `src/content/reviews//hero.` (`src/lib/hero.ts` glob) — name the file `hero.*`; no registration. - The homepage "pick of the day" is `src/data/pick.json` (`{"hero": ""}`); falls back to the latest review. - Find slugs are globally unique although folders are date-bucketed; URLs stay flat at `/find//`. diff --git a/EDITORIAL.md b/EDITORIAL.md index f469fc0..1d807a8 100644 --- a/EDITORIAL.md +++ b/EDITORIAL.md @@ -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 @@ -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. 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 | Copy | Budget | diff --git a/TEAM.md b/TEAM.md index 9409061..f86f8f2 100644 --- a/TEAM.md +++ b/TEAM.md @@ -24,13 +24,10 @@ Each role's prompt is its skill file — the canonical, version-controlled text. ## 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. -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. +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. **`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. -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. -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. +4. **Repo conventions** — see `CLAUDE.md` ("Conventions that bite"): topics vocabulary, source name matching, Amazon link canonical form, slug uniqueness. ## The copy editor's brief