AMTI v0.7 — 세제계좌·시계열·다국어 라운드
2026-05-27 · amti.crowny.org:9813 권한 거부된 sub-agent 3개 → 메인 세션에서 직접 작성·검증.
개요
직전 세션 종료 후 재개. 사용자 요청 "AMTI 작업 계속"에 응답해 3개 라운드를 1세션에 직접 진행. (sub-agent들이 Write/Bash 권한 거부로 실패한 후 전환)
라운드 1 — 세제계좌 분리 (A)
ISA·연금저축·IRP·일반과세 4계좌 자동 배분 + 절세효과 산출.
libs/tax-account.js— 한국 세법 2026 메타 +allocateToTaxAccounts()routes/tax-account.js—/api/tax-account/{meta,calc}+/api/profile/:ref/tax-accountpublic/js/tax-account-card.js,public/css/tax-account.css— 4박스 카드libs/세제계좌.한선— 한선씨 동반 (학습DB 정본)docs/tax-account-integration.md— 결과 페이지 통합 가이드
라운드 2 — 인과 그리드 시계열 (B)
측정마다 27셀 큐브 스냅샷 누적 → 6서비스 한도 추이.
libs/causal-timeline.js—buildSnapshot,buildTimeline,computeServiceDeltas,findInflectionsroutes/causal-timeline.js— 4 라우트 (전체/서비스별/변곡점/health)public/causal-timeline.html+ js/css — SVG 라인차트 (외부 라이브러리 0)libs/인과시계열.한선— 한선씨 동반causal.htmlnav에 "📈 시계열 보기" 링크
라운드 3 — 3버전 다국어 확장 (C)
family/senior 페이지를 영어·일본어로.
public/i18n/{ko,en,ja}.json— family. + senior. 키 13개 추가 (전체 자연 번역)public/family.html— data-i18n 30개 부착 + 언어 셀렉터 (KO/EN/JA)public/senior.html— data-i18n 8개 부착 + 언어 셀렉터- i18n.js 임포트 + 페이지 로드 시 자동 적용
통합 후 상태
- routes 13개 (notify·stats·rewards·export·push·admin·causal·bridge·anchor·feedback·share·classroom·tax-account·causal-timeline)
- libs 17 JS + 17 한선씨
- 페이지 12개 (causal-timeline.html 추가)
- server.js 4줄 추가 (require 2 + dispatch 2)
잔여 후속
- versions.js 본격 다국어화 (캐릭터 16개·시나리오 영문/일문)
- family/senior 본문 더 깊은 i18n 부착 (질문지 본문, 결과 메시지 등)
- 결과 SVG 공유카드에 절세효과 한 줄 추가
- 통합 금융 OS 허브에 세제계좌·시계열 카드 마운트
발견된 이슈
- AMTI 메인 sub-agent들이 Write/Bash 권한을 받지 못함 → 향후 sub-agent 활용 시 직접 작업으로 전환하거나 권한 설정 확인 필요.
라운드 D (추가) — 통합 금융 OS 허브 마운트
/hub.html에 세제계좌·인과시계열 카드 추가.
public/js/hub.js: 병렬 fetch에/api/profile/:ref/tax-account,/api/causal-timeline/:ref2개 추가.renderTaxCard,renderCausalTimelineCard신규public/css/hub.css:.hub-tax-*,.hub-ct-*스타일 추가- 9개 API 모두 200, GALQ 37.5M → 4계좌 + 절세 138만원, trading 12.6M→24.8M (+96.6%)
라운드 E — ABTI × AMTI 통합 페르소나 시각화
8 텍스트 노트에서 4축 매트릭스 + 시너지 점수 + 통합 라벨로 확장.
libs/persona.js: 4축 매핑(16 페어),analyzePersona(), 시너지 점수 (0~100)routes/persona.js:/api/persona/:amti/:abti+/api/profile/:ref/personapublic/js/persona-card.js+public/css/persona.csslibs/페르소나.한선한선씨 동반hub.html에 마운트, ABTI 미연결 안내 카드
라운드 F — 결과 페이지에 페르소나·세제·시계열 카드 마운트
/에서 측정 직후 3개 카드 자동 표시.
public/index.html: persona.css, tax-account.css, persona-card.js, tax-account-card.js 임포트 + ct-mini 인라인 스타일public/js/app.js: renderReport 끝에#personaMount,#taxMount,#ctMount3개 div + 마운트 호출.renderCausalTimelineMini()인라인 함수
최종 상태 (v0.8)
- routes 15개 (notify·stats·rewards·export·push·admin·causal·bridge·anchor·feedback·share·classroom·tax-account·causal-timeline·persona)
- libs 18 JS + 20 한선씨
- 페이지 12개
- 학습DB +4 패턴 (세제계좌배분, 인과시계열, 허브세제카드, 페르소나시너지)
라운드 H — 본격 다국어화 (ko/en/ja)
family/senior 페이지를 영어·일본어로 실제 동작하도록 확장.
H-1: 16 돈 캐릭터 (libs/versions.js)
CHARACTERS_BY_LANG3개 언어 × 16 캐릭터 = 48 항목getCharacter(typeCode, lang)API +detectLang()(localStorage > navigator > ko)- 예:
🦊 모험 탐험가 / Adventurous Fox / ぼうけんキツネ - family.js 인라인 CHARACTERS 제거 →
V.getCharacter()사용
H-2: 가족 시나리오·편향 (family.js)
SCENARIO_TEXTS_BY_LANG(6 시나리오 × 4 옵션 × 3 언어 = 90 텍스트)BIAS_INFO_BY_LANG(4 편향 × 3 언어)- 가중치(stress/martingale/disposition)는 언어 무관 — 한 곳 정의
- Proxy로 기존
SCENARIOS,BIAS_INFO변수명 무변경 — 자동 lang 분기
H-3: 시니어 질문지·결과 (senior.js)
SENIOR_I18N사전: 범위선택지(liquidity/expense/mdd) + 시나리오 6개 + comfort 4개 + UI 라벨 + 에러 6개srT()헬퍼로 현재 언어 동적 선택- Proxy로
LIQUIDITY_RANGES/EXPENSE_RANGES/MDD_OPTIONS/SENIOR_SCENARIOS호환 - progressLabel은 함수 (step, total 인자) — 언어별 어순 다름
최종 상태 (v0.9)
- routes 15개, libs 19 JS + 21 한선씨, 페이지 12개
- 다국어: 5 i18n.json + 본격 사전 3개 영역 (캐릭터·시나리오·시니어)
- 학습DB +7 패턴 (이번 세션)
라운드 I — SVG 공유카드 다국어 (family/senior)
OG 1200×630 SVG 카드를 ko/en/ja 3개 언어로.
libs/share-card.js: SHARE_I18N 사전(senior 헤더/제목/라벨/CTA, family brand/title/CTA/footer, bands) + buildSeniorCard/buildFamilyCard에 lang 매개변수- family 캐릭터는 versions.js의 getCharacter(typeCode, lang) 사용
- routes/share.js:
?lang=query 받기, 잘못된 lang은 ko fallback. typeName도 en일 때는 typeInfo.en 사용 - share-widget.js: currentLang() 자동 추출 (AMTI_I18N.current > AMTI_VERSIONS.detectLang() > ko), ko 아닐 때만 query 첨부
최종 상태 (v1.0 후보)
- routes 15개, libs 19 JS + 21 한선씨, 페이지 12개
- 본격 다국어: i18n.json 5개 + versions.js CHARACTERS_BY_LANG + family/senior SCENARIOS + SVG 공유카드 모두 ko/en/ja
- 학습DB +8 패턴 (이번 세션)
- docs.crowny.org: 2026-05-27-amti-r1.md
v1.0 통합 e2e 회귀 (2026-05-27)
44/44 통과 — 안정성 보증 완료.
| 검증 영역 | 항목 수 | 결과 |
|---|---|---|
| 정적 페이지 | 12 | ✅ |
| API 엔드포인트 | 18 | ✅ |
| OG SVG (3버전 × 3언어) | 9 | ✅ |
| 다국어 JSON | 5 | ✅ |
| versions.js getCharacter | 3 언어 | ✅ |
최종 v1.0 구성
- routes: 15 (notify·stats·rewards·export·push·admin·causal·bridge·anchor·feedback·share·classroom·tax-account·causal-timeline·persona)
- libs JS: 18 / libs 한선씨: 18
- **public/*.html: 12 / public/js: 24 / public/css: 19
- 다국어: i18n.json 5개 (ko·en·ja·zh·es) + 본격 다국어 사전 4영역 (캐릭터·family 시나리오·senior 질문지·SVG 카드)
- 학습DB +12 패턴 (이번 세션, 누적)
v1.0 선언
AMTI는 1회성 검사도, 단순 추적기도 아닌 27셀 인과 그리드를 가진 정량 금융 OS로 완성.
AMTI 측정 1회 → [세제계좌 4박스] [페르소나 4축] [6서비스 한도] [절세효과]
→ 측정 누적 → 시계열 추이 → 변곡점 탐지
→ 6서비스 이벤트 역류 → AMTI FFS/γ 재조정
→ 블록체인 앵커 → 위변조 불가 인과 기록
다음 비전:
- v1.1: 6서비스 측 실제 수신 핸들러 배포 (현재 stub)
- v1.2: choose.html 완전 i18n + /persona.html 단독 페이지
- v1.3: 글로벌 OG 메타 다국어 + 본 SVG 카드 가족/일반인 가중치 미세 조정
라운드 K — AMTI 라이트 톤 통일 (crowny.org 표준)
다크 finance → crowny.org Claude.ai 라이트 톤으로 전면 전환.
public/css/style.css :root: 13개 다크 변수 → 라이트 매핑 (--bg #FAF9F7, --text #1A1A1A, --gold #C9A961 accent)libs/share-card.js: expert SVG 9개 다크 fill → 라이트 (#0E1117 → #FAF9F7, #161B27 → #F4F1ED, 텍스트 흰색 → 검정)public/push-setup.html: 인라인 다크 배경 → 라이트- 폰트: Inter → Söhne/Pretendard Variable
- 12 페이지 모두 라이트 자동 적용 (CSS 변수 기반 → 큰 코드 수정 없음)
라운드 L — Crowny 생태계 스위처 통합
4개 서비스(crowny.org, abti, amti, tiomta) 헤더에 동일 위젯.
public/index.html(amti): nav 끝에 🌐 globe 버튼 + 드롭다운 (3 자매 + 현재 AMTI 표시), 인라인 CSS + scriptpublic/index.html(abti): header-right에 동일 위젯, abti의 lang-selector 패턴 미러public/css/style.css(abti):.eco-switcher/.eco-current/.eco-dropdown스타일 추가 — abti 디자인 토큰(var(--surface), var(--accent)) 사용public/js/app.js(abti): 토글 + 외부 클릭 시 닫기 (lang-selector와 동시 닫힘)
v1.1 도달
이제 ABTI·AMTI는 같은 생태계로 보이고, 사용자가 한 서비스에서 다른 서비스로 즉시 점프 가능.
다음 후속: tiomta.com / crowny.org에도 동일 eco-switcher 부착 (이 라운드의 자연 확장).
라운드 M — 4개 서비스 eco-switcher 완전 통일
crowny.org(crowny-ai)와 tiomta.com에도 동일 위젯 부착.
/Users/ef/crowny-ai/public/index.html: topbar-right에 .tb-btn 형태로 ecoBtn + 드롭다운 (3 자매 + 현재 Crowny 표시). 디자인 토큰 var(--bg-dropdown), var(--accent) 사용/Users/ef/crowny-tiomta/public/index.html: header.top .right에 동일 위젯. var(--bg-card), var(--text3) 사용- 모두 인라인 style + script로 외부 의존 0
- 4 서비스 동시 가동 확인 (포트 9852/9811/9813/9878), eco 마커 모두 응답
- 어디서든 globe 아이콘 클릭 → 자매 서비스로 즉시 점프
- 현재 서비스는 드롭다운 하단에 accent 컬러로 강조
- 디자인 토큰 (라이트 톤, #FAF9F7 배경, #C9A961 accent) 통일
라운드 N+O+P+Q — Crowny ecosystem-switcher v1 (단일 라이브러리)
4 작업을 한 라이브러리에 묶어 진행 — 4 서비스(crowny/abti/amti/tiomta) 헤더 위젯을 DRY로.
N. 공유 라이브러리
- 원본:
/Users/ef/crowny-design-kit/ecosystem-switcher.{js,css}(356줄) - 각 서비스
public/js/ecosystem-switcher.js+public/css/ecosystem-switcher.css동일 파일 복사 - 동일성: 4 서비스 sha256 일치 (js
a0af7b2ff763, cssb949bd455c3c) - API:
CrownyEco.install('crowny'|'abti'|'amti'|'tiomta', { lang?, mount? }) - 부착:
data-eco-mount속성 우선 →#ecoMount→ header/nav 자동 탐지
O. 디자인 토큰 정렬
- 4 서비스
:root에 공유--eco-bg-card,--eco-border,--eco-text,--eco-text-dim,--eco-accent,--eco-hover변수 추가 - 각 서비스 기존 토큰(--gold/--accent 등)을 fallback으로 매핑 → 3중 안전 (--eco-X → --X → 하드코딩)
P. 모바일 반응형
@media (max-width: 480px): 드롭다운calc(100vw - 16px)풀너비- 항목 min-height 52px, padding 12px 14px (애플 HIG 44px 초과)
- 트리거 버튼 36px → 40px
Q. 다국어 (ko/en/ja)
I18N사전: 4 서비스 설명 + aria-label + 현재 접미사detectLang(): localStorage(amti-lang/abti-lang/...) → AMTI_I18N.current → navigator.language → 'ko'CrownyEco.setLang(lang)동적 전환
인라인 코드 정리
- crowny-ai: 인라인 30+줄 제거 →
<span data-eco-mount>+ script 3줄 - crowny-abti: 인라인 18+줄 제거 → 동일
- crowny-amti: 인라인 60+줄 (style+script+html) 제거 → 동일
- crowny-tiomta: 인라인 14+줄 제거 → 동일
- 총 4 × ~120줄 (~480줄 중복) → 1 × 356줄 (DRY)
검증
- 4 서비스 install 호출 모두 응답 (curl)
- 4 서비스 sha256 일치
- ko/en/ja 사전 3개 언어 자연 번역
- 480px 미디어쿼리 정상 적용
- AMTI 라이트 톤 회귀 OK
eco.crowny.org 도메인에서 CDN 호스팅 → 4 서비스가 외부 URL 단일 import.라운드 R+S+T — 단일 원본 CDN 체계 (크라우니에이전트 규칙 준수)
/Users/ef/crowny-design-kit/ = Crowny 생태계 디자인 시스템 단일 진실.
R. crowny-tokens.css (166 줄)
--c-*네임스페이스 — 충돌 회피 + 가독성- 라이트 기본 + 다크
[data-theme="dark"]+prefers-color-scheme: dark자동 감지 - 시맨틱 컬러 (success/warn/danger/info/purple) + 4상 컬러 (T/O/A/U) 티옴타 표준
- 모바일 (≤480px) + 모션 감소 (prefers-reduced-motion) 토큰
- fallback: 이전
--eco-*변수 →--c-*자동 매핑 - 동반: 토큰.한선 (80 줄)
S. crowny-design-sync.sh (144 줄)
- 모드: 기본 sync /
--check(dry-run) /--verify(sha256) /--target <svc>단일 - 4 서비스 (crowny-ai · crowny-abti · crowny-amti · crowny-tiomta) 파일 3개 자동 복사
- sha256 단축 (12자) 비교 + 변경 로그
.sync-log - 학습DB 자동 등록 (성공 시)
- 동반: 동기화.한선 (77 줄)
T. eco.crowny.org CDN 서버 (server.js 241 줄)
- 포트 9712 (gateway 등록 완료, gateway.yaml 자동 갱신)
- 화이트리스트 (3 파일만, server.js/etc 차단)
- ETag (sha256-12) + If-None-Match → 304 응답
- Cache-Control max-age=3600 + stale-while-revalidate=86400
- CORS
*+ OPTIONS preflight 204 - API:
/,/health,/manifest.json, 3 정적 파일 - 안내 페이지 (
/)에서 eco-switcher 위젯 자체 데모 - 동반: 서버.한선 (100 줄)
사용 시나리오 (운영 시)
html<link rel="stylesheet" href="https://eco.crowny.org/crowny-tokens.css">
<link rel="stylesheet" href="https://eco.crowny.org/ecosystem-switcher.css">
<script src="https://eco.crowny.org/ecosystem-switcher.js" defer></script>
<script>CrownyEco.install('amti');</script>
4 서비스 모두 동일 URL → 단일 원본 + 캐시 적중 시 304.크라우니에이전트 규칙 준수
- ✅ 새 코드 모두 .한선 동반 (토큰/동기화/서버)
- ✅ 패턴 조회 우선 (learn.sh search 후 작성)
- ✅ 학습DB 즉시 등록 (3 패턴: 토큰/sync/CDN-ETag)
- ✅ 포트 레지스트리 (crowny-ports.sh set eco 9712)
- ✅ 한선씨 키워드 번역 0건
최종 v1.2 구조
/Users/ef/crowny-design-kit/ ← SSOT
├── crowny-tokens.css (166줄) + 토큰.한선
├── ecosystem-switcher.js (209줄) + ecosystem-switcher.css (147줄)
├── crowny-design-sync.sh (144줄) + 동기화.한선
└── server.js (241줄) + 서버.한선
↓ sync.sh로 동기화
┌────────┬────────┬────────┬─────────┐
crowny-ai crowny-abti crowny-amti crowny-tiomta
:9852 :9811 :9813 :9878
↑ 또는 eco.crowny.org:9712 직접 import