---
name: casig-gmgn-overlay-4
description: Tech Score part 4, 14 Sep 2026 10:00-11:00 UTC. The 218-project out-of-sample replication, the four new tech concepts that were tested and FAILED (on-chain usage, Internet Archive, bytecode uniqueness, deployer track record), the meme-lane finding, and the DARWIN false-scam fix. Read after parts 1 to 3 before changing the ladder or adding a new signal.
sources: [cowork]
aliases: [casig part 4, tech score part 4, round two, out of sample, failed probes, probes.py, darwin]
---
Continues [[casig-gmgn-overlay-3]]. Everything in parts 1 to 3 still applies.

# OUT OF SAMPLE: 218 PROJECTS THE LADDER WAS NEVER FITTED TO
- [stated] Ben: "Check more projects. Try to get another 50 to 100 projects that performed well, that you haven't checked yet, and see if you can find additional or better concepts to evaluate tech." Then: "run 3 iterations of this and come back with a hardened system thats pragmatic, applicable to new launches and fast."
`/opt/casig/round2.py` (pool / scan) + `r2report.py` + `probes.py`. Pool is everything in trench.db `lab` above $30k peak that is NOT in win_feat.json: 118 unscanned winners (64 above $5M) plus 100 others. Files: `win2_pool.json`, `win2_feat.json(l)`.

**THE LADDER REPLICATED.** Every number below is on projects it was never fitted to, sited only:

| signal | won | vs | lift | $5M lift |
|---|---|---|---|---|
| **stars >= 4** | **100% of 17** | 58% | 1.7x | **2.2x** |
| **names its own contract** | 81% of 68 | 41% | **2.0x** | **2.0x** |
| own contract >10kb | 94% of 18 | 58% | 1.6x | 2.1x |
| 1+ hard evidence | 92% of 25 | 56% | 1.6x | 2.1x |
| stars <= 2 | 50% of 24 | 67% | 0.7x | 0.8x |
| borrowed page flag | 38% of 8 | 66% | 0.6x | 0.6x |
| 25+ own sentences | 63% of 30 | 64% | **1.0x** | 1.2x |
| domain over a year old | 50% of 10 | 65% | **0.8x** | 1.0x |

# FOUR NEW CONCEPTS TESTED, ALL FOUR FAILED. DO NOT REBUILD THEM.
`probes.py` exists and works; it is kept for the code-hash collection only.
1. **ON-CHAIN USAGE (`eth_getLogs` over 500,000 blocks, about 14 hours).** Events cost gas so this looked unfakeable. **1.1x.** The confound gives itself away: "zero events but they have a contract" came out at **100% of 12**. The window is NOW and the peak was WEEKS AGO, so it measures alive-today against ran-then. Validated as a measurement (PONS pool 3,610 events, PONS token too many to count, PAIR's five-star contract 0x7a29417991ac6ffb00cda4766ae5c1c020882bd3 **zero in 2.3 days**) - it just does not predict retrospectively. A forward-looking version, measured AT the screen and scored later, is still worth building.
2. **INTERNET ARCHIVE (CDX API).** Meant to replace domain age with what domain age was supposed to mean: did this site exist and CHANGE before the token. **0.7x for any snapshot, 0.3x for 20+ content changes.** Inherits the same defect for the same reason: a site with archive history is usually an old site belonging to someone else. Also slow, 5 to 20 seconds.
3. **BYTECODE UNIQUENESS** (sha256 of runtime code, count addresses sharing it). Real but redundant: unique-and-over-10kb is 2.1x, which is exactly what over-10kb already is; unique-and-under-10kb is 1.3x. **Size was doing the work.** Hashes keep being collected into `scores.db.codehash` because they cost nothing.
4. **THE DEPLOYER'S BEST PREVIOUS TOKEN.** 100% of 40 against 0% of 35. **That is target leakage, not a signal**: GMGN's best-ever-ATH-by-this-dev INCLUDES the token being rated, so for a dev's own best token the field IS its outcome. A real version must exclude the current CA.

**AND THE TRAP TO REMEMBER: holder count scored 13.3x on a $5M run.** Holders are a CONSEQUENCE of the run, read today. Any feature measured after the outcome does this. Never score one.

# THE REAL FINDING IS THE LANE, NOT A NEW SIGNAL
**35 of the 48 big winners rated three or below are memecoins with a one-page site, no contract and no backend**: CASHCAT $320M, PIPEDOG $74M, CHUMP $58M, HMM $39M, IF $38M, JUGGERNAUT $26M, YOLO $21M. The tech score is RIGHT about all of them. They did not run on tech.
Split by shape over 336 pooled sited rows (258 tech, 76 meme):
- **tech lane**, base 34% big: stars>=4 **46% vs 30% (1.6x)**, stars<=2 18% vs 37% (0.5x), names-own-CA 42% vs 19% **(2.2x)**, own contract >10kb 53% vs 29% (1.8x).
- **meme lane**, base 20% big: the star does not apply (almost every meme is a 2), but **names-own-CA is 50% of 12 vs 14% (3.6x)**, the strongest single number anywhere in either study.
- **three stars runs at the base rate (0.9x to 1.1x).** It is the absence of evidence, not a middling opinion, and it now says so (`means` field).
**So the contract-address check is not really a tech signal at all.** It is a coordination signal: did the people behind it do the one basic thing that lets a holder verify. It works in both lanes, at minute zero, for the cost of a string search.

# WHAT SHIPPED IN ROUND TWO (patch_harden.py, patch_rdap_cache.py, patch_harden_gate.py)
1. **`ca_published` and `ca_line` are first-class fields** and lead the reasons on every 3, 4 and 5. Strongest, cheapest, day-zero mark.
2. **Three stars carries a `means` line**: "nothing was found either way: this is not a negative opinion, it is no evidence".
3. **Domain age is cached in `scores.db.domage` for 30 days.** It was one RDAP call per rating, six seconds on downto.finance, for an answer that cannot change. A FAILED lookup is never cached (the GitHub-quota lesson).
4. Nothing else was added. Four candidate signals were measured and rejected, which is the point of measuring.

# DARWIN: A CALLER'S TIMELINE IS NOT THE PROJECT'S CHANNEL
- [stated] Ben on 0x67ffb0a23730151d1e95f28162da434cd2a7a6ab: "This coin is wrongly categorized as insurance and as a scam. I'm not sure about the scam, but I'm sure it's not insurance. Isn't it just a meme?" He was right on both counts.
**"Insurance"** came from arxiv.org/abs/2505.22954, the Darwin Godel Machine paper the token is NAMED after. The scanner classified the token from a stranger's abstract and printed that abstract as the project's own summary. Fixed (`patch_notours_kind.py`): when `borrowed` is set or `own_site.own is False`, the page sets no type and no summary; shape becomes meme, category pure-meme, with the host named in the reason. **A page ruled out as evidence for the score is ruled out for the type too.**
**"Scam"** came from GMGN's twitter field being `CrankDeGod/status/...`, a permalink to ONE POST, not an account. channels() pulled the handle out of it and the red rule read that caller's whole timeline, found he had also posted ROB (0x10c79acfc967b8633766e167a2e80039685ea93e), and issued an impostor verdict. Fixed (`patch_tweet_handle.py`): `posted_by` marks accounts only ever seen as the author of a linked post, and **their timelines can VERIFY and can never REFUTE.** Evidence for, never evidence against. DARWIN is now grey/not verified, pure-meme, 2 stars.
**Fourth time in one day for the same shape: the X account on a GMGN card is metadata the DEPLOYER chose.** Sparkles a false green, PANIC a rating from a stranger's blog, ROBINA a false red from a directory, DARWIN a false red from a caller.

# SPEED, FINAL
p90 **166s -> 34s** on the mature board, worst **627s -> 55s**, 100 projects **1193s -> 389s**. p50 14s mature, 11s fresh. The shared-address table is now learning fast on its own: 0xcaf681a66d020601342297493863e78c959e5cb2 is seen on **17 hosts**, 0x5fc5360d0400a0fd4f2af552add042d716f1d168 on 16, WETH 0x0bd7d308f8e1639fab988df18a8011f41eacad73 on 14. No hand-maintained infra list could have kept up.

# THE CORRECTION THAT MATTERS MOST: NONE OF THIS PREDICTS A NEW LAUNCH YET
- [stated] Ben: "So you're saying if a coin has 4 or 5 stars, it runs for sure?" **No, and I had let the numbers read that way.**
**EVERY RATE IN PARTS 3 AND 4 IS CONDITIONAL ON THE COIN ALREADY HAVING REACHED $30,000 PEAK**, because that was the pool floor. The unconditional base rates, from all 2,122 launches the collector saw in 30 days: **$100k 17.6%, $1M 7.8%, $5M 4.0%.**
Joining the LIVE ledger to outcomes and keeping only coins **rated while under 24h old**: the five-star row is **six coins and none reached $100k** (MONKI, PULSE, OLLAMA, PonsPitch and two more). The 62% that appears without that filter is **nine mature projects** (PONS $990M, PAIR, PROLOGUE, DELTA, HOOKR, DTF, BUN, MANCER, STONKBROKER) that were already enormous when rated. **Rating a $990M project five stars and counting it as a hit is not a prediction.**
**WHAT IS PROVEN TODAY IS THE DOWNSIDE FILTER, NOT THE PICK.** On coins rated while new: 2 stars, n=118, **1.7% reached $1M**; 1 star, n=41, **0% reached $5M**; against an 8% and 4% base. The score is good at what to skip and unproven at what to buy. Size nothing off a gold star until the forward test says otherwise.
**THERE IS NO UNCONDITIONAL SETTLED-OUTCOME SET IN trench.db.** Only 298 coins are 7+ days old and **62.8% of them reached $1M**, which is survivor bias: the collector ramped up recently, so 1,824 of the 2,122 are under a week old and the older rows are the ones that were worth keeping. The retrospective road ends here. Only forward data settles it.

# THE FORWARD LOG, `/opt/casig/forward.py` + `rerate.py`
`scores.db.fwd`: one frozen row per coin, **first call wins**, taken only from ratings made while the coin was under 24h old, stamped with market cap and age at call time. 1,093 rows at creation. Cron on the droplet: `*/20 * * * * python3 forward.py snap`. `forward.py score [hours]` reports hit rate per star against the base rate of the same cohort, and refuses to score a call younger than 24h.
- [stated] Ben: "we rated them with the old tech score v1... when we're ready with the v2, we should run over all 1,093 and re-rate them. Maybe we put that into a second column, and then we see if the 4-5 star ones ran or didn't run." **Right, and better than it first looks:** the coins are only HOURS old, so their sites have barely drifted since the v1 call, which removes most of the contamination that ruins a re-rate done a month later. `rerate.py` writes `stars_v2, shape_v2, cat_v2, ca_pub_v2, hard_v2, ts_v2, site_used` into the same fwd row, using the site URL **as stored at call time**.
**BUT THE v1 COLUMN IS NOT A FAIR BASELINE:** in the first 75 re-rated, **v1 gave 53 of 75 a literal ZERO** - the "zero is not a score" bug fixed earlier the same day. Those become None under v2. So v1-versus-v2 is mostly that bug, not a change of judgement. The usable comparison is **v2 against the outcome**, once the coins have had time.
**TIMING: the coins in the log are 0 to 24h old and their peaks are not settled.** Score at 48 to 72 hours, not before.

# PEAKS MUST COME FROM GMGN, NOT FROM THE COLLECTOR'S LAB TABLE
Scoring the forward log against `/opt/trench/trench.db` `lab` joined **only 34 of the first 254** re-rated coins. That table holds what Price Predict tracked long enough to label, which is a small non-random slice, and the coins missing from it are exactly the ones that went straight to zero, i.e. the denominator. `/opt/casig/peaks.py` reads **`ath_price` x `total_supply` from GMGN token_info** for every coin in fwd and writes `peak_mcap, peak_ts, last_mcap` into the fwd row. 1,238 of 1,239 written in about six minutes, three workers. Re-runnable so a peak can be refreshed as it settles. `dist.py` reads fwd.peak_mcap first and falls back to lab.

# FIRST FORWARD READING, 345 COINS, ALL RATED WHILE UNDER 24h OLD
- [stated] Ben: "it would be interesting to know the distribution of the peaks so far based on the ratings... compare what the peaks were of the 5-star-rated ones and 4-star-rated ones. Versus 3-star, 2-star versus something that we don't score because it's a meme."
Median coin age 2h, so these are peaks SO FAR, not settled. `/opt/casig/dist.py`.

| lane | n | median peak | p90 | best | over $100k |
|---|---|---|---|---|---|
| 4 star | 2 | $261.3K | - | $261.3K | 100% |
| 3 star | 47 | $6.8K | $123.3K | $991.2K | 11% |
| 2 star | 14 | **$0** | $70.1K | $120.4K | 7% |
| MEME (not scored) | 99 | $5.0K | $93.5K | **$1.4M** | 8% |
| no rating | 183 | $4.9K | $60.6K | $479.8K | 7% |
| ALL | 345 | $5.0K | $86.5K | $1.4M | 8% |

**THE CONTRACT MARK SEPARATES BY 53x ON THE MEDIAN, INSIDE THE TECH LANE, FORWARD:**
- site publishes its contract: n=7, **median $260.3K**, p90 $991.2K, 57% over $100k
- it does not: n=56, **median $4.9K**, p90 $45.8K, 7% over $100k
Small n, but this is the first number in the whole project measured the right way round: rated while new, outcome read afterwards. It is also consistent with both retrospective studies (2.3x, then 2.0x out of sample).
**And the single biggest peak in the sample ($1.4M) is in the MEME lane**, which is the case for keeping type and quality as separate fields exactly as Ben argued: the tech star cannot see that coin and should not pretend to.

# GATE 112 CHECKS, 0 FAILED. Deployed 2026-09-14T10:39:45Z.
Final live spread, mature 50: 5=12%, 4=10%, 3=50%, 2=8%, unrated 20%. Fresh 50: 5=2%, 3=14%, 2=50%, unrated 34%.
**Still applicable to new launches:** both hard signals exist at minute zero and a fresh token (PonsPitch) reached 5 on its own 10,229-byte contract during the final run. Every signal that needs TIME (archive history, usage, GitHub history) was tested and none of them earned a place, so nothing in the ladder now penalises a token for being new.


