Date: 2026-04-23

Owner: Sam

Trigger: Kickoff prompt at /Users/samaguiar/Documents/Codex/_qa-queue/_kickoffs/2026-04-23-validator-skill-build.md (carry-over from Wave 2 close-out where Q1 sub-MC pick C approved building a first-run validator skill).

Why this exists: Sam's scheduled-task chain has shared scaffolding that every task must carry (PREFLIGHT staleness guard, guards-contract pointer, post-run QA reflection load, Notion data source ID, JSON-encoded string format for Tags/Project). When any of those drifts, the chain breaks silently. This validator catches drift early.

What Was Built

  1. scheduled-task-validator skill at /var/folders/sb/9c_h26vx2_5c72qxzqz3q1b40000gn/T/claude-hostloop-plugins/9ce83e8f36721a9e/skills/scheduled-task-validator/SKILL.md. 10-check rubric documented (PREFLIGHT presence, guard invocation, ttl match, --allow-missing usage, guards-contract pointer, QA reflection load, Notion data source ID, JSON-encoded string format note, reconstruction preamble cleared, frontmatter sanity).
  2. validate.sh script at /var/folders/sb/9c_h26vx2_5c72qxzqz3q1b40000gn/T/claude-hostloop-plugins/9ce83e8f36721a9e/skills/scheduled-task-validator/validate.sh. Mirrors the rubric 1:1. Default target = 4 SF chain consumers; supports comma-separated arg override. Writes report to /Users/samaguiar/Documents/Codex/validator-runs/YYYY-MM-DD.md.
  3. First validator run report at /Users/samaguiar/Documents/Codex/validator-runs/2026-04-23.md. Hand-executed in this session because the bash sandbox does not have /Users/samaguiar/Documents/... mounted at the same path. Hand-execution mirrors script logic 1:1 so reproducibility is preserved.

First-Run Results

Totals across 4 tasks: 35 PASS, 5 WARN, 0 FAIL.

Task PASS WARN FAIL
screaming-frog-ingest 9 1 0
technical-seo-crawl-audit 9 1 0
weekly-orphan-fixer 9 1 0
weekly-cannibalization-fix 8 2 0

Result: WARN. No hard failures. Chain is structurally sound.

Drift Items Surfaced

  1. All 4 SF SKILL.md files are missing a one-liner about JSON-encoded string format for Tags/Project on Notion push. Uniform fix; same line, applied to all 4. v2 of validator will tighten check #8 from WARN to FAIL once universal.
  2. weekly-cannibalization-fix still carries body-level reconstruction preamble: "NOTE: This prompt was reconstructed on 2026-04-23 because the original prompt body was not retrievable." Other 3 SF chain tasks no longer carry it. Sam needs to fill the disposition box in /Users/samaguiar/Documents/Codex/_qa-queue/2026-04-23-sf-prompt-review.md for this one. KEEP-AS-IS triggers auto-clear (Q3=A).

What Was Tried and Did Not Work

Decisions Made

  1. 10-check rubric is the v1 contract. Every check has explicit PASS/WARN/FAIL semantics. Check #8 (JSON-encoded string note) starts at WARN because it is a new rule; tightens to FAIL in v2 once all 4 tasks carry it.
  2. Default target = 4 SF chain consumers. Optional comma-separated arg lets Sam validate just one or two tasks during chain edits.