Yeonguk Lee
Sellii · verification harness results · measured 2026-07-09Sellii · 검증 하네스 결과 · 2026-07-09 측정

Three claims about an agent,
each turned into a number.
에이전트에 대한 주장 3가지를,
전부 숫자로 바꿨어요.

Sellii is a resale-arbitrage agent (solo build, not launched, private repo). Instead of asking anyone to take its reliability on faith, I wrote three reproducible offline harnesses that measure the claims directly. This page is the methodology summary and result tables: the numbers cited in my resume and outreach, with their exact scope.

Sellii는 혼자 만든 resale arbitrage 에이전트예요(미출시, private repo). 믿어달라고 말하는 대신, 주장을 직접 측정하는 재현 가능한 오프라인 하네스 3개를 만들었어요. 이 페이지는 그 방법 요약과 결과 표예요. 이력서와 메일에 인용한 숫자들의 정확한 범위를 여기에 밝혀 뒀어요.

Read this first: every measured number below comes from a deterministic harness on fixed fixtures, run fully offline. It is not production traffic, and Sellii has no real users. Where a harness measures a fix rather than the shipped code, that is stated explicitly. Gaps and misses are documented, not hidden. 먼저 읽어주세요: 아래 측정 수치는 전부 고정된 픽스처로 오프라인에서 돌린 결정적 하네스 결과예요. 프로덕션 트래픽이 아니고, Sellii는 실사용자가 없어요. 출시된 코드가 아니라 '고친 것'을 측정한 경우에는 그렇게 명시했어요. 못 잡은 케이스도 숨기지 않고 적었어요.
01

Trust: does server-side verification actually block fabricated economics?신뢰: 서버 검증이 지어낸 숫자를 정말 막을까?

If the model lies about prices, profit, or comps, does anything catch it before a human sees the deal?모델이 가격·수익·시세를 지어내면, 사람이 보기 전에 걸러질까요?

Method방법

44 recommendations (8 valid, 36 deliberately corrupted across 12 corruption types) are run through two validators:

추천 44개(정상 8, 12가지 방식으로 일부러 손상시킨 36)를 두 검증기에 통과시켰어요:

44 fixtures픽스처 44개 12 corruption types손상 유형 12가지 fully offline완전 오프라인 deterministic결정적 no DB · no LLM callsDB·LLM 호출 없음

Results결과

44-fixture run, 2026-07-09픽스처 44개, 2026-07-09 실행
Metric지표Prompt-only프롬프트만Server-side서버 검증
Economic lies blocked (fabricated price / profit / recommendation / sample count / query)지어낸 가격·수익·추천 차단 (가격 / 수익 / 추천 / 샘플 수 / 쿼리 위조) 0/17 17/17
Valid recommendations preserved (false positives)정상 추천 보존 (오차단) · 8/8 (0 FP)
Comp-contamination resistance (cheap parts or wrong-category items mixed into comps; median must hold at the true value)시세 데이터 오염 저항 (저가 부품·다른 카테고리가 섞여도 중앙값이 참값 유지) · 7/7
Evidence snapshot attached to every accepted deal승인된 거래마다 근거 스냅샷 저장 · 24/24
All should-block cases, including out-of-scope gaps차단해야 할 전체 케이스 (범위 밖 구멍 포함) · 17/29 (58.6%)

What it does not catch, traced downstream (12/29 gaps)못 잡는 것을 하류까지 추적 (구멍 12/29)

Four corruption types get through this harness, each with a known cause: comps fabricated for a never-searched query (canonical recomputation only protects on a cache hit), comps that are entirely the wrong product (the token filter falls back when almost nothing matches), stale comps older than three years (no freshness window yet), and a missing listing URL (this harness skips the detail check). That is why the headline is 17/17 economic lies, not "100% of everything."

4가지 손상 유형이 이 하네스를 통과해요. 각각 원인을 알아요: 검색한 적 없는 쿼리로 지어낸 시세(재계산은 캐시에 있을 때만 보호해요), 시세가 전부 다른 상품인 경우(거의 안 맞으면 토큰 필터가 물러서요), 3년 넘은 오래된 판매 기록(신선도 검사가 아직 없어요), 매물 URL 누락(이 하네스는 상세 검사를 건너뛰어요). 그래서 헤드라인이 "전부 100% 차단"이 아니라 경제적 거짓말 17/17이에요.

But this harness exercises one gate in isolation. Tracing all 12 gap cases through the full production path splits them cleanly: 3 already fail closed downstream, and 9 genuinely fail open.

그런데 이 하네스는 게이트 하나만 떼어내서 돌려요. 12개 구멍을 프로덕션 전체 경로로 따라가 보면 깔끔하게 나뉘어요. 3건은 하류에서 이미 막히고(fail-closed), 9건은 진짜로 뚫려요(fail-open).

12 gap cases traced into production구멍 12건을 프로덕션까지 추적
Downstream disposition하류 결말Cases건수Why이유
Fail-closed in production프로덕션에서 차단 3 Missing listing URL: listing_url is NOT NULL in the schema, and the auto-send step requires a valid https URL, so a URL-less recommendation never passes that gate.매물 URL 누락: 스키마에서 listing_urlNOT NULL이고, 자동 발송 단계가 유효한 https URL을 요구해요. 그래서 URL 없는 추천은 그 게이트를 통과하지 못해요.
Fail-open통과 9 Fabricated, wrong-product, or stale comps clear the economic gate and would reach a human as "approved."지어냈거나, 다른 상품이거나, 오래된 시세가 경제 게이트를 통과해서 "승인됨" 상태로 사람에게 도달해요.

The 9 fail-open cases are the real exposure. For them I designed a review-queue routing patch: a recommendation built on comps the server can't verify (never-searched, wrong-product, or past the freshness window) is diverted to a human review queue instead of auto-approval. It's a design I can walk through, not shipped code, so I list it as the next step, not a current guarantee.

진짜 노출은 이 9건이에요. 이걸 위해 리뷰 큐 라우팅 패치를 설계했어요. 서버가 검증할 수 없는 시세(검색된 적 없거나, 다른 상품이거나, 신선도 기준을 넘긴)로 만든 추천은 자동 승인 대신 사람 리뷰 큐로 보내요. 코드로 보여드릴 수 있는 설계지 아직 배포한 코드는 아니에요. 그래서 현재의 보장이 아니라 다음 단계로 적어 둬요.

  • The prompt-only baseline is a reasonable stand-in for schema-only validation, not logs from a previously deployed version.
  • 프롬프트만 쓰는 기준선은 스키마 검사만 하는 방식을 대표하는 합리적 비교 대상이에요. 실제로 배포했던 이전 버전의 로그가 아니에요.
  • Fixtures are synthetic; the filter and recomputation logic is the real production logic, but inputs are hand-built.
  • 픽스처는 손으로 만든 합성 데이터예요. 필터와 재계산 로직은 실제 프로덕션 코드지만, 입력은 만든 거예요.
  • Gates coupled to external systems (vision detail checks, DOM resolution, DB dedup) are injected as world-state and not measured here.
  • 외부 시스템에 붙은 게이트(vision 상세 검사, DOM 해석, DB 중복 제거)는 값을 주입했고, 여기서 측정하지 않았어요.
  • Dollar values inside fixtures are design values; the claims are block rates, preservation rates, and contamination resistance, not amounts.
  • 픽스처 안의 금액은 설계값이에요. 주장하는 건 차단율·보존율·오염 저항이지, 금액이 아니에요.
02

Duplicate execution: does one event ever commit twice?중복 실행: 같은 이벤트가 두 번 커밋될까?

When a payment webhook or deal-save event is redelivered, retried, or raced, how many times does the business action actually commit?결제 웹훅이나 저장 이벤트가 다시 오거나, 재시도되거나, 경쟁하면 실제로 몇 번 커밋될까요?

This harness measures the fix, not the shipped v1 code. Sellii v1 uses the failing patterns below (no event-id dedup on the payment webhook, a non-atomic check-then-insert on deal save). The harness reproduces those failures under real concurrency, then measures what an atomic guard changes. 이 하네스는 출시된 v1 코드가 아니라 '고친 것'을 측정해요. v1은 아래 실패하는 패턴을 그대로 써요(결제 웹훅에 이벤트 ID 중복 제거 없음, 저장은 비원자적 확인-후-삽입). 하네스는 그 실패를 실제 동시성에서 재현한 다음, 원자적 가드가 무엇을 바꾸는지 측정해요.

Method방법

One logical event is delivered 20× sequentially, 20× concurrently, across a process restart, and from two processes at once, against three dedup strategies. External side effects are mocked as counters; the ideal outcome is exactly one committed action per unique event. The concurrency race is real: the non-atomic strategy has an async gap between check and insert, and interleaving actually occurs.

논리적으로 같은 이벤트 1개를 순차 20번, 동시 20번, 프로세스 재시작을 사이에 두고, 그리고 두 프로세스에서 동시에 전달했어요. 중복 제거 전략 3가지를 비교했고, 외부 side effect는 카운터로 모킹했어요. 이상적인 결과는 이벤트당 정확히 1번 커밋이에요. 동시성 레이스는 진짜예요. 비원자 전략은 확인과 삽입 사이에 비동기 틈이 있어서 실제로 겹쳐요.

4 scenarios시나리오 4개 3 strategies전략 3가지 side effects mockedside effect 모킹 reproducible재현 가능

Results · committed actions per unique event (ideal = 1)결과 · 이벤트당 커밋 수 (이상값 = 1)

Replay harness run, 2026-07-09리플레이 하네스, 2026-07-09 실행
Strategy전략Sequential ×20순차 ×20Concurrent ×20동시 ×20Restart replay재시작 후 재전송2 processes ×202프로세스 ×20
In-memory set (marker lost on restart)인메모리 셋 (재시작하면 마커가 사라져요)1122
Non-atomic durable check-then-insert (v1's pattern)비원자적 확인-후-삽입 (v1의 패턴)120140
Atomic durable event ledger (claim-if-absent / unique constraint)원자적 이벤트 원장 (없을 때만 선점 / unique 제약)1111

Under partial failure (crash after the side effect but before the marker is written), act-then-mark ordering committed twice (a duplicate committed action), while claim-then-act committed once, with the retry becoming a no-op.

부분 실패(side effect는 성공했는데 마커를 쓰기 전에 죽는 경우)에서는, 행동-후-기록 순서가 두 번 커밋됐어요. 같은 작업이 한 번 더 커밋되는 거예요. 선점-후-행동은 한 번만 커밋됐고, 재시도는 아무 일도 하지 않았어요.

  • Side effects are mocked counters, not a real payment provider or database; porting the guard to real unique constraints is the follow-up.
  • side effect는 모킹한 카운터예요. 실제 결제사나 DB가 아니에요. 실제 unique 제약으로 옮기는 게 다음 단계예요.
  • The two-process scenario is simulated within the harness: a proof of principle, not a substitute for distributed-lock testing on a real DB.
  • 2프로세스 시나리오는 하네스 안에서 시뮬레이션한 거예요. 원리 증명이지, 실제 DB의 분산 락 테스트를 대신하지는 않아요.
03

Unit economics: what does HTTP-first buy, and what does it cost?단위 경제: HTTP 우선 설계는 얼마나 아끼고, 무엇을 잃을까?

Replacing "one vision call per listing" with free deterministic filters plus a small text model: how much cheaper, and how many good deals get lost?"매물마다 vision 호출 1번"을 공짜 결정적 필터와 작은 텍스트 모델로 바꾸면, 얼마나 싸지고 좋은 매물을 몇 개나 놓칠까요?

Method방법

The same fixed 31-listing fixture runs through two pipelines: a baseline that sends every listing to gpt-4o Vision, and the HTTP-first design where deterministic filters (price sanity, initial profit gate, 48-hour dedup, removed-listing checks) eliminate candidates for free and only survivors reach gpt-4o-mini as text. Profit and market-price judgments use the real production functions; LLM outputs are fixture-injected, so this measures pipeline shape, cost, and recall, not model accuracy.

같은 고정 매물 31개 픽스처를 두 파이프라인에 통과시켰어요. 기준선은 모든 매물을 gpt-4o Vision으로 보내요. HTTP 우선 설계는 결정적 필터(가격 검증, 초기 수익 게이트, 48시간 중복 제거, 삭제 매물 확인)가 후보를 공짜로 줄이고, 살아남은 것만 gpt-4o-mini에 텍스트로 보내요. 수익·시세 판단은 실제 프로덕션 함수를 썼고 LLM 출력은 픽스처로 주입했어요. 그래서 재는 건 파이프라인 구조·비용·유지율이지, 모델 정확도가 아니에요.

fixed 31-listing fixture고정 매물 31개 픽스처 deterministic결정적 rates from the code's pricing table단가는 코드의 가격표 그대로 token counts estimated토큰 수는 추정치

Results · cost결과 · 비용

Cost A/B run, 2026-07-09비용 A/B, 2026-07-09 실행
Metric지표Baseline (all-vision)기준선 (전량 vision)HTTP-first
gpt-4o Vision callsgpt-4o Vision 호출310
gpt-4o-mini text callsgpt-4o-mini 텍스트 호출038
Share of listings hitting the expensive model비싼 모델로 간 매물 비율100%0%
Projected LLM cost (fixture total)예상 LLM 비용 (픽스처 합계)$0.2480$0.0031
Projected savings예상 절감·98.8% (81×)

Results · recall (did the cheap path throw away good deals?)결과 · 유지율 (싼 경로가 좋은 매물을 버렸을까?)

Same fixture, profitable-deal retention같은 픽스처, 수익 매물 유지
Metric지표Value
Profitable deals surfaced by the baseline기준선이 찾은 수익 매물15
Also surfaced by HTTP-firstHTTP 우선도 찾은 것12
Recall유지율80.0% (12/15)
Misses놓친 것3 · all image-only listings3 · 전부 사진만 있는 매물

All three misses are listings with a photo and a vague title ("🔥 must go asap DM me"). A text-only model cannot extract brand or model, while the vision baseline reads the photo. That is the real recall/cost trade-off of HTTP-first, measured rather than assumed. Selective vision escalation for that segment is an unbenchmarked hypothesis, not a claim.

놓친 3건은 전부 사진에 모호한 제목만 있는 매물이에요("🔥 급처, DM 주세요" 같은). 텍스트만 보는 모델은 브랜드·모델명을 못 뽑는데, vision 기준선은 사진을 읽어서 잡아요. 이게 HTTP 우선 설계의 진짜 비용/유지율 트레이드오프예요. 가정이 아니라 측정한 거예요. 그 구간만 vision으로 올려보내는 방식은 아직 벤치마크 안 한 가설이라서, 주장하지 않아요.

  • The baseline is a representative "send everything to vision" model, not production logs of an earlier version.
  • 기준선은 "전부 vision으로 보내는" 방식을 대표하는 모델이에요. 이전 버전의 프로덕션 로그가 아니에요.
  • Per-call token counts are documented estimates, and USD rates are copied from the code's pricing table, so absolute dollars are projections. The defensible claims are call counts, ratios, and recall.
  • 호출당 토큰 수는 문서화된 추정치고, 달러 단가는 코드의 가격표를 그대로 썼어요. 그래서 절대 금액은 추정이에요. 방어할 수 있는 주장은 호출 수, 비율, 유지율이에요.
  • Recall depends on this fixture's share of image-only listings (3 of 15); a different feed mix shifts it.
  • 유지율은 이 픽스처의 사진 전용 매물 비율(15개 중 3개)에 달려 있어요. 실제 피드 구성이 다르면 달라져요.

Each harness is a deterministic script that runs fully offline (npm run test:trust · npm run test:idempotency · npm run test:cost) and reproduces these tables on every run. The repo is private; I'm happy to do a live code walkthrough of the harnesses and the production gate logic they replicate.

각 하네스는 완전히 오프라인에서 도는 결정적 스크립트예요(npm run test:trust · npm run test:idempotency · npm run test:cost). 돌릴 때마다 같은 표가 나와요. 저장소는 private이지만, 하네스와 그것이 복제한 프로덕션 게이트 로직을 라이브 코드 워크스루로 보여드릴 수 있어요.

poiurity.com · iamlyg9667@gmail.com · github.com/Poiurity