Skip to content

SEO & AI-visibility reviewer (2.4.2) - #58

Merged
khezen merged 5 commits into
mainfrom
seo
Oct 24, 2026
Merged

khezen merged 5 commits into
mainfrom
seo

Conversation

@khezen

@khezen khezen commented Oct 24, 2026

Copy link
Copy Markdown
Owner

Summary

New opt-in seo review module that flags PR changes hurting crawling, indexing, ranking or AI citation (Googlebot, Bingbot, GPTBot/OAI-SearchBot, ClaudeBot, PerplexityBot, AI Overviews) of public websites. Runs on RLM alongside code_review, doc and supply_chain, and emits standard Issues with the new IssueCategory.SEO.

Gating (review.seo)

  • enabled: false by default.
  • scopes: fnmatch globs on scope subroot. If set, matching scopes skip web-stack detection.
  • If scopes is empty, a deterministic (no LLM) is_web_scope check detects JS frameworks, SSGs, server templates or plain HTML.
  • has_web_relevant_changes always applies, so backend-only diffs cost nothing. Every skip is logged.

Review

  • Static only, no network calls. The canonical host is inferred from repo config, and project rules come from AGENTS.md (scope.skills).
  • Scope-restricted filesystem, ripgrep and treesitter MCP tools, plus read-only list_site_config / read_site_config for robots, sitemap, llms.txt, redirects, hosting and framework config anywhere in the repo. Results use a repo: path prefix, which is stripped before subroot path restoration.
  • Checks cover rendering, metadata, indexation and redirects, AI crawler access, structured data, content accuracy, semantics, performance and i18n.
  • Severity mapping: blocker→critical, major→high, minor→low, question→info. Titles are prefixed with the area; legal and business decisions are marked Human review:.

Wiring

  • Pipeline module list, the run-level Prefrontal consumer and the Hippocampus seo episode.
  • An SEO count in the review summary and an SEO column in the GitHub/GitLab statistics matrix.
  • codespy.yaml, .env.example and action.yml: seo-* inputs, env mappings and Docker pass-through.
  • Version bumped to 2.4.2, with a CHANGELOG entry.

Not in this PR

  • Unit tests for web_filter, site_files, gating and path restoration.
  • docs/configuration.md and README updates.
  • Remote reviews: site config files outside the scope are not yet added to the sparse checkout, so read_site_config can list such files but may not be able to read them.
  • action.yml: the existing *-max-tokens inputs for code-review, doc, supply-chain, summary and audit are not mapped to env vars. This predates this PR and is not fixed here.

- Fix scope depth tie that folded first-level modules (Swift packages,
  Gradle modules) into the root scope
- Keep LLM scope boundaries when the root manifest is only a container
- Pick manifests deterministically by priority; add Xcode, CocoaPods,
  XcodeGen, Tuist, Gradle settings, Deno, Nx, pnpm workspace, go.work
- Extract Gradle namespace and Xcode project names as package names
- Add review.max_concurrent_scopes cap for per-scope fan-out
- Split RLM action steps locally so extraction-model commentary no
  longer reaches Opus (content_filter refusals)
- Fall back to deterministic scopes when refinement fails; soft-fail
  the audit instead of aborting the review
- Escape untrusted text printed through Rich markup
# Conflicts:
#	CHANGELOG.md
#	action.yml
#	pyproject.toml
#	src/codespy/__init__.py
#	src/codespy/config.py
@khezen
khezen merged commit 10523ab into main Oct 24, 2026
3 checks passed
@khezen
khezen deleted the seo branch October 24, 2026 21:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant