Skip to content

Releases: maxschottke-spec/seo-survival-kit

v0.5.4 — Recovery Hardening + reconciliation pass

Choose a tag to compare

@maxschottke-spec maxschottke-spec released this 02 Jul 15:27

Added

  • L4a Stage-State-Machine (Phase 2, experimental N=1) — recovery-diagnose overlays a stage state machine on the raw recovery_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). New stage_status field in befund.schema.json, marked maturity: 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-dive now pulls a per-query weekly click series (query_weekly_series, top 200, up to weekly_series_days days) 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 with update_correlation (none/partial vs CORE_UPDATES.md) and a pattern_hint. Marked maturity: experimental_n1.
  • L1 Pre-Hit-Baseline-Selektion (Phase 2, experimental N=1) — recovery-diagnose selects 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). New pre_hit_baseline field in befund.schema.json, marked maturity: 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; the compliance-aware-recovery runtime 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 writtenSAFE_LIVE_CHANGE_RULES.md Pre-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-diagnose command 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's metadata.version, the rescue orchestrator's "Latest installable version" claim, the README shipped/install-tag lines, plus a schema_version sweep of commands/ and test-fixtures/ against the befund.schema.json const; (2) path portability — any ../../../ escape above the plugin root in plugins/*/skills/ fails the build; (3) export sync — the new zero-dep scripts/check-export-sync.js normalizes exports/skills/*.md against 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 in scripts/export-sync-baseline.txt (re-accept intentional divergence with --update).

Changed

  • Trigger disambiguation between overlapping skillsrecovery-diagnose (data-driven, requires Sistrix/DataForSEO MCP, writes befund.json) and post-core-update-recovery (pure-Markdown framework, no tools) now point at each other in their frontmatter descriptions; likewise recovery-monitor (API-driven weekly tracking) vs sistrix-monday-recovery-check (CSV-only weekly review). In the rescue orchestrator, the rescue diagnose alias now routes to recovery-diagnose and the framework got the new alias rescue framework; the routing digraph gained the "Core-Update drop + MCP tooling available? → recovery-full" branch and a rescue help else-terminal; the missing sub-skill summaries (ai-citations-tracker, gsc-deep-dive, subscription-monetization-audit, and a pointer to the six recovery-* command specs in commands/) 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 file seo-rescue-overview instead of rescue; per-audit cost normalized to ~$0.05–$0.50 everywhere (README table vs. "Before you run anything" row vs. COSTS.md TL;DR previously mixed € and $); recovery-monitor row notes the score is null on 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_version unified to "1.0.0" across all recovery command docs and fixtures (docs claimed "2.0"; schemas, scripts, and existing data are 1.0.0); (2) the fictional "lokaler Minimal-Crawler" fallback removed from the recovery-crawl docs — 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 real writeIssuesJSON(...)/writeMonitorEntry(...) signatures, and recovery-monitor.js gained backward-compatible options passthrough for keywords_total, source_notes, settlement_gate_status, change_effects, audit_health, viTrend4wPct, backlinkSpamScore; (4) recovery-monitor score engine aligned with its spec: no hardcoded neutral backlink_quality = 50 (the ≥2-components rule is now real), components emitted as { value, weight } objects with weights normalized to 1.0, issue_reduction gated on fresh issue data, vi_trend computed from vi_trend_4w_pct when provided (befund-baseline fallback documented as such), phase: null without baseline instead of a guessed R2, failed reserved for no-write aborts (history.schema.json updated to match); (5) the two divergent RECOVERY_SYSTEM.md forks merged — plugins/seo-rescue/references/RECOVERY_SYSTEM.md is 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 sweeprecovery-plan's settlement-gate output now uses the nested settlement_gate_status mirror ({ active, next_allowed_review_date, unlock_status }) instead of flat fields, matching recovery-diagnose and recovery-monitor; action-plan.schema.json gained the matching settlement_gate_status property (byte-identical to befund/history). recovery-monitor gained the Change Governance and Ausgabe an den User sections 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-diagnose Schritt 11 (before the befund write, steps renumbered), hardening_candidates added to befund.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 by recovery-plan as quick-win evidence (risk ≥ yellow) and surfaced in the recovery-full summary; 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 explicit experimental_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 over vi_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 in recovery-diagnose itself; stage_status.stage may now be null when 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...
Read more

v0.5.3 — Governance enforcement + recovery-audit + current Core-Update data

Choose a tag to compare

@maxschottke-spec maxschottke-spec released this 10 Jun 21:14
77bc4f7

Added

  • CORE_UPDATES.md brought 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). New Type and Verified columns; unverified pre-v0.5.2 seed entries are capped at medium correlation. New "Update types and correlation" section covers spam/discover semantics and the multi-update-sequence baseline-erosion caveat.
  • Settlement-Gate awareness in recovery-diagnose and recovery-monitor (closes the last open Settlement-Gate TODO) — both read-only commands now read recovery-gate.json, mirror a settlement_gate_status block into their outputs (befund.schema.json + history.schema.json extended), 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 existing commands/recovery-audit.md spec is now plugin-discoverable and user-invokable like the other five recovery commands. recovery-audit is the documented writer of recovery-gate.json (Settlement-Gate state) and of the hypothesis_registry that recovery-plan consumes. Routed in the orchestrator and README. Skill count: seventeen → eighteen.

  • recovery-full workflow 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.json v1.2.0 → v1.3.0 — three rule sets that were documentation-only are now schema-enforced via if/then: (1) per-change-type pre-check presence (redirect requires seo_url_precheck with collision_detected; category_status/product_status require dreiscseo_precheck with would_create_301_to_404; cms_slot requires snapshot_paths.before_path), (2) Settlement-Gate override requirements per SEO_SETTLEMENT_GATE.md section 7 (explicit_emergency_approval requires approval validation, post-change checks, per-change rollback method + pre-change state check + confidence ≥ medium; technical_emergency requires 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-level hypothesis_verification_gate block.
  • lib/safe.js: two new governance validatorscheckHypothesisScopeMatch() (Hypothesis Verification Gate incl. fix-scope-expansion detection and graceful first-run degradation) and validateSettlementOverride() (deny-by-default section-7 override verdict with explicit missing-requirements list; catches broad-trigger approval text even when is_valid was forged). 19 new tests in lib-safe-primitives.test.js (55 total).

Fixed

  • Hypothesis Verification Gate first-run deadlockrecovery-plan Step 8a hard-stopped on missing hypothesis_id even when no recovery-audit output 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 to prepare_now_execute_later (roadmap-only), warning hypothesis_gate_no_audit_output is recorded, and the gate block carries audit_output_available: false. Hard stops only apply when a hypothesis_registry is present.
  • Settlement-Gate pre-check in recovery-plan now documents who writes recovery-gate.json (recovery-audit) and warns gate_state_possibly_stale when 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.jsacquireLock back-off no longer shells out (execSync('sleep …') replaced with Atomics.wait), honoring the repo's own "never execSync a string" rule; portable and spawns no process.
  • lib/safe.jsatomicWriteJSON now writes its temp file with O_EXCL (via writeFileExclusive), so a pre-existing symlink at the temp path aborts the write instead of being followed (parity with appendNDJSON/writeFileExclusive).
  • subscription-monetization-audit/csv-import.example.js — summary write switched from unlink-then-exclusive (TOCTOU) to atomicWriteJSON (atomic, symlink-checked, idempotent).

Changed

  • Version/consistency sweep (post-review): rescue SKILL.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) vs current_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

Choose a tag to compare

@maxschottke-spec maxschottke-spec released this 02 Jun 21:55
541a06c

Recovery Operating System milestone: machine-enforceable change discipline.

Added

  • SEO Change Governor + Settlement Gate — session-mode change budgets (audit_only default 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 with references/SEO_CHANGE_GOVERNOR.md, references/SEO_SETTLEMENT_GATE.md, references/SAFE_LIVE_CHANGE_RULES.md, the recovery-audit command, 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 via csv-import.example.js with lib/safe.js safety primitives (size-capped reads, no network calls). Routed in the rescue orchestrator as /seo-rescue:rescue monetization and 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 classification
    • recovery-plan — Prioritized 30/60/90-day action plan with human approval gate and evidence arrays
    • recovery-monitor — Weekly tracking with deterministic 0-100 recovery score and component scores
    • recovery-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 .test TLD.

  • lib/safe.js v2: normalizeDomain(), generateRunId(), enhanced acquireLock() (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.md with 90-day freshness policy, RECOVERY_SYSTEM.md, DECISION_ENGINE.md under plugins/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 thin skills/*/SKILL.md wrappers

Changed

  • Skill count is now sixteen (one orchestrator plus fifteen sub-skills/commands). README.md, CLAUDE.md, and the orchestrator rescue/SKILL.md updated accordingly.
  • rescue/SKILL.md Quick Reference table adds the /seo-rescue:rescue monday alias 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

Choose a tag to compare

@maxschottke-spec maxschottke-spec released this 26 May 14:26
e5bd967

[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.
  • .gitignore extended 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.md Step 1a now warns explicitly against using Google AI Studio default projects (project IDs matching gen-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.md private example-domain reference replaced with reserved-TLD example per redaction policy.
  • plugins/seo-rescue/skills/ai-citations-tracker/SKILL.md brand-variant false-positive example updated to reserved-TLD aero-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

Choose a tag to compare

@maxschottke-spec maxschottke-spec released this 22 May 15:48
be2d950

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/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

Choose a tag to compare

@maxschottke-spec maxschottke-spec released this 22 May 15:35
2e36757

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)

Choose a tag to compare

@maxschottke-spec maxschottke-spec released this 22 May 14:35
4f19b0b

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

Choose a tag to compare

@maxschottke-spec maxschottke-spec released this 22 May 14:16
af65676

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.js gained three new helperssafeHostname, safeUrl (SSRF + cloud-metadata guard against 169.254.169.254 / RFC1918 / loopback / .local / IPv6 ::1), safeLabel. validateConfigTargets now 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-tools declared 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 rescue orchestrator — 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.js hard-fails if api_key is found in the config file.
  • SSRF + path-traversal fixes in psi-fetch.example.js (URL allowlist), channel-economics.example.js (safeSlug for channel names), competitor-deep-audit.example.js (safeHostname for process.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-interpolated for f in \$(find …). js-yaml@4 dependency 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-economics fee-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, mandatory file:line citations, 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 Windows chmod 600 equivalent (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.md crediting 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)

Choose a tag to compare

@maxschottke-spec maxschottke-spec released this 22 May 09:19
fe1864a

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

Choose a tag to compare

@maxschottke-spec maxschottke-spec released this 22 May 09:06
7db00f5

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