Skip to content

Releases: MariusYvard/NullToHero

NullToHero v2.2.1

Choose a tag to compare

@github-actions github-actions released this 19 Jul 09:18

Fixed

  • A repo-wide sweep for the truncated-description class (found five in v2.2.0's reviewed families) caught two more in files no reviewer had opened: brand.md ("The deliverable is the design itself - a.") and wcag-2-2.md ("motor impairments, and."). Both completed from their own body text. The class is now swept across all 119 references, not just the reviewed families.

NullToHero v2.2.0

Choose a tag to compare

@github-actions github-actions released this 18 Jul 23:01

A content-level pass over the whole knowledge base: five parallel reviews read the references behind every command family (motion, refine and evaluate, project and build, the seo boundaries, the deterministic layer) looking for doctrine that overlaps, contradicts itself or has drifted. The conclusion that matters: no further command merges are justified. Every remaining command owns real doctrine; a clean plugin is not a smaller one, it is a bounded one. What follows closes every boundary defect the pass found.

Fixed

  • The siteasy audit reference contradicted itself: "a code-level audit, not a design critique" two paragraphs above the section that dispatches four design-dimension agents. The intro now describes the actual architecture and points to critique.md for the heuristic pass.
  • /siteasy improve could not reach harden: no symptom row routed to it, so slow pages, raw errors and untranslated strings dead-ended. Row 16 added (polish moves to 17), and the dispatcher's own frontmatter now lists all 17 axes.
  • The evaluators could not recommend mobile or charts: both "Suggested command" menus (critique and audit, two spots each) omitted them while improve routes to both.
  • content.md restated ~26 lines of geo doctrine (AI Mode, per-engine strategy, GEO signals). Replaced with the dimension's scoring hook plus a pointer: geo.md owns the discipline.
  • Five reference descriptions ended mid-sentence (animation-engineering "Based on Emil.", critique "anchors them to.", design-tokens "build it right once, and.", ux-research "your aesthetic.", journey-mapping "Use this reference."). All completed.
  • teach.md claimed to write two files; it writes PRODUCT.md and delegates DESIGN.md to /siteasy document (its own Step 5), and it listed "layout" in a DESIGN.md that document.md forbids from having a Layout section.
  • docs/ARCHITECTURE.md still said 14 sub-agents (four spots) and drew the design group with 4 agents instead of 6.
  • motion-design.md was cross-referenced by four files but bundled by none; it now ships in the /siteasy animate bundle, and both duration tables cite L-MOTION-1.
  • Boundary notes added where checklists brush against another command's doctrine: polish defers to harden.md and optimize.md, quieter's simplification step to distill.md, bolder's motion accents to animate and delight, overdrive's springs and View Transitions to animation-engineering.md, extract's system audit to design-tokens.md, technical.md's Core Web Vitals section names images.md and performance.md as the deep dives.
  • Consistency: express stage list said "plan" one release after the rename to shape; seo's argument-hint and quick reference omitted indexnow; audit's hint omitted learnings and offered report a URL it does not take; inspect review takes [target], not [file]; the seo action-plan output standard is now wired from the seo SKILL instead of claiming a scope nothing enforced; plan.md links cluster.

Added

  • Check 39: every command appears in its skill's argument-hint (this is what caught concept, indexnow and learnings), every remediation-map route points at a live command, and ARCHITECTURE.md's agent-count claims must match the agents directory.

NullToHero v2.1.0

Choose a tag to compare

@github-actions github-actions released this 18 Jul 22:37

Consolidation pass over the command set, driven by the Phase 1 connectivity data (internal call counts, remediation routes, journey usage). Three commands folded into the command that already owned their ground, one renamed to kill the plugin's last name collision. Nothing deleted: every reference file stays, every retired name routes through the alias table.

Changed

  • /siteasy journey folded into /siteasy research. It was a pure subset: its only reference (journey-mapping.md) was already loaded by research, whose description already promised journey synthesis. Research now states it generates the artifacts (empathy maps, journey maps, service blueprints).
  • /siteasy handoff folded into /siteasy extract. The least-connected command in the plugin (zero internal calls, zero remediation routes, zero journeys). Extract now names the handoff deliverable and loads handoff.md alongside its own reference.
  • /seo sxo folded into /seo page. One internal call, no routes; intent-page alignment is single-page analysis. Page loads sxo.md for the search-experience dimension. The seo command floor moves 19 to 18 accordingly.
  • /siteasy plan renamed /siteasy shape, closing the last name collision (/siteasy plan vs /seo plan, different meanings). Its reference was already called shape.md. Nine call sites migrated (craft, the critique and audit command menus, journey-express, the claims agent, the README ladder).
  • 60 commands (siteasy 33, seo 18, inspect 3, audit 6); four alias rows added to tools/data/intents.csv, all guarded by check 38.

NullToHero v2.0.1

Choose a tag to compare

@github-actions github-actions released this 18 Jul 22:14

A line-by-line read of the README against the repository, hunting the hand-written prose the checks do not guard. Four more drifts found and closed.

Fixed

  • "What is inside" claimed 110 reference docs against an actual 119. Check 18 verified only the first "N reference docs" occurrence (the headline), so the second one slept through releases. The check now verifies every occurrence.
  • The express row still ended its stage list with "launch", one release after that stage and command became harden.
  • The overhaul row described the pre-2.0.0 pipeline ("triage, execute"); it now names its actual stages (baseline, fix by remediation route, before/after compare, ship).
  • The detect row promised the scan "finds focus rings"; it finds their absence.

Changed

  • The project-setup block now names all four project files: the two the user creates (PRODUCT.md, DESIGN.md) and the two that appear while working (DIRECTION.md from /siteasy concept, LOG.md from the journeys).

NullToHero v2.0.0

Choose a tag to compare

@github-actions github-actions released this 18 Jul 21:59

v1.41.0 re-issued under the number it deserved. A command renamed (launch to harden), a command retired into an alias (the seo report formatter), four table rows folded into scopes and the whole surface reorganized around ten doors is a major change of the published surface, even though every old invocation still routes through the alias table. Same content as v1.41.0 plus the fixes below; both tags point at the same day.

Fixed

  • The hand-maintained knowledge-base list in the README had drifted silently: sourcing-external-code was never added, indexnow was missed at v1.40.0, and the deleted seo report reference was still listed. The four lists are now regenerated from the files on disk (siteasy 80, seo 23, inspect 4, audit 6; total still 119 with the six plan assets).
  • The four-skills grid now shows the door commands for siteasy (express, build, improve) instead of a pre-doors trio.

NullToHero v1.41.0

Choose a tag to compare

@github-actions github-actions released this 18 Jul 21:51

The catalog problem, addressed at the surface: 66 commands were well-connected underneath (graph, remediation map, shared state) and undiscoverable on top. A newcomer had no obvious way in, "audit" lived in three skills, and the "from zero knowledge" promise depended on already knowing the names. This release reshapes the surface around ten intent doors without deleting or breaking anything.

Added

  • Ten doors. The README "Pick your goal" table is now the canonical surface: express, build, improve, /audit, fix, overhaul, ship, /seo, report, preview. Each SKILL.md opens with a short "Start here" section routing the same way; everything else remains a documented specialist command in the per-skill tables.
  • /siteasy improve (improve.md): the door for every "make it better" request that does not name an axis. A closed symptom table (16 rows, first match wins) dispatches to exactly one of the refine and enhance passes; three or more matching rows means it is a rework and routes to overhaul. One axis per pass, no blending.
  • /siteasy fix (fix.md): the door for "the audit found problems, now make them go away". Reads SITE-AUDIT.json (or the action plan), groups findings by their fixWith remediation route, runs the mapped commands critical-first in per-command batches, verifies with a same-settings /audit checks re-run. Extracted from journey-overhaul's triage and execute stages; the journey now delegates to it, so the doctrine lives in one place and is callable standalone.
  • tools/data/intents.csv: the versioned intent-and-alias registry. Current rows map door phrases to canonical commands; alias rows keep retired names accepted (/siteasy launch routes to harden, the retired seo report name routes to /audit report). Policy: any future rename adds an alias row, the old name stays accepted for at least two releases, and the deprecation is recorded here and in the CHANGELOG.
  • Check 38: every intents.csv route points at a live command; aliases never mask a live command; retired names may not survive as canonical usage anywhere in skills/, docs/, agents/, the README or the remediation map; every README door resolves; and the marketplace description's command and sub-agent counts must match reality (they had drifted to "57 commands" and "14 sub-agents" against an actual 66 and 15).

Changed

  • /siteasy launch is now /siteasy harden. The old name collided with the ship journey and the express "Launch" stage while the command itself was production hardening. 13 remediation routes, both journeys, six references and the README moved to the new name; the old one remains accepted via the alias table.
  • The two report formatters are one. /audit report now owns both skeletons (unified and SEO-scope) plus the PDF mechanics that previously lived in the seo reference it delegated to; skills/seo/references/report.md is deleted and the retired /seo sub-command routes to /audit report. 63 commands, 119 references.
  • /audit group runs are scopes of full, not four separate table rows: full [url] [seo|defects|design|quick]. The legacy first-token form (/audit seo [url]) still works. checks, verify, compare, learnings and report stay as commands.
  • Stale counts in the audit skill corrected: the frontmatter and the closing prose claimed 13 sub-agents (actual 15), the prose claimed nine commands, and the relationship table and report appendix listed 4 design agents instead of 6 (claims and memorability were missing).

NullToHero v1.40.0

Choose a tag to compare

@github-actions github-actions released this 18 Jul 21:03

Added

  • IndexNow made operative: the references already told sites to ping IndexNow (technical section 9, sitemap step 3, ship-checklist) without providing the how. New /seo indexnow command with indexnow.md (participants Bing/Yandex/Naver/Seznam/Yep and the explicit Google abstention, key-file setup, single GET vs batch POST up to 10,000 URLs, response-code readings, when to ping and when not to, the GEO angle: Bing's index feeds ChatGPT search and Copilot) and skills/seo/scripts/indexnow.mjs (key generation, submit single/batch with dry-run, sitemap mode extracting and submitting <loc> entries). Existing mentions in technical.md, sitemap.md, geo.md and the ship checklist now link to the reference; the journey-ship hardening stage pings changed URLs on content and brand sites. One resources.csv row (open protocol).

NullToHero v1.39.0

Choose a tag to compare

@github-actions github-actions released this 16 Jul 10:09

v1.38.0 shipped after reading 12 of the academy's 107 lessons and phrased the verdict as though it covered the site. That is the v1.36.0 bug ("the home page vouched for the site") committed in prose, by the person who had just fixed it in code. Read all 106 lessons plus the index. The v1.38.0 conclusion held, but it had not been earned, and two things were missed.

Added

  • geo.md: connect Search Console instead of inferring. Everything this skill computes from HTML is inference from outside; GSC is where the real queries, impressions and positions are, and read-only MCP connectors for GSC and GA4 mount into Claude over Google OAuth with no vendor account. If one is connected, its numbers outrank this skill's, and the report says which was used. Missed in v1.38.0 because the chapter was called "Claude MCP" and never opened: the single most relevant thing on the site to a Claude plugin.
  • Two cautions from actually inspecting one such connector: it serves three backends down one endpoint (your OAuth'd GSC data, their own crawler's audit, and rank-tracker figures like "AI Overview references" that cannot come from GSC and whose source is undisclosed), so know which one answered. And Google's warning that no third-party tool reads its internal systems applies to the connector too: a tool reporting "AI Overview references" is inferring, exactly as we are.
  • backlinks.md: the journalist-query list, verified July 2026. Adds Source of Sources (free, no paid tier, the practitioner default) and Featured (freemium), and states Qwoted's free-tier throttle: 2 pitches/month behind a 2-hour delay, so paying sources see every query first. Recommending it without that sets someone up to lose every race. Connectively is dead (Cision, 9 Dec 2024) and is still recommended across the web.
  • Recorded the HARO discontinuity, because it is a trap for anyone reading advice written in the gap: Cision killed HARO on 9 Dec 2024, then Featured.com bought the brand in Apr 2025 and relaunched the free query emails. Advice from that window says HARO is dead. It is not.

Notes

  • Nearly broke a correct line by believing a subagent. One reported HARO and Connectively both dead and "the single most concrete factual error" on the vendor's site. Verification: HARO is alive under new ownership, so the vendor was right and the agent was wrong, and backlinks.md's existing HARO/SourceBottle/Qwoted line was already correct. Earlier the same day the opposite happened: an agent was accused of conflating two Google pages and turned out right, the wrong URL having been fetched. Two agents, two confident claims, two different failure directions, both caught only by checking. A subagent's report is a lead, not a source.
  • The remaining 94 lessons confirmed the v1.38.0 read: 45 of them under 250 words with 5 citations across all of them, no procedure behind any "how-to", and an internal contradiction (content clusters are 3-4 pages in the glossary and 5-7 in the 100-day plan). Nothing importable.
  • Two errors in their corpus worth knowing rather than absorbing: their dofollow-vs-nofollow table states flatly that nofollow passes no ranking credit, contradicting its own FAQ below it and Google's 2019 hint change; and their link-building chapter sells an automated reciprocal link-exchange network inside a lesson, which is the pattern Google's link spam policy names. backlinks.md already warns against exactly this (L85), which is the check that mattered.
  • Mirror checks run against our own references, all clean: technical.md states all three Core Web Vitals thresholds correctly (2.5s / 200ms / 0.1); their CWV page cites web.dev but gives only LCP. competitor-pages.md already records the FAQ rich-result removal, with a more current date than the subagent had (7 May 2026, all sites).

NullToHero v1.38.0

Choose a tag to compare

@github-actions github-actions released this 16 Jul 09:17

Went to mine a vendor's SEO academy for material. Found nothing worth importing: the skill already named 9 AI crawler user-agents to its 2, and its 107 lessons run 150-250 words each with not one primary source cited across the flagship chapter. But holding it next to geo.md was the point, because geo.md had the same disease.

Fixed

  • geo.md's statistics table cited "Industry data". Of its six load-bearing rows, zero were stated accurately. On a skill whose pitch is verdicts you can recompute, a stats table sourced to a phrase that sounds like a consensus is the one lie that costs the argument. Every "Industry data" label turned out to be concealing a single traceable vendor study, so the label was hiding a source, not standing in for a missing one:
    • AI Overviews coverage "50%+ of all queries" was a keyword-panel figure sold as a query figure. Real measurements span 9.5%–60% and the spread is not a dispute, it is four different denominators: keyword databases over-weight the informational long-tail that triggers AIOs, real human query streams do not. Pew is the only non-vendor sample of actual searches (68,879 searches, 900 US adults, Mar 2025) and gives 18%. Now a range with every sample named. Also noted: Semrush's own series is non-monotonic (24.6% Jul 2025 → 15.7% Nov), so any "growing to X" framing is unsupported by the only long time series that exists.
    • "+527%, SparkToro" — the figure is real, the attribution was wrong. It is Previsible, 19 GA4 properties, off a base of 17,076 sessions.
    • "4.4x conversion" — Semrush said 4.4x as valuable, modelled from conversion rate, in ~500 digital-marketing topics, which is Semrush's own vertical.
    • "Ahrefs Dec 2025" — May 2025, seven months off. The table also dropped the caveat Ahrefs leads with: correlation only, all factors moderate-to-weak. Big brands get both mentions and citations; that confounder is the whole story.
    • "11% of domains cited by both ChatGPT and Google AIO" — wrong engines. Profound measured ChatGPT ∩ Perplexity. ChatGPT ∩ AIO is not published by anyone.
  • The "40-60 word answer" rule had no primary source, and Google now contradicts its premise. It is a descriptive artifact of vendor snippet-scrapes (that band is where Google truncates) reversed into a prescription. Google publishes no minimum length for featured snippets, and its generative-AI guide states there is no ideal page length and no requirement to chunk. Cut. A "120-180 words per block" optimum credited to unnamed "citation-extraction studies" went with it: a number nobody can trace is worse than no number, because it survives review by looking precise.

Added

  • A "What Google says you do NOT need to do" section in geo.md, from the primary source every GEO vendor talks around: Google Search Central's Mythbusting generative AI search (ai-optimization-guide, updated 2026-07-10). Google states it ignores llms.txt ("neither harm nor help"), requires no chunking, requires no special schema, says chasing mentions "isn't as helpful as it might seem", and that GEO/AEO is "still SEO". Scoped honestly: this is Google speaking about Google, and it does not bind ChatGPT, Perplexity or Claude. Where the skill still recommends llms.txt or passage shaping, that advice is now labelled as scoped to the engines that have published no such guidance, rather than sold as universal.
  • Google's warning that no third-party tool reads its internal ranking or AI systems, applied to this plugin: a GEO score is a heuristic we defined, never a reading of Google's systems.
  • Two real requirements the industry misses: Search Console opt-in is a hard eligibility gate for generative AI features, and the Generative AI performance report is the only first-party measurement that exists. Everything else, this skill included, is inference from outside.
  • Query fan-out and RAG grounding documented from Google's own description, with the trap named: do not build a page per fan-out query, Google calls that scaled content abuse.
  • Agentic experiences flagged: browser agents read the accessibility tree, so the a11y work /inspect already enforces is turning into machine-readability work. Semantic HTML stops being only an ethical argument.

NullToHero v1.37.0

Choose a tag to compare

@github-actions github-actions released this 15 Jul 17:52

Fixed

  • The static contrast path invented failures, the last place that fault survived. Render-free, contrast-ratio reported 4 failures, worst 1.06:1 on a page the rendered pass measures at 0. Same mistake as the two cleaned out of the rendered path in v1.34.0, still alive here because nobody had run this path against a site that re-themes. Three causes, each now declined instead of guessed at:
    • Light-on-light cascade artifacts. A themed page states --ink light and --paper dark, then a light block re-points both under a selector this model does not evaluate. Catch one override and miss the other and you resolve light ink against light paper: 1.06:1 on a wordmark a viewer reads at 16:1. A darkOnDark guard already existed for the mirror case; its twin was missing for no reason but oversight. Nobody authors white on white on purpose, and a half-modelled cascade produces it constantly.
    • mix-blend-mode. The cascade's color is the source of a blend, not the paint, so a ratio from it is a number no pixel holds. The rendered path learned this in v1.35.0; this one had not.
    • Declared exemptions were ignored. data-contrast-exempt is a fact in the markup and readable without a browser, but only the rendered path honoured it, so the same page failed or passed depending on which flag you ran. Only one of those answers respected the author. A malformed exemption still excuses nothing here either: the rule is identical on both paths or it is not a rule.
  • value.notJudged reports all three, and NOT_MEASURED now carries them too. A page whose only text was skipped used to report "nothing measured" with no reason, which is the same silence this detector keeps being cleaned of: "could not read this" must never look like "nothing to read".
  • Static failures now name the colours, the tag and the text (value.worstSamples, and the detail says #aaaaaa on #ffffff). This path is an estimate, so it owes the reader the means to check it.

Notes

  • The 68 eval fixtures did not drift, and that is the finding rather than the reassurance: none of them covered a themed page, a blend mode or an exemption, which is exactly how the fault lived here this long. Seven unit tests now pin each case, including that a real static failure (mid-grey on white, no cascade excuse) still fails, so the guards cannot quietly grow into an amnesty.