Website · Image — 필드 인벤토리와 추론 지도

URL 하나에서 무엇을 얻고, 각 필드에서 무엇을 추론하는가 · 실측 모수 = website fetch ok 1,886건 / 고유 토큰 4,870개
이 문서가 소셜 7종 문서와 다른 점

website·image 는 Creator/Content/Venue 3객체 밖이다 — 작성자도, 발행 시각도, 참여 지표도 없다. 그래서 소셜 문서의 축(URL → sourceType → 필드)이 맞지 않는다.

대신 이 문서의 축은 필드 → 추론할 수 있는 것이다. 스키마상 위치는 엔티티가 아니라 토큰의 지문(tokens.fingerprints[])이다.

실측 표기 — a / b / c 형식은 세 시간분할(IS 6/19-21 · OOS 6/22-24 · OOS 6/24-27)의 값이다. ⚠️ 세 분할은 rug 라벨의 mcSource 가 달라(af-trade vs raw-flow) 분할 간 절대 비교는 무효이고, 각 분할 안에서의 방향만 근거로 쓴다.

1. 어디서 오나 — 무료 소스 3개

셋은 독립 best-effort다. 하나만 성공해도 ok, 셋 다 실패해야 not_found. 그래서 필드별 채움률이 제각각이다.

소스비용어떻게무엇을 주나필드
RDAP무료https://rdap.org/domain/{apex}도메인 등록 정보. 3소스 중 커버리지 최고(81~82%)domainCreatedDate · domainExpiryDate · registrar
HTML / OG무료페이지를 평범한 GET(최대 3MB) 후 정규식 파싱페이지가 자기 정체를 신고하는 메타 태그. SPA 면 거의 빈손isNews · ogTitle · ogSiteName · publishedTime · discoveredLinks
urlscan무료(search)urlscan.io 스캔 DB 조회 — 우리가 스캔을 제출하는 게 아님인증서 · 호스팅 · 페이지 지문. ⚠️ 과거 스캔 결과scanTime 확인 필수certValidFrom · ip/asn/server · technologies · bodyHashes · trackingIds

2. website 필드 인벤토리 — 각 필드에서 추론하는 것

채움% = website fetch 성공 1,886건 중 값이 실제로 온 비율. 등급 — A 고유가치 / B 사용가능 / C 군집용 / 호스팅속성(운영자 아님) / 버림 / 철회권고.

필드소스채움%실제 값 예변동성추론할 수 있는 것등급
domainCreatedDateRDAP81.7%2024-12-24T03:29:28Zimmutable도메인 나이(fetch − 등록)의 원천. ①731일+ → 남의 사이트(실측 rug 84/80/86%, 3분할 일관) ②2-7일 → 런칭에 맞춰 산 자기 사이트(rug 58/73/80%). 직관과 반대로 오래될수록 나쁘다A 고유가치
domainExpiryDateRDAP81.6%2036-01-28T03:03:04Zimmutable등록 기간(expiry − created) → 1년 = 단기 의도 / 10년 = 장기 운영. ⚠️ 지금 이 파생을 안 만들고 있다 — 데이터는 이미 81% 확보돼 공짜B 사용가능
registrarRDAP82.2%1068(273건) · 146 · 625mutable등록대행사. 🔴 한때 무신호로 판정했으나 재검정에서 뒤집혔다 — 그 테스트는 '같은 대행사를 2개 이상이 쓰나'였는데 고유값이 64종뿐이라 98.6%가 공유 그룹이었다(대조군 20건 = 검정력 없음). 카테고리로 재검정하니 1910·292 가 OOS 두 분할에서 rug +7~8pp. 3분할 일관은 아니나 버릴 근거가 없다. ⚠️ IANA 숫자 ID라 이름 매핑 테이블 필요B 사용가능
certValidFromurlscan53.0%2026-05-21T08:11:42Zimmutable서비스 개시 하한. domainCreatedDate와 크게 갈리면 → 만료 도메인 인수·재사용. 등록은 2007년인데 인증서가 지난달이면 그 사이 방치됐던 것B 사용가능
certIssuerurlscan53.0%WE1(239) · YR2 · YR1mutable발급기관(WE1=Google Trust). 🔴 재검정 결과 YR2 가 3분할 전부 rug +5.0 / +5.5 / +10.4 — 무신호가 아니다. 이전 '분산 없음' 판정은 registrar같은 저검정력 오독이었다. 6 B 라 유지 비용도 없다B 사용가능
scanTimeurlscan57.3%2026-02-20T13:49:25Zimmutable🔴 urlscan 계열 전 필드의 as-of 앵커. 우리 fetch 시각이 아니라 urlscan 이 그 사이트를 마지막으로 스캔한 시각 — 수개월 과거일 수 있다. 이걸 안 보면 인프라 필드 전체가 시점 불명이 된다A 고유가치
scanUuid 🆕urlscan(미추출)raw.task.uuid — 응답에 이미 있으나 안 꺼냄immutable미검증 필드 전체의 복구 경로. https://urlscan.io/api/v1/result/{uuid}/ 로 그 스캔의 원본 전체를 되받는다 → bodyHashes·globalNames·linkDomains 를 지금 저장하지 않아도 나중에 필요해지면 복구 가능. 40 B 로 2,596 B 를 대체한다. ⚠️ urlscan 이 그 스캔을 보존하는 한에서만 유효 — 그래서 검증된 신호는 그대로 저장하고 uuid 는 백업으로만 쓴다A 고유가치
isNewsHTML76.0%true 15.1%immutableog:type=article 또는 NewsArticle뉴스 기사 페이지. 즉 website 가 프로젝트 홈이 아니라 기사 링크. 실측 rug 80/89/100% · ≥100k 2/5/0% — 3분할 단조 악화A 고유가치
ogTitleHTML46.0%Grand Theft Auto VI - Rockstarimmutable페이지 제목. 토큰명/티커와 대조 → 무관하면 남의 사이트, 일치하면 자기 사이트. 문자열 대조라 별도 fetch 없이 판정 가능B 사용가능
ogSiteNameHTML25.8%Know Your Meme · Twitchimmutable사이트가 자기 정체를 신고한 값. 커버 25.8% 로 ogTitle(46%)의 부분집합에 가깝다. ⚠️ 독립 검정은 안 했다 — 3.5 B 라 유지·제거 어느 쪽도 용량 영향 없음C 군집용
publishedTimeHTML8.7%2026-06-23T12:01:21Zimmutable제거 확정isNews완전히 흡수된다. 실측: publishedTime 이 있으면서 isNews 가 아닌 경우가 3분할 통틀어 3건. 독립 정보가 없다버림
discoveredLinksHTML314건 / 1,886{instagram:[...], discord:[...]}mutable제거. 실측 1,324개 링크 중 50.3%가 그 사이트 자신의 계정(rockstargames.com@rockstargames). 2차 발견 입력으로 쓰면 knowyourmeme 인스타를 토큰 소셜로 등록하게 된다. 제3자 방증 용도는 isNews+도메인나이가 이미 커버 → 버그 3건 고칠 이유도 사라진다버림
ipurlscan53.6%216.198.79.65(41건)mutable호스팅 IP. asn 에 거의 종속이고 자주 바뀐다. Cloudflare/AWS 가 base rate 지배. ⚠️ 독립 검정은 안 했다 — 8.6 BC 군집용
asnurlscan53.4%AS13335 Cloudflare(270) · AS16509 AWS(251)mutable호스팅 제공자 — 운영자가 아니다. 군집이 생겨도 제공자 점유율일 뿐호스팅속성
asnNameurlscan53.4%CLOUDFLARENET - Cloudflare, In…mutable제거 확정asn1:1 대응(AS13335CLOUDFLARENET). 매핑 테이블 하나면 충분한데 문자열이 길어 17.3 B 를 쓴다버림
serverurlscan49.2%cloudflare(288) · Vercel(176) · nginxmutable호스팅 속성이지만 한 가지 용도가 있다 — SPA 판별. Vercel(=Next.js) 은 링크가 클라이언트 렌더라 HTML 파싱이 거의 빈손(실측 discoveredLinks 산출률 Vercel 4.9% vs nginx 30.1%). OG/링크 결측을 '정보 없음'이 아니라 '구조상 못 봄'으로 해석해야 한다B 사용가능
country · cityurlscan40.4% / 21.4%US · Frankfurt am Mainmutable제거 확정호스팅 데이터센터 위치이고 asn 이 제공자를 특정하면 자동 결정된다버림
technologiesurlscan32.8%Google Analytics · Cloudflare Bot Managementmutable상용 스택 목록. 4개 이상 → 성숙한 상용 사이트 = 남의 것. 실측 rug 83/87/98% · ≥100k 7/5/0% — 3분할 일관. 🔻 검증된 신호는 개수뿐이라 techCount: int 로 축약(27.7 → 4 B)B 사용가능
trackingIdsurlscan10.4%ga:G-5FPLDLE8C6 · gtm:GTM-SXRFmutableGA/GTM 계정 ID. 선택도는 최고지만 가리키는 대상이 예상과 다르다 — 실측 최대 군집이 knowyourmeme(27) · blog.google(7) · pump.fun(6) 처럼 제3자 사이트 자신의 GA 였다. 존재 자체는 3분할 일관 신호(rug 84/86/98%). 🔻 hasTracking: bool 로 축약(4.6 → 1 B). ⚠️ 잃는 것 — 같은 운영자의 여러 도메인 묶기(world.xyz/docs./api.), 실측 1건B 사용가능
urlscanLinkDomainsurlscan40.7%x.com(301) · solscan.io · dexscreener.commutable🔴 '소셜과 중복'이라던 판단이 틀렸다 — 유명 소셜은 25.1% 뿐이다. 꼬리에 dexscreener·solscan 이 있고, 분석도구 링크가 있으면 ≥100k 가 +15.1 / +18.1 / −2.5pp(2/3 분할에서 강함). 사이트가 dexscreener 를 걸었다 = 자기 토큰을 홍보하는 프로젝트 사이트 = 정확히 우리가 찾던 '남의 사이트 아님' 판별자. 🔻 배열은 버리고 hasTokenTool: bool 로 축약(53.3 → 1 B)B 사용가능
bodyHashesurlscan56.2%고유 26,492종 · 건당 54.0개mutable🔴 용량의 73.6%(건당 2,066 B)를 혼자 쓴다. 페이지 리소스 해시 → 동일 템플릿 탐지. 최빈값 e3b0c442…(360건)는 빈 문자열의 SHA-256 = 빈 페이지지 공통 지문이 아니다. 용도가 미검증이라 저장하지 않고 scanUuid복구 경로만 남긴다버림
globalNamesurlscan46.2%next · google_tag_data · 0 · 건당 58.9개mutable용량 16.4%(건당 460 B). 값이 프레임워크 노이즈고 technologies 가 같은 축을 해석 가능한 형태로 커버한다 → 제거, scanUuid 로 복구 가능버림
urlscanScoreurlscan57.3%🔴 1,080건 중 1,075건이 0, 100은 5건mutable분산이 없어 버려도 된다. 무료 search 모드 한계일 수 있으나 현재 데이터로는 정보량 0버림
brandsurlscan5건genericcrypto×3 · facebook · amazonmutable❌ 사칭 브랜드 탐지를 기대했으나 전체 5건. 현재 모드에서는 사실상 안 잡힌다버림

3. 추론 지도 — 필드가 하나의 축으로 수렴한다

핵심 발견 — §2 의 신호들은 독립이 아니다. 전부 같은 질문의 다른 얼굴이다: “이 website 가 프로젝트 자신의 홈인가, 남의 사이트를 참조한 것인가”
website URL
   │
   ├─ RDAP ────── domainCreatedDate ─┬─ 731일+ ──────┐
   │              domainExpiryDate ──┘ (등록기간)     │
   │                                                 │
   ├─ HTML ────── isNews = true ─────────────────────┤
   │              ogTitle / ogSiteName ──(토큰명 대조)┤
   │                                                 ├─▶ 「남의 사이트」
   ├─ urlscan ─── technologies 4+ ───────────────────┤     rug ↑ · ≥100k ↓
   │              trackingIds 존재 ───────────────────┤     (3분할 일관)
   │              server = Vercel ──(SPA: 결측 해석)  │
   │                                                 │
   └─ 파생 ────── 도메인 공유 카운트 ─────────────────┘
                  (as-of · 나이가 못 잡는 신생 공용 도메인)
그래서 주의할 것 — 이 필드들을 독립 피처로 나열하면 같은 정보를 여러 번 세게 된다. 실측 겹침률: 공유 도메인의 55.9%가 이미 나이·뉴스·tracking·tech 중 하나에 걸린다(단독 도메인은 19.5%).

4. 실측 — 3분할 전부 같은 방향인 것만

rug = 72h 내 5만 MC 미달 · ≥100k = 10만 MC 도달. 각 칸은 IS / OOS1 / OOS2.

4.1 일관 — 채택 후보

신호rug≥100k해석
website 존재 자체−9.7 / −6.4 / −2.5pp+6.3 / +3.4 / +1.5ppwebsite 가 있는 토큰이 덜 rug 하고 더 오른다. 3분할 전부 같은 방향
isNews = true80 / 89 / 100%2 / 5 / 0%뉴스 기사 = 남의 컨텐츠
도메인 731일+85 / 84 / 91%7 / 6 / 6%오래된 도메인 = 남의 사이트
trackingIds 있음84 / 86 / 98%9 / 6 / 2%상용 사이트 = 남의 것
technologies 4개+83 / 87 / 98%7 / 5 / 0%성숙한 스택 = 남의 것
discoveredLinks 1-2075 / 85 / 93%15 / 4 / 5%링크가 나온다 = 서버렌더 상용 사이트

4.2 IS 에서만 좋았던 것 — 과적합 사례

같은 데이터로 반대 사례도 남긴다. IS 단독 결과를 채택하면 안 되는 이유의 실물.

신호ISOOS 6/22-24OOS 6/24-27
server = Vercelrug 52% / ≥100k 40%84% / 9%90% / 8%
도메인 91-730일rug 35% / ≥100k 57%84% / 5%85% / 8%
도메인 공유 16개+rug 0% / ≥100k 100%rug 95%
도메인 공유 16개+ 버킷을 까보면 — IS 는 orynth.dev 단독 18건(rug 0%), OOS2 는 knowyourmeme.com 22건(rug 100%) + axiom.trade 21건(rug 90%)이었다. 크기 효과가 아니라 개체 특이적이다 — 버킷 하나가 도메인 하나였다.

5. 파생값 — 저장하지 않고 질의 시점에 계산

파생계산식값어치저장 여부
도메인 나이fetchedAt − domainCreatedDate🥇 주력 신호. 3분할 일관 · 커버 81.7% · as-of 완전저장 ❌ — domainCreatedDate 만 저장하고 질의 시점에 계산
등록 기간domainExpiryDate − domainCreatedDate🆕 아직 안 만든 파생. 1년 = 단기 의도저장 ❌ — 원본 두 값이 이미 있다
cert ↔ 등록 갭certValidFrom − domainCreatedDate만료 도메인 인수 탐지저장 ❌
도메인 공유 카운트count(tokens: fingerprints=domain:X, createdAt < T)🥈 보조 신호. 나이가 못 잡는 신생 공용 도메인(orynth.dev 30건)을 잡는다🔴 저장 절대 금지 — 값이 계속 변해서 저장 시점이 곧 look-ahead. 질의 시점 계산
도메인 공유 카운트를 필드로 저장하면 안 되는 이유 — 값이 계속 변한다. 저장 시점의 카운트는 그 이후 토큰까지 센 값이라 저장하는 순간 look-ahead 가 박힌다. {fingerprints: "domain:X", createdAt: {$lt: T}}질의 시점에 세는 것이 맞다.

원리상 도메인당 첫 토큰은 반드시 미탐이다(선례가 0). 실측 손실 — look-ahead 42.6% → as-of 31.8%(75% 보존). 군집이 클수록 잘 살아남는다: 2토큰 50.0% · 3-5 71.0% · 6-15 87.5% · 16+ 96.1%.

6. 저장 결정 — 무엇을 빼고, 무엇을 접고, 무엇을 남기나

이 절의 원칙검증된 것은 검증된 형태로만 저장한다. “개수만 신호”면 배열이 아니라 int, “존재 유무만 신호”면 bool. 미검증 필드는 버리되 scanUuid복구 경로를 남긴다.

6.1 제거

필드처리절감 B/건근거
bodyHashes제거 → scanUuid 로 복구2,066혼자 용량의 73.6%. 템플릿 재사용 용도가 미검증이라 검증되면 uuid 로 되받는다
globalNames제거 → scanUuid 로 복구460용량 16.4%. 값이 프레임워크 노이즈(next·0)고 technologies 가 같은 축을 커버
discoveredLinks제거382차 발견 용도 철회(50.3% 오염). 제3자 방증은 isNews+도메인나이가 이미 커버
asnName제거17.3asn 과 1:1 대응 — 매핑 테이블로 충분
publishedTime제거2.2isNews 에 완전 흡수(독립 사례 3건)
country · city제거1.6+호스팅 위치. asn 에 종속
urlscanScore제거11,080건 중 1,075건이 0 — 분산 없음
brands제거1전체 5건 — 현재 모드에서 미작동

6.2 형태 축약 — 배열을 스칼라로

현재변경B/건검증된 신호가 무엇인가
technologies[]techCount: int27.7 → 4검증된 신호는 개수(4개 이상)뿐. 목록은 쓰는 데가 없다
urlscanLinkDomains[]hasTokenTool: bool53.3 → 1검증된 신호는 dexscreener/solscan 링크 유무(≥100k +15.1/+18.1/−2.5pp)
trackingIds[]hasTracking: bool4.6 → 1검증된 신호는 존재 유무(rug 84/86/98%). ⚠️ 같은 운영자 다중 도메인 묶기를 잃음(실측 1건)

6.3 유지 — 한때 빼려 했으나 되돌린 것

🔴 이전 판정의 오류를 기록해 둔다. registrar·certIssuer 를 “실측 무신호”로 판정했었는데, 그 테스트는 “같은 값을 2개 이상이 쓰나”였다. 고유값이 각각 64종·57종뿐이라 98% 이상이 ‘공유’ 그룹이었고 대조군이 20건 남짓이었다. 차이가 없었던 게 아니라 잴 수 없었다. 카테고리로 다시 재니 신호가 나왔다.

교훈 — 검정력을 확인하지 않은 null 결과를 “신호 없음”으로 부르면 안 된다. 측정 불가와 신호 부재는 다른 판정이다.

필드B/건왜 남기나
registrar5재검정에서 1910·292 가 OOS 두 분할 +7~8pp. 이전 무신호 판정은 저검정력 오독
certIssuer6재검정에서 YR23분할 전부 +5.0/+5.5/+10.4
ip · ogSiteName12독립 검정을 안 했다 — 무신호 확인이 아니라 미확인이라 남긴다

6.4 용량 실측

website 레코드 하나 평균 2,808 B(중앙값 746 · p95 14,855 · 최대 53 KB). website 보유율이 38.7%라 토큰당으로 환산하면 아래와 같다.

구성B/토큰5천/일2만/일
전부 그대로1,0881.09 GB4.35 GB
bodyHashes 만 처리287287 MB1.15 GB
이 문서의 최종안66120 MB481 MB
이 지점부터는 필드를 더 빼도 별로 안 줄어든다 — MongoDB 는 필드 이름을 문서마다 저장한다. 11개 필드 × 평균 15자 ≈ 165 B 로 실제 값(66 B/토큰)보다 크다. 더 줄이려면 필드 제거가 아니라 이름 단축이 효과적이지만, 가독성 손실 대비 이득이 작아 권장하지 않는다.

7. 지금 안 뽑는데 뽑을 수 있는 것

우선 열의 “즉시”는 추가 네트워크 호출이 0이라는 뜻 — 이미 받아둔 데이터에서 파생만 만들면 된다.

항목출처비용무엇을 추론하나우선
등록 기간이미 보유(RDAP)무료 · 추가 호출 01년 등록 = 단기 의도. 데이터가 이미 있는데 파생만 안 만든 상태즉시
HTTP 상태 · 리다이렉트 체인페이지 GET 시 부산물무료 · 추가 호출 0①사이트가 살아있나(러그 후 내림) ②리다이렉트 목적지가 다른 도메인이면 파킹/전매즉시
본문 텍스트이미 받는 HTML무료 · 추가 호출 0🔴 지금은 OG 메타만 파싱하고 본문을 버린다. CA·티커가 본문에 있어도 못 본다 — 소셜 쪽에서 caption 을 token↔content 링크 지점으로 쓰는 것과 같은 논리즉시
TLD도메인 문자열무료 · 추가 호출 0.fun / .xyz / .live vs .com — 등록 비용·심사 강도 차이즉시
favicon 해시/favicon.ico GET무료 · 요청 1회템플릿 재사용 지문. image 축과 같은 성격 — 같은 파비콘 = 같은 제작 파이프라인낮음
DNS MX 레코드DNS 조회무료 · 요청 1회메일이 설정돼 있나 = 조직 실체의 약한 증거. 밈코인 사이트는 대개 없음미검증
DNS NS 레코드DNS 조회무료 · 요청 1회DNS 제공자 군집 — 운영자 묶기미검증
wayback 최초 스냅샷web.archive.org API무료 · 요청 1회실제 공개 시점. 도메인 등록일보다 정확 — 등록 후 방치했다 나중에 쓴 경우를 가른다미검증
페이지 바이트 크기GET 부산물무료 · 추가 호출 0빈 랜딩 vs 실제 사이트 구분낮음
⚠️ “즉시” 4건 외에는 전부 미검증 가설이다. 라벨로 검정한 적이 없다 — §4 의 실측 신호와 같은 수준의 근거가 아니다.

8. image — 현황과 제안

🔴 현재 완전 미수집이다. 수집 데이터(social.jsonl)에 토큰 이미지가 없고, tokens.json 은 주소 목록뿐이다. 따라서 이 절 전체가 가설이며 실측 근거가 하나도 없다 — §2·§4 의 website 항목과 지위가 다르다.

7.1 뽑을 수 있는 필드

필드출처형태추론할 수 있는 것필요한 것
imageUrl토큰 메타데이터 URI원본 URL 문자열호스팅 도메인이 파생된다 → 같은 CDN/파이프라인 군집. URL 그대로도 완전 동일 재사용은 잡힌다(변형본은 못 잡음)즉시 가능
imageHash (sha256)이미지 다운로드 후 계산sha256:abc…바이트 단위 완전 동일 판정. 같은 이미지를 여러 토큰이 쓰면 = 같은 소재 재사용/사칭다운로드 + 해시 단계 필요
pHash / dHash (perceptual)이미지 다운로드 후 계산64bit 지각 해시변형본 탐지 — 크롭·리사이즈·워터마크·재인코딩을 넘어 같은 원본 판정. sha256 이 못 잡는 영역이미지 라이브러리 필요
포맷 · 해상도 · 바이트 크기다운로드 부산물png 512×512 84KB제작 파이프라인 지문(같은 툴 = 같은 규격). 약한 신호다운로드 필요

7.2 추론 가설

관측추론상태
같은 imageHash 를 여러 토큰이 사용같은 소재 재사용 — 연속 발행 정황미검증
토큰 이미지 = 소셜 프로필 이미지사전 준비 정황 — 팀이 미리 계정과 이미지를 맞춤미검증 (v2 Q10)
pHash 근접하나 sha256 다름변형 재사용 — 탐지를 피하려 조금 바꾼 것미검증
이미지 호스팅 도메인 공유같은 배포 파이프라인미검증
전제 — pump.fun 계열은 이미지가 불변이라(mint authority 소각 실측 92%) 해시가 안정적인 키가 된다. 이 전제가 깨지는 런치패드에서는 observedAt 이 필수다.

최소 착수안 — 해시 계산 없이 imageUrl 문자열만 저장해도 완전 동일 재사용은 잡힌다. 변형본은 못 잡으니 pHash 는 그 다음 단계.

9. 저장 형태 — 지문은 합성 문자열 배열

tokens {
  _id: mint,
  createdAt,                    // as-of 절단축 (토큰 발행)

  fingerprints: [               // kind 를 값에 인코딩한 평면 문자열
    "domain:orynth.dev",
    "image:sha256:def...",      // §8 — 아직 미수집
  ],
  fingerprintsObservedAt,       // 지문 관측 시각 (look-ahead 가드)

  web: {                        // 지문이 아닌 도메인 속성
    domain,                     //   공유 카운트의 키
    domainCreatedAt,            //   주력 신호 (731일+ = 남의 사이트)
    domainExpiryAt,             //   등록기간 파생용
    certValidFrom,              //   재사용 도메인 탐지
    scanTime,                   //   urlscan 계열의 as-of 앵커
    scanUuid,                   //   신규 — 미검증 필드 복구 경로

    isNews,                     //   주력 신호 (rug 80/89/100%)
    ogTitle,                    //   토큰명 대조
    ogSiteName,                 //   미검정 (3.5B)
    server,                     //   SPA 판별 (OG 결측 해석용)
    ip,                         //   미검정 (8.6B)
    registrar, certIssuer,      //   재검정에서 신호 확인

    techCount,                  //   축약 배열→int  (4개 이상이 신호)
    hasTracking,                //   축약 배열→bool (존재 유무가 신호)
    hasTokenTool,               //   축약 배열→bool (dexscreener/solscan 링크)
  },
}

// 인덱스: {fingerprints: 1, createdAt: 1}
// 공유 규모: count({fingerprints: "domain:X", createdAt: {$lt: T}})
객체 배열이 아니라 합성 문자열인 이유[{kind, value}] 형태면 kindvalue같은 원소를 가리킨다는 보장이 없어 $elemMatch 가 강제된다. "kind:value" 로 합치면 단일 조건이 되고, createdAt 이 배열 밖 스칼라라 multikey prefix + range 가 그대로 성립한다.

10. 미결 · 다음

항목상태왜 막혀 있나
as-of 실증불가fetchedAt 이 배치 처리 시각(전부 1.5시간 내)이라 토큰 발행 순서가 없다. §4 lift 는 look-ahead 상한이고 §5 의 31.8% 는 원리상 계산이지 성능 측정이 아니다
image 전 항목미수집수집 데이터에 토큰 이미지가 아예 없다 — 가설 검증 자체가 불가
discoveredLinks제거 확정버그 3건(역슬래시 미제거로 같은 링크가 2종 집계 · 이스케이프 흡수 · oembed API 오탐)이 있었으나 필드 자체를 빼기로 해 수정 불필요
hasTokenTool 3분할 미달2/3dexscreener/solscan 링크는 IS·OOS1 에서 ≥100k +15~18pp 인데 OOS2 에서 사라진다(n≈41). 개념적 타당성은 높으나 채택 전 재검정 필요
registrar 이름 매핑필요IANA 숫자 ID(1068·146)라 그대로는 해석 불가 — 매핑 테이블이 있어야 쓴다
공유 카운트 방향미결IS 에서 부호가 뒤집혔다(공유 도메인이 더 좋았다). 판별(남의 사이트냐)에 쓰는 건 안전하나 방향(좋다/나쁘다)은 별도 검증 필요
공유 도메인 3종 혼재미결참조 사이트(knowyourmeme) · 런치툴(orynth.dev) · 런치패드(pump.fun)의 성격이 다른데 카운트만으로는 하나로 뭉갠다
urlscanScore·brands보류무료 search 모드 한계일 가능성 — 유료 스캔 제출 모드면 달라질 수 있으나 미확인