@goflag/cli 0.2.13 → 0.2.15
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/README.md +7 -7
- package/dist/{chunk-57NVXEJS.js → chunk-KHIN5TNX.js} +818 -221
- package/dist/chunk-KHIN5TNX.js.map +1 -0
- package/dist/cli.js +63 -1
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +4 -3
- package/dist/index.js +1 -1
- package/package.json +2 -2
- package/rules.json +116 -2
- package/dist/chunk-57NVXEJS.js.map +0 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
/** The outcome of probing a single URL. */
|
|
2
|
+
type LinkVerdict = "ok" | "redirect" | "broken" | "blocked" | "warning" | "skipped";
|
|
3
|
+
|
|
1
4
|
/**
|
|
2
5
|
* Canonical Goflag data model.
|
|
3
6
|
*
|
|
@@ -19,6 +22,7 @@
|
|
|
19
22
|
* JSON-LD path). This is what powers Phase 4's "what if I remove
|
|
20
23
|
* `og:image`?" toggle and the Phase 9 diff classifier.
|
|
21
24
|
*/
|
|
25
|
+
|
|
22
26
|
/**
|
|
23
27
|
* Where a parsed value originated. Used by previews to highlight which tag a
|
|
24
28
|
* given preview consumed and by rules/suggestions to point the user back at
|
|
@@ -141,9 +145,6 @@ interface I18nMatrix {
|
|
|
141
145
|
cells: Record<string, Record<string, I18nCell>>;
|
|
142
146
|
}
|
|
143
147
|
|
|
144
|
-
/** The outcome of probing a single URL. */
|
|
145
|
-
type LinkVerdict = "ok" | "redirect" | "broken" | "blocked" | "warning" | "skipped";
|
|
146
|
-
|
|
147
148
|
/**
|
|
148
149
|
* The extraction model — goflag's per-page observation contract.
|
|
149
150
|
*
|
package/dist/index.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@goflag/cli",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.15",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Audits a site for broken links, missing translation pages, a robots.txt that contradicts your pages, and missing or misconfigured SEO metadata. JSON-first.",
|
|
6
6
|
"keywords": [
|
|
@@ -86,7 +86,7 @@
|
|
|
86
86
|
"@vitest/coverage-v8": "^2.1.8",
|
|
87
87
|
"commit-and-tag-version": "^12.5.0",
|
|
88
88
|
"hono": "^4.12.25",
|
|
89
|
-
"playwright": "1.
|
|
89
|
+
"playwright": "1.64.1",
|
|
90
90
|
"tsup": "^8.5.1",
|
|
91
91
|
"tsx": "^4.21.0",
|
|
92
92
|
"typescript": "^5.7.2",
|
package/rules.json
CHANGED
|
@@ -1,10 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"counts": {
|
|
3
3
|
"page": 25,
|
|
4
|
-
"site":
|
|
4
|
+
"site": 34,
|
|
5
5
|
"prose": 5
|
|
6
6
|
},
|
|
7
7
|
"sources": {
|
|
8
|
+
"anthropic-crawlers": {
|
|
9
|
+
"id": "anthropic-crawlers",
|
|
10
|
+
"publisher": "Anthropic",
|
|
11
|
+
"title": "Does Anthropic crawl data from the web, and how can site owners block the crawler?",
|
|
12
|
+
"rigor": "vendor-spec",
|
|
13
|
+
"url": "https://support.claude.com/en/articles/8896518-does-anthropic-crawl-data-from-the-web-and-how-can-site-owners-block-the-crawler"
|
|
14
|
+
},
|
|
8
15
|
"apple-web-apps": {
|
|
9
16
|
"id": "apple-web-apps",
|
|
10
17
|
"publisher": "Apple",
|
|
@@ -33,6 +40,13 @@
|
|
|
33
40
|
"rigor": "vendor-spec",
|
|
34
41
|
"url": "https://developers.google.com/search/docs/specialty/international/localized-versions"
|
|
35
42
|
},
|
|
43
|
+
"google-http-status": {
|
|
44
|
+
"id": "google-http-status",
|
|
45
|
+
"publisher": "Google",
|
|
46
|
+
"title": "How HTTP status codes, and network and DNS errors affect Google Search",
|
|
47
|
+
"rigor": "vendor-spec",
|
|
48
|
+
"url": "https://developers.google.com/search/docs/crawling-indexing/http-network-errors"
|
|
49
|
+
},
|
|
36
50
|
"google-robots-intro": {
|
|
37
51
|
"id": "google-robots-intro",
|
|
38
52
|
"publisher": "Google",
|
|
@@ -61,6 +75,13 @@
|
|
|
61
75
|
"rigor": "guideline",
|
|
62
76
|
"url": "https://developers.google.com/search/docs/appearance/snippet"
|
|
63
77
|
},
|
|
78
|
+
"google-soft-404": {
|
|
79
|
+
"id": "google-soft-404",
|
|
80
|
+
"publisher": "Google",
|
|
81
|
+
"title": "Troubleshoot Google Search crawling errors — soft 404 errors",
|
|
82
|
+
"rigor": "vendor-spec",
|
|
83
|
+
"url": "https://developers.google.com/search/docs/crawling-indexing/troubleshoot-crawling-errors"
|
|
84
|
+
},
|
|
64
85
|
"google-title-link": {
|
|
65
86
|
"id": "google-title-link",
|
|
66
87
|
"publisher": "Google",
|
|
@@ -75,6 +96,13 @@
|
|
|
75
96
|
"rigor": "normative",
|
|
76
97
|
"url": "https://www.rfc-editor.org/rfc/rfc6596"
|
|
77
98
|
},
|
|
99
|
+
"ietf-rfc9110": {
|
|
100
|
+
"id": "ietf-rfc9110",
|
|
101
|
+
"publisher": "IETF",
|
|
102
|
+
"title": "RFC 9110 — HTTP Semantics",
|
|
103
|
+
"rigor": "normative",
|
|
104
|
+
"url": "https://www.rfc-editor.org/rfc/rfc9110"
|
|
105
|
+
},
|
|
78
106
|
"ietf-rfc9309": {
|
|
79
107
|
"id": "ietf-rfc9309",
|
|
80
108
|
"publisher": "IETF",
|
|
@@ -82,6 +110,20 @@
|
|
|
82
110
|
"rigor": "normative",
|
|
83
111
|
"url": "https://www.rfc-editor.org/rfc/rfc9309"
|
|
84
112
|
},
|
|
113
|
+
"lighthouse-llms-txt": {
|
|
114
|
+
"id": "lighthouse-llms-txt",
|
|
115
|
+
"publisher": "Google",
|
|
116
|
+
"title": "Lighthouse — llms.txt (agentic browsing audit)",
|
|
117
|
+
"rigor": "guideline",
|
|
118
|
+
"url": "https://developer.chrome.com/docs/lighthouse/agentic-browsing/llms-txt"
|
|
119
|
+
},
|
|
120
|
+
"llmstxt": {
|
|
121
|
+
"id": "llmstxt",
|
|
122
|
+
"publisher": "llmstxt.org",
|
|
123
|
+
"title": "The /llms.txt file (a proposal)",
|
|
124
|
+
"rigor": "guideline",
|
|
125
|
+
"url": "https://llmstxt.org/"
|
|
126
|
+
},
|
|
85
127
|
"mdn-link-rel": {
|
|
86
128
|
"id": "mdn-link-rel",
|
|
87
129
|
"publisher": "MDN / Mozilla",
|
|
@@ -353,6 +395,19 @@
|
|
|
353
395
|
"sources": [],
|
|
354
396
|
"prose": "Your `<head>` advertises a translation your sitemap does not list. Is the sitemap missing an entry, or is the alternate pointing at a page you did not mean to publish?"
|
|
355
397
|
},
|
|
398
|
+
{
|
|
399
|
+
"id": "http.not-found",
|
|
400
|
+
"scope": "site",
|
|
401
|
+
"severity": "error",
|
|
402
|
+
"kind": "boolean",
|
|
403
|
+
"summary": "A URL that does not exist must answer 404 or 410",
|
|
404
|
+
"rigor": "vendor-spec",
|
|
405
|
+
"sources": [
|
|
406
|
+
"ietf-rfc9110",
|
|
407
|
+
"google-soft-404",
|
|
408
|
+
"google-http-status"
|
|
409
|
+
]
|
|
410
|
+
},
|
|
356
411
|
{
|
|
357
412
|
"id": "icons.apple-touch.missing",
|
|
358
413
|
"scope": "page",
|
|
@@ -503,6 +558,65 @@
|
|
|
503
558
|
],
|
|
504
559
|
"prose": "Is the text of this page actually written in the language its `lang` attribute declares?"
|
|
505
560
|
},
|
|
561
|
+
{
|
|
562
|
+
"id": "llmstxt.content-type",
|
|
563
|
+
"scope": "site",
|
|
564
|
+
"severity": "warning",
|
|
565
|
+
"kind": "boolean",
|
|
566
|
+
"summary": "`/llms.txt` must be served as text — `text/plain` or `text/markdown` — not as a page",
|
|
567
|
+
"rigor": "guideline",
|
|
568
|
+
"sources": [
|
|
569
|
+
"llmstxt",
|
|
570
|
+
"ietf-rfc9110"
|
|
571
|
+
]
|
|
572
|
+
},
|
|
573
|
+
{
|
|
574
|
+
"id": "llmstxt.h1.missing",
|
|
575
|
+
"scope": "site",
|
|
576
|
+
"severity": "warning",
|
|
577
|
+
"kind": "boolean",
|
|
578
|
+
"summary": "An llms.txt must have an H1 naming the site",
|
|
579
|
+
"rigor": "guideline",
|
|
580
|
+
"sources": [
|
|
581
|
+
"llmstxt"
|
|
582
|
+
]
|
|
583
|
+
},
|
|
584
|
+
{
|
|
585
|
+
"id": "llmstxt.link.blocked-by-robots",
|
|
586
|
+
"scope": "site",
|
|
587
|
+
"severity": "warning",
|
|
588
|
+
"kind": "boolean",
|
|
589
|
+
"summary": "An llms.txt must not list URLs that robots.txt forbids fetching",
|
|
590
|
+
"rigor": "guideline",
|
|
591
|
+
"sources": [
|
|
592
|
+
"llmstxt",
|
|
593
|
+
"ietf-rfc9309",
|
|
594
|
+
"anthropic-crawlers"
|
|
595
|
+
]
|
|
596
|
+
},
|
|
597
|
+
{
|
|
598
|
+
"id": "llmstxt.link.unreachable",
|
|
599
|
+
"scope": "site",
|
|
600
|
+
"severity": "warning",
|
|
601
|
+
"kind": "boolean",
|
|
602
|
+
"summary": "Every same-origin URL an llms.txt lists must answer",
|
|
603
|
+
"rigor": "guideline",
|
|
604
|
+
"sources": [
|
|
605
|
+
"llmstxt"
|
|
606
|
+
]
|
|
607
|
+
},
|
|
608
|
+
{
|
|
609
|
+
"id": "llmstxt.unreachable",
|
|
610
|
+
"scope": "site",
|
|
611
|
+
"severity": "warning",
|
|
612
|
+
"kind": "boolean",
|
|
613
|
+
"summary": "`/llms.txt` must answer with the file or with 404, not with a server error",
|
|
614
|
+
"rigor": "guideline",
|
|
615
|
+
"sources": [
|
|
616
|
+
"lighthouse-llms-txt",
|
|
617
|
+
"llmstxt"
|
|
618
|
+
]
|
|
619
|
+
},
|
|
506
620
|
{
|
|
507
621
|
"id": "og.description.missing",
|
|
508
622
|
"scope": "page",
|
|
@@ -1134,7 +1248,7 @@
|
|
|
1134
1248
|
"scope": "site",
|
|
1135
1249
|
"severity": "warning",
|
|
1136
1250
|
"kind": "boolean",
|
|
1137
|
-
"summary": "Indexable pages the crawl found should be listed in the sitemap",
|
|
1251
|
+
"summary": "Indexable pages the crawl found, and the canonical URLs they name, should be listed in the sitemap",
|
|
1138
1252
|
"rigor": "guideline",
|
|
1139
1253
|
"sources": [
|
|
1140
1254
|
"sitemaps-protocol",
|