pseolint 0.6.1 → 0.6.3

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.
Files changed (2) hide show
  1. package/README.md +52 -18
  2. package/package.json +3 -3
package/README.md CHANGED
@@ -1,8 +1,20 @@
1
1
  # pseolint
2
2
 
3
- > SpamBrain-proof your pSEO before you publish.
3
+ > Find the broken template before SpamBrain does.
4
4
 
5
- The only tool purpose-built for **programmatic SEO compliance**. Audits page *relationships*, not just pages. Detects the exact patterns Google's SpamBrain targets.
5
+ The CLI for **programmatic SEO auditing** v0.6.2. Detects SpamBrain-risk patterns across large template-generated sites, now surfaced per-template instead of as a flat findings list.
6
+
7
+ ## What's new in v0.6 — audit-as-template
8
+
9
+ - **Per-template verdict aggregation** — the worst template with ≥5% URL coverage drives the site headline. One broken `/listing/:slug` can't hide behind a clean `/category/:slug`.
10
+ - **Per-template variance metric** — uniformity score + top-driver rule per template. "8/10 samples fail `spam/thin-content`" is printed directly on the template card.
11
+ - **Two-phase pipeline** — phase 1 clusters the sitemap (~T fetches); phase 2 deep-audits K pages per template. Typical budget: ~80 fetches on a 100k-URL site vs. 200 in v0.5.
12
+ - **`--per-template`** (default ON) — renders template cards above the findings list.
13
+ - **`--template <signature>`** — drill into one template's findings, useful in CI.
14
+ - **`--legacy-flat`** — opt out; get the v0.5-style flat list.
15
+ - **Backwards compatible** — `--format json` still includes `findings`; `templates` is additive.
16
+
17
+ Design rationale: [`docs/superpowers/specs/2026-05-04-pseolint-v0.6-audit-as-template-reframe.md`](../../docs/superpowers/specs/2026-05-04-pseolint-v0.6-audit-as-template-reframe.md)
6
18
 
7
19
  ## What's new in v0.5.2 — credibility layer
8
20
 
@@ -55,13 +67,19 @@ npm install -g pseolint
55
67
  # Audit your local dev server (recommended)
56
68
  npx pseolint http://localhost:3000
57
69
 
58
- # Audit a live site
70
+ # Audit a live site — per-template output is the default in v0.6
59
71
  npx pseolint https://yoursite.com
60
72
 
61
73
  # Audit a build directory
62
74
  npx pseolint ./out --ci-threshold concerning
63
75
 
64
- # Show every finding (default view shows verdict + grades + top 3 fixes)
76
+ # Filter output to a single template (useful in CI)
77
+ npx pseolint https://yoursite.com --template "/listing/:slug"
78
+
79
+ # Suppress template cards; get the v0.5-style flat findings list
80
+ npx pseolint https://yoursite.com --legacy-flat
81
+
82
+ # Show every finding (default view shows verdict + grades + template cards + top 3 fixes)
65
83
  npx pseolint http://localhost:3000 --explain
66
84
 
67
85
  # Diff two audit runs (verdict, grades, fixed/regressed/new findings)
@@ -71,19 +89,32 @@ npx pseolint diff baseline.json current.json
71
89
  npx pseolint http://localhost:3000 --format html --output report.html
72
90
  ```
73
91
 
74
- A typical first-run console looks like:
92
+ A typical v0.6 console output looks like:
75
93
 
76
94
  ```
77
- Verdict: CAUTION
78
- Integrity A · Discoverability C · Citation F · Data A
95
+ Verdict: CONCERNING
96
+ Integrity C · Discoverability B · Citation C · Data A
97
+
98
+ Per-template breakdown (3 templates):
99
+
100
+ /listing/:slug CONCERNING C
101
+ 10/8201 URLs (0.1%) uniformity 85%
102
+ 8/10 samples fail `spam/thin-content`
103
+
104
+ /category/:slug READY A
105
+ 10/312 URLs (3.2%) uniformity 94%
106
+
107
+ /help/:slug CAUTION B
108
+ 10/47 URLs (21.3%) uniformity 78%
109
+ 3/10 samples fail `content/missing-author`
79
110
 
80
111
  3 blockers, 16 warnings — top fixes by impact:
81
- 1. /tools/* missing og:image (13 pages) → add to layout.tsx
112
+ 1. /listing/* thin content (8/10 pages) → add 200+ unique words per page
113
+ pseolint.dev/rules/thin-content
114
+ 2. /help/* missing author attribution (3 pages) → add author schema or byline
115
+ pseolint.dev/rules/missing-author
116
+ 3. /listing/* missing og:image (10 pages) → add to listing layout
82
117
  pseolint.dev/rules/og-completeness
83
- 2. Symptom Article schema author (5 errors) → add author + datePublished
84
- pseolint.dev/rules/schema-required-fields
85
- 3. /tools index thin unique words (1 error) → add 36 distinctive words
86
- pseolint.dev/rules/unique-value
87
118
 
88
119
  Run `pseolint --explain` for the full list.
89
120
  ```
@@ -96,14 +127,9 @@ Run `pseolint --explain` for the full list.
96
127
  concerning | critical (default: concerning).
97
128
  Exit non-zero if the audit's verdict is at or worse
98
129
  than the threshold.
99
- -t, --threshold <n> [DEPRECATED — removed in v0.5] Numeric risk threshold.
100
- Use --ci-threshold instead. When set, exits non-zero
101
- if summary.risk >= n (low risk = good).
102
130
  --explain Print every finding, bucketed by severity (blockers /
103
131
  should-fix / informational). Default view is the
104
- compact verdict + grades + top-3-fixes view.
105
- --watch [planned, v0.4.1] Re-audit on source changes. Logs
106
- a "not yet implemented" notice and exits in v0.4.0.
132
+ compact verdict + grades + template cards + top-3-fixes.
107
133
  -o, --output <file> Write report to file
108
134
  --no-color Disable colored output
109
135
  --concurrency <n> Max parallel HTTP fetches (default: 5)
@@ -114,6 +140,14 @@ Run `pseolint --explain` for the full list.
114
140
  --browser-ws <url> CDP WebSocket endpoint for rendering
115
141
  --no-crawl Disable crawl-based page discovery
116
142
 
143
+ Template output (v0.6)
144
+ --per-template Render per-template cards (default: ON when ≥2 templates
145
+ detected; suppress with --legacy-flat)
146
+ --template <signature> Filter output to a single template, e.g. /listing/:slug.
147
+ CI use case: fail only when that template degrades.
148
+ --legacy-flat Suppress template cards; print the v0.5-style flat
149
+ findings list.
150
+
117
151
  Safety (v0.3.2+)
118
152
  --safe-mode <saas|cli> Preset: "saas" flips guardSsrf + tightens caps;
119
153
  "cli" keeps local-friendly defaults.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pseolint",
3
- "version": "0.6.1",
3
+ "version": "0.6.3",
4
4
  "description": "Programmatic SEO linter CLI — SpamBrain-proof your pSEO before you publish. v0.4 verdict ladder (ready/caution/concerning/critical) + auto site classification.",
5
5
  "license": "MIT",
6
6
  "author": "Ouranos Labs <contact@ouranos-labs.dev>",
@@ -43,8 +43,8 @@
43
43
  "typecheck": "tsc --noEmit -p tsconfig.json"
44
44
  },
45
45
  "dependencies": {
46
- "@pseolint/core": "^0.6.1",
47
- "@pseolint/mcp": "^0.6.1",
46
+ "@pseolint/core": "^0.6.3",
47
+ "@pseolint/mcp": "^0.6.3",
48
48
  "commander": "^14.0.3",
49
49
  "cosmiconfig": "^9.0.1",
50
50
  "jiti": "^2.6.0",