@aeptus/aexeo-emdash 0.8.12 → 0.8.14
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 +127 -0
- package/dist/configured.js +1 -1
- package/dist/index.js +1 -1
- package/dist/version.d.ts +1 -1
- package/package.json +1 -1
- package/wasm/aexeo_emdash_bridge_bg.wasm +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,133 @@ and the project follows [Semantic Versioning](https://semver.org/).
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [0.8.14] - 2026-05-06
|
|
10
|
+
|
|
11
|
+
Two regressions Aeptus surfaced after running the v0.0.18 CLI
|
|
12
|
+
release against their preview deployment, plus a new opt-in
|
|
13
|
+
agent-discovery audit axis.
|
|
14
|
+
|
|
15
|
+
### Added
|
|
16
|
+
|
|
17
|
+
- **New `agent_discovery` rule group** with two opt-in checks
|
|
18
|
+
for the well-known machine-readable artifacts that signal a
|
|
19
|
+
site's agent-facing capabilities. Off by default since the
|
|
20
|
+
underlying specs (RFC 9727 api-catalog, SEP-1649 MCP server-
|
|
21
|
+
card) have nascent adoption and would otherwise generate
|
|
22
|
+
false positives across the long tail of sites that don't
|
|
23
|
+
publish them yet. Adopters opt in via:
|
|
24
|
+
```toml
|
|
25
|
+
[agent_discovery]
|
|
26
|
+
enabled = true
|
|
27
|
+
```
|
|
28
|
+
- `AGT001` (warning, policy/medium): missing
|
|
29
|
+
`/.well-known/api-catalog` (RFC 9727, finalized April
|
|
30
|
+
2025). The JSON Linkset format that lets agents enumerate
|
|
31
|
+
public APIs without crawling documentation.
|
|
32
|
+
- `AGT002` (warning, policy/medium): missing
|
|
33
|
+
`/.well-known/mcp/server-card.json` (SEP-1649, draft).
|
|
34
|
+
Lets MCP clients discover the site's MCP server endpoint
|
|
35
|
+
and capabilities without prior configuration.
|
|
36
|
+
- **AGT layer mapping**: Retrievability primary (these files
|
|
37
|
+
exist so agents can *find* the site's surfaces), Absorbability
|
|
38
|
+
secondary (the surfaces they point at feed agent absorption
|
|
39
|
+
of the site's content).
|
|
40
|
+
- **Post-crawl artifact probe extended** to HEAD-check the AGT
|
|
41
|
+
paths during live `aexeo-cli crawl` so AGT findings respect
|
|
42
|
+
the same presence signals as facts.json / llms-full.txt.
|
|
43
|
+
Probe runs unconditionally — the cost is two extra HEAD
|
|
44
|
+
requests, and sites that don't enable AGT just see the paths
|
|
45
|
+
recorded on `CrawlMeta` without any rule-side effect.
|
|
46
|
+
|
|
47
|
+
### Fixed
|
|
48
|
+
|
|
49
|
+
- **A11Y findings now use `severity: "warning"` (not `"warn"`).**
|
|
50
|
+
`Finding::is_error()` is implemented as `severity != "warning"`,
|
|
51
|
+
so the four-letter form was bucketed as an error in audit
|
|
52
|
+
summaries and made `success: false` even when the only
|
|
53
|
+
findings were warning-grade A11Y heuristics (heading-jump,
|
|
54
|
+
alt-equals-filename, missing-main-landmark). The three A11Y
|
|
55
|
+
rules emitted `"warn"` (A11Y004, A11Y005, A11Y006);
|
|
56
|
+
switched all three to `"warning"` to match the rest of the
|
|
57
|
+
rule corpus. No new `is_error` semantics — just severity-
|
|
58
|
+
string normalization.
|
|
59
|
+
- **SRF030 now actually finds the homepage's markdown-mirror
|
|
60
|
+
alternates.** The 0.8.13 fix introduced
|
|
61
|
+
`homepage_advertises_markdown_mirror_discovery(site)` which
|
|
62
|
+
looked up `site.page("/")` — but the home page's route is
|
|
63
|
+
the empty string `""` in this codebase (per
|
|
64
|
+
`capture_route_for_relative_path`'s mapping for
|
|
65
|
+
`index.html`), not `"/"`. The lookup always returned None,
|
|
66
|
+
the helper always returned false, and SRF030 fired anyway
|
|
67
|
+
on Aeptus's preview despite the homepage carrying
|
|
68
|
+
`<link rel="alternate" type="text/markdown" href="/index.md.txt">`.
|
|
69
|
+
Switched to `site.route_pages().find(|p| p.route.is_empty())`
|
|
70
|
+
to match the rest of the crate's home-page convention.
|
|
71
|
+
Locked in by two new unit tests
|
|
72
|
+
(srf030_recognizes_markdown_mirror_discovery_on_home,
|
|
73
|
+
srf030_skips_unrelated_alternate_types).
|
|
74
|
+
|
|
75
|
+
## [0.8.13] - 2026-05-06
|
|
76
|
+
|
|
77
|
+
Closes four false-positive paths Aeptus surfaced while running
|
|
78
|
+
the 0.8.12 plugin against their Cloudflare Pages preview
|
|
79
|
+
deployment. 0.8.12 was already on npm before these landed; this
|
|
80
|
+
release bundles the fixes into one consumer-visible bump.
|
|
81
|
+
|
|
82
|
+
### Fixed
|
|
83
|
+
|
|
84
|
+
- **Surface discovery for facts.json / llms-full.txt /
|
|
85
|
+
manifest-listed mirrors.** Aeptus reported false-negative
|
|
86
|
+
`facts_present: false` and `llms_full_present: false` on a
|
|
87
|
+
live Cloudflare Pages crawl where curl returned 200 for
|
|
88
|
+
both URLs. Root cause: the page-crawler skips non-HTML
|
|
89
|
+
responses, so JSON / plain-text artifacts not reachable
|
|
90
|
+
via the HTML link graph were never recorded as visited
|
|
91
|
+
and `local_artifact_exists` returned false even though the
|
|
92
|
+
files existed.
|
|
93
|
+
Fix: a new `artifact_probe` module HEAD-probes well-known
|
|
94
|
+
artifact paths after the main page-crawl, manifest-first.
|
|
95
|
+
If `manifest.json` is reachable, every `path` it lists
|
|
96
|
+
under `artifacts` is added to the candidate set. Each
|
|
97
|
+
candidate is independently HEAD-probed with the existing
|
|
98
|
+
crawl auth (basic auth + custom headers, including the
|
|
99
|
+
`--cf-access-*` Cloudflare Access headers). 2xx paths are
|
|
100
|
+
recorded on `CrawlMeta.probed_artifact_paths` and folded
|
|
101
|
+
into `Site::indexed_paths` so surface discovery and rules
|
|
102
|
+
see them as present.
|
|
103
|
+
Probes are time-boxed (3s per request) and bounded (max 64
|
|
104
|
+
paths per crawl) so a manifest with thousands of entries
|
|
105
|
+
can't blow up the audit budget. The probed list round-trips
|
|
106
|
+
through the audit artifact, so `intelligence surfaces
|
|
107
|
+
discover --from-crawl-artifact` sees the same presence
|
|
108
|
+
signal a fresh live crawl would.
|
|
109
|
+
- **SEO009 no longer flags `<link rel="alternate"
|
|
110
|
+
type="text/markdown">` discovery links** as "hreflang
|
|
111
|
+
alternates pointing to missing internal paths." The rule
|
|
112
|
+
now consults the `type` attribute on the alternate and
|
|
113
|
+
skips the missing-target check for non-HTML media types
|
|
114
|
+
(text/markdown, text/plain, application/json,
|
|
115
|
+
application/ld+json, atom/rss/feed+json). Genuine hreflang
|
|
116
|
+
alternates that happen to declare `type="text/html"` still
|
|
117
|
+
fire SEO009.
|
|
118
|
+
- **SRF030 now recognizes the `.md.txt` mirror discovery
|
|
119
|
+
pattern.** When the homepage advertises one or more
|
|
120
|
+
`<link rel="alternate" type="text/markdown">` discovery
|
|
121
|
+
links (the per-route mirror pattern Aeptus and similar
|
|
122
|
+
sites use), the probe stays silent. This is a valid
|
|
123
|
+
Markdown-for-Agents alternative to HTTP content
|
|
124
|
+
negotiation; the rule's role is to flag *absence* of any
|
|
125
|
+
markdown discovery contract, not the choice of which one.
|
|
126
|
+
- **ROB008 skips deliberate sitewide-noindex deployments.**
|
|
127
|
+
Cloudflare Pages preview sets `X-Robots-Tag: noindex`
|
|
128
|
+
sitewide while the build still emits sitemap.xml for
|
|
129
|
+
parity with production; the prior rule fired on every
|
|
130
|
+
sitemap-listed route. The rule now detects when every
|
|
131
|
+
crawled page carries `X-Robots-Tag: noindex` and skips —
|
|
132
|
+
the inconsistency narrative no longer applies. A single
|
|
133
|
+
page lacking the header breaks uniformity (it would
|
|
134
|
+
actually be indexed), and ROB008 fires normally.
|
|
135
|
+
|
|
9
136
|
## [0.8.12] - 2026-05-06
|
|
10
137
|
|
|
11
138
|
Adds **Accessibility (A11Y)** as a fifth audit pillar alongside
|
package/dist/configured.js
CHANGED
package/dist/index.js
CHANGED
package/dist/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const PACKAGE_VERSION = "0.8.
|
|
1
|
+
export declare const PACKAGE_VERSION = "0.8.14";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/package.json
CHANGED
|
Binary file
|