@aeptus/aexeo-emdash 0.8.9 → 0.8.11
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 +147 -1
- package/dist/configured.d.ts.map +1 -1
- package/dist/configured.js +21 -2
- package/dist/index.js +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.d.ts.map +1 -1
- package/package.json +1 -1
- package/wasm/aexeo_emdash_bridge_bg.wasm +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,150 @@ and the project follows [Semantic Versioning](https://semver.org/).
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [0.8.11] - 2026-05-05
|
|
10
|
+
|
|
11
|
+
Picks up the post-0.8.10 product additions and the FACTS003
|
|
12
|
+
quality fixes Aeptus reported after running 0.8.10 in
|
|
13
|
+
preview. 0.8.10 was already on npm before these landed; this
|
|
14
|
+
release bundles them into one consumer-visible bump.
|
|
15
|
+
|
|
16
|
+
### Added (engine via bridge)
|
|
17
|
+
|
|
18
|
+
- **`SOC006` enabled by default.** Missing `og:image` now
|
|
19
|
+
surfaces on every audit. The rule existed but was gated
|
|
20
|
+
behind `require_social_images = false`; flipped to true.
|
|
21
|
+
- **`SOC009` (heuristic).** Recommends `summary_large_image`
|
|
22
|
+
when `twitter:card` is plain `summary`. Editors can keep
|
|
23
|
+
`summary` if they want; this is a nudge, not a blocker.
|
|
24
|
+
- **`CNT006` (heuristic, low-confidence).** Generic-beneficiary
|
|
25
|
+
detector — flags abstract audience-needs copy
|
|
26
|
+
("Needs speed and clarity to make decisions") that has no
|
|
27
|
+
concrete anchoring (numbers, named tools, quotes). Skips
|
|
28
|
+
when concrete-anchor tokens (`study`, `research`, etc.)
|
|
29
|
+
appear nearby. Editors can suppress via the new
|
|
30
|
+
`[route_kinds]` config block.
|
|
31
|
+
- **`[route_kinds]` config block.** Named per-pattern rule
|
|
32
|
+
masking that compiles to virtual suppressions:
|
|
33
|
+
```toml
|
|
34
|
+
[route_kinds.manifesto]
|
|
35
|
+
match = ["/foundations/"]
|
|
36
|
+
skip_rules = ["GEO007", "GEO008", "GEO010"]
|
|
37
|
+
noindex = false
|
|
38
|
+
```
|
|
39
|
+
Bundles a path-pattern set with a stance (which rules
|
|
40
|
+
to skip, whether routes are intentionally noindex). Lighter
|
|
41
|
+
than scattering one suppression per rule × pattern.
|
|
42
|
+
|
|
43
|
+
### Fixed
|
|
44
|
+
|
|
45
|
+
- **FACTS003 schema half no longer fires on no-schema input.**
|
|
46
|
+
Configured-mode CMS document sets don't carry rendered JSON-LD,
|
|
47
|
+
so `pages_with_schema = 0`. The previous logic emitted
|
|
48
|
+
`organization_schema.name` (Error) and `organization_schema.url`
|
|
49
|
+
(Warning) with empty `observed` — `iter().any()` is trivially
|
|
50
|
+
false on an empty set, so the negation always fired. Aeptus
|
|
51
|
+
reported this as the first half of FACTS003 noise after
|
|
52
|
+
installing 0.8.10. Schema block is now gated on
|
|
53
|
+
`pages_with_schema > 0`; the `structured_truth_source` enum
|
|
54
|
+
(`Manifest` vs `SchemaAndManifest`) still records whether
|
|
55
|
+
schema participated, so downstream consumers can tell the
|
|
56
|
+
difference between "schema agreed" and "schema wasn't part
|
|
57
|
+
of the assessment".
|
|
58
|
+
- **FACTS003 title check no longer fires on legal/utility
|
|
59
|
+
pages or on pages whose JSON-LD declares the brand.** Aeptus
|
|
60
|
+
reported title warnings on `/privacy`, `/terms`, `/principles`,
|
|
61
|
+
`/references`, `/signup` simply because their titles weren't
|
|
62
|
+
"Aeptus". The check now (a) skips pages classified as
|
|
63
|
+
`PageKind::{Search, Admin, Feed, Utility, NotFound, Legal}`,
|
|
64
|
+
and (b) treats per-page identity-bearing schema with a name
|
|
65
|
+
matching the brand as another `identity_present_elsewhere`
|
|
66
|
+
signal. Content pages that genuinely never mention the brand
|
|
67
|
+
in any identity-bearing surface still fire — the user can
|
|
68
|
+
silence those via the `[route_kinds]` block from this same
|
|
69
|
+
release.
|
|
70
|
+
|
|
71
|
+
### Notes for hosts upgrading from 0.8.10
|
|
72
|
+
|
|
73
|
+
- No code changes required.
|
|
74
|
+
- After bumping, the admin's findings page will show:
|
|
75
|
+
- **New** SOC006 findings on every document missing og:image.
|
|
76
|
+
- **New** SOC009 nudges on documents declaring
|
|
77
|
+
`twitter:card = summary`.
|
|
78
|
+
- **New** CNT006 nudges on documents whose visible text has
|
|
79
|
+
generic-beneficiary copy without concrete anchors.
|
|
80
|
+
- **Fewer** FACTS003 findings: schema-half mismatches gone
|
|
81
|
+
when the CMS doc set lacks JSON-LD; title warnings gone
|
|
82
|
+
on legal/utility pages.
|
|
83
|
+
- If the new SOC/CNT findings are too noisy on a specific
|
|
84
|
+
route family, declare a `[route_kinds.X]` block in
|
|
85
|
+
`aexeo.toml` with `match` patterns and a `skip_rules` list.
|
|
86
|
+
- For the infrastructure-level audit (robots/sitemap/llms/
|
|
87
|
+
well-known/etc.), run `aexeo-cli check` against your static
|
|
88
|
+
dist; that's where those rules belong.
|
|
89
|
+
|
|
90
|
+
### CLI side (aexeo-cli v0.0.16, same release window)
|
|
91
|
+
|
|
92
|
+
- **`aexeo-cli crawl --cf-access-id … --cf-access-secret …`**
|
|
93
|
+
injects Cloudflare Access service-token headers
|
|
94
|
+
(`CF-Access-Client-Id` + `CF-Access-Client-Secret`) on every
|
|
95
|
+
fetch. Falls back to env vars `CF_ACCESS_CLIENT_ID` /
|
|
96
|
+
`CF_ACCESS_CLIENT_SECRET` when flags are absent. Closes the
|
|
97
|
+
loop for hosts whose preview deploys are behind Cloudflare
|
|
98
|
+
Access (Aeptus's CI was blocked on this).
|
|
99
|
+
|
|
100
|
+
## [0.8.10] - 2026-05-04
|
|
101
|
+
|
|
102
|
+
Two follow-up quality fixes from Aeptus's 0.8.9 retest. The
|
|
103
|
+
local refresh path is now end-to-end correct.
|
|
104
|
+
|
|
105
|
+
### Fixed
|
|
106
|
+
|
|
107
|
+
- **Findings now attribute to document routes, not synthesized
|
|
108
|
+
HTML filenames.** v0.8.9's bridge set `page.path` to
|
|
109
|
+
`emdash/<route>.html`, which the plugin's
|
|
110
|
+
`evaluateAndPersistAll` then used as the bucket key when
|
|
111
|
+
distributing findings to document routes. The synthesized
|
|
112
|
+
filename never matched the documentRoutes set, so every
|
|
113
|
+
finding landed in a shadow bucket keyed by the filename and
|
|
114
|
+
the document's row in the admin showed zero findings. Bridge
|
|
115
|
+
now sets `page.path` to the document route directly
|
|
116
|
+
(`/about` rather than `emdash/about.html`); `Finding.path`
|
|
117
|
+
matches the bucket the plugin pre-populates.
|
|
118
|
+
|
|
119
|
+
### Changed
|
|
120
|
+
|
|
121
|
+
- **CMS evaluation suppresses site-wide infrastructure rule
|
|
122
|
+
groups.** The plugin's configured-mode evaluator now passes
|
|
123
|
+
a Config to `evaluateDocuments` that disables `robots`,
|
|
124
|
+
`sitemap`, `llm`, `surfaces`, `well_known`, `headers`, and
|
|
125
|
+
`deployment` rule groups. The CMS document set has no
|
|
126
|
+
robots.txt or sitemap.xml or llms.txt — those are the
|
|
127
|
+
host's deployed-site artifacts, audited by the CLI's
|
|
128
|
+
static-site mode against a real filesystem. Running them
|
|
129
|
+
against the bridge's synthetic CMS site produced
|
|
130
|
+
`missing robots.txt` / `missing sitemap.xml` / `missing
|
|
131
|
+
llms.txt` / `missing markdown mirrors` noise on every
|
|
132
|
+
refresh, none of which the editor could act on from inside
|
|
133
|
+
the CMS.
|
|
134
|
+
|
|
135
|
+
Per-page rule groups stay on: `html`, `social`, `schema`,
|
|
136
|
+
`content`, `structure`, `links`. Those audit per-document
|
|
137
|
+
content editors can actually fix.
|
|
138
|
+
|
|
139
|
+
CLI static-site audits are unaffected — they use
|
|
140
|
+
`Config::default()` with all groups on, against a
|
|
141
|
+
filesystem-rooted Site.
|
|
142
|
+
|
|
143
|
+
### Notes for hosts upgrading from 0.8.9
|
|
144
|
+
|
|
145
|
+
- No code changes required.
|
|
146
|
+
- After bumping, the admin's findings page will show fewer
|
|
147
|
+
findings (infrastructure noise gone) and every finding
|
|
148
|
+
correctly attributed to its document route.
|
|
149
|
+
- For the infrastructure-level audit (robots/sitemap/llms/
|
|
150
|
+
well-known/etc.), run `aexeo-cli check` against your static
|
|
151
|
+
dist; that's where those rules belong.
|
|
152
|
+
|
|
9
153
|
## [0.8.9] - 2026-05-04
|
|
10
154
|
|
|
11
155
|
### Fixed
|
|
@@ -908,7 +1052,9 @@ First public release.
|
|
|
908
1052
|
`astro.config.mjs` for the WASM import to resolve to a
|
|
909
1053
|
precompiled `WebAssembly.Module`. Not optional.
|
|
910
1054
|
|
|
911
|
-
[Unreleased]: https://github.com/schiste/Aexeo/compare/aexeo-emdash-v0.8.
|
|
1055
|
+
[Unreleased]: https://github.com/schiste/Aexeo/compare/aexeo-emdash-v0.8.11...HEAD
|
|
1056
|
+
[0.8.11]: https://github.com/schiste/Aexeo/compare/aexeo-emdash-v0.8.10...aexeo-emdash-v0.8.11
|
|
1057
|
+
[0.8.10]: https://github.com/schiste/Aexeo/compare/aexeo-emdash-v0.8.9...aexeo-emdash-v0.8.10
|
|
912
1058
|
[0.8.9]: https://github.com/schiste/Aexeo/compare/aexeo-emdash-v0.8.8...aexeo-emdash-v0.8.9
|
|
913
1059
|
[0.8.8]: https://github.com/schiste/Aexeo/compare/aexeo-emdash-v0.8.7...aexeo-emdash-v0.8.8
|
|
914
1060
|
[0.8.7]: https://github.com/schiste/Aexeo/compare/aexeo-emdash-v0.8.6...aexeo-emdash-v0.8.7
|
package/dist/configured.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configured.d.ts","sourceRoot":"","sources":["../src/configured.ts"],"names":[],"mappings":"AAgCA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"configured.d.ts","sourceRoot":"","sources":["../src/configured.ts"],"names":[],"mappings":"AAgCA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AA0HrD,MAAM,WAAW,uBAAuB;IACtC;;;OAGG;IACH,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAEhC;;;OAGG;IACH,kBAAkB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAEvC;;;OAGG;IACH,kBAAkB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAEvC;;;;;OAKG;IACH,YAAY,CAAC,EAAE,SAAS,WAAW,EAAE,CAAC;CACvC;AAED,wBAAgB,YAAY,CAAC,OAAO,GAAE,uBAA4B,GAAG,OAAO,CA2H3E;AAID,eAAe,YAAY,CAAC"}
|
package/dist/configured.js
CHANGED
|
@@ -1215,7 +1215,7 @@ function globToMatcher(pattern) {
|
|
|
1215
1215
|
}
|
|
1216
1216
|
|
|
1217
1217
|
// src/version.ts
|
|
1218
|
-
var PACKAGE_VERSION = "0.8.
|
|
1218
|
+
var PACKAGE_VERSION = "0.8.11";
|
|
1219
1219
|
|
|
1220
1220
|
// src/configured.ts
|
|
1221
1221
|
import { definePlugin } from "emdash";
|
|
@@ -1238,9 +1238,28 @@ function resolveCollections(explicit, include, exclude) {
|
|
|
1238
1238
|
}
|
|
1239
1239
|
return result;
|
|
1240
1240
|
}
|
|
1241
|
+
var CMS_DISABLED_GROUPS = [
|
|
1242
|
+
"robots",
|
|
1243
|
+
"sitemap",
|
|
1244
|
+
"llm",
|
|
1245
|
+
"surfaces",
|
|
1246
|
+
"well_known",
|
|
1247
|
+
"headers",
|
|
1248
|
+
"deployment"
|
|
1249
|
+
];
|
|
1250
|
+
function buildCmsContextConfig() {
|
|
1251
|
+
const checks = {};
|
|
1252
|
+
for (const group of CMS_DISABLED_GROUPS) {
|
|
1253
|
+
checks[group] = false;
|
|
1254
|
+
}
|
|
1255
|
+
return JSON.stringify({ checks });
|
|
1256
|
+
}
|
|
1241
1257
|
var inProcessEvaluator = async (documents) => {
|
|
1242
1258
|
try {
|
|
1243
|
-
const raw = await evaluateDocuments2(
|
|
1259
|
+
const raw = await evaluateDocuments2(
|
|
1260
|
+
JSON.stringify(documents),
|
|
1261
|
+
buildCmsContextConfig()
|
|
1262
|
+
);
|
|
1244
1263
|
const findings = JSON.parse(raw);
|
|
1245
1264
|
if (!Array.isArray(findings)) {
|
|
1246
1265
|
return {
|
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.11";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/version.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,WAAW,CAAC"}
|
package/package.json
CHANGED
|
Binary file
|