| Check | Status | Detail |
|---|
| Saved AI review persistence | PASS | saved page reviews are the server-side source of truth for rewrite/apply/optimize |
| AI review legacy migration | PASS | older review wrappers/lists are normalized automatically |
| App version | PASS | 0.7.04 |
| OpenAI GPT-5.6 Sol model migration | PASS | Legacy OpenAI model ID is normalized to gpt-5.6-sol. |
| Local + National campaign modes | PASS | Local uses GBP/location enrichment; National uses U.S.-wide research with no required physical location |
| National geo isolation | PASS | Article/city references are excluded from National seed keywords and rejected from National keyword results |
| Scanner authority weighting | PASS | Homepage/services/schema prioritized; utility pages excluded; articles cannot define the business category or market |
| GBP / NAP rematch | PASS | Redo Google Places match without a full website rescan |
| New Scan live progress | PASS | Dedicated SSE progress meter enabled |
| Secure API settings | PASS | AES-256-GCM encrypted API-key storage + Settings page |
| OpenAI API key | PASS | configured (encrypted Settings or config fallback) |
| Perplexity API key | PASS | configured (encrypted Settings or config fallback) |
| Claude API key | PASS | configured (encrypted Settings or config fallback) |
| Grok API key | PASS | not configured — provider will be skipped |
| Multi-AI consensus review | PASS | uses whichever configured providers are available |
| Multi-AI rewrite + apply | PASS | combines all successful AI reviews, saves a backup, rewrites, revalidates, and updates preview before WordPress |
| Closed-loop Optimize Until 90+ | PASS | Frozen 100-point page-level rubric; up to 3 passes; stops at 90+ or plateau; site-level/manual issues tracked separately |
| Multi-AI secure settings load order | PASS | SecureSettings is loaded before encrypted provider keys are read |
| Project persistence + recovery | PASS | Profile saves preserve downstream work; automatic/manual restore points protect pages, keywords and competitor analysis |
| Dashboard WordPress button binding | FAIL | WordPress test handler initializes without competitor/page-builder scope errors |
| WordPress staged connection test | PASS | REST reachable → Application Password accepted → user identified → Page edit access confirmed |
| Standalone WordPress tester | PASS | Independent tester available at /wordpress-test.php |
| WordPress credential store | PASS | Encrypted per-client credential store present |
| Safe page field rendering | PASS | Arrays/objects are normalized before HTML escaping; prevents Array to string warnings |
| Existing-page WordPress methods | PASS | findExistingPage + updateExisting available |
| Existing-page endpoints | PASS | detect → backup → update same WordPress Page ID |
| Keyword save verification | PASS | 100% is shown only after keyword + cluster results are re-read from project storage |
| Competitor stall protection | PASS | short task polling + max 5 page inspections + saved per-keyword error records |
| Competitor request watchdog | PASS | browser abort/retry prevents one stalled request from hanging the full analysis |
| New Scan isolated progress | PASS | Dedicated scan-progress.js loads independently from dashboard scripts |
| AI optimization scorecard | PASS | Compact provider/consensus/frozen-rubric scores with saved-state indicator |
| Optimization pass history | PASS | Optimize Until 90+ history is visible and full AI reviews are collapsible |
| Apply AI findings + off-site plan | PASS | Safe page-controllable findings are implemented; missing-data and off-site recommendations are separated into actionable plans |
| Rank Highest Mode | PASS | Rewrites the page with safe on-page improvements and saves supporting-content, internal-link, technical, authority/off-site, local, AI-visibility, measurement and blocker plans |
| Rank Highest async compatibility | PASS | Legacy/live SSE endpoints can call rankHighestAsync without an undefined-method fatal error |
| Rank Highest 90-second timeout protection | PASS | Long OpenAI Rank Highest and Human Quality generations use Responses background mode plus polling instead of one 90-second blocking POST |
| Rank Highest final Human Quality Pass | PASS | Rank Highest async workflow finishes its revised page with the Human Quality Pass while retaining the execution plan |
| Human Quality rerun protection | PASS | Repeat Human Quality passes use the long-running-safe SSE/background path and save a backup before each rerun |
| Final Publishing Readiness | PASS | Deterministic SEO/AI structure, schema coverage, contextual internal-link coverage, and conversion-readiness checks run after Rank Highest and Optimize Until 90+ |
| Explicit page JSON-LD publishing | PASS | Vetted WebPage/MedicalWebPage, Service, FAQPage and BreadcrumbList entities are combined into one JSON-LD @graph |
| WordPress head JSON-LD delivery | PASS | Updated SEO + AI Bridge v1.4 stores the vetted graph per WordPress page and renders it in <head>; body JSON-LD is retained only as a compatibility fallback |
| New-page media warning + schema continuation | PASS | Media upload failures remain warnings; page creation continues to structured-data delivery, the schema panel refreshes, and the user receives a final create acknowledgement |
| Schema delivery chain verification | PASS | Per-page generated → sent → stored → live verification with WordPress meta read-back and public HTML confirmation |
| Strict canonical JSON-LD verification | PASS | Live HTML passes only when the exact canonical response contains literal application/ld+json, valid JSON, required schema types, and the generated schema hash. |
| Legacy JSON-LD shape normalization | PASS | Older saved pages using list, object, @graph, or JSON-string structured-data shapes are normalized before publish |
| Rank/Human independent button JS | PASS | Rank Highest and Human Quality rerun controls load independently from the larger dashboard script |
| Rank Highest live progress | PASS | Step-by-step SSE workflow with clear completion state |
| Page generation completion reload | PASS | Completed page builds force a real dashboard reload before opening the generated-page library; avoids 100%/Complete hang |
| Multi-AI Review independent controls | PASS | Multi-AI Review has an independent button handler with provider-by-provider status and error reporting |
| AI provider status visibility | PASS | Every provider is shown as Configured/Running/Completed/Failed/Skipped instead of disappearing silently |
| Provider key/model test | PASS | Settings can validate configured OpenAI/Claude/xAI model access and report the provider error |
| Claude model migration | PASS | Invalid legacy claude-sonnet-5 default is migrated to claude-sonnet-5-5 |
| Verified local entity detail | PASS | Local pages show verified source entities available/used/unused; National campaigns are N/A and do not fail local-entity checks |
| Off-Site Automation modules | PASS | Prospect discovery, citation/outreach assets, tracking and CSV export installed |
| Off-Site prospect task flow | PASS | DataForSEO task-based prospect discovery installed |
| Search Console module | PASS | OAuth connection, property listing, URL Inspection, sitemap verification/submission and manual Request Indexing handoff installed |
| Search Console opt-in safety | FAIL | No Search Console API action runs during scan, AI review, Rank Highest, diagnostics, or WordPress publish; write action requires its own confirmation |
| Search Console diagnostics read-only | PASS | Diagnostics checks only module presence/configuration; it does not inspect URLs, submit sitemaps, or request indexing |
| Apply Findings independent progress | PASS | Apply Findings has its own live-progress controller and SSE completion path. |
| Verified facts continuation | PASS | Missing business/site facts can be entered, saved as verified data, and immediately fed back into Apply Findings. |
| | |
| Claude JSON repair | PASS | Claude-only parser strips fences/extracts JSON and repairs malformed non-truncated output; OpenAI/Perplexity paths are unchanged. |
| Claude truncation recovery | PASS | Claude-only path detects output-limit truncation, raises Claude output allowance, and regenerates a compact complete JSON response. OpenAI/Perplexity are unchanged. |
| | |
| WordPress pre-publish cleanup | PASS | Markdown→HTML, single FAQ/schema, generator-note cleanup, no duplicate content H1 |
| WordPress SEO publishing hygiene | PASS | Clean title/excerpt, heading IDs, working HTML links/tables |
| Per-client WordPress auto-save | PASS | Successful WordPress tests/publishes save encrypted credentials automatically per client/domain |
| Image uniqueness guard | PASS | Client-level image history prevents exact reuse and rotates cast/wardrobe/composition directives |
| WebP image optimization | PASS | Generated PNGs are converted to real WebP under ~150 KB when PHP GD/WebP is available; WordPress upload uses the correct MIME type |
| Link + citation preservation | PASS | Internal links and authoritative external sources are preserved/rendered in preview and WordPress output |
| Featured image sync | PASS | The first generated/uploaded image is assigned as the WordPress featured image when available |
| Saved generated page library | PASS | Generated pages remain reopenable/editable after WordPress publish or deletion; publish metadata is stored per page |
| Saved WordPress credential reuse | PASS | Test Saved Connection uses the encrypted client credential set directly without asking for the Application Password again |
| Custom keyword page builder | PASS | Build and append a one-off page from any custom primary keyword with live progress |
| Optional keyword discovery | PASS | Analysis-recommended and custom-topic keyword research with campaign/relevance filtering, saved per project |
| Human Quality Pass | PASS | Final natural-language quality pass reduces templated/repetitive page-level patterns while preserving SEO, facts, links, citations, images, and URL identity; not designed to evade AI detectors |