Changelog — 2026 Week 19

2026-05-05

2026-05-05

  • Auth & Access engine foundation: new agent-auth category at 0.20 weight, NA semantics in score engine (null category excluded from overall-score weighting with re-normalization), rubric versioning on audits (rubricVersion: "2.0"), rubric_version column on audit_history table.

  • Auth & Access category: 16 checks shipped across Bucket A (public API surface), B (OAuth surface), C (MCP-specific auth), D (bot/agent identity); 54 unit tests; rubric v2.0 active.

  • Auth & Access cascade (§5.6): applyNaCascade post-process in score engine skips 10 dependent checks when prerequisites fail; auth-discovery protocol check retired (superseded by A1+B1+D1/D3).

  • Auth & Access calibration + rescore + UI banner: scripts/rescore-all.ts batch-rescores all seeded sites (batches of 5, 1s delay) and inserts audit_history rows stamped rubric_version='2.0'; supports --dry-run and --urls= for targeted runs. Calibration log at docs/research/2026-05-05-auth-access-calibration.md (jintel.ai B/64, stripe.com C/45, resend.com C/53, twilio.com C/57, plaid.com C/56). Dismissible <RubricBanner> client component wired into /audit and /leaderboard (localStorage dismiss key w2agent:rubric-v2-banner-dismissed).

  • Add data/seed/batch-5.csv: 123 ora B+ candidates across 12 categories (4 new: data-analytics, identity-auth, communication-support, sales-marketing); category labels added to directory categories page.

  • Run scanner over batch-5 — scripts/seed/batch-5-run.ts registers all 123 curated ora B+ sites as agentSource: "batch5" across 12 categories; runs v2.0 rubric audits on each. Follow-up: enrich-discovered.ts --source=batch5 for display names/descriptions, enrich-llms-content.ts for llms.txt quality bar (≥10 pages gate for directory listing).

  • Third-party score comparison on site detail — sites.external_scores jsonb column (migration 0024); ora.run score + grade surface on /sites/[slug] alongside w2agent score when present. pnpm backfill:ora-scores populates batch-5 sites from docs/research/assets/2026-05-03-ora-teardown/ora-leaderboard-2026-05-04.json.

  • Blog + "State of Agent Readiness: May 2026" — new /blog route (index + first post). Post surfaces live leaderboard data: grade distribution bar chart, category averages, protocol adoption stats (llms.txt 32%, agent-card 0%, MCP 0%), rubric v2.0 / Auth & Access intro, top 10 table, and category leaders. Blog link added to site header Community section (en + zh i18n). File-based publishing pattern established — add a new post by adding a directory + entry to BLOG_POSTS.

  • Multi-model benchmark (A3) — benchmark engine now runs two judges (gpt-5-mini + gemini-3-flash-preview) in parallel via Promise.allSettled; per-model averages stored in sites.benchmark_ratings (jsonb, migration 0025); consensus score (mean across judges) written to sites.benchmark_rating. Site detail page renders a per-model star row beneath the consensus line using model.split("/").pop() label. JUDGE_MODELS constant exported for test reuse; legacy computeBenchmarkRating removed.

  • Auto-generated audit insight (A5) — Gemini 2.5 Flash Lite generates a 1-sentence agent-readiness insight after each audit completes; stored in report.summary (new optional field on AuditReport). Rendered in italic between the score ring and category bars on /audit/[id]. Fails gracefully (silent no-op) when GEMINI_API_KEY is absent or the LLM call errors.

  • Per-category qualitative labels (A4) — category breakdown on /audit/[id] and the live audit tool now shows a Strong / Partial / Weak label after the numeric score. Derived from categoryLabel() in lib/ui-utils.ts: Strong ≥70, Partial 35–69, Weak <35. Null (N/A) categories display "N/A" in zinc-500.

  • Score-delta on /audit/[id] (A6) — when a matching auditHistory record exists for the audited domain and the scores differ, a delta row renders below the grade: previous grade/score → current grade/score, with a +N pts / -N pts badge (emerald for improvement, red for regression). Gracefully absent when no prior DB record exists or DB is unreachable.

  • IMG copy button on badge (D1) — components/badge-preview.tsx now renders a third CopyBlock (label "IMG") with the raw badge URL, alongside existing Markdown and HTML blocks.

  • agents.md generation (D3) — new generateAgentsMd() in packages/core/src/generate/agents-md.ts; added "agents-md" to GenerateFormat union and DEFAULT_GENERATE_OPTIONS.formats; dispatch block in engine.ts after ctx construction; exported from src/index.ts. Produces a structured markdown file (per the agents.md spec) summarizing site name, overview, capabilities (llms.txt/OpenAPI/MCP/sitemap), OAuth authentication metadata, AI bot permissions parsed from robots.txt, and top 15 key pages. 8 unit tests covering all sections; all 769 core tests pass.

  • /.well-known/mcp.json for w2agent.dev itself (E3) — new app/.well-known/mcp.json/route.ts serves a static MCP server card describing the Meta MCP at agent.w2agent.dev. Contains all three required fields (name, version, capabilities) so w2agent.dev passes its own D4 audit check. Lists all 6 Meta MCP tools. 1-hour ISR + CDN cache.

  • Three new blog posts (F3 complete) — ships remaining posts in the series: (2) /blog/why-enterprise-sites-fail-agents — five failure modes from 136-site dataset, failure rates by industry, subcategory score breakdown, actionable fixes; (3) /blog/bot-visit-data-2026 — 90-day AI bot visit data across audit network, top 10 crawlers by volume + market share, live DB query with static snapshot fallback; (4) /blog/agent-web-growth-90-day — adoption dashboard post using getAdoptionSnapshots(), protocol adoption bars, category breakdown, links to /adoption for full charts. Blog index updated with 3 new entries + cadence footer. Closes F3; subsumes L674 ("State of AI Readiness report").

Changelog — Changelog — 2026 Week 19 | w2agent