← back to Domain Sniper
honeypot-v2: check shows availability tally + readme baselines
89086bf904c3faeaaf824db31e4cc88506e28f3b · 2026-05-12 17:40:50 -0700 · steve
Check output now includes avail column (out of N) and cumulative
availability rate, so unlured batches give a useful sanity number not
just a 0/0 sniped header. Confirmed both cohorts are fresh enough for
experimentation:
pronounceable 29/50 (58%) — .app 100% / .co 90% / .com 30-40%
brand-adjacent 38/50 (76%) — .co 100% / .app 90% / .com 50-70%
.com is saturated for both cohorts (expected — short pronounceable .com
is gold). The .app and .co buckets carry most of the experimental signal.
Files touched
M README.mdM honeypot-v2.js
Diff
commit 89086bf904c3faeaaf824db31e4cc88506e28f3b
Author: steve <steve@designerwallcoverings.com>
Date: Tue May 12 17:40:50 2026 -0700
honeypot-v2: check shows availability tally + readme baselines
Check output now includes avail column (out of N) and cumulative
availability rate, so unlured batches give a useful sanity number not
just a 0/0 sniped header. Confirmed both cohorts are fresh enough for
experimentation:
pronounceable 29/50 (58%) — .app 100% / .co 90% / .com 30-40%
brand-adjacent 38/50 (76%) — .co 100% / .app 90% / .com 50-70%
.com is saturated for both cohorts (expected — short pronounceable .com
is gold). The .app and .co buckets carry most of the experimental signal.
---
README.md | 11 +++++++++++
honeypot-v2.js | 14 +++++++++-----
2 files changed, 20 insertions(+), 5 deletions(-)
diff --git a/README.md b/README.md
index 2085939..c65baa4 100644
--- a/README.md
+++ b/README.md
@@ -62,6 +62,17 @@ Spot-checks via DoH at increasing intervals to find where the snipe window close
**Interpretation of the 3.87h flat result** — pure-random CVCVC bait names (`kuwavi`, `tahoz`, `fobahu`) across Verisign/Google-.app/nic.co/GoDaddy/control channels produced ZERO snipes despite deliberate leaks. The original callr.app / callr.co / butlr.app snipes hit pronounceable English-flavored names. Hypothesis: aggregators filter leak streams for desirability (English-likeness, brand-adjacency, prior-search signal) before paying registry fees. Next experimental iteration should use English-pronounceable / brand-adjacent baits to confirm.
+### Honeypot v2 — desirability-shaped baits (scaffold; lure NOT auto-fired)
+
+`honeypot-v2.js` ships two new bait cohorts to test the desirability hypothesis:
+
+| Cohort | Example baits | Baseline availability (DoH) | Notes |
+| --- | --- | --- | --- |
+| `pronounceable` | `noyl.com`, `swid.com`, `cayz.app`, `twelt.co`, `wheim.com` | 29/50 (58%) | .app 100% / .co 90% / .com saturated 30-40% |
+| `brand-adjacent` | `verturr.app`, `lawrr.app`, `qbutlr.co`, `florkr.co`, `flockro.com` | 38/50 (76%) | .co 100% / .app 90% / .com 50-70% |
+
+**Safety gates** — `generate` and `check` always allowed (no leaks). `lure` is **refused** unless `LURE_CONFIRM_LEAK_2026=yes` env is set as a one-shot Steve gesture; YOLO autonomous loops cannot trigger it. The lure body itself is currently a stub — wire-up before re-firing.
+
## Known issues — public CT-log infrastructure is fragile
State of the world for **free** real-time CT-log access, as of 2026-05-12 ~23:05 UTC:
diff --git a/honeypot-v2.js b/honeypot-v2.js
index d04f7cc..88e6658 100755
--- a/honeypot-v2.js
+++ b/honeypot-v2.js
@@ -165,17 +165,21 @@ async function check(file) {
const r = await dohNs(it.domain);
const stillAvail = r.status === 3 || (r.status === 0 && !r.hasNs);
const sniped = batch.lured && !stillAvail;
- tally[it.bucket] = tally[it.bucket] || { total: 0, sniped: 0, names: [] };
+ tally[it.bucket] = tally[it.bucket] || { total: 0, available: 0, sniped: 0, names: [] };
tally[it.bucket].total++;
+ if (stillAvail) tally[it.bucket].available++;
if (sniped) { tally[it.bucket].sniped++; tally[it.bucket].names.push(it.domain); }
await new Promise((rr) => setTimeout(rr, 200));
}
- console.log(' bucket total sniped rate sample');
+ console.log(' bucket total avail sniped rate sample');
+ let cumT = 0, cumA = 0, cumS = 0;
for (const [k, v] of Object.entries(tally)) {
- const rate = v.total ? `${Math.round((100 * v.sniped) / v.total)}%` : 'n/a';
- console.log(` ${k} ${String(v.total).padStart(2)} ${String(v.sniped).padStart(2)} ${rate.padStart(4)} ${v.names.slice(0,3).join(', ')}`);
+ cumT += v.total; cumA += v.available; cumS += v.sniped;
+ const rate = batch.lured && v.available ? `${Math.round((100 * v.sniped) / v.available)}%` : 'n/a';
+ console.log(` ${k} ${String(v.total).padStart(2)} ${String(v.available).padStart(2)}/${v.total} ${String(v.sniped).padStart(2)} ${rate.padStart(4)} ${v.names.slice(0,3).join(', ')}`);
}
- console.log(batch.lured ? '\n (batch was lured)\n' : '\n (batch never lured — these are baseline availability counts only)\n');
+ console.log(` total: ${cumT} ${cumA}/${cumT} (${Math.round(100*cumA/cumT)}% available) ${cumS} sniped`);
+ console.log(batch.lured ? '\n (batch was lured — sniped column meaningful)\n' : '\n (batch never lured — these are baseline availability counts only; sniped column always 0)\n');
}
const cmd = process.argv[2] || 'help';
← 47a41bc honeypot-v2: scaffold with desirability-shaped baits (lure g
·
back to Domain Sniper
·
honeypot-v2: wire actual lure body (still env-gated) 4893045 →