@aeptus/aexeo-emdash 0.8.3 → 0.8.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -6,6 +6,158 @@ and the project follows [Semantic Versioning](https://semver.org/).
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [0.8.6] - 2026-05-04
10
+
11
+ Code-review follow-ups on the 0.8.5 agent-readiness rule bundles.
12
+ All five issues are real correctness fixes; no behavior change
13
+ for sites that already had clean output.
14
+
15
+ ### Fixed (engine via bridge)
16
+
17
+ - **Public API exposure.** `SiteCapabilities`, `infer_site_capabilities`,
18
+ `well_known_path_exists`, `run_well_known_rules`, and
19
+ `run_header_rules` are now re-exported at the `aexeo-core` root
20
+ to match the existing pattern (`run_robots_rules`,
21
+ `run_surface_rules`, etc.). Previously consumers had to use the
22
+ long `aexeo_core::well_known_rules::run_well_known_rules` form.
23
+ - **LNK020 group/check-key mismatch.** The rule was registered under
24
+ the `links` group but gated on the `headers` config key in
25
+ `static_check.rs`; toggling `links: false` would not silence it
26
+ and toggling `headers: false` would silence an unrelated group.
27
+ Fixed by moving LNK020 to a new `headers` rule group so the
28
+ registry name matches the toggle key.
29
+ - **`route_looks_api` over-match.** Bare `v1/`, `v2/`, and
30
+ `graphql` prefixes incorrectly classified docs routes
31
+ (`/v1/getting-started`, `/v2/migration-guide`, `/graphql-101`)
32
+ as API surfaces, triggering SRF020 false-positives on
33
+ content-only docs sites. Tightened to require `api/` or
34
+ `graphql/` (with the slash) — the conditional-firing design's
35
+ whole point is to keep these silent on content sites.
36
+ - **`render_robots_txt` round-trip.** Aexeo's own generator emitted
37
+ a robots.txt that tripped ROB010 + ROB011 (no AI-bot block, no
38
+ Content-Signal). Generator now emits explicit AI-bot blocks
39
+ (GPTBot, ClaudeBot, PerplexityBot, Google-Extended, CCBot) and
40
+ a permissive Content-Signal default so Aexeo's own output
41
+ passes Aexeo's own rules.
42
+ - **SRF010/SRF015 unreachable from path-only signals.** The
43
+ capability gate required the canonical card/index file to
44
+ exist, but the rule fires when that exact file is missing —
45
+ structurally unreachable. Inference now also fires when the
46
+ `.well-known/mcp/` or `.well-known/agent-skills/` directory
47
+ exists without a canonical file inside (the partial-stub
48
+ pattern editors hit when starting an implementation).
49
+
50
+ ### Notes for hosts upgrading from 0.8.5
51
+
52
+ - No code changes required.
53
+ - `aexeo-cli generate robots-txt` (and the deploy generator) now
54
+ produces a robots.txt with explicit AI-bot blocks and a
55
+ Content-Signal directive. Editors who want a non-permissive
56
+ stance edit the line; the defaults match the wildcard `Allow: /`
57
+ posture so existing crawl behavior is unchanged.
58
+ - Sites that have a `.well-known/mcp/` or
59
+ `.well-known/agent-skills/` directory stub without canonical
60
+ files inside will now see SRF010 / SRF015 fire (correctly —
61
+ the directory-stub state is exactly what the rule was meant
62
+ to catch).
63
+
64
+ ## [0.8.5] - 2026-05-04
65
+
66
+ Brings in the agent-readiness audit rules from upstream
67
+ aexeo-core 0.0.11 — three bundles extracted from the Cloudflare
68
+ "Is Your Site Agent-Ready?" scan model.
69
+
70
+ ### Added (engine via bridge)
71
+
72
+ - **Bundle A — robots.txt extensions** (always-on, retrievability):
73
+ - `ROB010` — robots.txt has no AI-bot User-agent directives
74
+ (GPTBot, ClaudeBot, ChatGPT-User, PerplexityBot, …)
75
+ - `ROB011` — robots.txt has no Content-Signal directives
76
+ (`ai-train`, `search`, `ai-input`)
77
+
78
+ - **Bundle B — `.well-known/*` discovery surfaces** (conditional,
79
+ absorbability). All gated on a new `SiteCapabilities` inference
80
+ that reads route patterns, JSON-LD schema, llms.txt content,
81
+ and partial-file presence to decide whether the site claims
82
+ the underlying capability — so these rules don't fire on
83
+ content-only sites that have no business exposing the surface:
84
+ - `SRF010 / SRF011` — agent-skills index (Cloudflare RFC v0.2.0)
85
+ - `SRF015 / SRF016` — MCP server card (SEP-1649)
86
+ - `SRF020 / SRF021` — API catalog (RFC 9727 linkset+json)
87
+ - `SRF025` — OAuth/OIDC discovery (RFC 8414, OIDC Discovery 1.0)
88
+ - `SRF026` — OAuth protected-resource metadata (RFC 9728)
89
+
90
+ - **Bundle C — runtime header audits** (runtime-only, mixed):
91
+ - `LNK020` — homepage response sends no Link headers (RFC 8288).
92
+ Silent on pure static audits — fires only when `Page.response_headers`
93
+ is populated.
94
+ - `SRF030` — homepage doesn't honor `Accept: text/markdown`
95
+ content negotiation (Cloudflare Markdown for Agents). Adds
96
+ one extra HTTP probe at the end of the runtime audit.
97
+
98
+ ### Notes for hosts upgrading from 0.8.4
99
+
100
+ - No code changes required.
101
+ - Static audits will gain ROB010/011 immediately on every site;
102
+ the SRF010+ rules are silent unless the site has the
103
+ capability signal (so most content sites see no new findings).
104
+ - LNK020 + SRF030 only fire during runtime audits — static
105
+ audits don't reach that code path.
106
+ - The new `SiteCapabilities` API is exported from aexeo-core
107
+ for hosts that want to reuse the inference in their own
108
+ tooling.
109
+
110
+ ## [0.8.4] - 2026-05-04
111
+
112
+ Three follow-up quality fixes from Aeptus's post-0.8.3 rollout
113
+ report. The 0.8.3 manifest-quality and GEO009 fixes landed
114
+ correctly; this release closes the remaining edges that surfaced
115
+ once those were out the door.
116
+
117
+ ### Fixed (engine via bridge)
118
+
119
+ - **Multilingual 404 detection.** v0.0.9's blocklist was
120
+ English-only, so French, Spanish, Italian, German, Dutch, and
121
+ Portuguese 404 titles still leaked through as candidate
122
+ organization/product names. Aeptus reported a French
123
+ "Page introuvable" landing as `products[0].name`. The detector
124
+ now matches on cross-language morphological cues
125
+ (`introuvable`, `non trouv`, `no encontrad`, `não encontrad`,
126
+ `non trovat`, `nicht gefunden`, `niet gevonden`) plus the
127
+ literal numeric `404` anchor.
128
+
129
+ ### Fixed (presence diagnostic via bridge)
130
+
131
+ - **RDAP normalizes to the apex domain.** The diagnostic was
132
+ asking rdap.org about `www.aeptus.com` (whatever subdomain the
133
+ manifest's website happened to record), which returns
134
+ not_found because the registrable domain is the apex
135
+ (`aeptus.com`). The RDAP fetcher now strips a leading `www.`
136
+ before the lookup; the result text shows the original host
137
+ alongside the apex so editors can see what was actually
138
+ checked. Deeper subdomains (`blog.foo.bar`) still need
139
+ manual manifest correction — full public-suffix-list-aware
140
+ resolution is a future hardening.
141
+ - **Wikidata disambiguation.** wbsearchentities returns
142
+ label-matched candidates without distinguishing
143
+ Aeptus-the-company from Aeptus-the-genus-of-insects. The
144
+ fetcher now requests up to 10 candidates and prefers ones
145
+ whose description doesn't begin with natural-world or
146
+ geographic disambiguators (`genus of`, `species of`, `village
147
+ in`, `asteroid`, …). When every match is a generic-concept
148
+ description, the result still lands but `extra` flags
149
+ "likely disambiguation needed" so the editor sees the
150
+ problem instead of trusting the wrong record.
151
+
152
+ ### Notes for hosts upgrading from 0.8.3
153
+
154
+ - No code changes required; pure engine-side improvements.
155
+ - Worth re-running `intelligence facts generate` if your site
156
+ has any non-English 404 page that was leaking through.
157
+ - Worth re-running `intelligence presence` if you saw
158
+ Wikidata false-positives or RDAP not-found on a www-prefixed
159
+ domain.
160
+
9
161
  ## [0.8.3] - 2026-05-04
10
162
 
11
163
  Picks up the upstream aexeo-core 0.0.9 improvements that address
@@ -608,7 +760,10 @@ First public release.
608
760
  `astro.config.mjs` for the WASM import to resolve to a
609
761
  precompiled `WebAssembly.Module`. Not optional.
610
762
 
611
- [Unreleased]: https://github.com/schiste/Aexeo/compare/aexeo-emdash-v0.8.3...HEAD
763
+ [Unreleased]: https://github.com/schiste/Aexeo/compare/aexeo-emdash-v0.8.6...HEAD
764
+ [0.8.6]: https://github.com/schiste/Aexeo/compare/aexeo-emdash-v0.8.5...aexeo-emdash-v0.8.6
765
+ [0.8.5]: https://github.com/schiste/Aexeo/compare/aexeo-emdash-v0.8.4...aexeo-emdash-v0.8.5
766
+ [0.8.4]: https://github.com/schiste/Aexeo/compare/aexeo-emdash-v0.8.3...aexeo-emdash-v0.8.4
612
767
  [0.8.3]: https://github.com/schiste/Aexeo/compare/aexeo-emdash-v0.8.2...aexeo-emdash-v0.8.3
613
768
  [0.8.2]: https://github.com/schiste/Aexeo/compare/aexeo-emdash-v0.8.1...aexeo-emdash-v0.8.2
614
769
  [0.8.1]: https://github.com/schiste/Aexeo/compare/aexeo-emdash-v0.8.0...aexeo-emdash-v0.8.1
@@ -1160,7 +1160,7 @@ function globToMatcher(pattern) {
1160
1160
  }
1161
1161
 
1162
1162
  // src/version.ts
1163
- var PACKAGE_VERSION = "0.8.3";
1163
+ var PACKAGE_VERSION = "0.8.6";
1164
1164
 
1165
1165
  // src/configured.ts
1166
1166
  import { definePlugin } from "emdash";
package/dist/index.js CHANGED
@@ -23,7 +23,7 @@ function buildAllowedHosts(evaluatorHost) {
23
23
  }
24
24
 
25
25
  // src/version.ts
26
- var PACKAGE_VERSION = "0.8.3";
26
+ var PACKAGE_VERSION = "0.8.6";
27
27
 
28
28
  // src/sandbox.ts
29
29
  function aexeoPluginSandboxed(options = {}) {
package/dist/version.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export declare const PACKAGE_VERSION = "0.8.3";
1
+ export declare const PACKAGE_VERSION = "0.8.6";
2
2
  //# sourceMappingURL=version.d.ts.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aeptus/aexeo-emdash",
3
- "version": "0.8.3",
3
+ "version": "0.8.6",
4
4
  "description": "Aexeo SEO/GEO content evaluator as an emdash plugin",
5
5
  "license": "MIT",
6
6
  "author": "Aeptus",
Binary file