Releases: maxschottke-spec/seo-survival-kit
Release list
v0.5.4 — Recovery Hardening + reconciliation pass
Added
- L4a Stage-State-Machine (Phase 2, experimental N=1) —
recovery-diagnoseoverlays a stage state machine on the rawrecovery_stage_estimate: it freezes stage progression during an active update rollout (active_update_window) or its 28-day settlement (post_update_settlement), and hard-resets the effective stage to R1 on a fresh major hit (re_entry_detected). Newstage_statusfield inbefund.schema.json, markedmaturity: experimental_n1. Distinct from the §12a Settlement Gate (operator-batch write-block). Cumulative-damage / multi-hit formula is the follow-up slice (L4b). - L2 Quiet-Death-Detection (Phase 2, experimental N=1) —
gsc-deep-divenow pulls a per-query weekly click series (query_weekly_series, top 200, up toweekly_series_daysdays) and ships a zero-dep detector (quiet-death-detect.example.js) that flags slow non-update-driven declines (≥50 % loss over ≥6 monotonic weeks, ≥5 start clicks), annotated withupdate_correlation(none/partial vsCORE_UPDATES.md) and apattern_hint. Markedmaturity: experimental_n1. - L1 Pre-Hit-Baseline-Selektion (Phase 2, experimental N=1) —
recovery-diagnoseselects the recovery baseline as the historical peak plateau instead of the last stable phase before the hit, flags multi-update erosion (multi_update_erosion_detected), and reports progress against the true peak (recovery_vs_baseline_pct). Newpre_hit_baselinefield inbefund.schema.json, markedmaturity: experimental_n1. The R1-R5 stage formula is unchanged (stays VI-peak-based; baseline-relative staging is Lesson 4). - LESSONS 2026-06/07 + v0.5.4 roadmap block — five candidate lessons from real post-deploy recovery ops logged in
post-core-update-recovery/LESSONS.md(rendered ≠ stored field, governing-fact-before-editing-a-claim, compliance as a recovery axis, knocking-at-the-door cohort, gate append-only audit). ROADMAP.md gains a v0.5.4 "Recovery Hardening" block scoping L1/L2/L4/L5 as pure-Markdown rules; thecompliance-aware-recoveryruntime skill (L3) is deferred to v0.6 pending cross-case validation. Proof-status honest: causal effect pending. Docs only. - v0.5.4 Recovery Hardening rules written —
SAFE_LIVE_CHANGE_RULES.mdPre-Change Checklist gains rule 10 (rendered-source verification: verify what renders, not the stored field — CMS/meta fields can be plugin/theme-overridden) and rule 11 (governing-fact-before-editing-a-claim).SEO_SETTLEMENT_GATE.md§8 gains the append-only-audit rule (unlock/relock cycles append to history arrays, clean-unlock preferred over forced).recovery-diagnosecommand gains the knocking-at-the-door cohort finder (GSC impressions × CTR × position filter for on-page-hardening targets; now properly integrated as Schritt 11, before the befund write — see the Step-12 integration fix below). Pure-Markdown methodology, no runtime change. - Three CI consistency checks in
.github/workflows/validate.yml: (1) version consistency — plugin.json version checked against every skill'smetadata.version, the rescue orchestrator's "Latest installable version" claim, the README shipped/install-tag lines, plus aschema_versionsweep ofcommands/andtest-fixtures/against thebefund.schema.jsonconst; (2) path portability — any../../../escape above the plugin root inplugins/*/skills/fails the build; (3) export sync — the new zero-depscripts/check-export-sync.jsnormalizesexports/skills/*.mdagainst their canonical SKILL.md counterparts (frontmatter strip, code-block/ASCII-tree strip, link unwrap, claude-seo cross-ref and platform-footer removal) and fails on any drift beyond the accepted baseline inscripts/export-sync-baseline.txt(re-accept intentional divergence with--update).
Changed
- Trigger disambiguation between overlapping skills —
recovery-diagnose(data-driven, requires Sistrix/DataForSEO MCP, writes befund.json) andpost-core-update-recovery(pure-Markdown framework, no tools) now point at each other in their frontmatter descriptions; likewiserecovery-monitor(API-driven weekly tracking) vssistrix-monday-recovery-check(CSV-only weekly review). In therescueorchestrator, therescue diagnosealias now routes torecovery-diagnoseand the framework got the new aliasrescue framework; the routing digraph gained the "Core-Update drop + MCP tooling available? → recovery-full" branch and arescue helpelse-terminal; the missing sub-skill summaries (ai-citations-tracker, gsc-deep-dive, subscription-monetization-audit, and a pointer to the sixrecovery-*command specs incommands/) were added.
Fixed
- README/marketplace fact-check pass — removed the unsupported "30+ marketplaces" claim from README and
marketplace.json(the channel-economics skill documents ~6 example marketplaces and works from user CSVs); recovery-diagnose row now says "GSC, with CSV fallbacks" (GSC access is MCP/API-first, CSV is the degradation tier); exports paragraph names the actual shipped fileseo-rescue-overviewinstead ofrescue; per-audit cost normalized to~$0.05–$0.50everywhere (README table vs. "Before you run anything" row vs. COSTS.md TL;DR previously mixed € and $); recovery-monitor row notes the score isnullon insufficient data; CONTRIBUTING link no longer implies a CONTRIBUTING.md exists; CLAUDE.md exports platform list gained the missing Continue.dev; minor wording ("build-up phase", "Recovery Retainer"). - Recovery spec/schema/script reconciliation + RECOVERY_SYSTEM fork merge — six fixes: (1)
schema_versionunified to"1.0.0"across all recovery command docs and fixtures (docs claimed"2.0"; schemas, scripts, and existing data are1.0.0); (2) the fictional "lokaler Minimal-Crawler" fallback removed from therecovery-crawldocs — the script is a data-processing helper, not a crawler; degradation now goes SF MCP → CSV-import →failed; (3) documented script call snippets corrected to the realwriteIssuesJSON(...)/writeMonitorEntry(...)signatures, andrecovery-monitor.jsgained backward-compatible options passthrough forkeywords_total,source_notes,settlement_gate_status,change_effects,audit_health,viTrend4wPct,backlinkSpamScore; (4) recovery-monitor score engine aligned with its spec: no hardcoded neutralbacklink_quality = 50(the ≥2-components rule is now real), components emitted as{ value, weight }objects with weights normalized to 1.0,issue_reductiongated on fresh issue data,vi_trendcomputed fromvi_trend_4w_pctwhen provided (befund-baseline fallback documented as such),phase: nullwithout baseline instead of a guessedR2,failedreserved for no-write aborts (history.schema.jsonupdated to match); (5) the two divergentRECOVERY_SYSTEM.mdforks merged —plugins/seo-rescue/references/RECOVERY_SYSTEM.mdis now the canonical union (v0.5.2 status note + section-10 score disambiguation from the root copy; §4b/§4c/Step-7a/batch-velocity/shared-CMS-trap/§12a kept), the root file is a pointer stub, and the stale "It does not block edits." claim is replaced by "does not block edits by default, except when a Settlement Gate is active (§12a)"; (6) stale "v0.5.1" ship claims corrected to "shipped in v0.5.2" in SISTRIX_MONDAY_RECOVERY_CHECK.md, ROADMAP.md, ARCHITECTURE.md and the sistrix-monday-recovery-check skill. - Recovery-command consistency sweep —
recovery-plan's settlement-gate output now uses the nestedsettlement_gate_statusmirror ({ active, next_allowed_review_date, unlock_status }) instead of flat fields, matchingrecovery-diagnoseandrecovery-monitor;action-plan.schema.jsongained the matchingsettlement_gate_statusproperty (byte-identical tobefund/history).recovery-monitorgained theChange GovernanceandAusgabe an den Usersections for section parity with the other recovery commands. Docs/schema only — no runtime behavior change. - Step-12 integration, N=1 markers, stage vocabulary — the knocking-at-the-door cohort finder is now a real workflow step instead of an orphaned appendix: moved to
recovery-diagnoseSchritt 11 (before the befund write, steps renumbered),hardening_candidatesadded tobefund.schema.json(optional/nullable, max 10 entries,experimental_n1), GSC declared as an optional capability with a graceful-degradation row (hardening_candidates: null+ warning without GSC), consumed byrecovery-planas quick-win evidence (risk ≥ yellow) and surfaced in therecovery-fullsummary; the rule-of-thumb expected-CTR curve now lives in ONE canonical table (recovery-diagnose Schritt 11) referenced from RECOVERY_SYSTEM §8. The v0.5.4 rules (rendered-source verification, governing-fact, gate append-only audit, knocking-at-the-door, §4a healthy-% thresholds, trust-anchor generalization) all carry explicitexperimental_n1/ "one observed case (N=1)" markers matching the L1/L2/L4a convention. RECOVERY_SYSTEM gained a stage/phase vocabulary table disambiguating the three namespaces (Stage 0–5 keyword milestones, diagnostic stage R1–R5, work phase R1–R5, ordered R1<R2<R3<R4<R5) with the §4c cross-reference corrected (it pointed R1→R5 at §4, which defines Stage 0–5); the diagnostic R1–R5 bands are now numeric defaults overvi_trend_4w_pct(R1 < −10, R2 −10…+2, R3 +2…+10, R4 > +10 below 0.9×peak, R5 ≥ 0.9×peak; marked experimental/calibratable, consistent with the L4a re-entry threshold), defined inrecovery-diagnoseitself;stage_status.stagemay now benullwhen VI data is missing. - Rescinded AI-citations claim propagated — the "AI citations move 2–6 weeks before SISTRIX VI" operational-finding phrasing (rescinded 2026-06-03, pre-update plateau) is now consistently stated as an N=1 hypothesis ("log the signal, do not act on it alone") in RECOVERY_SYSTEM §4, SISTRIX_MONDAY_RECOVERY_CHECK.md, DECISION_ENGINE
r-ai-citations-leading-indicator(confidence Medium → Low, both copies), and the `ai...
v0.5.3 — Governance enforcement + recovery-audit + current Core-Update data
Added
CORE_UPDATES.mdbrought current — added the May 2026 Core Update (2026-05-21 → 2026-06-02), March 2026 Spam, February 2026 Discover, December 2025 Core, August 2025 Spam, and June 2025 Core updates with rollout dates verified 2026-06-03 (Google Search Status Dashboard + Search Engine Land, 16-month historical scan). NewTypeandVerifiedcolumns; unverified pre-v0.5.2 seed entries are capped atmediumcorrelation. New "Update types and correlation" section covers spam/discover semantics and the multi-update-sequence baseline-erosion caveat.- Settlement-Gate awareness in
recovery-diagnoseandrecovery-monitor(closes the last open Settlement-Gate TODO) — both read-only commands now readrecovery-gate.json, mirror asettlement_gate_statusblock into their outputs (befund.schema.json+history.schema.jsonextended), print a gate line when active, and phrase recommendations as prepare-now/execute-after-re-evaluation. recovery-monitor additionally must not recommend corrective live action on sharp score moves (>15 points) during an active gate — observations go to the gate re-evaluation instead.
Changed
-
Doc-polish consolidation pass (closes #29, #30, #31, #32, #33, #35): recovery sequencing now lives authoritatively in RECOVERY_SYSTEM.md §11 (ARCHITECTURE §3 and DECISION_ENGINE §7 reduced to cross-links, engine-unique rule bindings kept); evidence weighting lives in DECISION_ENGINE.md §3 (ARCHITECTURE §7 copy replaced by cross-ref); out-of-scope list lives in ARCHITECTURE §11 (ROADMAP section reduced to a cross-link, two ROADMAP-only bullets merged in); ROADMAP v1.0 contributor criterion reworded to "landed (reviewed; merged at maintainer discretion)"; SISTRIX_MONDAY §12 (CR validation) and the per-cluster stage subsection moved to Appendices A/B without renumbering (all cross-referenced section numbers stay valid); LESSONS.md pilot-niche keyword strings anonymized to vertical-neutral abstractions.
-
ARCHITECTURE §4 skill registry completed — 8 missing rows added (sistrix-monday-recovery-check, subscription-monetization-audit, six recovery commands); stale "planned skills" sentence updated.
-
exports/ synced — post-core-update-recovery export caught up with the canonical SKILL.md (self-canonical audit, structural baseline, acceleration factors incl. the N=1-marked AI-Citations hypothesis); seo-rescue-overview export updated to v0.5.2 / 18 skills with routing rows for the newer skills; exports/README MCP timeline corrected to v1.0+.
-
New skill wrapper:
recovery-audit(SKILL.md) — the existingcommands/recovery-audit.mdspec is now plugin-discoverable and user-invokable like the other five recovery commands. recovery-audit is the documented writer ofrecovery-gate.json(Settlement-Gate state) and of thehypothesis_registrythatrecovery-planconsumes. Routed in the orchestrator and README. Skill count: seventeen → eighteen. -
recovery-fullworkflow now includes the audit step: diagnose → crawl → audit → plan → monitor (5 steps, shared run_id). The audit always runs and degrades gracefully when no change history exists.
Changed
change-budget.schema.jsonv1.2.0 → v1.3.0 — three rule sets that were documentation-only are now schema-enforced viaif/then: (1) per-change-type pre-check presence (redirectrequiresseo_url_precheckwithcollision_detected;category_status/product_statusrequiredreiscseo_precheckwithwould_create_301_to_404;cms_slotrequiressnapshot_paths.before_path), (2) Settlement-Gate override requirements perSEO_SETTLEMENT_GATE.mdsection 7 (explicit_emergency_approvalrequires approval validation, post-change checks, per-change rollback method + pre-change state check + confidence ≥ medium;technical_emergencyrequires live-HTTP verification, API state alone is rejected), (3) Reserve-bleibt-Reserve during an active gate (reserve_bleibt_reserve_acknowledged: true,unused_budget_handling: forfeit). New per-change fields:pre_change_state_check,hypothesis_id,hypothesis_status_snapshot,fix_scope_match,verified_by_source_tier; new top-levelhypothesis_verification_gateblock.lib/safe.js: two new governance validators —checkHypothesisScopeMatch()(Hypothesis Verification Gate incl. fix-scope-expansion detection and graceful first-run degradation) andvalidateSettlementOverride()(deny-by-default section-7 override verdict with explicit missing-requirements list; catches broad-trigger approval text even whenis_validwas forged). 19 new tests inlib-safe-primitives.test.js(55 total).
Fixed
- Hypothesis Verification Gate first-run deadlock —
recovery-planStep 8a hard-stopped on missinghypothesis_ideven when norecovery-auditoutput existed yet (the normal state on a first run). The gate now degrades gracefully: without audit output the full plan is still generated, all actions are segregated toprepare_now_execute_later(roadmap-only), warninghypothesis_gate_no_audit_outputis recorded, and the gate block carriesaudit_output_available: false. Hard stops only apply when ahypothesis_registryis present. - Settlement-Gate pre-check in
recovery-plannow documents who writesrecovery-gate.json(recovery-audit) and warnsgate_state_possibly_stalewhen change history suggests an un-audited Major Batch. post-core-update-recovery: the "AI Citations as leading confirmation" acceleration factor was downgraded to an explicitly-marked N=1 hypothesis — the 2026-06-03 LESSONS correction rescinded exactly this claim (the observed +22 % trend was a pre-update plateau erased by the May 2026 Core Update).
Security
lib/safe.js—acquireLockback-off no longer shells out (execSync('sleep …')replaced withAtomics.wait), honoring the repo's own "neverexecSynca string" rule; portable and spawns no process.lib/safe.js—atomicWriteJSONnow writes its temp file withO_EXCL(viawriteFileExclusive), so a pre-existing symlink at the temp path aborts the write instead of being followed (parity withappendNDJSON/writeFileExclusive).subscription-monetization-audit/csv-import.example.js— summary write switched from unlink-then-exclusive (TOCTOU) toatomicWriteJSON(atomic, symlink-checked, idempotent).
Changed
- Version/consistency sweep (post-review):
rescueSKILL.md installable-version claim v0.5.0 → v0.5.2; RECOVERY_SYSTEM.md status note rewritten for v0.5.2 reality (sistrix-monday-recovery-check shipped, recovery commands partially implement the methodology); SISTRIX_MONDAY_RECOVERY_CHECK.md "planned v0.5.1" → shipped, companion-doc section numbers corrected (Recovery Signal Score §10, Winner/Loser §8, Money-KW §7, URL Recovery §9, sequencing §11). - Score disambiguation: the weekly CSV-first Recovery Signal Score (RECOVERY_SYSTEM.md §10 / sistrix-monday-recovery-check) and the automated 5-component Recovery Score (recovery-monitor) are now explicitly documented as two distinct, non-comparable metrics — both 0-100, never to be mixed in one time series.
- Batch-limit clarification: structural changes are 3 URLs per calendar day (counted across sessions via change-history.ndjson), 4-5 only with an explicit batch plan, 5/day is the absolute ceiling; Governor Hard Stop rule 3 and SAFE_LIVE_CHANGE_RULES table now state the same rule.
- R1-R5 disambiguation:
recovery_stage_estimate(diagnose, VI-trend-based diagnostic stage) vscurrent_phase(plan, operational work phase) documented as intentionally distinct signals with divergence rules (phase ≤ stage+1, divergence must be warned and explained, phase is recomputed every run). - Documentation consistency sweep: reconciled the contradictory skill counts (was "eleven"/"ten"/"sixteen" across CLAUDE.md, ARCHITECTURE.md, and the orchestrator) to the canonical seventeen skills/commands (one orchestrator + sixteen sub-skills and recovery commands); refreshed install pins and status lines to v0.5.2; aligned every per-skill
version:frontmatter to 0.5.2.
v0.5.2 — Change Governor + Settlement Gate
Recovery Operating System milestone: machine-enforceable change discipline.
Added
-
SEO Change Governor + Settlement Gate — session-mode change budgets (
audit_onlydefault with explicit operator escalation), per-change risk / evidence / rollback / approval rating, and a post-Major-Batch Settlement Gate that hard-blocks new optimization waves until enough data has accumulated to attribute cause and effect. Ships withreferences/SEO_CHANGE_GOVERNOR.md,references/SEO_SETTLEMENT_GATE.md,references/SAFE_LIVE_CHANGE_RULES.md, therecovery-auditcommand, governance JSON schemas (change-budget,recovery-gate,seo-change-audit,hypothesis-verification), platform/plugin SEO references, and ecommerce recovery test fixtures. -
GitHub issue templates — bug report, feature request, usage feedback, and a config router pointing open-ended questions to Discussions and security reports to private advisories.
-
New skill:
subscription-monetization-audit(SKILL.md) — a 5-lever recurring-revenue playbook (pricing, packaging, retention, expansion, win-back) with an optional CSV import path for Stripe / Chargebee / Recurly exports that computes MRR, ARPU, churn, and cohort retention locally. CSV import viacsv-import.example.jswithlib/safe.jssafety primitives (size-capped reads, no network calls). Routed in therescueorchestrator as/seo-rescue:rescue monetizationand listed in the README "Reporting and economics" table. -
Recovery Workflow Commands: Five new commands for automated SEO recovery
recovery-diagnose— Core Update diagnosis with capability-based provider fallbacks (Sistrix + DataForSEO MCP + GSC CSV + manual CSV)recovery-crawl— Screaming Frog MCP crawl + local minimal-crawler fallback + issue classificationrecovery-plan— Prioritized 30/60/90-day action plan with human approval gate and evidence arraysrecovery-monitor— Weekly tracking with deterministic 0-100 recovery score and component scoresrecovery-full— Orchestrator chaining all four commands with graceful degradation
-
New runnable skill:
sistrix-monday-recovery-check(SKILL.md) — CSV-first weekly recovery review during an active SEO recovery. No SISTRIX API key required. Reads current and previous SISTRIX keyword exports (optionally a money-keyword list, optionally a GSC export, optionally CR data) and emits a fixed 17-section structured report: visibility-index interpretation, Top-100/50/20/10/5/3 recovery distribution, winner/loser neutralization, money-keyword protection table, URL-level recovery table, per-cluster recovery stage (0-5), Recovery Signal Score (0-100), optional GSC cross-check, optional conversion-rate validation, one of six recommended actions (Observe / Protect / Strengthen / Investigate / Correct / Escalate), explicit What-Not-To-Touch guard, next-7-day monitoring plan, next-Monday checklist, confidence level, data limitations. Methodology specification in SISTRIX_MONDAY_RECOVERY_CHECK.md; operational detail in RECOVERY_SYSTEM.md sections 4-10. -
Synthetic example folder
examples/synthetic-sistrix-monday-check/with the input SISTRIX CSV shape (current week + previous week + money-keyword list) and the expected output Markdown. All data uses the RFC 2606 reserved.testTLD. -
lib/safe.js v2:
normalizeDomain(),generateRunId(), enhancedacquireLock()(PID/token/stale TTL),atomicWriteJSON()(collision-safe),appendNDJSON(),safeReadJSON(),safeReadLatestImport(),maskSecrets(),safeLog() -
JSON Schemas: schema_version, run_id, data_quality, confidence, providers_used, missing_capabilities in all command outputs
-
Reference documents:
CORE_UPDATES.mdwith 90-day freshness policy,RECOVERY_SYSTEM.md,DECISION_ENGINE.mdunderplugins/seo-rescue/references/ -
Documentation: ONBOARDING.md, SETUP.md, TOOL_PROVIDERS.md, FALLBACKS.md, TROUBLESHOOTING.md under
plugins/seo-rescue/docs/ -
Test fixtures: Minimal CSV and JSON test data for offline testing under
plugins/seo-rescue/test-fixtures/ -
Command/skill wrapper pattern: Detailed command specs in
commands/with thinskills/*/SKILL.mdwrappers
Changed
- Skill count is now sixteen (one orchestrator plus fifteen sub-skills/commands). README.md, CLAUDE.md, and the orchestrator
rescue/SKILL.mdupdated accordingly. rescue/SKILL.mdQuick Reference table adds the/seo-rescue:rescue mondayalias plus the five new recovery commands. Cost summary table extended. Latest installable version footer updated from a stale v0.3.0 to v0.5.1.
Deferred to a later v0.5.x
- Optional Node.js helper script for deterministic CSV parsing + Recovery Signal Score computation. v0.5.1 ships as a pure-Markdown framework skill — Claude reads the CSVs via the Read tool and applies the methodology. The helper script would let the same workflow run in batch / cron mode and is the natural v0.5.2 follow-up if usage proves the demand.
- ARCHITECTURE.md skill registry and MATURITY.md comparison-table skill-count cosmetic updates land at v0.5.1 release alongside the manifest version bump.
v0.5.0 — architecture consolidation
[0.5.0] — 2026-05-26
Architecture consolidation
This release does not change runtime behavior. It reaches canonical-source-of-truth state for the documentation. Skill set remains the same 10 (1 orchestrator + 9 sub-skills). Plugin manifest, per-skill version: frontmatter, and install pin lines (/plugin marketplace add maxschottke-spec/seo-survival-kit#v0.5.0) bumped from 0.4.1 to 0.5.0 at release time.
Added
- ARCHITECTURE.md — canonical source of truth: vision, ecommerce/D2C positioning, system shape (diagnostic/decision/workflow layers), skill registry, governance and lifecycle, privacy and client-data posture (private experience layer with pattern maturity model), adaptive user onboarding, knowledge layer with four-level evidence weighting, plugin architecture, compatibility with adjacent tools, versioning and release process, what is intentionally not implemented
- RECOVERY_SYSTEM.md — six-stage recovery framework, Recovery Risk Engine, Money Keyword Protection rules and at-risk classification, Winner/Loser Neutralization detection and severity, URL Recovery Analysis with per-type recommendations, Recovery Signal Score with twelve factors, five-phase recovery sequencing (R1 Protect → R2 Stabilize → R3 Improve internal links → R4 Fix intent conflicts → R5 Selective consolidation)
- DECISION_ENGINE.md — decision-first manifesto, codified decision rules (
r-margin-unknown-no-scale,r-roas-positive-margin-negative,r-sistrix-vi-flat-money-keywords-recovered,r-money-keywords-top3-protect,r-ai-citations-leading-indicator, and others), evidence weighting at four levels, data quality layer with four dimensions, profitability signals as first-class concern, five-class prioritization (Immediate / Medium / Monitor only / Risky / False), sequencing constraints across phases, cross-channel signal integration patterns - SISTRIX_MONDAY_RECOVERY_CHECK.md — weekly CSV-first workflow specification (runnable skill ships in v0.5.1)
- ROADMAP.md — version-by-version product plan, distinct from ROADMAP-2026.md (future-watch document)
Changed
- README repositioned around ecommerce/D2C Recovery OS wedge. Skill-count corrected from "Nine" to "Ten skills (1 orchestrator + 9 sub-skills)". Status section updated from v0.3.x to v0.4.1 shipped / v0.5-dev in flight. Doc map added.
- CLAUDE.md architecture tree updated to include
ai-citations-tracker,gsc-deep-dive,exports/, and the new top-level docs. Skill count corrected from "seven SEO skills" to ten. - MATURITY.md version row updated to reflect v0.4.1 shipped + v0.5-dev in flight. Positioning paragraph added.
.gitignoreextended for private data paths:private/,client-data/,real-data/,exports/private/,lessons/private/,case-notes/private/,local-notes/,tokens/,credentials/,sistrix-exports/,gsc-exports/,*_sistrix*.csv,*_visibility*.csv,*_keywords*.csv,*_ranking*.csv,.growth-survival-kit/,.seo-survival-kit/,gsc-config.json,ai-citations-config.json,gsc-history/,ai-citations-history/
Fixed
plugins/seo-rescue/skills/gsc-deep-dive/SKILL.mdStep 1a now warns explicitly against using Google AI Studio default projects (project IDs matchinggen-lang-client-XXXXXXXXXX); these service accounts hit "Email not found" when added to GSC even after 12+ hours of propagation. Addresses real-user issue #26.plugins/seo-rescue/skills/gsc-deep-dive/SKILL.mdprivate example-domain reference replaced with reserved-TLD example per redaction policy.plugins/seo-rescue/skills/ai-citations-tracker/SKILL.mdbrand-variant false-positive example updated to reserved-TLDaero-mattress.test.
Deferred to v0.5.5 (separate PR)
- Commercial Model documentation: agency model, decision-first agency principles, service model stages, productized offer hypotheses with pricing logic, Fiverr Interface positioning and planned commands, buyer-objection log schema, GTM experiment template, implementation partner model. Kept separate from v0.5 technical architecture for review clarity.
Deferred to v0.6+
- Runnable SISTRIX Monday Recovery Check skill (v0.5.1)
- Revenue Rescue runtime (v0.6)
- Safe updater implementation (v0.6); v0.5 documents the design only
- Test fixtures, expected-output assertions, evaluation rubric (v0.6+)
v0.4.1 — Cross-Platform Exports
Makes the framework-only skills work outside Claude Code. Pure-Markdown exports for Cursor, OpenAI Custom GPT, Gemini CLI, Aider, Continue.dev, Codex, and any generic LLM tool.
```
/plugin marketplace add maxschottke-spec/seo-survival-kit#v0.4.1
```
What's new
New `exports/` directory with three platform-agnostic Markdown files (Claude-specific frontmatter stripped):
- `exports/skills/seo-rescue-overview.md` — top-level routing + framework index
- `exports/skills/post-core-update-recovery.md` — diagnose + 4-phase Authority-First recovery
- `exports/skills/ai-search-rescue.md` — 7 tactics + 3-layer measurement for AI Overview / ChatGPT / Perplexity citation visibility
`exports/README.md` has per-platform install snippets:
| Platform | Where the files go |
|---|---|
| Cursor | `.cursor/rules/*.mdc` (or legacy `.cursorrules`) |
| OpenAI Custom GPT | Instructions field + Knowledge files upload |
| Gemini CLI | `GEMINI.md` or `@file` mentions |
| Aider | `CONVENTIONS.md` or `--read` |
| Continue.dev | `config.json` docs array |
| Codex | `AGENTS.md` |
| Any other LLM | paste into system prompt |
Scope discipline
Only the three pure-Markdown framework skills are exported. The seven script-backed skills (`seo-audit-free`, `seo-outreach-report`, `competitor-deep-audit`, `psi-weekly-cron-baseline`, `channel-economics-analyzer`, `ai-citations-tracker`, `gsc-deep-dive`) stay Claude-Code-specific because their SKILL.md routing depends on Claude Code's slash-command + `allowed-tools` conventions.
The underlying Node scripts are platform-agnostic — `exports/README.md` documents how to run them directly with `node` on any system with API keys + a config file.
Planned
v0.5.x: MCP server wrapper exposing each script-backed skill as an MCP tool — real cross-LLM portability (Cursor, Codex, Continue, Aider, Claude Desktop, Goose, n8n) instead of just framework-knowledge portability.
Compatibility
No code changes. Existing v0.4.0 installs upgrade transparently. The `exports/` directory is purely additive.
v0.4.0 — Two New Skills + Consulting CTA
Minor version: two new skills (ai-citations-tracker, gsc-deep-dive) + a maintainer-consulting CTA in the README. No breaking changes — existing v0.3.x installs upgrade transparently. Install:
```
/plugin marketplace add maxschottke-spec/seo-survival-kit#v0.4.0
```
What's new
`ai-citations-tracker` — the leading-indicator measurement loop
The companion to `ai-search-rescue`: while that skill is the framework, this one is the weekly cron that measures. Fires a configurable brand-mention prompt set against ChatGPT (OpenAI API) + Perplexity (Sonar API), parses each answer for brand vs competitor mentions, appends NDJSON history for trend analysis.
- Same architecture as `psi-weekly-cron-baseline` (config → fetch → NDJSON → cron)
- Cost: ~$0.10/year of OpenAI credits + Perplexity free tier
- Manual workflow documented for Google AI Mode / AI Overviews / Bing Copilot / Claude.ai (no stable public APIs yet)
Why it matters: the LESSONS.md observation that AI citations move 2–6 weeks before classical Sistrix VI recovers makes this the most actionable leading indicator for recovery work. Most plugins describe AI search visibility — this one measures it.
`gsc-deep-dive` — removes the daily-friction point
One-call Google Search Console snapshot. Pulls top queries, top pages, query-page pairs, search-appearance breakdown (incl. AI Overview impressions where GSC exposes them), and derives a summary with Quick-Win opportunity counts (positions 11–20 with >100 impressions).
- Authenticates via service-account JWT — manual RS256 sign via Node crypto, no `googleapis` npm dep (keeps the zero-runtime-deps discipline)
- 15-20 min one-time GCP setup (create service account, grant GSC restricted access)
- Free; well within GSC API quota for one site weekly
- Removes the manual GSC click-through that is the friction point of every recovery / audit session
`README` "Need help running this on your own site?" section
Three explicit consulting offerings between the Contributors and Status sections:
- Recovery Audit (fixed-fee) — diagnose PDF + 60-min strategy call + 4-phase plan
- Recovery Begleitung (3-6 month retainer) — monthly reviews + plan adjustments
- Outreach pipeline setup — for agencies that want decision-maker-ready PDFs
Optional and explicit about that. Plugin works fine without engagement.
Security
Both new scripts follow every post-Round-1-audit hardening convention (v0.3.2 H1-H4 + M1-M6 + L2/L3/L5/L7):
- API keys env-only (`OPENAI_API_KEY`, `PERPLEXITY_API_KEY`, `GSC_SERVICE_ACCOUNT_JSON`); hard-fail if config has key field
- Validate-at-load + trust-at-use for every config input
- Hardcoded network destinations only — `api.openai.com`, `api.perplexity.ai`, `oauth2.googleapis.com`, `searchconsole.googleapis.com`, `www.googleapis.com/pagespeedonline/v5`. No SSRF possible
- 12-pattern `sanitize()` on every AI-surface response and every GSC query string (Google indexes attacker-controllable search strings)
- NDJSON / JSON output files `chmod 0o600` on first write
- Symlink-clobber defense on the GSC snapshot output path
Compatibility
No breaking changes vs v0.3.x. Existing installs keep working. The two new skills are opt-in — install + ignore them if you don't need AI-citation tracking or direct GSC access. The README consulting section is purely additive.
See CHANGELOG.md for the full breakdown.
v0.3.3 — Polish-Pass (L-severity hardening)
Patch release. Non-functional hardening of code that already worked correctly under normal use. Existing v0.3.2 installs upgrade transparently — no skill behavior changes, no trigger-phrase changes, no plugin-manifest surface changes.
```
/plugin marketplace add maxschottke-spec/seo-survival-kit#v0.3.3
```
Closes the LOW-severity findings (L2, L3, L5, L7, N2) from the 2026-05-22 Round 1 external audit. See CHANGELOG.md for the per-item explanation.
| # | File | Fix |
|---|---|---|
| L2 | `lib/safe.js` | Cross-platform note about `fs.chmodSync` no-op on NTFS |
| L3 | `psi-fetch.example.js` | NDJSON history file `chmod 0o600` on first write (was world-readable via default umask) |
| L5 | `seo-report-gen.js` | Symlink-clobber defense on PDF output path |
| L7 | `competitor-deep-audit.example.js`, `seo-onpage.js` | CR/LF strip + length cap on scraped strings before stderr logging |
| N2 | `seo-audit-free/SKILL.md` | Security note about `/tmp/` writes on shared hosts + `mktemp -d` pattern |
v0.3.2 — Hardening + Marketplace-Readiness
This is the version to install for the marketplace-ready, externally-reviewed plugin.
/plugin marketplace add maxschottke-spec/seo-survival-kit#v0.3.2
/plugin install seo-rescue@seo-survival-kit
What changed since v0.3.1
12 PRs across two parallel tracks landed in this cycle: a security hardening sprint driven by an external audit, plus a marketplace-readiness pass rewriting positioning and disclaimers. See CHANGELOG.md for the full per-section breakdown.
Highlights — security hardening
lib/safe.jsgained three new helpers —safeHostname,safeUrl(SSRF + cloud-metadata guard against 169.254.169.254 / RFC1918 / loopback / .local / IPv6 ::1),safeLabel.validateConfigTargetsnow covers domain + host + label (previously only slug).sanitize()defense against indirect prompt injection via scraped third-party HTML — 12 imperative-pattern matchers, length caps per field, type coercion. Adversarial test passes 17/17 (10 attack strings caught, 7 legitimate marketing phrases preserved).allowed-toolsdeclared per skill — Pure-Markdown framework skills get[Read, Grep, Glob]; script-runners get[Read, Write, Bash(node:*), Bash(curl:*)]plus narrower extensions per skill. Bounds the blast radius of any prompt-injection chain.- Routing-safety section in the
rescueorchestrator — codifies that sub-skill routing decisions come from the initial user message, never from tool-output content. .gitignore+ PSI API-key dual-path closed — user-supplied configs (audit-config.json,psi-config.json,channels.json) + runtime working dirs (data/,psi-history/,*.ndjson) are ignored;psi-fetch.example.jshard-fails ifapi_keyis found in the config file.- SSRF + path-traversal fixes in
psi-fetch.example.js(URL allowlist),channel-economics.example.js(safeSlugfor channel names),competitor-deep-audit.example.js(safeHostnameforprocess.argv[2]). - CI workflow hardening — SHA-pinned
actions/checkout+actions/setup-node,permissions: contents: read,persist-credentials: false,find -print0 | while read -d ''instead of shell-interpolatedfor f in \$(find …).js-yaml@4dependency replaced with an inline regex frontmatter validator. CI runtime supply chain bounded to the two SHA-pinned actions.
Highlights — marketplace-readiness
- README rewritten for marketplace tone — lead-generation framing replaced with sachliche When to use / When not to use sections + YMYL notice.
- Public-Beta status prominent at top; single-maintainer / bus-factor-1 / no-SLA disclosure at bottom.
- Naming clarification table — repository (
seo-survival-kit) vs plugin (seo-rescue) vs slash-command-prefix (/seo-rescue:...). - claims-vs-observations softening — recovery percentages and AI-citation lead-time claims reframed as observations from a small case-base, not predictions.
channel-economicsfee-table disclaimer — fees are Q1 2026 starting estimates that vary by category / tier / region / fulfillment; verify against current seller agreements.
Highlights — docs + infra
- Two-round external security review documented in
SECURITY.md(Round 1: external reviewer with gitleaks/trivy/semgrep + 4 parallel domain-subagent analysis; Round 2: maintainer-driven senior-engineering + marketplace-reviewer audit with gitleaks/trufflehog/semgrep + manual senior-eng re-read). Verdict: SAFE TO PUBLISH. - For-external-reviewers section in
SECURITY.md— anti-hallucination guardrails for LLM-assisted reviewers ([VERIFIED]/[PROBABLE]/[UNVERIFIED]labels, mandatoryfile:linecitations, copy-paste system prompt for free-tier LLMs). - Cross-platform env-var reference in
ONBOARDING.md— explicit table covering all five env-var overrides (CHROME_PATH,SEO_CACHE_DIR,SEO_PDF_OUTPUT_DIR,SEO_AUDIT_CONFIG,PSI_CONFIG) with per-OS defaults + PowerShell snippet for the Windowschmod 600equivalent (NTFS ACL). - "Already in production use" section in
MATURITY.md— explicit about what "in use" means (active pilot-domain recovery since March 2026, real cold-outreach prospects served) vs what it doesn't (no external users, no SLA). - Contributors section in
README.mdcrediting the external security reviewer. - Dependabot, CODEOWNERS, branch protection all live on
main.
Compatibility
No breaking API or skill-frontmatter changes vs v0.3.1. Existing installs continue to work; v0.3.2 makes the same plugin's defaults safer and its positioning cleaner. The plugin remains MIT, zero npm runtime dependencies, no postinstall hooks.
Acknowledgments
External security review by @kamehamea-art (Jeronzo) drove the entire v0.3.x security sprint. See SECURITY.md → External security reviews for the full audit trail.
v0.3.1 — slash commands in description (catalog discoverability)
Patch release. Plugin and marketplace descriptions now embed every namespaced slash command directly in the listing text. Users browsing the catalog see the full command surface (/seo-rescue:rescue, /seo-rescue:seo-audit-free, /seo-rescue:post-core-update-recovery, /seo-rescue:seo-outreach-report, /seo-rescue:channel-economics-analyzer, /seo-rescue:competitor-deep-audit, /seo-rescue:psi-weekly-cron-baseline, /seo-rescue:ai-search-rescue) without having to click through to the README.
No functional changes vs v0.3.0. Install:
/plugin marketplace add maxschottke-spec/seo-survival-kit#v0.3.1
/plugin install seo-rescue@seo-survival-kit
v0.3.0 — ai-search-rescue + orchestrator + CI + project docs
Substantial release adding the seventh skill, a meta-orchestrator, and infrastructure to prevent the v0.2.0-style un-installable-tag scenario from happening again.
New: ai-search-rescue skill
Framework for recovering visibility in AI search surfaces — Google AI Overviews, Google AI Mode, ChatGPT, Perplexity, Bing Copilot, Claude.ai search. Different mechanics from classical SERP work: the lever is being cited, not being clicked.
What's in it:
- Three-layer measurement: brand-mention prompt set across all six surfaces, GSC AI-traffic filter, AI-crawler log analysis
- Seven optimization tactics (extractable passages, question-shaped headings, source-cited statements, author + Person-Schema, schema for AI, llms.txt, Wikipedia mention)
- 6-12 week recovery workflow with weekly milestones
Grounded in real recovery work where AI-Mode + AI Overview + ChatGPT citation counts moved 2-6 weeks before classical Sistrix VI did. That makes AI citations a leading indicator that Authority-First work from post-core-update-recovery is being recognized.
New: rescue orchestrator skill
Modeled after the claude-seo:seo orchestrator pattern (Tier-4 reference). Type /seo-rescue:rescue to see a routing table for all seven content skills, with sub-aliases like /seo-rescue:rescue audit <domain> that route to specific skills. Makes the full plugin surface area discoverable from a single command.
New: CI workflow
`.github/workflows/validate.yml` runs on every push and PR. Pure node/yaml checks that catch the same bug classes as `claude plugin validate` (manifest paths, JSON parse, YAML frontmatter parse, marketplace.json reference resolution). Plus best-effort `claude plugin validate` invocation when the CLI is installable. Prevents repeat of the v0.2.0/v0.2.1 un-installable releases.
New: project docs
- `CLAUDE.md` at repo root — project overview, architecture diagram, release process, security model, contribution guidelines
- `CHANGELOG.md` — Keep-a-Changelog format, all releases back to 0.1.0
Polish: slash-command discoverability
All seven content SKILL.md frontmatters now declare `user-invokable: true`, `argument-hint`, `license: MIT`, and a `metadata` block (`author`, `version`, `category`). Matches the claude-seo convention. Improves Claude Code autocomplete and catalog-tooling integration.
README has a Quick Reference table at the top showing every namespaced slash command with one-line description and cost-per-audit.
Install
```
/plugin marketplace add maxschottke-spec/seo-survival-kit#v0.3.0
/plugin install seo-rescue@seo-survival-kit
/reload-plugins
```
If you tried v0.2.0 or v0.2.1 and the plugin didn't appear after install — they had the manifest at the wrong path and were never actually installable. v0.2.2 was the first installable version; v0.3.0 adds substantive functionality and polish.
Verification
```
$ claude plugin validate plugins/seo-rescue
✔ Validation passed
$ claude plugin validate .
✔ Validation passed
```
Plus CI green: https://github.com/maxschottke-spec/seo-survival-kit/actions