feat(seo-hermit): new SEO/site-health domain plugin (PROP-014)#503
Open
gtapps wants to merge 2 commits into
Open
feat(seo-hermit): new SEO/site-health domain plugin (PROP-014)#503gtapps wants to merge 2 commits into
gtapps wants to merge 2 commits into
Conversation
Weekly watcher over Search Console, broken links, and Core Web Vitals with a regression-to-commit judgment layer. Ships hatch (live GSC verify), the site-health-check routine plus a mechanical ledger diff engine, and the site-regression-triage / site-draft-fix skills. Zero-dep Bun client (scripts/site-api.ts) with node:crypto JWT-bearer GSC auth. Read-only toward Google, approval-gated toward the operator's own repo. Overrides the domain-hermit freeze at explicit operator request; corrects PROP-014's non-existent bulk Index Coverage API to budgeted per-URL inspection. Claude-Session: https://claude.ai/code/session_014tRmc6NhfXWu1sB6jtUMFW
Three review fixes to the weekly diff engine, all cases where the report lied to the operator rather than crashed: - Broken links outside this run's link-check budget/set are no longer falsely reported as "resolved" — only URLs actually re-checked this run can clear. Prevents a persistent broken link from being silently cleared when the sitemap grows or reorders past the budget window. - CWV and index verdict transitions are classified by direction (shared CWV_RANK ordinal / PASS-in vs PASS-out) instead of equality-to-best, so a poor→needs-improvement recovery is an improvement, not a regression. Directionless index flips (FAIL→NEUTRAL) go to notes and keep the week non-quiet rather than being swallowed. - Link checker retries GET on 403/400 as well as 405/501, so HEAD-hostile CDNs/WAFs don't surface pages that serve fine on GET as broken links. Adds regression tests for each.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
New domain plugin
seo-hermit(PROP-014): a weekly-cadence watcher over Google Search Console, broken links, and Core Web Vitals, whose defensible slice is the judgment layer — correlating a regression with a specific site-repo commit and drafting the mechanical fix. Read-only toward Google; write-only toward the operator's own repo, behind an approval gate.This overrides the domain-hermit freeze at explicit operator request (recorded in the proposal and commit). Scoped to the smallest honest version so the downside of the override is bounded.
Changes
plugin.json/hermit-meta.json/ rootmarketplace.json),CLAUDE.md,README.md,docs/knowledge-schema.md,settings.json,CLAUDE-APPEND.md, MITLICENSE,.gitignore, and.github/workflows/test-seo.yml(Bun-only CI, cloned fromtest-fitness.yml). Requires coreclaude-code-hermit≥1.2.14.scripts/site-api.ts— zero-dependency Bun client (stdlib +node:cryptoonly). Service-account JWT-bearer auth; subcommandscheck/search-analytics/sitemap/link-check/psi/inspect/ledger. Credentials are read from.env, never argv, never printed.skills/hatch— 9-step idempotent setup: live GSC verification round-trip,.envcollected via the Read tool only (never the service-account JSON — it holds a private key), CLAUDE-APPEND inject, weekly-routine registration.skills/site-health-check— weekly routine: pull Search Console deltas, link-check the sitemap, sample CWV, inspect a rotating budget of URLs, diff againststate/site-health-ledger.json, report only what changed. A quiet week is one line.skills/site-regression-triage(read-only commit correlation) andskills/site-draft-fix(approval-gated, closed fix list, never pushes, never touches a protected branch).site-api+ledger) and 28 skill-structure checks.Deliberate corrections vs the proposal
urlInspection(rotated via a ledger cursor, ~2,000/day/property quota).state/(notcompiled/, which auto-archives).weekly-reviewpattern), not a drop-onceprompt_file.Test plan
cd plugins/seo-hermit && bash tests/run-all.sh→ 37 unit + 28 structure checks pass.bunx tscfrom repo root → clean (strict).plugin-validator→ 12/12; nativeclaude plugin validate .passes.Notes
SEO_HERMIT_SITE_URL/ sitemap / ledger), matching the one-hermit-per-product model. A "several sites you own" variant (asitesarray keyed ledgers) is a possible follow-up; multi-tenant is explicitly out of scope.indexmap never prunes URLs that drop out of the sitemap — a minor leak on high-churn sites that needs a behavior change (plumbing the sitemap set intodiffLedger), so it was left out of the cleanup pass.0.0.1; this does not ship to operators until/release seo-hermit.