@pseolint/core 0.4.0 → 0.4.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 (67) hide show
  1. package/dist/auditor.d.ts +12 -1
  2. package/dist/auditor.d.ts.map +1 -1
  3. package/dist/auditor.js +317 -43
  4. package/dist/auditor.js.map +1 -1
  5. package/dist/formatters/bucket-findings.d.ts +43 -0
  6. package/dist/formatters/bucket-findings.d.ts.map +1 -0
  7. package/dist/formatters/bucket-findings.js +110 -0
  8. package/dist/formatters/bucket-findings.js.map +1 -0
  9. package/dist/formatters/console.d.ts.map +1 -1
  10. package/dist/formatters/console.js +103 -34
  11. package/dist/formatters/console.js.map +1 -1
  12. package/dist/formatters/fixplan.d.ts +13 -0
  13. package/dist/formatters/fixplan.d.ts.map +1 -0
  14. package/dist/formatters/fixplan.js +328 -0
  15. package/dist/formatters/fixplan.js.map +1 -0
  16. package/dist/formatters/html.d.ts.map +1 -1
  17. package/dist/formatters/html.js +27 -0
  18. package/dist/formatters/html.js.map +1 -1
  19. package/dist/formatters/index.d.ts +2 -0
  20. package/dist/formatters/index.d.ts.map +1 -1
  21. package/dist/formatters/index.js +1 -0
  22. package/dist/formatters/index.js.map +1 -1
  23. package/dist/formatters/markdown.d.ts.map +1 -1
  24. package/dist/formatters/markdown.js +77 -7
  25. package/dist/formatters/markdown.js.map +1 -1
  26. package/dist/page-filter.d.ts +108 -0
  27. package/dist/page-filter.d.ts.map +1 -0
  28. package/dist/page-filter.js +207 -0
  29. package/dist/page-filter.js.map +1 -0
  30. package/dist/rules/aeo/answer-first.d.ts.map +1 -1
  31. package/dist/rules/aeo/answer-first.js +17 -3
  32. package/dist/rules/aeo/answer-first.js.map +1 -1
  33. package/dist/rules/aeo/citable-facts.d.ts.map +1 -1
  34. package/dist/rules/aeo/citable-facts.js +12 -1
  35. package/dist/rules/aeo/citable-facts.js.map +1 -1
  36. package/dist/rules/aeo/content-modularity.d.ts.map +1 -1
  37. package/dist/rules/aeo/content-modularity.js +3 -0
  38. package/dist/rules/aeo/content-modularity.js.map +1 -1
  39. package/dist/rules/aeo/crawler-access.d.ts.map +1 -1
  40. package/dist/rules/aeo/crawler-access.js +6 -0
  41. package/dist/rules/aeo/crawler-access.js.map +1 -1
  42. package/dist/rules/aeo/faq-coverage.d.ts.map +1 -1
  43. package/dist/rules/aeo/faq-coverage.js +4 -0
  44. package/dist/rules/aeo/faq-coverage.js.map +1 -1
  45. package/dist/rules/aeo/freshness-signals.d.ts.map +1 -1
  46. package/dist/rules/aeo/freshness-signals.js +9 -2
  47. package/dist/rules/aeo/freshness-signals.js.map +1 -1
  48. package/dist/rules/aeo/llms-txt.d.ts.map +1 -1
  49. package/dist/rules/aeo/llms-txt.js +6 -1
  50. package/dist/rules/aeo/llms-txt.js.map +1 -1
  51. package/dist/rules/aeo/summary-bait.d.ts.map +1 -1
  52. package/dist/rules/aeo/summary-bait.js +5 -2
  53. package/dist/rules/aeo/summary-bait.js.map +1 -1
  54. package/dist/rules/content/missing-author.d.ts.map +1 -1
  55. package/dist/rules/content/missing-author.js +10 -2
  56. package/dist/rules/content/missing-author.js.map +1 -1
  57. package/dist/rules/spam/thin-content.d.ts.map +1 -1
  58. package/dist/rules/spam/thin-content.js +9 -1
  59. package/dist/rules/spam/thin-content.js.map +1 -1
  60. package/dist/site-classifier.d.ts +1 -1
  61. package/dist/site-classifier.d.ts.map +1 -1
  62. package/dist/site-classifier.js +216 -0
  63. package/dist/site-classifier.js.map +1 -1
  64. package/dist/types.d.ts +77 -2
  65. package/dist/types.d.ts.map +1 -1
  66. package/dist/types.js.map +1 -1
  67. package/package.json +1 -1
@@ -1,3 +1,4 @@
1
+ import { bucketByTemplate } from "./bucket-findings.js";
1
2
  /**
2
3
  * Total rule count surfaced in the "pass --strict to run all N" hint.
3
4
  * This MUST match the surviving rule count documented in v0.4 §4.3 (32 rules).
@@ -63,12 +64,6 @@ function shortenUrl(url) {
63
64
  return url;
64
65
  }
65
66
  }
66
- function docsLine(f) {
67
- if (f.docsUrl) {
68
- return f.docsUrl.replace(/^https?:\/\//, "");
69
- }
70
- return `pseolint.dev/rules/${f.ruleId.split("/").pop() ?? f.ruleId}`;
71
- }
72
67
  function renderTriageSection(triage) {
73
68
  if (!triage)
74
69
  return "";
@@ -93,41 +88,88 @@ function renderTriageSection(triage) {
93
88
  lines.push("───────────────────────────────────────────────────────");
94
89
  return lines.join("\n");
95
90
  }
96
- function aggregateByRule(findings) {
97
- const map = new Map();
98
- for (const f of findings) {
99
- const existing = map.get(f.ruleId);
100
- if (existing) {
101
- existing.count += 1;
102
- }
103
- else {
104
- map.set(f.ruleId, { ruleId: f.ruleId, count: 1, representative: f });
105
- }
91
+ /** Effort-prefix glyph used by `[quick]`, `[moderate]`, `[structural]` rule lines. */
92
+ function effortPrefix(effort) {
93
+ if (!effort)
94
+ return "";
95
+ return `[${effort}] `;
96
+ }
97
+ /**
98
+ * v0.4.3 — one-line caveat for low-confidence findings. Renders only when
99
+ * `confidence` is `low` or `speculative` so high/medium-confidence findings
100
+ * don't clutter the output.
101
+ */
102
+ function confidenceCaveat(c) {
103
+ if (c === "low") {
104
+ return "low confidence — this rule is known to false-positive on this site type";
105
+ }
106
+ if (c === "speculative") {
107
+ return "speculative — heuristic match; verify before acting";
108
+ }
109
+ return null;
110
+ }
111
+ /** Mimic the legacy `docsLine(RuleResult)` API for buckets. */
112
+ function bucketDocsLine(b) {
113
+ if (b.representativeDocsUrl) {
114
+ return b.representativeDocsUrl.replace(/^https?:\/\//, "");
106
115
  }
107
- return Array.from(map.values()).sort((a, b) => {
108
- if (b.count !== a.count)
109
- return b.count - a.count;
110
- return a.ruleId.localeCompare(b.ruleId);
111
- });
116
+ return `pseolint.dev/rules/${b.ruleId.split("/").pop() ?? b.ruleId}`;
112
117
  }
118
+ /**
119
+ * Render a single bucket as one or more output lines. Single-instance buckets
120
+ * keep their pre-bucketing format (no "× 1" suffix). Multi-instance buckets
121
+ * get a `× N instances on TEMPLATE` headline plus a "Fix once, resolve all N"
122
+ * callout when they share a template signature.
123
+ */
124
+ function renderBucketLines(b, index) {
125
+ const out = [];
126
+ const eff = effortPrefix(b.effort);
127
+ const target = b.representativeUrl !== "<site-wide>" ? shortenUrl(b.representativeUrl) : "";
128
+ const caveat = confidenceCaveat(b.representativeConfidence);
129
+ if (b.count === 1) {
130
+ // Single finding: keep the legacy headline format.
131
+ const targetPart = target ? `${target} ` : "";
132
+ const headline = `${eff}${targetPart}${b.representativeMessage}`.trim();
133
+ const fix = b.representativeFix ? ` → ${b.representativeFix}` : "";
134
+ out.push(` ${index + 1}. ${headline}${fix}`);
135
+ if (caveat)
136
+ out.push(` ${DIM}(${caveat})${RESET}`);
137
+ out.push(` ${DIM}${bucketDocsLine(b)}${RESET}`);
138
+ return out;
139
+ }
140
+ // Multi-instance: bucket headline + example + fix-once callout.
141
+ const isTemplateBucket = b.templateSignature !== null;
142
+ const countLabel = isTemplateBucket
143
+ ? `× ${b.count} instances on ${b.templateSignature} template`
144
+ : `× ${b.count} affected pages`;
145
+ out.push(` ${index + 1}. ${eff}${b.ruleId} ${countLabel}`);
146
+ const targetPart = target ? `${target} ` : "";
147
+ out.push(` e.g. ${targetPart}${b.representativeMessage}`.trimEnd());
148
+ if (caveat)
149
+ out.push(` ${DIM}(${caveat})${RESET}`);
150
+ if (b.representativeFix) {
151
+ out.push(` → ${b.representativeFix}`);
152
+ }
153
+ if (isTemplateBucket) {
154
+ out.push(` ${DIM}Fix once, resolve all ${b.count}.${RESET}`);
155
+ }
156
+ out.push(` ${DIM}${bucketDocsLine(b)}${RESET}`);
157
+ return out;
158
+ }
159
+ /**
160
+ * Top-fixes section. Buckets blockers first, then should-fix, by template
161
+ * signature so duplicate findings collapse. Limits to 5 buckets — anything
162
+ * past that is verbose-mode territory.
163
+ */
113
164
  function renderTopFixes(blockers, shouldFix) {
114
- // Spec: top fixes by impact = blockers first, then should-fix; aggregated by rule.
115
165
  const lines = [];
116
- const aggBlockers = aggregateByRule(blockers);
117
- const aggShould = aggregateByRule(shouldFix);
118
- const ranked = [...aggBlockers, ...aggShould].slice(0, 5);
166
+ const bucketedBlockers = bucketByTemplate(blockers);
167
+ const bucketedShould = bucketByTemplate(shouldFix);
168
+ const ranked = [...bucketedBlockers, ...bucketedShould].slice(0, 5);
119
169
  if (ranked.length === 0)
120
170
  return lines;
121
171
  for (let i = 0; i < ranked.length; i += 1) {
122
- const agg = ranked[i];
123
- const r = agg.representative;
124
- const target = r.pageUrl ? shortenUrl(r.pageUrl) : "";
125
- const targetPart = target ? `${target} ` : "";
126
- const countLabel = agg.count === 1 ? "" : ` (${agg.count} pages)`;
127
- const headline = `${targetPart}${r.message}${countLabel}`.trim();
128
- const fix = r.fix ? ` → ${r.fix}` : "";
129
- lines.push(` ${i + 1}. ${headline}${fix}`);
130
- lines.push(` ${DIM}${docsLine(r)}${RESET}`);
172
+ lines.push(...renderBucketLines(ranked[i], i));
131
173
  }
132
174
  return lines;
133
175
  }
@@ -141,6 +183,10 @@ function renderBucketVerbose(label, items) {
141
183
  const urlCol = (shortenUrl(f.pageUrl) || "—").padEnd(28);
142
184
  const fixCol = f.fix ?? f.message;
143
185
  lines.push(` ${ruleCol} ${DIM}${urlCol}${RESET} ${fixCol}`);
186
+ const caveat = confidenceCaveat(f.confidence);
187
+ if (caveat) {
188
+ lines.push(` ${"".padEnd(28)} ${DIM}(${caveat})${RESET}`);
189
+ }
144
190
  }
145
191
  lines.push("");
146
192
  return lines;
@@ -186,6 +232,23 @@ function classificationLines(c) {
186
232
  }
187
233
  return lines;
188
234
  }
235
+ /**
236
+ * v0.4.3 — prominent "Audited as <type>" banner shown right under the
237
+ * verdict pill so the operator knows which scoring profile produced the
238
+ * verdict. Surfaces classification confidence as a percent and notes how
239
+ * many pSEO-only rules were suppressed (mirrors the more verbose
240
+ * classificationLines() block but lives next to the verdict for legibility).
241
+ */
242
+ function auditedAsBanner(c) {
243
+ if (!c)
244
+ return null;
245
+ const confPct = Math.round(c.confidence * 100);
246
+ const suppressed = c.suppressedRules.length;
247
+ const suppressedPart = suppressed > 0
248
+ ? ` ${suppressed} pSEO-only rule${suppressed === 1 ? "" : "s"} suppressed.`
249
+ : "";
250
+ return `${DIM}Audited as ${c.type} (${confPct}% confidence).${suppressedPart}${RESET}`;
251
+ }
189
252
  function categoryLine(categories) {
190
253
  // Display the four user-facing buckets — `audit` is engine-internal and weight-0.
191
254
  const order = [
@@ -225,6 +288,12 @@ export function formatConsole(summary, options) {
225
288
  const vColor = verdictColor(summary.verdict);
226
289
  const vGlyph = verdictGlyph(summary.verdict);
227
290
  lines.push(`${BOLD}Verdict:${RESET} ${vColor}${summary.verdict.toUpperCase()} ${vGlyph}${RESET}`);
291
+ // v0.4.3 — "Audited as <type>" sits between the verdict and grade strip
292
+ // so the operator immediately sees which scoring profile produced the
293
+ // verdict. Skipped when classification is missing (pre-v0.4 reports).
294
+ const banner = auditedAsBanner(summary.siteClassification);
295
+ if (banner)
296
+ lines.push(banner);
228
297
  lines.push(categoryLine(summary.categories));
229
298
  // ── Template banner ────────────────────────────────────────────────
230
299
  if (summary.templateDetected) {
@@ -1 +1 @@
1
- {"version":3,"file":"console.js","sourceRoot":"","sources":["../../src/formatters/console.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"console.js","sourceRoot":"","sources":["../../src/formatters/console.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { AuditSummary } from "../types.js";
2
+ export interface FixplanFormatOptions {
3
+ /** ISO date string (YYYY-MM-DD) used in the header. Defaults to today (UTC). */
4
+ generatedDate?: string;
5
+ }
6
+ /**
7
+ * Render an `AuditSummary` as a GitHub-flavoured markdown checklist suitable
8
+ * for pasting into a PR description, issue body, or commit message. Findings
9
+ * are bucketed by `(ruleId, templateSignature)` so a 47-page near-duplicate
10
+ * cluster collapses to a single checkbox the user ticks once.
11
+ */
12
+ export declare function formatFixplan(summary: AuditSummary, options?: FixplanFormatOptions): string;
13
+ //# sourceMappingURL=fixplan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fixplan.d.ts","sourceRoot":"","sources":["../../src/formatters/fixplan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAA+C,MAAM,aAAa,CAAC;AAI7F,MAAM,WAAW,oBAAoB;IACnC,gFAAgF;IAChF,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AA6SD;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,YAAY,EACrB,OAAO,CAAC,EAAE,oBAAoB,GAC7B,MAAM,CAgFR"}
@@ -0,0 +1,328 @@
1
+ import { inferUrlTemplate } from "../stratified-sample.js";
2
+ const CONFIDENCE_RANK = {
3
+ speculative: 1,
4
+ low: 2,
5
+ medium: 3,
6
+ high: 4,
7
+ };
8
+ function confidenceCaveat(c) {
9
+ if (c === "low")
10
+ return "low confidence — known false-positive risk on this site type";
11
+ if (c === "speculative")
12
+ return "speculative — heuristic match; verify before acting";
13
+ return null;
14
+ }
15
+ const SEVERITY_RANK = {
16
+ critical: 0,
17
+ error: 1,
18
+ warning: 2,
19
+ info: 3,
20
+ };
21
+ const EFFORT_ORDER = [
22
+ "quick",
23
+ "moderate",
24
+ "structural",
25
+ "other",
26
+ ];
27
+ const EFFORT_HEADING = {
28
+ quick: "Quick wins (≤ 30 min each)",
29
+ moderate: "Moderate fixes (1-2 hours each)",
30
+ structural: "Structural changes (deeper refactor)",
31
+ other: "Other fixes",
32
+ };
33
+ /** Approximate hours-per-fix used in the footer estimate. */
34
+ const EFFORT_HOURS = {
35
+ quick: 0.5,
36
+ moderate: 1.5,
37
+ structural: 4,
38
+ other: 1,
39
+ };
40
+ const VERDICT_LABEL = {
41
+ ready: "ready",
42
+ caution: "caution",
43
+ concerning: "concerning",
44
+ critical: "critical",
45
+ };
46
+ function shortenUrl(url) {
47
+ if (!url)
48
+ return "";
49
+ try {
50
+ return new URL(url).pathname || "/";
51
+ }
52
+ catch {
53
+ return url;
54
+ }
55
+ }
56
+ /**
57
+ * Resolve a template signature for bucketing. Prefer the enrichment-pipeline
58
+ * field (`templateSignature` populated post Agent C), else derive one from the
59
+ * page URL via `inferUrlTemplate`. Findings with no `pageUrl` (corpus-scoped
60
+ * rules) get a synthetic `__corpus__` signature so they each land in their
61
+ * own per-rule bucket.
62
+ */
63
+ function templateSigFor(f) {
64
+ const sig = f.templateSignature;
65
+ if (sig && sig.length > 0)
66
+ return sig;
67
+ if (f.pageUrl)
68
+ return inferUrlTemplate(f.pageUrl);
69
+ return "__corpus__";
70
+ }
71
+ function bucketByTemplate(findings) {
72
+ const map = new Map();
73
+ for (const f of findings) {
74
+ const sig = templateSigFor(f);
75
+ const key = `${f.ruleId} ${sig}`;
76
+ let b = map.get(key);
77
+ const rank = SEVERITY_RANK[f.severity] ?? 3;
78
+ if (!b) {
79
+ b = {
80
+ ruleId: f.ruleId,
81
+ templateSignature: sig,
82
+ count: 0,
83
+ worstSeverityRank: rank,
84
+ worstSeverity: f.severity,
85
+ effort: f.effort ?? "other",
86
+ exemplar: f,
87
+ urls: [],
88
+ worstConfidence: f.confidence,
89
+ };
90
+ map.set(key, b);
91
+ }
92
+ b.count += 1;
93
+ if (rank < b.worstSeverityRank) {
94
+ b.worstSeverityRank = rank;
95
+ b.worstSeverity = f.severity;
96
+ }
97
+ // Promote effort if the bucket was "other" but a later finding declares one.
98
+ if (b.effort === "other" && f.effort) {
99
+ b.effort = f.effort;
100
+ }
101
+ if (f.confidence !== undefined) {
102
+ const cur = b.worstConfidence;
103
+ if (cur === undefined || CONFIDENCE_RANK[f.confidence] < CONFIDENCE_RANK[cur]) {
104
+ b.worstConfidence = f.confidence;
105
+ }
106
+ }
107
+ if (f.pageUrl && !b.urls.includes(f.pageUrl)) {
108
+ b.urls.push(f.pageUrl);
109
+ }
110
+ }
111
+ return Array.from(map.values());
112
+ }
113
+ function isTemplateBucket(b) {
114
+ // A "template" bucket is one whose signature contains a generalised segment
115
+ // (`:slug`, `:num`, `:id`, `:date`). Single-page or corpus buckets render
116
+ // without the "x N instances on `<template>`" suffix.
117
+ return /:slug|:num|:id|:date/.test(b.templateSignature);
118
+ }
119
+ function bucketHeadline(b) {
120
+ const code = `\`${b.ruleId}\``;
121
+ if (b.count > 1 && isTemplateBucket(b)) {
122
+ return `**${code} × ${b.count} instances on \`${b.templateSignature}\` template**`;
123
+ }
124
+ if (b.count > 1) {
125
+ return `**${code} × ${b.count} affected pages**`;
126
+ }
127
+ if (b.exemplar.pageUrl) {
128
+ return `**${code} on \`${shortenUrl(b.exemplar.pageUrl)}\`**`;
129
+ }
130
+ return `**${code}**`;
131
+ }
132
+ function bucketNarrative(b) {
133
+ // Prefer the explicit `fix` narrative when present; else paraphrase the
134
+ // message. Hard-wrap the narrative onto a single bullet line.
135
+ const text = (b.exemplar.fix ?? b.exemplar.message).trim();
136
+ return text.endsWith(".") ? text : `${text}.`;
137
+ }
138
+ function renderBucketLines(b) {
139
+ const lines = [];
140
+ lines.push(`- [ ] ${bucketHeadline(b)} — ${bucketNarrative(b)}`);
141
+ const caveat = confidenceCaveat(b.worstConfidence);
142
+ if (caveat) {
143
+ lines.push(` - _${caveat}_`);
144
+ }
145
+ // Nested bullet: first concrete URL example (only useful when we have one).
146
+ if (b.exemplar.pageUrl) {
147
+ if (b.count > 1 && isTemplateBucket(b) && b.urls.length > 0) {
148
+ const first = shortenUrl(b.urls[0]);
149
+ const allShort = b.urls.slice(0, 4).map((u) => `\`${shortenUrl(u)}\``).join(", ");
150
+ const more = b.urls.length > 4 ? `, +${b.urls.length - 4} more` : "";
151
+ lines.push(` - First instance: \`${first}\` — ${b.exemplar.message}`);
152
+ lines.push(` - Pages: ${allShort}${more}`);
153
+ }
154
+ else if (b.count === 1) {
155
+ // Single-finding bucket: URL is already in the headline; show the raw
156
+ // message as a secondary line so the user has the engine's verbatim
157
+ // explanation alongside the fix narrative.
158
+ if (b.exemplar.fix && b.exemplar.message && b.exemplar.fix !== b.exemplar.message) {
159
+ lines.push(` - ${b.exemplar.message}`);
160
+ }
161
+ }
162
+ }
163
+ return lines;
164
+ }
165
+ function renderEffortSection(effort, buckets) {
166
+ if (buckets.length === 0)
167
+ return [];
168
+ const lines = [];
169
+ lines.push(`## ${EFFORT_HEADING[effort]}`);
170
+ lines.push("");
171
+ for (const b of buckets) {
172
+ lines.push(...renderBucketLines(b));
173
+ }
174
+ lines.push("");
175
+ return lines;
176
+ }
177
+ function summarizeSkips(summary) {
178
+ const out = { noindex: 0, authDetected: 0, contentHashUnchanged: 0, other: 0 };
179
+ const total = summary.skippedUrls?.length ?? 0;
180
+ if (total === 0)
181
+ return out;
182
+ const policyFinding = summary.diagnostics?.auditFindings?.find((f) => f.ruleId === "audit/skipped-by-policy");
183
+ if (policyFinding) {
184
+ // The policy finding's message embeds counts like "3 marked noindex,
185
+ // 2 detected as auth". Parse them out: cheap heuristic that matches the
186
+ // auditor's own emit format.
187
+ const noindex = /(\d+)\s+marked noindex/i.exec(policyFinding.message);
188
+ const auth = /(\d+)\s+detected as auth/i.exec(policyFinding.message);
189
+ if (noindex)
190
+ out.noindex = Number(noindex[1]);
191
+ if (auth)
192
+ out.authDetected = Number(auth[1]);
193
+ }
194
+ // Whatever's left in skippedUrls but not accounted for by policy is most
195
+ // likely state-cache (`--since` skipped contentHash-unchanged URLs).
196
+ const policyTotal = out.noindex + out.authDetected;
197
+ const remainder = Math.max(0, total - policyTotal);
198
+ out.contentHashUnchanged = remainder;
199
+ return out;
200
+ }
201
+ function renderSkippedSection(summary) {
202
+ const total = summary.skippedUrls?.length ?? 0;
203
+ if (total === 0)
204
+ return [];
205
+ const breakdown = summarizeSkips(summary);
206
+ const lines = [];
207
+ lines.push(`## Skipped this run`);
208
+ lines.push("");
209
+ if (breakdown.noindex > 0) {
210
+ lines.push(`- ${breakdown.noindex} page${breakdown.noindex === 1 ? "" : "s"} skipped (noindex)`);
211
+ }
212
+ if (breakdown.authDetected > 0) {
213
+ lines.push(`- ${breakdown.authDetected} page${breakdown.authDetected === 1 ? "" : "s"} skipped (auth-detected)`);
214
+ }
215
+ if (breakdown.contentHashUnchanged > 0) {
216
+ lines.push(`- ${breakdown.contentHashUnchanged} page${breakdown.contentHashUnchanged === 1 ? "" : "s"} skipped (unchanged since prior run)`);
217
+ }
218
+ if (breakdown.noindex === 0 &&
219
+ breakdown.authDetected === 0 &&
220
+ breakdown.contentHashUnchanged === 0) {
221
+ lines.push(`- ${total} page${total === 1 ? "" : "s"} skipped`);
222
+ }
223
+ lines.push("");
224
+ return lines;
225
+ }
226
+ function todayUtc() {
227
+ return new Date().toISOString().slice(0, 10);
228
+ }
229
+ function auditedAsFixplanLine(c) {
230
+ if (!c)
231
+ return null;
232
+ const confPct = Math.round(c.confidence * 100);
233
+ const suppressed = c.suppressedRules.length;
234
+ const suppressedPart = suppressed > 0
235
+ ? ` ${suppressed} pSEO-only rule${suppressed === 1 ? "" : "s"} suppressed.`
236
+ : "";
237
+ return `> Audited as **${c.type}** (${confPct}% confidence).${suppressedPart}`;
238
+ }
239
+ function estimateHours(buckets) {
240
+ let h = 0;
241
+ for (const b of buckets) {
242
+ h += EFFORT_HOURS[b.effort];
243
+ }
244
+ return Math.round(h * 10) / 10;
245
+ }
246
+ function formatHours(h) {
247
+ if (h <= 0)
248
+ return "0 hours";
249
+ if (h < 1)
250
+ return `~${Math.round(h * 60)} minutes`;
251
+ if (h < 10)
252
+ return `~${h} hours`;
253
+ return `~${Math.round(h)} hours`;
254
+ }
255
+ /**
256
+ * Render an `AuditSummary` as a GitHub-flavoured markdown checklist suitable
257
+ * for pasting into a PR description, issue body, or commit message. Findings
258
+ * are bucketed by `(ruleId, templateSignature)` so a 47-page near-duplicate
259
+ * cluster collapses to a single checkbox the user ticks once.
260
+ */
261
+ export function formatFixplan(summary, options) {
262
+ const lines = [];
263
+ const date = options?.generatedDate ?? todayUtc();
264
+ lines.push(`# pseolint fix plan`);
265
+ lines.push("");
266
+ const verdict = VERDICT_LABEL[summary.verdict];
267
+ lines.push(`> Generated ${date}. Verdict: **${verdict}** (risk ${summary.risk}/100). ${summary.pageCount} pages audited.`);
268
+ // v0.4.3 — surface the scoring profile so plan readers know which
269
+ // site-type-aware overrides shaped the plan.
270
+ const auditedLine = auditedAsFixplanLine(summary.siteClassification);
271
+ if (auditedLine) {
272
+ lines.push(`>`);
273
+ lines.push(auditedLine);
274
+ }
275
+ lines.push(`>`);
276
+ lines.push(`> Run \`pseolint <source> --fixplan plan.md\` after each fix round to refresh`);
277
+ lines.push(`> this list — \`[x]\` items are inferred from finding hashes that no longer`);
278
+ lines.push(`> appear in the new audit.`);
279
+ lines.push("");
280
+ // Aggregate every actionable finding into a single flat list, then bucket.
281
+ // (`audit/*` findings are diagnostics, never appear in `summary.issues`.)
282
+ const allFindings = [
283
+ ...summary.issues.blockers,
284
+ ...summary.issues.shouldFix,
285
+ ...summary.issues.informational,
286
+ ];
287
+ const buckets = bucketByTemplate(allFindings);
288
+ if (buckets.length === 0) {
289
+ lines.push(`No findings to fix — site looks clean.`);
290
+ const skipLines = renderSkippedSection(summary);
291
+ if (skipLines.length > 0) {
292
+ lines.push("");
293
+ lines.push(...skipLines);
294
+ }
295
+ while (lines.length > 0 && lines[lines.length - 1] === "")
296
+ lines.pop();
297
+ return lines.join("\n");
298
+ }
299
+ // Group by effort, then sort within each group by count DESC, severity ASC.
300
+ const byEffort = new Map();
301
+ for (const b of buckets) {
302
+ const arr = byEffort.get(b.effort) ?? [];
303
+ arr.push(b);
304
+ byEffort.set(b.effort, arr);
305
+ }
306
+ for (const arr of byEffort.values()) {
307
+ arr.sort((a, b) => {
308
+ if (b.count !== a.count)
309
+ return b.count - a.count;
310
+ return a.worstSeverityRank - b.worstSeverityRank;
311
+ });
312
+ }
313
+ for (const effort of EFFORT_ORDER) {
314
+ const arr = byEffort.get(effort) ?? [];
315
+ lines.push(...renderEffortSection(effort, arr));
316
+ }
317
+ // Skipped section.
318
+ lines.push(...renderSkippedSection(summary));
319
+ // Footer.
320
+ const totalItems = buckets.length;
321
+ const hours = estimateHours(buckets);
322
+ lines.push(`---`);
323
+ lines.push(`*Total: ${totalItems} fix-plan item${totalItems === 1 ? "" : "s"}. Estimated time-to-\`ready\`: ${formatHours(hours)}.*`);
324
+ while (lines.length > 0 && lines[lines.length - 1] === "")
325
+ lines.pop();
326
+ return lines.join("\n");
327
+ }
328
+ //# sourceMappingURL=fixplan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fixplan.js","sourceRoot":"","sources":["../../src/formatters/fixplan.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"html.d.ts","sourceRoot":"","sources":["../../src/formatters/html.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EAOb,MAAM,aAAa,CAAC;AAGrB,MAAM,WAAW,iBAAiB;IAChC,mGAAmG;IACnG,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AA+MD,wBAAgB,UAAU,CAAC,OAAO,EAAE,YAAY,EAAE,QAAQ,CAAC,EAAE,iBAAiB,GAAG,MAAM,CA2MtF"}
1
+ {"version":3,"file":"html.d.ts","sourceRoot":"","sources":["../../src/formatters/html.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EAQb,MAAM,aAAa,CAAC;AAIrB,MAAM,WAAW,iBAAiB;IAChC,mGAAmG;IACnG,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAsOD,wBAAgB,UAAU,CAAC,OAAO,EAAE,YAAY,EAAE,QAAQ,CAAC,EAAE,iBAAiB,GAAG,MAAM,CA+MtF"}