Eighth sample engagement report, on BotToll, a scraper and AI-crawler deterrence layer: fingerprinting, progressive rate-limiting, invisible honeypot traps, and an on-chain toll mechanism for unlicensed bots. This repo has no automated test suite at all, so the verification here is direct: run the server for real, hit its own documented endpoints with the exact user agents it's built to catch, and read what actually comes back.
Scope and Objective
Target: the full Express toll engine in server.ts, with particular attention to the honeypot routes the README instructs site owners to deploy, and the GenAI-powered "Protocol Neural Poison" data-pollution feature.
Objective: since there is no npm test here, confirm the project builds clean (tsc --noEmit), then run the live dev server and send real requests, with real bot user agents, against every documented trap and against the progressive deterrence ladder, to see whether the code's actual behavior matches what the README and features.md claim.
Findings
1. High: eleven documented honeypot routes had empty handlers and hung instead of rejecting. The README's own "USAGE STEPS" section instructs site owners to wire an invisible link into their HTML pointing at /api/data-verify, described as "The Trap," with the claim that "invisible honeypots trigger immediate 402 rejection." The actual handler for that route, and ten sibling routes serving other sites in the same codebase, was this:
app.get("/api/data-verify", (req, res) => { /* ... fiamma ... */ });
app.get("/api/v1/spectral-anchor.png", (req, res) => { /* ... fiamma ... */ });
app.get("/api/sys-integrity-v1", (req, res) => { /* ... generic ... */ });
app.get("/api/v1/seed-vault-anchor.png", (req, res) => { /* ... futurebudz ... */ });
app.get("/api/genetic-metadata-v1", (req, res) => { /* ... futurebudz ... */ });
app.get("/api/v1/ghost-anchor.png", (req, res) => { /* ... ghost ... */ });
app.get("/api/v1/prompt-integrity-metadata", (req, res) => { /* ... ghost ... */ });
app.get("/api/v1/mdrn-anchor.png", (req, res) => { /* ... mdrn ... */ });
app.get("/api/v1/studio-integrity-metadata", (req, res) => { /* ... mdrn ... */ });
app.get("/api/v1/vault-anchor.png", (req, res) => { /* ... pcc ... */ });
app.get("/api/v1/vending-machine-metadata", (req, res) => { /* ... pcc ... */ });
Every one of these bodies is a comment and nothing else. No res.send, no res.json, no res.end. In Express, a handler that never calls a response method never finishes the request. A bot hitting any of these eleven routes doesn't get a 402. It gets silence, held open until the client or the platform's own timeout gives up. That's the opposite of deterrence: the connection stays occupied and the bot learns nothing, instead of getting the instant, unmistakable rejection the README promises.
2. Medium: the AI data-poisoning engine is hardcoded to a model Google retired over a year ago. "Protocol Neural Poison," the feature both the README and features.md headline as "Powered by Gemini-1.5-Flash," calls client.models.generateContent({ model: "gemini-1.5-flash", ... }). Google's own Gemini API changelog lists gemini-1.5-flash among the models shut down on September 29, 2025. In any deployment with a real GEMINI_API_KEY configured, every call to this model now fails, and the code's own catch block routes the failure into a generic fallback string, [ERROR_FALLBACK]_DATA_CORRUPTION_EVENT_${scenario}_${Date.now()}, instead of the "unique, realistic leaked data per session" the project advertises. Without an API key, the code already falls back to a static random-hex string by design, so this bug is invisible in demo mode and only shows up once someone actually wires in the key the feature exists for.
Verification
No test suite exists in this repo. package.json has no test script, and the only check at all is "lint": "tsc --noEmit". Everything below is a live run against the actual server.