aeoptimize 0.5.3 → 0.6.0
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/.claude-plugin/marketplace.json +5 -5
- package/.claude-plugin/plugin.json +4 -4
- package/CHANGELOG.md +27 -0
- package/CONTRIBUTING.md +37 -0
- package/README.md +86 -130
- package/ROADMAP.md +31 -0
- package/SECURITY.md +15 -0
- package/agents/aeo-ai-scorer.md +10 -39
- package/agents/aeo-analyzer.md +9 -55
- package/dist/cli/index.js +18 -18
- package/dist/cli/index.js.map +1 -1
- package/dist/core/ai-prompt.js +8 -6
- package/dist/core/ai-prompt.js.map +1 -1
- package/dist/core/generator.js +17 -47
- package/dist/core/generator.js.map +1 -1
- package/dist/core/merger.js +2 -2
- package/dist/core/merger.js.map +1 -1
- package/dist/core/rules.js +92 -154
- package/dist/core/rules.js.map +1 -1
- package/dist/core/scanner.js +2 -20
- package/dist/core/scanner.js.map +1 -1
- package/dist/plugins/next.js +2 -2
- package/dist/plugins/next.js.map +1 -1
- package/dist/plugins/vite.js +2 -2
- package/dist/plugins/vite.js.map +1 -1
- package/docs/methodology.md +78 -0
- package/docs/release-v0.6.md +72 -0
- package/examples/github-action-sample/.github/workflows/aeoptimize.yml +18 -0
- package/examples/github-action-sample/README.md +9 -0
- package/examples/github-action-sample/site/index.html +38 -0
- package/fixtures/v0.6/rule-corpus.ts +314 -0
- package/package.json +26 -13
- package/scripts/verify-release-v0.6.sh +172 -0
- package/skills/aeo-generate/SKILL.md +21 -39
- package/skills/aeo-scan/SKILL.md +17 -64
- package/skills/aeo-transform/SKILL.md +20 -72
|
@@ -4,18 +4,18 @@
|
|
|
4
4
|
"name": "Te-Shu Wang"
|
|
5
5
|
},
|
|
6
6
|
"metadata": {
|
|
7
|
-
"description": "
|
|
8
|
-
"version": "0.
|
|
7
|
+
"description": "Content-readiness lint with evidence-bounded AI discovery experiments",
|
|
8
|
+
"version": "0.6.0"
|
|
9
9
|
},
|
|
10
10
|
"plugins": [
|
|
11
11
|
{
|
|
12
12
|
"name": "aeoptimize",
|
|
13
13
|
"source": "./",
|
|
14
|
-
"description": "CLI
|
|
14
|
+
"description": "CLI and Claude Code skills for reproducible content-readiness checks",
|
|
15
15
|
"category": "seo",
|
|
16
16
|
"tags": ["aeo", "seo", "ai-search", "llms-txt", "structured-data"],
|
|
17
|
-
"homepage": "https://github.com/
|
|
18
|
-
"repository": "https://github.com/
|
|
17
|
+
"homepage": "https://github.com/cucuwang/aeoptimize",
|
|
18
|
+
"repository": "https://github.com/cucuwang/aeoptimize"
|
|
19
19
|
}
|
|
20
20
|
]
|
|
21
21
|
}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "aeoptimize",
|
|
3
|
-
"description": "
|
|
4
|
-
"version": "0.
|
|
3
|
+
"description": "Content-readiness lint and evidence-bounded discovery experiments",
|
|
4
|
+
"version": "0.6.0",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Te-Shu Wang"
|
|
7
7
|
},
|
|
8
|
-
"homepage": "https://github.com/
|
|
9
|
-
"repository": "https://github.com/
|
|
8
|
+
"homepage": "https://github.com/cucuwang/aeoptimize",
|
|
9
|
+
"repository": "https://github.com/cucuwang/aeoptimize",
|
|
10
10
|
"license": "MIT",
|
|
11
11
|
"keywords": ["aeo", "seo", "ai-search", "llms-txt", "structured-data", "claude-code-skill"],
|
|
12
12
|
"commands": [
|
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable user-visible changes will be documented here. The project follows Semantic Versioning after the v0.6 evidence baseline is released.
|
|
4
|
+
|
|
5
|
+
## 0.6.0
|
|
6
|
+
|
|
7
|
+
### Changed
|
|
8
|
+
|
|
9
|
+
- Reframed the score as deterministic content readiness rather than a prediction of ranking or AI citation.
|
|
10
|
+
- Classified FAQ and `llms.txt` as optional, zero-point signals.
|
|
11
|
+
- Removed the exact-one-H1 and fixed meta-description-length assumptions.
|
|
12
|
+
- Changed quantitative-content guidance to flag unsourced claims instead of rewarding more numbers.
|
|
13
|
+
- Stopped inferring `FAQPage` structured data from question headings.
|
|
14
|
+
- Limited CI support to maintained Node.js LTS lines and refreshed dependencies.
|
|
15
|
+
- Added methodology, contribution, security, roadmap, and root GitHub Action files.
|
|
16
|
+
- Made the GitHub Action advisory by default, with explicit blocking mode, version-matched package installation, stable outputs, and contract fixtures.
|
|
17
|
+
- Added a public positive, negative, and false-positive boundary corpus for every scored rule.
|
|
18
|
+
- Added a copyable end-to-end GitHub Action sample plus release and rollback instructions.
|
|
19
|
+
|
|
20
|
+
### Security
|
|
21
|
+
|
|
22
|
+
- Updated runtime and development dependencies to remove known npm audit findings present in the previous lockfile.
|
|
23
|
+
|
|
24
|
+
## 0.5.3 — 2026-04-15
|
|
25
|
+
|
|
26
|
+
- Added the `aeoptimize` executable alias.
|
|
27
|
+
- Synchronized CLI, Action, and plugin version metadata.
|
package/CONTRIBUTING.md
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Contributing
|
|
2
|
+
|
|
3
|
+
Contributions that make `aeoptimize` more reproducible, explainable, or easier to adopt are welcome.
|
|
4
|
+
|
|
5
|
+
## Development setup
|
|
6
|
+
|
|
7
|
+
Use Node.js 22.12 or newer. Node 24 LTS is the recommended development version.
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm ci
|
|
11
|
+
npm run check
|
|
12
|
+
npm pack --dry-run
|
|
13
|
+
npm audit --audit-level=high
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
Do not commit `node_modules`, `dist`, package tarballs, credentials, or reports containing private URLs.
|
|
17
|
+
|
|
18
|
+
## Pull requests
|
|
19
|
+
|
|
20
|
+
Keep each pull request focused. Include:
|
|
21
|
+
|
|
22
|
+
- the problem and user workflow;
|
|
23
|
+
- tests or fixtures that fail before the change and pass after it;
|
|
24
|
+
- JSON/output compatibility notes;
|
|
25
|
+
- documentation updates for user-visible behavior;
|
|
26
|
+
- the source and evidence class for any scoring-rule change.
|
|
27
|
+
|
|
28
|
+
Rule proposals must follow [docs/methodology.md](docs/methodology.md). Unsupported ranking, citation, adoption, or performance claims will not be accepted. Do not add fabricated statistics to examples or fixtures.
|
|
29
|
+
|
|
30
|
+
## Commit and review expectations
|
|
31
|
+
|
|
32
|
+
- Run `npm run check`, `npm pack --dry-run`, and `npm audit --audit-level=high`.
|
|
33
|
+
- Preserve deterministic output unless the pull request explicitly versions the methodology change.
|
|
34
|
+
- Treat generated JSON-LD and crawler policy as reviewable candidates, never universal defaults.
|
|
35
|
+
- Add a changelog entry for behavior, compatibility, security, or methodology changes.
|
|
36
|
+
|
|
37
|
+
Opening an issue before a large change is recommended so scope and compatibility can be agreed first.
|
package/README.md
CHANGED
|
@@ -1,204 +1,160 @@
|
|
|
1
1
|
# aeoptimize
|
|
2
2
|
|
|
3
3
|
[](https://www.npmjs.com/package/aeoptimize)
|
|
4
|
-
[](https://github.com/
|
|
4
|
+
[](https://github.com/cucuwang/aeoptimize/actions/workflows/ci.yml)
|
|
5
|
+
[](https://github.com/cucuwang/aeoptimize/blob/main/LICENSE)
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
Deterministic content-readiness lint for static websites and documentation.
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
`aeoptimize` checks reproducible properties such as document structure, sourced quantitative claims, structured-data hygiene, indexing controls, metadata quality, and repetitive wording. It is intended for local development and CI regression checks.
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|---|---|---|
|
|
13
|
-
| **Goal** | Rank higher | Get cited |
|
|
14
|
-
| **Audience** | Search crawler | Language model |
|
|
15
|
-
| **Key metric** | Position | Citation accuracy |
|
|
16
|
-
| **Content style** | Keyword-rich | Self-contained, structured |
|
|
17
|
-
| **Structured data** | Nice to have | Essential |
|
|
11
|
+
It does **not** predict ranking, indexing, rich results, Google AI Overviews, or citation by ChatGPT, Perplexity, or another AI system. Google states that its AI search features need no special AI text file or schema, and valid structured data does not guarantee a search feature. See [methodology and limitations](docs/methodology.md).
|
|
18
12
|
|
|
19
|
-
|
|
13
|
+
## Quick start
|
|
20
14
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
## Quick Start
|
|
15
|
+
Requires Node.js 22.12 or newer.
|
|
24
16
|
|
|
25
17
|
```bash
|
|
26
|
-
npx aeoptimize scan
|
|
18
|
+
npx aeoptimize scan https://example.com
|
|
19
|
+
npx aeoptimize scan ./dist --dir
|
|
20
|
+
npx aeoptimize scan ./dist --dir --json
|
|
27
21
|
```
|
|
28
22
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
→ Add FAQ section with question-format headings
|
|
41
|
-
→ Add AI-relevant schema types
|
|
42
|
-
→ Create and link an llms.txt file
|
|
23
|
+
Example output:
|
|
24
|
+
|
|
25
|
+
```text
|
|
26
|
+
Content Readiness Report
|
|
27
|
+
Score: 71/100
|
|
28
|
+
|
|
29
|
+
Structure 20/25
|
|
30
|
+
Citability 18/25
|
|
31
|
+
Schema 16/20
|
|
32
|
+
AI Metadata 10/15
|
|
33
|
+
Content Density 7/15
|
|
43
34
|
```
|
|
44
35
|
|
|
45
|
-
|
|
36
|
+
The score is a versioned heuristic for catching regressions within the same project. Do not treat it as a percentage chance of search or AI visibility, and do not compare unrelated sites as if it were an outcome metric.
|
|
46
37
|
|
|
47
|
-
|
|
38
|
+
## What is scored
|
|
48
39
|
|
|
49
|
-
|
|
40
|
+
| Dimension | Max | Scope |
|
|
41
|
+
| --- | ---: | --- |
|
|
42
|
+
| Structure | 25 | Document outline and readability heuristics |
|
|
43
|
+
| Citability | 25 | Claim specificity, source signals, definitions, attribution |
|
|
44
|
+
| Schema | 20 | JSON-LD structural hygiene when present; absence is not penalized |
|
|
45
|
+
| AI Metadata | 15 | Page-level indexing control and description quality |
|
|
46
|
+
| Content Density | 15 | Content/boilerplate and repetition heuristics |
|
|
50
47
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
```
|
|
48
|
+
Two often-promoted AEO signals are deliberately excluded from the score:
|
|
49
|
+
|
|
50
|
+
- FAQ content and `FAQPage` schema are optional. The generator does not infer FAQ schema from question headings.
|
|
51
|
+
- `llms.txt` is an experimental proposal. Generating or publishing it does not add points.
|
|
56
52
|
|
|
57
|
-
|
|
58
|
-
|-----------|-----|------------------|
|
|
59
|
-
| **Structure** | 25 | Heading hierarchy, paragraph length, FAQ presence |
|
|
60
|
-
| **Citability** | 25 | Self-contained statements, data/stats, definitions |
|
|
61
|
-
| **Schema** | 20 | JSON-LD presence, completeness, AI-relevant types |
|
|
62
|
-
| **AI Metadata** | 15 | llms.txt, robots.txt AI config, meta description |
|
|
63
|
-
| **Content Density** | 15 | Content vs boilerplate, keyword stuffing detection |
|
|
53
|
+
Every rule, its evidence class, and known false-positive boundary is documented in [docs/methodology.md](docs/methodology.md) and exercised by the [versioned public fixture corpus](fixtures/v0.6/rule-corpus.ts).
|
|
64
54
|
|
|
65
|
-
|
|
55
|
+
## CI contract
|
|
66
56
|
|
|
67
|
-
|
|
57
|
+
`--json` is the stable automation surface. A non-zero threshold is useful only after your team reviews the baseline and accepts the current methodology version.
|
|
68
58
|
|
|
69
59
|
```bash
|
|
70
|
-
npx aeoptimize scan
|
|
60
|
+
npx aeoptimize scan ./dist --dir --json > aeoptimize-report.json
|
|
61
|
+
node -e "const r=require('./aeoptimize-report.json'); process.exit(r.overall.total < 60 ? 1 : 0)"
|
|
71
62
|
```
|
|
72
63
|
|
|
64
|
+
The v0.6 GitHub Action is advisory by default. It reports findings without blocking the workflow:
|
|
65
|
+
|
|
66
|
+
```yaml
|
|
67
|
+
- uses: cucuwang/aeoptimize@v0.6.0
|
|
68
|
+
with:
|
|
69
|
+
path: dist
|
|
73
70
|
```
|
|
74
|
-
Score: 72/100 (Rule Engine: 61 | AI Consensus: 83)
|
|
75
71
|
|
|
76
|
-
|
|
77
|
-
Claude ████████████████░░░░ 85/100
|
|
78
|
-
Gemini ████████████████░░░░ 81/100
|
|
72
|
+
Projects can explicitly choose blocking mode after accepting a baseline:
|
|
79
73
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
74
|
+
```yaml
|
|
75
|
+
- uses: cucuwang/aeoptimize@v0.6.0
|
|
76
|
+
with:
|
|
77
|
+
path: dist
|
|
78
|
+
fail-on-low-score: 'true'
|
|
79
|
+
min-score: '60'
|
|
83
80
|
```
|
|
84
81
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
| Rule engine + 1 AI | 60% rules + 40% AI |
|
|
89
|
-
| Rule engine only | 100% rules |
|
|
82
|
+
The Action exposes `score` and `report` outputs in both modes. Its release is reproducible only when the Action tag and matching npm package version both exist. Before pinning a version, verify both artifacts; if either is missing, use the CLI directly.
|
|
83
|
+
|
|
84
|
+
A copyable advisory workflow and controlled input are available in the [end-to-end Action sample](examples/github-action-sample/README.md).
|
|
90
85
|
|
|
91
|
-
|
|
86
|
+
## Optional generators
|
|
92
87
|
|
|
93
88
|
```bash
|
|
94
|
-
npx aeoptimize generate ./dist --dry-run
|
|
95
|
-
npx aeoptimize generate ./dist
|
|
89
|
+
npx aeoptimize generate ./dist --dry-run
|
|
90
|
+
npx aeoptimize generate ./dist
|
|
96
91
|
```
|
|
97
92
|
|
|
98
|
-
|
|
99
|
-
- **llms.txt** — Machine-readable site summary ([llmstxt.org](https://llmstxt.org) standard)
|
|
100
|
-
- **llms-full.txt** — Full content for deep AI consumption
|
|
101
|
-
- **JSON-LD schemas** — Article, FAQPage, BreadcrumbList
|
|
102
|
-
- **robots.txt suggestions** — AI crawler allow/deny rules
|
|
103
|
-
|
|
104
|
-
### Transform — AI Content Restructuring (Claude Code Skill)
|
|
93
|
+
The generator can create:
|
|
105
94
|
|
|
106
|
-
|
|
95
|
+
- `llms.txt` and `llms-full.txt` as experimental outputs based on the [llms.txt proposal](https://llmstxt.org/);
|
|
96
|
+
- candidate `Article` and `BreadcrumbList` JSON-LD for manual review;
|
|
97
|
+
- crawler-specific `robots.txt` suggestions, printed but never applied automatically.
|
|
107
98
|
|
|
108
|
-
-
|
|
109
|
-
- Extract implicit Q&A into FAQ schema
|
|
110
|
-
- Remove keyword stuffing
|
|
111
|
-
- Fix dangling references ("This...", "It...", "They...")
|
|
112
|
-
- Inject structured data
|
|
99
|
+
Generated structured data must be reviewed against visible content and the applicable search-engine documentation. The generator intentionally does not create `FAQPage` from headings alone.
|
|
113
100
|
|
|
114
|
-
## Framework
|
|
101
|
+
## Framework integrations
|
|
115
102
|
|
|
116
103
|
### Vite
|
|
117
104
|
|
|
118
105
|
```ts
|
|
119
|
-
|
|
106
|
+
import { defineConfig } from 'vite';
|
|
120
107
|
import { aeoPlugin } from 'aeoptimize/vite';
|
|
121
108
|
|
|
122
109
|
export default defineConfig({
|
|
123
|
-
plugins: [aeoPlugin()]
|
|
110
|
+
plugins: [aeoPlugin()],
|
|
124
111
|
});
|
|
125
112
|
```
|
|
126
113
|
|
|
127
114
|
### Next.js
|
|
128
115
|
|
|
129
|
-
```
|
|
130
|
-
// next.config.mjs
|
|
116
|
+
```js
|
|
131
117
|
import { withAeo } from 'aeoptimize/next';
|
|
132
118
|
|
|
133
119
|
export default withAeo({});
|
|
134
120
|
```
|
|
135
121
|
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
Options: `{ silent?: boolean; outDir?: string }`
|
|
139
|
-
|
|
140
|
-
## Guardrails
|
|
141
|
-
|
|
142
|
-
### Pre-commit Hook
|
|
143
|
-
|
|
144
|
-
```bash
|
|
145
|
-
npx aeoptimize hook install # Default: min score 60
|
|
146
|
-
npx aeoptimize hook install --min-score 80 # Custom threshold
|
|
147
|
-
npx aeoptimize hook uninstall # Remove hook
|
|
148
|
-
```
|
|
122
|
+
Both integrations scan the build output and generate the same optional artifacts as the CLI. Options: `{ silent?: boolean; outDir?: string }`.
|
|
149
123
|
|
|
150
|
-
|
|
124
|
+
## Experimental AI review
|
|
151
125
|
|
|
152
|
-
Works with husky too — add to your `.husky/pre-commit`:
|
|
153
126
|
```bash
|
|
154
|
-
npx aeoptimize scan
|
|
127
|
+
npx aeoptimize scan https://example.com --multi-ai
|
|
155
128
|
```
|
|
156
129
|
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
```yaml
|
|
160
|
-
# .github/workflows/aeo.yml
|
|
161
|
-
name: AEO Check
|
|
162
|
-
on: [pull_request]
|
|
163
|
-
jobs:
|
|
164
|
-
aeo:
|
|
165
|
-
runs-on: ubuntu-latest
|
|
166
|
-
steps:
|
|
167
|
-
- uses: actions/checkout@v4
|
|
168
|
-
- uses: dexuwang627-cloud/aeoptimize/action@v0.5.3
|
|
169
|
-
with:
|
|
170
|
-
path: dist
|
|
171
|
-
min-score: 60
|
|
172
|
-
```
|
|
130
|
+
When supported local AI CLIs are available, this adds a subjective review and reports an experimental blend. Model output can vary and is not ground truth. The deterministic rule score remains visible separately.
|
|
173
131
|
|
|
174
|
-
##
|
|
132
|
+
## Pre-commit hook
|
|
175
133
|
|
|
176
134
|
```bash
|
|
177
|
-
|
|
135
|
+
npx aeoptimize hook install
|
|
136
|
+
npx aeoptimize hook install --min-score 60
|
|
137
|
+
npx aeoptimize hook uninstall
|
|
178
138
|
```
|
|
179
139
|
|
|
180
|
-
|
|
181
|
-
- `/aeo-generate` — Guided file generation with preview
|
|
182
|
-
- `/aeo-transform` — AI-powered content restructuring
|
|
140
|
+
The hook checks staged `.html`, `.htm`, `.md`, and `.mdx` content. Review the baseline before using a threshold to block commits; `git commit --no-verify` remains an explicit escape hatch.
|
|
183
141
|
|
|
184
|
-
##
|
|
142
|
+
## Claude Code skills
|
|
185
143
|
|
|
186
144
|
```bash
|
|
187
|
-
|
|
188
|
-
npx aeoptimize scan --help # Scan options
|
|
189
|
-
npx aeoptimize generate --help # Generate options
|
|
145
|
+
claude plugin marketplace add cucuwang/aeoptimize
|
|
190
146
|
```
|
|
191
147
|
|
|
192
|
-
|
|
148
|
+
- `/aeo-scan` — deterministic readiness audit with optional experimental review
|
|
149
|
+
- `/aeo-generate` — preview optional discovery artifacts
|
|
150
|
+
- `/aeo-transform` — propose content edits without inventing claims
|
|
151
|
+
|
|
152
|
+
## Project status
|
|
193
153
|
|
|
194
|
-
|
|
154
|
+
The v0.6 evidence baseline focuses on methodology, reproducible fixtures, CI compatibility, packaging, and external adoption—not more scoring rules. Release acceptance and rollback are documented in [docs/release-v0.6.md](docs/release-v0.6.md); longer-term adoption work remains in [ROADMAP.md](ROADMAP.md).
|
|
195
155
|
|
|
196
|
-
|
|
197
|
-
2. Create your feature branch (`git checkout -b feature/amazing`)
|
|
198
|
-
3. Run tests (`npm test`)
|
|
199
|
-
4. Commit your changes
|
|
200
|
-
5. Open a Pull Request
|
|
156
|
+
Contributions are welcome. Rule changes require an evidence note and positive/negative fixtures; see [CONTRIBUTING.md](CONTRIBUTING.md). Report vulnerabilities through the process in [SECURITY.md](SECURITY.md).
|
|
201
157
|
|
|
202
158
|
## License
|
|
203
159
|
|
|
204
|
-
MIT
|
|
160
|
+
MIT
|
package/ROADMAP.md
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Roadmap
|
|
2
|
+
|
|
3
|
+
## v0.6 — Evidence Release
|
|
4
|
+
|
|
5
|
+
The release goal is a trustworthy CI lint contract, not additional AEO claims.
|
|
6
|
+
|
|
7
|
+
Release gates:
|
|
8
|
+
|
|
9
|
+
- current repository identity across npm, README, Action, and Claude plugin metadata;
|
|
10
|
+
- green CI on supported Node.js LTS releases;
|
|
11
|
+
- zero high or critical npm audit findings at release time;
|
|
12
|
+
- versioned methodology with evidence classes and explicit non-goals;
|
|
13
|
+
- public positive, negative, and false-positive fixtures for every scored rule;
|
|
14
|
+
- root GitHub Action metadata and an end-to-end sample repository;
|
|
15
|
+
- stable JSON output, changelog, release notes, and rollback instructions.
|
|
16
|
+
|
|
17
|
+
The release gates are enforced by `src/core/__tests__/release-contract.test.ts`, the versioned corpus in `fixtures/v0.6/`, the copyable sample in `examples/github-action-sample/`, and the release runbook in `docs/release-v0.6.md`.
|
|
18
|
+
|
|
19
|
+
## Product validation after v0.6
|
|
20
|
+
|
|
21
|
+
- Validate one core workflow: static site or documentation CI content-readiness lint.
|
|
22
|
+
- Obtain three independently controlled public adoption examples.
|
|
23
|
+
- Triage external issues and document support boundaries before adding framework breadth.
|
|
24
|
+
- Measure technical outcomes such as a caught `noindex` regression or schema/content mismatch. Keep ranking and citation outcomes separate.
|
|
25
|
+
|
|
26
|
+
## Not planned without new evidence
|
|
27
|
+
|
|
28
|
+
- claiming that a readiness score predicts search position or AI citation;
|
|
29
|
+
- awarding points for `llms.txt`, FAQ count, schema count, or a fixed meta-description length;
|
|
30
|
+
- automatic deployment of generated JSON-LD or crawler policy;
|
|
31
|
+
- adding more AI scorers and calling their average consensus.
|
package/SECURITY.md
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Security policy
|
|
2
|
+
|
|
3
|
+
## Supported versions
|
|
4
|
+
|
|
5
|
+
Security fixes are applied to the latest published minor release. Older releases may be asked to upgrade when a backport is not practical.
|
|
6
|
+
|
|
7
|
+
## Reporting a vulnerability
|
|
8
|
+
|
|
9
|
+
Use GitHub's private vulnerability reporting for `cucuwang/aeoptimize` when available. If the repository does not show a private reporting option, open a minimal issue asking for a private contact channel; do not include exploit details, credentials, private URLs, or user data in a public issue.
|
|
10
|
+
|
|
11
|
+
Include the affected version, environment, reproduction preconditions, impact, and the smallest safe proof of concept. You should receive an acknowledgement within seven days. A remediation timeline depends on severity and reproducibility.
|
|
12
|
+
|
|
13
|
+
## Scope notes
|
|
14
|
+
|
|
15
|
+
`aeoptimize` can fetch remote pages, invoke a local browser, read build output, and install a Git hook. Reports may contain URLs and excerpts from scanned content. Review artifacts before publishing them and never scan private systems without authorization.
|
package/agents/aeo-ai-scorer.md
CHANGED
|
@@ -1,48 +1,19 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: aeo-ai-scorer
|
|
3
|
-
description: Use
|
|
3
|
+
description: Use only for an explicitly requested experimental content-quality review alongside the deterministic aeoptimize report
|
|
4
4
|
model: inherit
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
You are an
|
|
7
|
+
You are an experimental content-quality reviewer. Your output is subjective and must not be presented as a prediction of ranking, indexing, rich results, visibility, or citation.
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
Review the supplied content for:
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
- descriptive hierarchy, readability, and semantically appropriate lists;
|
|
12
|
+
- self-contained statements, sourced quantitative claims, definitions, and attribution;
|
|
13
|
+
- structured data that matches visible content;
|
|
14
|
+
- intentional indexing controls and page-specific descriptions;
|
|
15
|
+
- boilerplate and repetitive wording.
|
|
14
16
|
|
|
15
|
-
|
|
17
|
+
FAQ content is optional. `llms.txt` is an unscored proposal. Do not impose a fixed meta-description length, exact H1 count, keyword-density threshold, or schema count.
|
|
16
18
|
|
|
17
|
-
|
|
18
|
-
- **structure** (0-25): Heading hierarchy quality, paragraph length (ideal: 40-80 words), FAQ sections, list usage
|
|
19
|
-
- **citability** (0-25): Self-contained statements (no dangling "This...", "It..."), data/statistics, clear definitions ("X is Y"), source attribution
|
|
20
|
-
- **schema** (0-20): JSON-LD presence and completeness, AI-relevant types (Article, FAQPage, HowTo, Product)
|
|
21
|
-
- **aiMetadata** (0-15): llms.txt reference, robots.txt AI crawler configuration, meta description quality (50-160 chars)
|
|
22
|
-
- **contentDensity** (0-15): Content vs boilerplate ratio, keyword stuffing (>3% = bad), content uniqueness signals
|
|
23
|
-
|
|
24
|
-
## Output Format
|
|
25
|
-
|
|
26
|
-
Respond with ONLY valid JSON:
|
|
27
|
-
|
|
28
|
-
```json
|
|
29
|
-
{
|
|
30
|
-
"score": <total 0-100>,
|
|
31
|
-
"structure": <0-25>,
|
|
32
|
-
"citability": <0-25>,
|
|
33
|
-
"schema": <0-20>,
|
|
34
|
-
"aiMetadata": <0-15>,
|
|
35
|
-
"contentDensity": <0-15>,
|
|
36
|
-
"insight": "<one sentence: the single most impactful thing to fix>"
|
|
37
|
-
}
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
## Guidelines
|
|
41
|
-
|
|
42
|
-
- Be objective and consistent — same content should get same score
|
|
43
|
-
- Compare against an ideal AEO-optimized page, not against average websites
|
|
44
|
-
- The rule engine already checks structural patterns; focus on semantic quality that rules can't measure:
|
|
45
|
-
- Can you actually extract a citable quote from each paragraph?
|
|
46
|
-
- Does the content answer a specific question or just ramble?
|
|
47
|
-
- Would you cite this page when answering a user's question?
|
|
48
|
-
- Do NOT inflate scores to be nice — a typical unoptimized page should score 30-50
|
|
19
|
+
Return only the JSON shape requested by the caller. State the most important evidence-backed issue in `insight`. Repeated model runs may differ; the deterministic report remains the CI source of truth.
|
package/agents/aeo-analyzer.md
CHANGED
|
@@ -1,63 +1,17 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: aeo-analyzer
|
|
3
|
-
description: Use when
|
|
3
|
+
description: Use when an explicit qualitative review is needed for a page after the deterministic readiness scan
|
|
4
4
|
model: inherit
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
You are
|
|
7
|
+
You are a content-readiness reviewer. Separate deterministic findings, heuristics, and experiments; do not predict ranking or citation.
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
For each proposed change:
|
|
10
10
|
|
|
11
|
-
1.
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
11
|
+
1. quote the smallest relevant source passage;
|
|
12
|
+
2. name the evidence class and false-positive boundary;
|
|
13
|
+
3. provide a focused before/after diff;
|
|
14
|
+
4. preserve meaning, voice, and factual provenance;
|
|
15
|
+
5. state a deterministic score change only when the same scan reproduces it.
|
|
15
16
|
|
|
16
|
-
|
|
17
|
-
- Order by: (impact on score) × (ease of implementation)
|
|
18
|
-
- Group related fixes together
|
|
19
|
-
- Estimate score improvement per fix
|
|
20
|
-
|
|
21
|
-
3. **Before/After Examples**
|
|
22
|
-
- For the top 3 improvements, show exactly how the content should change
|
|
23
|
-
- Use diff format: what to remove vs what to add
|
|
24
|
-
- Explain why the "after" version is more AI-friendly
|
|
25
|
-
|
|
26
|
-
4. **Content Strategy Notes**
|
|
27
|
-
- What type of AI queries would this page answer?
|
|
28
|
-
- What's missing that would make it the definitive source?
|
|
29
|
-
- Are there FAQ opportunities hidden in the content?
|
|
30
|
-
|
|
31
|
-
## Output Format
|
|
32
|
-
|
|
33
|
-
Structure your analysis as:
|
|
34
|
-
|
|
35
|
-
```
|
|
36
|
-
## Page: [title]
|
|
37
|
-
Current Score: [X]/100
|
|
38
|
-
|
|
39
|
-
### Priority Fixes
|
|
40
|
-
|
|
41
|
-
#### 1. [Fix Name] — Expected improvement: +N points
|
|
42
|
-
**Issue:** [what's wrong]
|
|
43
|
-
**Why it matters:** [AI search impact]
|
|
44
|
-
**Fix:**
|
|
45
|
-
- Before: [quoted original]
|
|
46
|
-
- After: [suggested replacement]
|
|
47
|
-
|
|
48
|
-
[repeat for each fix]
|
|
49
|
-
|
|
50
|
-
### Quick Wins (under 5 minutes each)
|
|
51
|
-
- [list of easy fixes]
|
|
52
|
-
|
|
53
|
-
### Summary
|
|
54
|
-
- Current: X/100 → Estimated after fixes: Y/100
|
|
55
|
-
- Most impactful change: [one sentence]
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
## Guidelines
|
|
59
|
-
|
|
60
|
-
- Be specific — quote actual content, don't speak in generalities
|
|
61
|
-
- Focus on what AI engines actually care about, not traditional SEO metrics
|
|
62
|
-
- If the page is already well-optimized (>80), say so and suggest only minor refinements
|
|
63
|
-
- Never suggest adding false claims or misleading structured data
|
|
17
|
+
Prioritize unsupported quantitative claims, unintended indexing controls, structured data that conflicts with visible content, and clear readability regressions. Never invent claims, sources, authors, dates, FAQ content, or benefits. Use primary documentation for technical assertions.
|