From d59550c4735bf2cccae3f8bc2ab5c3cc8ff507a5 Mon Sep 17 00:00:00 2001 From: rzen Date: Fri, 10 Jul 2026 09:45:12 -0400 Subject: [PATCH] pipeline: several reviews per run (judgment call), pick decision every run, auto-deploy note --- .claude/skills/daily-pipeline/SKILL.md | 18 +++++++++++++----- CLAUDE.md | 2 +- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/.claude/skills/daily-pipeline/SKILL.md b/.claude/skills/daily-pipeline/SKILL.md index 8dc5b7b..6c73b29 100644 --- a/.claude/skills/daily-pipeline/SKILL.md +++ b/.claude/skills/daily-pipeline/SKILL.md @@ -36,22 +36,30 @@ Stage: the new find folders, `daily-finds.log.md`, `candidate-sources.md`, and ` ### 3. Reviews — run `build-review` in auto mode -- Take the capture run's **review candidates** (the top of the shortlist, marked in the log). Graduate **1–2 per run** — quality over cadence; zero is fine on a thin day. Prefer candidates with strong media and a real story; the fact-check step is mandatory. +- Take the capture run's **review candidates** (the top of the shortlist, marked in the log). Graduate **several per run — how many is your judgment call** (typically 2–4). Quality over cadence still rules: every graduation must clear the bar on its own, and zero is fine on a thin day. Prefer candidates with strong media and a real story; the fact-check step is mandatory. - If today's capture was thin but a prior day's log lists ungraduated review candidates, those are fair game. **Commit per review or combined**: `site: review — (graduates from find)` / `site: reviews — , (graduate from finds)`. ### 4. Pick of the day -- If reviews were published this run, set the strongest one as the homepage hero: write `src/data/pick.json` → `{"hero": ""}`. "Strongest" = best hero visual + broadest audience appeal; when torn, the one whose virtue is most immediately legible from the tile. -- If no review was published, leave the pick as-is (a stale-but-good hero beats churn for its own sake). +Make an explicit pick decision **every run** — the pick is a daily editorial call, not a side effect of publishing reviews: -**Commit**: `site: pick of the day — `. +- 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. +- If the current hero has held for several days, lean toward rotating to another strong review even when nothing graduated — the homepage shouldn't look frozen. +- Keeping the current pick is a valid outcome, but it's a decision: say why in the digest. + +Write `src/data/pick.json` → `{"hero": ""}`. + +**Commit** (only when the pick changed): `site: pick of the day — `. ### 5. Verify + push - `npm run build` must pass (it will also have been run by the sub-skills; this is the final gate). If it fails, fix what the pipeline broke; never push a red build. - `git push origin main`. If the push fails (auth, network), leave the commits local and flag it in the digest. +- Deployment is automatic downstream: in scheduled runs, a lab CI job (`publish-unique-daily`) redeploys unique.rzen.dev from `main` after this pipeline succeeds — nothing to do here, but it means whatever is on `origin/main` goes live. ### 6. Digest @@ -63,7 +71,7 @@ Daily pipeline — YYYY-MM-DD Captured: finds ( productive sources), shortlisted Bundle: "" (<n> items) [+ week's catch / cluster run if run] Reviews: <Name> (<slug>), <Name> (<slug>) — or none -Pick: <Name> — or unchanged (<current>) +Pick: <Name> — or held: <current> (<one-line why>) Amazon: <n> links added Sources: <n> maintenance changes; <n> new nominees awaiting vetting Attention: <anything needing the user: rejected graduations, blocked sources, diff --git a/CLAUDE.md b/CLAUDE.md index f7f40dd..95b54ca 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -4,7 +4,7 @@ A daily product-discovery site (Astro, static). The editorial pipeline is skill- ## Pipeline -- `/daily-pipeline` — the whole daily chain: capture → bundle → reviews → pick of the day → build → commit → push → digest. This is the entrypoint for scheduled/headless runs. +- `/daily-pipeline` — the whole daily chain: capture → bundle → reviews (several per run, judgment call) → pick of the day (explicit decision every run) → build → commit → push → digest. This is the entrypoint for scheduled/headless runs; scheduled runs auto-deploy afterwards via the lab CI `publish-unique-daily` job. - `/daily-finds` — capture-only sweep of `sources.json`; writes `src/content/find/<yyyy>/<mm>/<slug>/`, marks the day's shortlist (`shortlist: true`, up to 12), adds `amazonLink` for confidently-matched physical products, and applies mechanical source maintenance. - `/build-bundle [auto|weekly|<theme>|<slugs>]` — one themed roundup referencing find slugs. `weekly` = date-based catch of unbundled shortlist finds. - `/cluster-bundles [auto]` — batch-cluster the backlog into 4–7 bundles.