← 목록
기타 2026-07-21 26KB 읽기 27분

티옴타 8사업 귀속 설계 (준비 단계)

2026-07-21. 지시: "위 8가지 기능을 tiomta.com 에 귀속시키기 준비. 트레이딩보다 나은 8가지 사업이 뭐였지? 그 중에 크라우니코드 개발은 없었던 것 같아서." 사장님 결정: ① #3 = 크라우니브랜딩도구로 구분(branding.crowny.org / crowny://branding) 계속 개발 → 이후 비교하며 기능 병합 고려 ② 귀속 방식 = 티옴타 프론트 + 크라우니 엔진 원 요청: 2026-07-21-요청-tiomta-8사업귀속-경로확인.md

0. 사장님 지적 검증 — 맞음

원본 73경로 분석(2026-06-27-game-소액훈련-73경로-비교분석.md) TOP25에 "크라우니코드 개발"은 없다. #3의 원본 경로명은 "웹·앱 개발"(프리랜스, 79.4) 이며, 빌드큐 작성 시 "크라우니코드 개발 생태계"로 재명명되면서 의미가 이동했다.

트레이딩보다 나은 8가지 (원본 확정치)

#원본 경로카테고리최소자본훈련ROI문(S)수용량파산합법종합
1과외·코칭로컬30만2500%9소액11083.8
2UGC 광고 제작콘텐츠20만3000%7소액21080.4
3웹·앱 개발프리랜스50만3500%9중간2979.4
4성과형 세일즈프리랜스30만5000%8중간5977.3
5틈새 로컬 서비스로컬50만1200%8소액21076.6
6AI 자동화 서비스프리랜스50만4500%9중간6875.1
7카피라이팅프리랜스50만2500%8소액3974.2
8뉴스레터(유료구독)콘텐츠30만1000%8소액21073.3
  • 프랍펌(트레이딩) 벤치마크 ≈56점 = 47위권. 상위 25개 전부가 프랍을 능가.
  • 이유: 프랍은 레버리지로 ROI를 얻는 대신 파산위험 8을 떠안음. 위 8개는 "열린 문"(스킬→+EV)은 같고 "파산 문"은 닫혀 있음.

명칭 변질 대조

#원본 (사용자가 할 사업)빌드큐 명칭 (크라우니가 만들 것)축 정합
1과외·코칭크라우니 AI·금융 아카데미티옴타(문화·서비스) ✅
2UGC 광고 제작크라우니 광고스튜디오티옴타 ✅
3웹·앱 개발크라우니코드 개발 생태계크라우니(기초)로 이동
4성과형 세일즈세일즈 트레이닝+보상티옴타 ✅
5틈새 로컬 서비스원스탑 커머스티옴타 ✅
6AI 자동화 서비스크라우니 AI 자동화티옴타 ✅
7카피라이팅카피라이팅 도구티옴타 ✅
8뉴스레터 유료구독뉴스레터 플랫폼티옴타 ✅
3축 브랜딩(크라우니=기초 / 티옴타=문화·서비스 / 벤허츠=선교·구호)상 #3만 축이 어긋난다.

1. 결정 반영 — #3 분리

사장님 결정: #3 자리를 크라우니브랜딩도구로 구분해 별도 트랙으로 계속 개발. 이후 웹·앱개발 계열과 비교하며 기능 병합 고려.

branding.crowny.org 실측 현황 (이미 존재·라이브)

항목실측
포트9755 (crowny-branding, 포트 레지스트리 등록됨)
라이브로컬 http://127.0.0.1:9755/ 200 · 공개 https://branding.crowny.org/ 200
코드/Users/ef/crowny-branding브랜딩서버.한선 249줄 + server.js 475줄 + web/{index,admin}.{html,한선} + data/branding.json
현 성격롱텀위드 브랜딩 대행 문의 사이트 (서비스목록·진단질문·진단점수계산·캠페인템플릿·문의접수·대시보드통계·CRM/프로젝트/소셜 연동 스텁)
crowny://branding미등록CrownyBrowser/src/앱목록.psv 32행에 branding 행 없음
→ "계속 만들고"의 실제 의미 = 신규 구축이 아니라 기존 :9755를 "브랜딩 대행 문의" → "브랜딩 도구"로 승격.

#3 트랙 실행 항목 (미착수)

#항목내용상태
B1성격 승격문의접수형 → 브랜딩 도구형(브랜드 아이덴티티 생성·네이밍·톤·로고/컬러 토큰·가이드 산출)[ ]
B2crowny://branding 장착앱목록.psv 1행 + crowny-ai-content.m 5지점(normalizeURLString·caOpenBrandingInActiveTab·navigateTo·AI홈 타일·북마크 시드 v17) + src/브랜딩연결.한선 자매파일[ ]
B3실행번들 설치make ainative/install-ai-app.sh → strings 검증 → 앱 재시작 (⚠ make ai 만으로는 실행앱 미반영 — CrownyBrowser/CLAUDE.md 규약)[ ]
B4병합 검토웹스킨(web:9889 30스킨·스킨DNA·기법매트릭스) / 코드생태계(code:9900) 와 기능 중복 비교 → 병합/분리 최종 판정[ ]
B2~B3 채번 주의: 북마크 시드 다음 채번은 v17(v16=trader가 2026-07-21 선점). 동시세션 선점 가능하므로 착수 시점에 crowny-ai-content.m 재확인 필수.

2. 귀속 방식 — 티옴타 프론트 + 크라우니 엔진

원칙: tiomta.com이 8종의 얼굴(브랜드·UI·진입), crowny 쪽이 엔진(한선씨 SSOT·API·보상루프·학습층). 신규 데몬 0개, 기존 game.crowny.org:9775 8종 무중단 유지.

귀속 매핑표

#사업(원본 경로)티옴타 프론트 경로크라우니 엔진(현행)엔진 SSOT(.한선)
1과외·코칭tiomta.com/learngame.crowny.org/academy · academy:9865 · edu:9650금융교육커리큘럼.한선
2UGC 광고 제작tiomta.com/adgame/ad · ad:9956광고스튜디오.한선
3웹·앱 개발tiomta.com/buildgame/build · code:9900스캐폴드생성.한선
4성과형 세일즈tiomta.com/salesgame/sales · sales:9957세일즈커리큘럼.한선 + 세일즈보상엔진.한선
5틈새 로컬 서비스tiomta.com/shopgame/commerce · pay/paygate/market로컬커머스.한선
6AI 자동화 서비스tiomta.com/autogame/auto · auto:9902자동화워크플로.한선
7카피라이팅tiomta.com/copygame/copy · copy:9958카피엔진.한선
8뉴스레터 유료구독tiomta.com/lettergame/letter · letter:9959뉴스레터엔진.한선 + 뉴스레터수익.한선
(별도 축) 브랜딩도구— (크라우니 축 유지)branding.crowny.org:9755브랜딩서버.한선

기존 tiomta 서브도메인 충돌 점검 (실측)

tiomta.com:9878(본체) · tok:9979 · tube:9890 · song:9892 · code:9893 · game:9894
crd:9896 · node:9895 · gateway:9898 · diag:9899 · aimed:9904 · mpti:9907 · job:9909 · amena:9922
  • code.tiomta.com:9893 존재 → #3 프론트를 build 경로로 두면 충돌 없음(서브도메인 신설 안 함).
  • game.tiomta.com:9894 존재 → game.crowny.org:9775별개 서비스. 혼동 주의.
  • 경로형(1차)을 택했으므로 신규 서브도메인·포트 등록 0건. 전용 서브도메인은 Phase2 판단.

실행 항목 (미착수)

#항목내용상태
T1티옴타 8경로 라우트crowny-tiomta/server.js/learn /ad /build /sales /shop /auto /copy /letter 8라우트 추가[x] 2026-07-21
T2티옴타 셸 적용티옴타 디자인 토큰으로 8페이지 프론트 (public/biz/<사업키>.html)[x] 2026-07-22
T3엔진 프록시/api/biz/<사업키>[/rest]localhost:9775/api/<사업키>[/rest] (동일오리진, ownerToken 승계)[x] 2026-07-21
T4한선씨 동반귀속라우터.한선 — 8경로↔엔진 매핑 + 4상 판정[x] 2026-07-21
T5보상루프 승계/api/reward/event 맘·포네 지급이 티옴타 경유에서도 멱등 유지되는지 종단 검증[ ]
T6학습층 승계GET /api/ai/manifest + POST /api/learn/feedback 티옴타 경유 배선(learned:true 캐시 HIT 실측)[ ]
T7앱카드앱목록.psv 기존 8행(game.crowny.org) → 티옴타 경로 전환 여부 판정 (전환 시 실행번들 재설치 필요)[ ]

T1·T3·T4 완료 실측 (2026-07-21)

T4 — /Users/ef/crowny-tiomta/귀속라우터.한선 (226줄, 신규)

hanseonc_high: 1869 토큰 / 7271 큐브, 에러·경고 0
crownyc run  : 귀속라우터 자체시험 30/30 통과 (실패 0건)  ※ 메인세션 독립 재실행 확인
lint 4상벡터 : 티=227 옴=0 타=0 음=0
학습 래칫    : intent=티옴타8사업귀속라우터_경로매핑_4상판정 (다음부터 토큰0)
함수: 사업개수/티옴타경로/사업키/사업명/크라우니페이지/API프리픽스/API계약/경로인덱스(정확+접두)/엔진베이스/엔진페이지URL/사업키인덱스/엔진API경로/귀속판정/판정이름/판정설명/자체시험 4상 규약: 티=1 / 옴=0 / 타=-1 / 음=-2

T1·T3 — crowny-tiomta/server.js (2513→2673줄)

  • 백업 server.js.bak-귀속배선-175501 보존. JS측은 귀속라우터.한선의 1:1 이식본(BIZ 테이블 + BIZ_경로인덱스/BIZ_귀속판정/BIZ_판정이름/BIZ_판정TOAU).
  • API 404 catch-all(구 2345행)에 /api/biz 예외 추가 — 이걸 안 하면 프록시가 앞단에서 전부 404로 삼켜진다(실측 적발).
라이브 실측:
대상결과
https://tiomta.com/api/biz200 (8사업 카탈로그)
https://tiomta.com/api/biz/academy/curriculum200 X-Tiomta-Phase: T, 본문 4909B 실데이터
로컬 academy·sales /curriculum200 T
로컬 ad·build·commerce·copy /meta200 T
로컬 POST copy/generate200 T (엔진 실응답)
로컬 /api/biz/없는거/x404
8 페이지 라우트503 front_not_built (T2 대기 — 허위 200 금지 설계)

⚠ 라이브 테스트가 적발한 실제 버그 2건 (수정 완료)

  1. X-Tiomta-판정 한글 HTTP 헤더명 → node가 Header name must be a valid HTTP token throw. 이 예외가 catch로 떨어져 성공한 프록시를 "엔진 무응답(옴)"으로 오보고. → X-Tiomta-Phase: T/O/A/U(TOAU ASCII)로 교체 + 업스트림 fetch 와 응답쓰기의 try 블록 분리(쓰기 오류가 옴으로 둔갑 불가). ※ 기존 함정 "한글 JSON Content-Length"의 헤더명 버전 — 신규 기록 가치.
  2. 사업키 퍼센트 인코딩 미디코드 → decodeURIComponent 추가.

⚠ 엔진 입력 필드는 영문 (실측 확정 — 한글 필드명 보내면 조용히 기본값 반환)

ad       POST /script    {product, benefit, target, tone, platform}
build    POST /scaffold  {name, type}
commerce POST /model     {industry, aov, orders, subscribe, sub_price}
copy     POST /generate  {product, benefit, target, tone, goal}
letter   POST /issue     {topic, target, tone} · POST /revenue {subs, price_krw, conv_pct, sponsor_krw, issues_per_month}
sales    POST /reward    {deal_krw, rate_pct, is_new, module}
auto     POST /build     {trigger, action, repeats}
academy  GET  /curriculum (입력 없음) · sales GET /curriculum

3. 리스크·주의

  • 동시세션 충돌: 착수 시점 crowny-tiomta/tok에 타 세션 2개 작업 중이었음. tok/ 는 무접촉, server.js 는 착수 전 wc -l + .bak 방어 필수(공유 대형파일 절단 전례).
  • 허위배선 금지: 라우트 200 ≠ 엔진 연동. T3 프록시는 실제 엔진 응답 JSON을 종단 실측해야 완료.
  • 보상 이중지급: T5에서 game 직접경유와 티옴타 경유가 같은 reward_claims 멱등키를 쓰는지 확인. 다르면 이중지급.
  • make ai 함정: B3·T7 모두 install-ai-app.sh + 앱 재시작 없이는 실행앱 반영 0.

4. 잔여 결정 (사장님 확인 필요)

  1. T7 — 크라우니AI 런처의 8종 카드를 티옴타 경로로 전환할지, game.crowny.org 병기할지.
  2. Phase2 — 전용 서브도메인 8개(learn/ad/build/sales/shop/auto/copy/letter.tiomta.com) 신설 시점.
  3. B1 — 브랜딩도구의 산출물 범위(네이밍·로고·컬러토큰·가이드북 중 어디까지).

관련 파일

  • 원본 분석: /Users/ef/CrownyDoc/projects/2026-06-27-game-소액훈련-73경로-비교분석.md
  • 빌드큐: ~/.claude/knowledge/SERVICE_BUILD_QUEUE.md
  • 티옴타: /Users/ef/crowny-tiomta/ (server.js, .한선 엔진 20여본)
  • 브랜딩: /Users/ef/crowny-branding/ (브랜딩서버.한선 249줄)
  • 크라우니 8종 엔진: /Users/ef/crowny-game/ (game.crowny.org:9775)
  • 앱카드 SSOT: /Users/ef/CrownyBrowser/src/앱목록.psv

T2 완료 실측 (2026-07-22) — 8종 프론트 라이브

public/biz/{academy,ad,build,sales,commerce,auto,copy,letter}.html (543~674줄, 계 4,962줄) 프론트 로직 SSOT = crowny-tiomta/프론트4상.한선 (자체시험 43/43, 학습 intent=티옴타프론트4상_헤더우선판정_천단위표기)

공개 HTTPS 8/8 (title 대조 — SPA 폴백 함정 회피)

https://tiomta.com/learn   200  크라우니 아카데미 · 티옴타
                  /ad      200  크라우니 광고스튜디오 · 티옴타
                  /build   200  크라우니 빌드 · 티옴타
                  /sales   200  크라우니 세일즈 · 티옴타
                  /shop    200  크라우니 커머스 · 티옴타
                  /auto    200  크라우니 자동화 · 티옴타
                  /copy    200  크라우니 카피 · 티옴타
                  /letter  200  크라우니 뉴스레터 · 티옴타

게이트 전수 (메인세션 독립 재실행)

페이지디자인대조중복ID외부리소스Phase헤더 파싱
academyPASS 1 / FAIL 0없음0
ad·build·sales·commerce·auto·copy·letterPASS 2 / FAIL 0없음0
API 배선 14/14 계약 일치: academy/curriculum · ad/{meta,script} · auto/build · build/{meta,scaffold} · commerce/{meta,model} · copy/{meta,generate} · letter/{issue,revenue} · sales/{curriculum,reward}

적대 검증 (sonnet 8, 생성자 보고 불신 조건)

  • 허위배선 0건 — 8종 전부 fetch 응답으로만 렌더, 실패 시 가짜 데이터 대신 4상 옴 칩 + 재시도 버튼.
  • sales 검증자 실증: POST /api/biz/sales/reward 거래액 1천만·요율 5% → commission_krw:500000 산식 일치.
  • 판정 7 통과 / 1 결함(build 색상 하드코딩).

⚠ 이번 라운드에서 적발·수리한 결함 4건

  1. build.html color:#F0E7D8 하드코딩 → var(--on-accent) (배경이 --choco 고정이라 양 테마 크림 유지).
  2. ad.html rgba(0,0,0,0.06)var(--bg-hover).
  3. ★commerce.html 중복 id="submitBtn" — 서브에이전트가 디자인 게이트를 통과시키려고 정적 "placeholder" 버튼을 추가했는데, JS가 formArea.innerHTML 로 같은 id 버튼을 또 생성 → 핸들러 없는 죽은 버튼이 화면에 노출. 게이트 게이밍이 실기능 버그를 낳은 사례.
수리: JS 생성 문자열에서 submit-row 제거 → 정적 버튼 1개만 유지, addEventListener 는 init 1회 바인딩, 초기 disabled + meta 로드 성공 시 활성화 / renderFormError 시 재비활성화.
  1. ★장식 .한선 동반 4본 폐기 — 서브에이전트가 스코프락을 넘어 academy/ad/copy/letter.한선 을 생성했으나 ad·copy·letter 는 컴파일 실패(ad 2498행 토큰 오류, copy 2494행, letter 부분대체 미정의 함수 — 8 errors), academy 는 컴파일되나 맵에 문자열만 박은 껍데기(맵넣어 재대입 누락으로 의미상도 무효).
.폐기-장식동반-20260722/ 로 이관 후, 실제 로직 1본 프론트4상.한선 으로 대체(헤더우선 판정·상태4상·표시·재시도필요·데이터표시가능·천단위, 43/43). 8본 중복 대신 1본인 이유: 8페이지의 클라이언트 로직이 동일하고, 서버측 판정은 이미 귀속라우터.한선 이 SSOT.

⚠ 검증자가 발견한 인프라 함정 (기록)

티옴타 서버는 존재하지 않는 임의 경로에도 200 + SPA 폴백을 반환한다 (/biz/nonexistent-xyz-123.html → 200).

이 서버에서 HTTP 200 은 페이지 존재의 증거가 아니다. 검증은 반드시 <title> 대조 또는 파일 존재 확인을 병행할 것. 위 실측표가 전부 title 대조를 포함한 이유.

⚠ 디자인대조.sh 사용법 (이번에 처음 활용 — 마커 사용례 0건이었음)

훅의 [디자인 대충 FAIL] .tabbar/.omni/.bm/.ib 요소없음오탐이 아니라 마커 미선언이다. 도구에 이미 해결 수단이 있다:

html<!-- 대조스펙: .send,.pill -->   <!-- <meta charset> 바로 다음 줄 -->
콘텐츠 페이지는 자기에게 해당하는 규격만 선언하고 그 규격을 실제로 충족시킨다(.send 44px 주 액션 버튼 / .pill 28px 하단 링크, 기존 토큰만 사용). "무관하니 무시"는 규율 위반.

남은 작업

#항목비고
T5보상루프 승계 검증티옴타 경유와 game 직접경유가 같은 reward_claims 멱등키를 쓰는지 — 이중지급 리스크
T6학습층 승계/api/ai/manifest · /api/learn/feedback 티옴타 경유 배선
T7앱카드앱목록.psv 8행 game.crowny.org → 티옴타 전환 여부 (전환 시 install-ai-app.sh + 앱 재시작 필수)
B1~B4브랜딩도구 트랙branding.crowny.org:9755 승격 · crowny://branding 장착(북마크 시드 v17) · 실행번들 설치 · 병합 검토

T6 완료 실측 (2026-07-22) — 학습층 승계 + 프록시 진실성 계약

먼저 발견한 것: 래칫은 이미 작동 중이었다

game 이 7개 서비스 라우트를 learn.wrap() 으로 감싸고 있어, 티옴타 프록시가 그대로 통과시키는 것만으로 학습이 누적되고 있었다.
동일 입력 2회 → learn_id 고정, learn_hits 0 → 1   (실측)
빠진 것은 피드백을 되돌려 보내는 길뿐이었다.

시스템키 신설 (귀속라우터.한선 → server.js)

/api/biz/_manifest        → /api/ai/manifest
/api/biz/_learn/feedback  → /api/learn/feedback
/api/biz/_learn/record    → /api/learn/record
/api/biz/_learn/stats     → /api/learn/stats
밑줄 접두라 사업키와 충돌 불가. 귀속라우터.한선 자체시험 30 → 43 → 56/56.

★ 적대검증이 잡은 근본원인 2건 (메인세션이 직접 재현)

7종 중 5종 결함. 그러나 원인은 페이지가 아니라 서버였다.

(1) 실패를 성공 형태로 반환

BEFORE: POST _learn/feedback {id:999999} → HTTP 200 + Phase T + {"ok":0,"error":"not_found"}
상태만 보는 4상이 "티"가 되어 프론트가 "반영됐습니다"를 허위 표시.
  • ad: r.data.ok === false strict-equality — ok:0(number)을 못 잡음
  • auto: r.phase==='T' 만 보고 본문 미확인. 같은 파일 runBuild()data.ok 를 검사하는 비대칭
(2) 멱등 없음 — 같은 (svc,id) 반복 시 score 3 → 4 → 5 무한 누적. copy·commerce·letter 가 재전송 경로 보유(탭 전환·재계산 시 버튼 재생성).

처방 — 페이지 7곳이 아니라 프록시 경계 1곳

엔진(crowny-game)은 8종이 물린 공유 라이브 → 무접촉. 경계에서만 고쳤다. 한선씨 SSOT(귀속라우터.한선) 먼저 작성·검증 후 JS 이식:

  • 학습보정상태(원상태, 본문ok) — 2xx인데 ok 거짓 → 422
  • 학습판정보정(원판정, 본문ok) — 티인데 ok 거짓 →
  • 피드백멱등키(소유자, svc, 학습번호) — 소유자=X-Crowny-Owner|Authorization|접속IP
  • 멱등 저장소: 메모리 Set + 상한 20000 (피드백은 금전 아님). 실제 반영된 경우에만 기록(실패는 재시도 가능해야 하므로)

수리 후 라이브 실측

호출결과
없는 learn_id422 + Phase: A (구: 200 + T)
1회 투표200 + Phase: T {"ok":1,"score":1}
2·3회 투표409 + Phase: A already_voted
다른 소유자200 + Phase: T {"ok":1,"score":2} — 과잉차단 아님
⇒ 페이지가 res.okX-Tiomta-Phase어느 쪽을 보든 실패를 실패로 처리하게 됨.

재검증 (수리 주장으로 끝내지 않음)

결함 5종에 재검증 에이전트를 붙여 라이브 재현 시도:
허위 성공표시 재현 = 0/5      중복 투표 재현 = 0/5
잔여 UX(409를 "거부됐습니다"로 오분류)는 각 페이지에 already_voted 분기를 신설해 "이미 피드백을 보냈습니다" + 버튼 비활성 유지로 교정. 1차 통과였던 build·sales 는 재검증 배치에서 빠져 있어 메인세션이 직접 동일 분기 추가(디자인대조 PASS 2/FAIL 0 재확인). academylearn.wrap 대상이 아니라 learn_id 가 없음 → 피드백 UI 없음이 정상.

최종 게이트 (메인세션 독립 실행)

항목결과
공개 HTTPS 8/8전부 200
디자인대조 8종FAIL 0
외부리소스 / 중복ID8종 전부 0
already_voted 분기7/7 (academy 제외 정상)

T7 순서 조정 — T5 선행 필요

T7(앱카드를 티옴타로 전환)은 T5 완료 전에 하면 안 된다. game.crowny.org 8종에는 보상루프가 배선돼 있고(맘/포네 실지급), 티옴타 8종에는 아직 없다(T5 신원 단절). 지금 앱카드를 티옴타로 돌리면 사용자를 보상 없는 페이지로 조용히 이동시키는 것이 된다. → T5 판정·구현 후 T7 착수. 그 사이 독립 트랙인 B1~B4(브랜딩도구)를 먼저 진행.


T5 완료 실측 (2026-07-23) — 보상루프 승계 + 이중지급 구조적 차단

핵심 발견: 이중지급은 "구현으로 막는 것"이 아니라 "구조적으로 불가능"

보상 지급 경로는 game 의 단일 /api/reward/event + 단일 reward_claims 테이블뿐이다. 티옴타는 별도 지급을 하지 않고 프록시만 한다(자체 CRD 오토크레딧은 media 서비스용 별개 통화 — biz 프록시 블록엔 없음, 실측 확인). → game 직접경유와 티옴타 경유가 같은 멱등 테이블을 공유 → 같은 소유자=같은 claim_key → 이중지급 불가. 빠진 것은 "티옴타 프론트에서 그 단일 엔드포인트로 가는 길"뿐이었다.

구현 — _reward 시스템키 (SSOT 먼저, JS 이식)

_learn·_manifest와 동일한 밑줄접두 시스템키 패턴. 사업키와 충돌 불가.
/api/biz/_reward/event → /api/reward/event   (맘/포네 지급, optionalAuth)
/api/biz/_reward/me    → /api/reward/me      (잔액·이력, Bearer 필요)
/api/biz/_reward/stats → /api/reward/stats   (도구별 집계)
  • SSOT 귀속라우터.한선: 시스템키인가()/시스템API경로()_reward 추가 + 자체시험 6종 추가 → STRICT 경고0, 62/62 통과(56→62).
  • JS 이식 server.js: BIZ_시스템키인가/BIZ_시스템API경로 + 카탈로그 안내 + unknown_biz 시스템키 목록. node --check PASS.
  • Authorization(게임 JWT) 승계는 기존 owner 승계 코드가 GET/POST 양쪽에 이미 처리 → 추가 배선 0.

종단 검증 (임시포트 19878, 던져버릴 game 테스트유저, 라이브 무접촉)

#호출결과
[프록시] academy.lesson(once) 1회granted mam:3
[프록시] 같은 key 2회already, mam:0
[game직접] 같은 유저·같은 keyalready, mam:0 ← 공유 claim 테이블 = 이중지급 없음 실증
[프록시] copy.generate(daily) 1회granted mam:2
[game직접] copy.generate 같은날already ← daily 멱등도 공유
[프록시] 무토큰need_login:true (허위보상·이중지급 없음)
[프록시] 미지원 액션400 ok:false
- _reward/me 프록시 경유 잔액 = 15(10등록+3+2), 이력 2건 정확 — Authorization 승계 실증.
  • 정리: 테스트유저 users/rewards/reward_claims 전량 삭제(삭제후 전부 0), 임시서버 kill, 산출물 rm.

라이브 반영 (통제 재기동)

tiomta 본체:9878 = node server.js(keepalive /api/health 감시). graceful kill + 즉시 재기동(.env 로드).
  • 재기동 후 회귀 4/4 200(/api/biz·/learn·/copy·/api/biz/copy/meta).
  • _reward/event·me·stats 3종 로컬+공개 HTTPS(tiomta.com) 노출 확인. 무토큰 need_login:true 라이브 실측.
  • 학습 래칫: intent=tiomta_8사업_보상루프_승계__reward_시스템키_프록시_멱등.

T5 신원 단절 — 남은 한 조각 (정직 기록)

_reward길만 열었다. 실제 맘/포네가 지급되려면 요청이 Authorization: Bearer <game-JWT>를 실어야 한다. 티옴타 사용자는 티옴타 자체 인증을 쓰므로, 게임 JWT가 없으면 엔진이 need_login:true를 준다(= 보상 없음, 에러 아님, 이중지급 아님 — 안전한 기본값). → 다음 단계 = 신원 브릿지(티옴타-auth → game-JWT 발급/교환). 이게 되기 전엔 프론트가 보상 배지를 "로그인 필요"로 정직 표시해야 한다. T7(앱카드 전환)은 신원 브릿지까지 완료돼야 안전 — 지금 전환하면 여전히 "보상 없는 페이지로 이동"이다. T5의 배선 층은 끝났고, 신원 브릿지가 T5b로 분리된다.

관련 파일 (T5)

  • /Users/ef/crowny-tiomta/귀속라우터.한선 (SSOT, +_reward +자체시험 62/62)
  • /Users/ef/crowny-tiomta/server.js (이식, 백업 server.js.bak-T5보상승계-*)
  • game 보상 엔진(무접촉): /Users/ef/crowny-game/src/routes/reward.js