claude/priceless-faraday-314fa0
needs attentionviewing older commit899fda3 · fullPR #293reviewed 2026-07-11 03:41 UTC0H · 5M · 4L · 3I- Purpose
- Move SEO quality checks out of the CI gate (seo-checks.yml) into the advisory code-review panel as a web-only lens, per team decision.
- Goal
- Delete the blocking (but non-required) seo-checks.yml GHA workflow and define an equivalent seo lens in review-panel that self-skips on non-web PRs and caps severity at medium.
- Sub-goals
- SG-1: Delete seo-checks.yml and lighthouse-budget.json
- SG-2: Add seo lens to review-panel/SKILL.md with web gate + advisory severity cap
- SG-3: Add seo to config.json review.lenses
- SG-4: Update all reference docs (e2e-testing.md, autonomous-operating-model.md, measurement-and-cadence.md, content-pipeline.yml checklist)
- What
- Removed seo-checks.yml (83-line GHA workflow) and lighthouse-budget.json (11 lines). Added seo lens definition to review-panel/SKILL.md. Added "seo" to loops-engine/config.json review.lenses. Updated 5 documentation files to reference the new lens instead of the deleted workflow.
- Why
- The CI gate ran seo-assert.mjs against apps/web unconditionally — including non-web PRs. Blocking CI gates are high-friction. Moving to an advisory review lens makes SEO checks web-only, advisory, and surfaced as review findings rather than blocking checks.
- Areas
- .claude/rules+3−2.claude/skills+6−3.github/workflows+1−84docs+9−8scripts+6−2
- Blast
- 10 files, +25/-110 lines across config, docs, and workflow definitions. No production code changed.
Findings · 11
correctness2
Stale seo-checks.yml reference in e2e/web/marketing.spec.ts not updated
e2e/web/marketing.spec.ts:10
Line 10 reads: 'SEO metadata ... is intentionally NOT asserted here; it's owned by seo-checks.yml.' The PR deleted seo-checks.yml and moved SEO enforcement to the seo review lens, but this e2e spec comment was not updated. A developer reading this file will be directed to a non-existent workflow. Update to reference the seo review lens (review-panel, advisory), consistent with .claude/rules/e2e-testing.md.
Meta description length range inconsistency: seo-assert.mjs (120-165) vs CLAUDE.md / lens (150-160)
scripts/seo-assert.mjs:35
Pre-existing inconsistency now more visible since the two enforcement paths are explicitly paired. A description of 130 chars passes the script but the static lens flags it. Worth reconciling in a follow-up.
security1
Confirmed: seo-checks.yml was never a required status check — no merge gate weakened
.github/workflows/seo-checks.yml
Ruleset 9729732 on main lists only 'e2e testing' as required. The deleted technical-seo job was advisory. Removal does not weaken any branch protection. PR claim is accurate.
conventions2
loops.md SSOT not updated — seo lens absent from the canonical lens list
.claude/rules/loops.md:54
loops.md declares itself the SSOT for the loop system. Lines 54-55 still read 'review-panel (multi-agent review: correctness / security / conventions+ADR / test-coverage / improvement)' — seo is absent. Every other updated file (config.json, loop-review/SKILL.md, review-panel/SKILL.md) was updated consistently, but the SSOT itself was skipped.
Stale '5 lenses' count in loops.md SSOT (now 6)
.claude/rules/loops.md:35
Line 35 reads 'the review panel's 5 lenses run in parallel instead of queuing 2-at-a-time.' With seo added that is now 6 lenses. With concurrency cap of 5, one lens will queue. Update the prose count.
tests3
Broken-link check removed with no documented successor
.github/workflows/seo-checks.yml
seo-checks.yml ran lycheeverse/lychee-action against apps/web/src/**/*.tsx and apps/web/content/**/*.mdx. Neither scripts/seo-assert.mjs nor the seo lens spec includes link-checking. autonomous-operating-model.md now lists 'broken links' as a seo lens capability, which is inaccurate. Either add link-check to the seo lens or document it as a known gap.
Coverage gap while LOOP_REVIEW_ENABLED is not live — only partially documented in updated rule files
.github/workflows/loop-review.yml:18
The PR body acknowledges that SEO checks are 'available on demand but not yet auto-firing.' This gap is not reflected in the updated measurement-and-cadence.md cadence table or e2e-testing.md. Adding a brief note ('pending LOOP_REVIEW_ENABLED') in the cadence table would prevent confusion.
seo-assert.mjs is optional in the lens spec — static-only review cannot catch runtime regressions
.claude/skills/review-panel/SKILL.md:19
The lens marks seo-assert.mjs as optional (only when a preview URL is available). Branches without a Vercel preview never get the deterministic title/canonical/JSON-LD/sitemap checks. This is a deliberate tradeoff but the coverage gap is real: a mistyped canonical or >1 H1 would be missed by static diff-only analysis.
improvement2
autonomous-operating-model.md diagram claims 'broken links' coverage that seo-assert.mjs does not provide
docs/autonomous-operating-model.md:20
The ASCII diagram lists 'broken links' under what the seo review lens checks. scripts/seo-assert.mjs has no link-check logic. Either remove 'broken links' from the diagram or add a note that it is a planned capability.
measurement-and-cadence.md § Output KPIs still lists 'Lighthouse CI' as the CWV measurement tool
docs/measurement-and-cadence.md:22
Section 1 KPIs reads 'Core Web Vitals (LCP, CLS, INP) — Lighthouse CI'. The Lighthouse CI step was removed with seo-checks.yml. The parenthetical implies an automated gate still exists.
seo1
SEO lens self-skip — no apps/web files changed
No apps/web/** files in the diff. SEO lens returns pass.