1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
[]
= "scrape-le"
= "0.3.1"
= "2024"
= "1.88"
= "MIT"
= "README.md"
= "Check whether a page is scrapeable before the scraper is written, and say when it cannot tell"
= ["Nolin D Naidoo"]
= "https://letools.dev/tools/scrape-le"
= "https://github.com/nolindnaidoo/scrape-le"
= ["robots-txt", "web-scraping", "crawler", "anti-bot", "scraping"]
= ["command-line-utilities", "web-programming", "development-tools", "text-processing", "parsing"]
# What a consumer gets. SPEC.md ships because it is the behavioural
# contract — verdicts, exit codes, batching — and someone scripting
# against the exit codes needs it. AGENTS.md and CLAUDE.md are how this
# repo is worked on, not how the tool is used, and examples/spike.rs is
# a network-touching development spike. signatures/ and fixtures/ are
# not optional: the build embeds the first and the tests read both.
= ["AGENTS.md", "CLAUDE.md", "rust-toolchain.toml", "examples/"]
# Excluding a directory does not stop cargo auto-discovering a target in
# it, so every `cargo package` printed "ignoring example `spike`". A
# warning on every run of a command is one people stop reading.
= false
[[]]
= "scrape-le"
= "src/main.rs"
[]
# The corpus is TOML by design (reviewable by non-Rust readers); serde +
# toml parse it at startup from the embedded files. regex ports the
# extension's URL and robots patterns verbatim — hand-rolling them would
# be parity drift waiting to happen. url is the native-URL half of
# validateUrl and is already in the tree via ureq.
= { = "1", = ["derive"] }
= "1"
= "0.9"
= "1"
= "2"
# The decided stack (AGENTS.md): sync, no runtime. ureq is the HTTP
# half, headless_chrome the sync-CDP render half.
= "3"
= "1"
# anyhow is error glue for examples/spike.rs alone, which `exclude`
# keeps out of the published package — so this is a dependency of the
# repository, never of the crate a consumer builds.
[]
= "1"
[]
= true
= "thin"
= 1
# Every output of this tool is a claim someone scripts against — a verdict,
# a timing, a byte count. A wrapped number is silently wrong data in a
# report whose whole value is honesty, which is worse than a crash — so
# overflow keeps panicking in release, as it does in debug. (Same rule as
# pixelcoords and pixelactions.)
= true
[]
= "forbid"
[]
= { = "warn", = -1 }
= { = "warn", = -1 }
# Deliberate relaxations, same policy as pixelcoords/pixelactions: no
# inline #[allow] anywhere (CI enforces); anything relaxed must be listed
# here, visibly.
= "allow"
= "allow"
= "allow"
= "allow"
= "allow"
= "allow"
= "allow"