Skip to content

content-review: enable the dispatcher cron (go-live)#19905

Merged
CamSoper merged 3 commits into
masterfrom
CamSoper/content-review-go-live
Jun 26, 2026
Merged

content-review: enable the dispatcher cron (go-live)#19905
CamSoper merged 3 commits into
masterfrom
CamSoper/content-review-go-live

Conversation

@CamSoper

@CamSoper CamSoper commented Jun 26, 2026

Copy link
Copy Markdown
Contributor

Merging this PR takes the content-review pipeline live, operated entirely by repo variables.

Go-live

  • Uncomments the weekday cron (0 14 * * 1-5, 14:00 UTC).

Single on/off + cadence knob (CONTENT_REVIEW_COUNT)

One variable is both the switch and the cadence (verified: the selector cleanly no-ops at count 0 — 0 articles, no halt, no error; and the job gate skips the whole job at 0):

  • unset → on, 3 articles/run
  • 0 → off (job skipped entirely — no runner, no spend)
  • N → on, N articles/run

Manual workflow_dispatch always runs regardless (its count input wins).

Optional holiday-skip (BAMBOOHR_HOLIDAY_ICS_URL)

A holiday-check job reads this repo variable (a per-user BambooHR feed token — temporary convenience) and skips scheduled runs on company holidays via is-holiday.py (Company Holidays category, TZ America/Chicago, multi-day + recurrence aware, self-tested). Fails open everywhere (unset / 404 / parse error → runs); URL never echoed; manual dispatch bypasses it.

Operate (Settings → Variables)

Variable Effect Default
CONTENT_REVIEW_COUNT 0 = off; N = on at N/run unset = on at 3
BAMBOOHR_HOLIDAY_ICS_URL holiday feed to skip on unset = no skipping

Drafted by Claude; reviewed by Cam.

… switch)

Turn the dispatcher on: uncomment the weekday cron and invert the gate so the
scheduled run fires unless CONTENT_REVIEW_ENABLED is the literal 'false'. Unset
(default) or any other value runs; set 'false' to stop the cron instantly with
no PR. Merging this PR takes the pipeline live.

Also refresh the stale header: workers now open a draft PR that the re-lint gate
promotes to ready (firing the normal triage -> review chain) and arms for
auto-merge — no more force-dispatch, and merges require an approval.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@pulumi-bot

pulumi-bot commented Jun 26, 2026

Copy link
Copy Markdown
Collaborator

- Skip scheduled runs on company holidays via an optional BambooHR ICS feed.
  A holiday-check job reads the CONTENT_REVIEW... BAMBOOHR_HOLIDAY_ICS_URL repo
  variable, parses the 'Company Holidays' category with is-holiday.py (TZ
  America/Chicago, multi-day + category aware, self-tested), and skips the
  dispatcher when today is a holiday. FAILS OPEN at every step (unset var,
  404/fetch failure, parse error -> runs), and never echoes the per-user feed
  URL. Manual workflow_dispatch ignores the holiday gate.
- Count precedence: workflow_dispatch input > CONTENT_REVIEW_COUNT repo
  variable > default 3, so the scheduled cadence is tunable without a code edit.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Drop the separate CONTENT_REVIEW_ENABLED variable. CONTENT_REVIEW_COUNT is now
both the kill switch and the cadence knob: unset = on at 3/run, '0' = off (the
job is skipped entirely, no runner/spend), 'N' = on at N/run. The job gate is a
plain string compare against '0'; the selector also no-ops on any count<=0
(scored[:max(count,0)]), so a stray '00'/'-1' still does no work. One knob
instead of two — simpler to operate.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@CamSoper CamSoper marked this pull request as ready for review June 26, 2026 21:25
@github-actions github-actions Bot added review:triaging Claude Triage is currently classifying the PR domain:infra PR touches workflows, scripts, infra, Makefile, or build config review:in-progress Claude review is currently running and removed review:triaging Claude Triage is currently classifying the PR labels Jun 26, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Pre-merge Review — Last updated 2026-06-26T21:26:59Z

Tip

Summary: This is an infra PR that flips the existing content-review dispatcher from manual-only to scheduled (go-live). It un-comments the weekday cron: '0 14 * * 1-5', replaces the CONTENT_REVIEW_ENABLED boolean with a single CONTENT_REVIEW_COUNT repo variable that doubles as both the on/off switch ('0' = off) and the per-run article count, and adds an optional holiday-check job (new scripts/content-review/is-holiday.py) that skips scheduled runs on company holidays read from a BambooHR ICS feed. Because this is a workflow-trigger change, the blast radius is large — the wrongness that would matter is a gate that fires when it shouldn't (or never fires). I traced the review job's if gate (workflow_dispatch always runs; scheduled runs require CONTENT_REVIEW_COUNT != '0' and is_holiday != 'true'), the count-precedence chain (dispatch input → CONTENT_REVIEW_COUNT → '3'), the workflow-level contents: write permission (so the new job's checkout resolves), and the holiday script's fail-open behavior — all resolve correctly, and holiday-check runs unconditionally so the review job's needs stays satisfiable. The script ships a --self-test covering DTEND-exclusivity, multi-day spans, the category filter, and RFC 5545 line unfolding. The two extracted strings are code docstrings (not-a-claim); no external factual claims, Hugo build, or content links are in scope. Passes run: infra risk review (trigger / secret / permissions) + claim extraction.

Review confidence:

Dimension Level Notes
mechanics HIGH
facts HIGH No external factual claims — both extracted strings are code docstrings.
Investigation log
  • Cross-sibling reads: not run (not in a templated section)
  • External claim verification: 0 of 2 claims verified (0 unverifiable, 0 contradicted) · 4 specialists (numerical, cross-reference, capability, framing); 0 cross-specialist corroborations · routed: 0 inline, 0 Pass 1, 0 Pass 2, 2 Pass 3 (verified 0, contradicted 0, unverifiable 2).
  • Cited-claim spot-checks: not run (no cited claims)
  • Frontmatter sweep: not run (no frontmatter in diff)
  • Temporal-trigger sweep: ran (recency words present in diff; spot-check in-review)
  • Code execution: not run (no static/programs/ change)
  • Code-examples checks: not run (no fenced code blocks in content files)
  • Editorial-balance pass: not run (not under content/blog/)
🚨 Outstanding ⚠️ Low-confidence 💡 Pre-existing ✅ Resolved
0 0 0 0

🔍 Verification trail

2 claims extracted · 0 verified · 0 unverifiable · 0 contradicted
  • L26 in scripts/content-review/is-holiday.py "is-holiday.py --ics feed.ics [--tz America/Chicago] [--date 2026-07-03]" → ➖ not-a-claim (evidence: The text is a CLI usage/help string showing example invocation syntax for a script (is-holiday.py), including a sample date argument 2026-07-03. This is a code comment or docstring illustrating the script's own interface — not a falsif…; source: file: scripts/content-review/is-holiday.py L26 (PR diff metadata))
  • L43 in scripts/content-review/is-holiday.py "'''Undo RFC 5545 line folding (continuation lines start with space/tab).'''" → ➖ not-a-claim (evidence: The text is a Python docstring/comment describing a function's behavior ("Undo RFC 5545 line folding (continuation lines start with space/tab)."). It is a code comment, not a falsifiable factual assertion about an external system — it desc…; source: Line L43 of scripts/content-review/is-holiday.py (code comment/docstring))

🚨 Outstanding in this PR

No outstanding findings in this PR.

⚠️ Low-confidence

No low-confidence findings.

💡 Pre-existing issues in touched files (optional)

No pre-existing issues in touched files.

✅ Resolved since last review

No items resolved since the last review.

📜 Review history

  • 2026-06-26T21:26:59Z — Infra go-live for the content-review dispatcher (enable weekday cron + collapse to a single CONTENT_REVIEW_COUNT switch + add fail-open holiday-check); verified the gate, count-precedence, permissions, and fail-open logic — no blockers. (0bf1783)

Need a re-review? Want to dispute a finding? Mention @claude and include #update-review.
(For ad-hoc questions or fixes, just @claude — no hashtag.)

@github-actions github-actions Bot added review:no-blockers Claude review completed cleanly; outstanding is empty and removed review:in-progress Claude review is currently running labels Jun 26, 2026
@CamSoper CamSoper merged commit cfeaf41 into master Jun 26, 2026
11 checks passed
@CamSoper CamSoper deleted the CamSoper/content-review-go-live branch June 26, 2026 21:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

domain:infra PR touches workflows, scripts, infra, Makefile, or build config review:no-blockers Claude review completed cleanly; outstanding is empty

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants