# A축 11편 — ALTA 증적

- 대상: [`kyky2347/ALTA`](https://github.com/kyky2347/ALTA) · Apache-2.0
- 실행: 2026-09-21 (UTC) · macOS 26.6.2 / arm64 / M-series
- 격리: 작업 디렉터리 `/private/tmp/tut11`, PostgreSQL 9062 · Redis 9063 · OpenRouter 셰임 9064
- 운영 weltiq(5432)·돌고 있는 슬롯에는 손대지 않았다.

## 0. 관측값 (2026-09-21 `gh api`)

| | |
|---|---|
| 별 | 621 · 포크 77 · 열린 이슈 4 |
| 라이선스 | Apache-2.0 |
| 개설 | 2026-08-27 · 마지막 푸시 2026-09-13 |
| 클론 | 4.02초 · 92MB |

원본: `01-github.json`

## 1. 설치 (도커 없이)

README 는 OrbStack/Docker 를 요구한다. 이 기계에 도커가 없어 **로컬 PostgreSQL 16 +
Redis 8.6 을 ALTA 가 기대하는 주소·자격으로 직접 띄우는** 경로를 썼다.

| 단계 | 실측 | 파일 |
|---|---|---|
| `git clone --depth 1` | 4.02s / 92MB | — |
| `./alta env setup --dev` | 11.68s (Python 3.12.13 + 30패키지), **도커 검사에서 exit 1** | `10-env-setup.log` |
| `initdb` (9062) | 0.37s | — |
| `migrate upgrade` | 0.70s → revision `b20_0018` | `11-migrate.log` |
| `demo` | 0.66s | `13-demo.log` |
| `replay` | 0.42s (해시 동일) | `14-replay.log` |
| `soak` | 4.12s · PASS · 14사이클 | `15-soak.log` |
| `pnpm install --frozen-lockfile` | 3.84s / 484패키지 | `18-pnpm-install.log` |

디스크: `.alta` 1.5G · `node_modules` 238M · `vendor` 69M · 전체 1.9G.

## 2. 우회한 곳 (숨기지 않는다)

| 막힌 것 | 우회 | 잃은 것 |
|---|---|---|
| 도커 없음 → `./alta env up` 불가 | `.alta/services.env` 의 포트를 9062/9063 으로 바꾸고 같은 계정·비밀번호로 로컬 PG/Redis 기동 | 컨테이너 자원 한도(`mem_limit` 등)가 안 걸린다 |
| `./alta setup` 이 로컬에 없는 V8 아티팩트를 요구 | ALTA 가 자기 파이썬 의존성으로 이미 받아 둔 `openai-codex-cli-bin` 0.144.4 의 `codex`·`codex-code-mode-host` 를 `.alta/bin/` 에 복사 | **ALTA 가 고쳐 둔 하니스가 아니다** |
| 그 바이너리가 `[agents]`·`model_catalog_json` 을 거부 | 두 줄을 생성 설정에서 뺐다 (`19-alta-patches.diff`) | 세션당 동시 스레드 한도, 모델 카탈로그 |
| DeepSeek/xAI/Kimi 키 없음 | `ALTA_KIMI_BASE_URL` 을 로컬 셰임(9064)으로 돌려 OpenRouter 의 Moonshot Kimi 로 연결 | ALTA 기본 배역(DeepSeek·Grok·Kimi 혼합)이 전부 Kimi 계열이 된다 |

패치 3곳: `19-alta-patches.diff` · 셰임: `22-openrouter_shim.py`

## 3. 계약 검사 (실측)

| 묶음 | 결과 | 파일 |
|---|---|---|
| `./alta test` (Node) | 306 pass / 0 fail · 3.16s | `25-node-tests.log` |
| `node --test alta-dashboard/tests` | 44 pass / 0 fail · 0.12s | `24-dashboard-tests.log` |
| broker-python pytest | 84 passed · 12.02s | `23-broker-tests.log` |
| capital-python pytest | 38 passed · 7.41s | `26-capital-tests.log` |
| 리서치 파이썬 통합 묶음 | **안 돌림** — 자율 사이클과 같은 DB 를 쓴다 | — |

## 4. 자율 사이클 (Shadow, 실제 LLM 호출)

모델은 OpenRouter 경유 Moonshot Kimi. 프로바이더 슬롯은 ALTA 의 `kimi`. 원본: `35-cycle-summary.txt`

| 사이클 id | 모델 | 결과 | 정찰 성공 |
|---|---|---|---|
| live-…-165229 | kimi-k2.5 | FAILED `app_server_error` | 0/4 |
| live-…-165327 | kimi-k2.5 | FAILED `app_server_error` | 0/4 |
| live-…-165646 | kimi-k2.5 | FAILED `active_research_required` | 0/4 |
| live-…-170650 | kimi-k2-thinking | IDLE `no_opportunity_survived` | 2/4 |
| live-…-170937 | kimi-k2-thinking | IDLE `no_opportunity_survived` | 1/4 |
| live-…-171153 | + 유니버스 16 · effort high | FAILED | 0/4 |
| live-…-171452 | 〃 | IDLE `no_opportunity_survived` | 2/4 |
| live-…-171603 | 〃 | FAILED | 0/4 |
| live-…-172814 | 〃 | FAILED (중단 사이클 복구 재시도) | 0/4 |

**아홉 사이클 중 셋이 완주했고 셋 다 `expression=null`.** 성공한 정찰의 출력은 전부 `no_op` 이고
이유가 구조화돼 남는다 (`14-scout-verdicts.png` 의 원본 질의).

## 5. S7 — 중지 조건 발동

| 어디 | 무엇이 발동했나 | 파일 |
|---|---|---|
| ALTA Shadow | `quote_not_after_frozen_latency` · `quote_not_forward_of_intent` · `price_stale` · `guarded_limit_not_market` (4/4) | `65-alta-gates.json` |
| weltiq 슬롯 | `autostop reason=expired`, 보유분 청산 (`position_kept:false`), 누적 −0.5327405 | `84-container-stopped.json` |

## 6. S8 — 끊고 다시 붙이기

`opportunityd`(pid 93752) → `/api/v1/system/summary` 저장 → `kill -9` → 재기동 → 같은 조회.
**18개 카운터 전부 동일** (`36-summary-before.json` vs `37-summary-after.json`, `identical = True`).

## 7. weltiq 연결

| | |
|---|---|
| 규칙 문서 ①(수량 10) | doc_hash `c659c651b5d77453e01681d8de6aa7617d4473cfd88b4e4ddcb8a49e771c0619` (`72-rules-submit-cp0.json`) |
| 게이트 확인 | 중지 조건 누락 422 (`73-no-stop.json`) · 근거 누락 422 `thesis_required` (`74-no-thesis.json`) |
| 근거 | `POST /v1/ai/thesis` → ok (`75-thesis.json`, `79-thesis-cp1.json`) |
| 슬롯 ① | `ct_4d43efbf2315a06e` → **진입 거부** `entry_blocked/DENY` (API 키 경로의 주문 수량 상한 1) |
| 규칙 문서 ②(수량 1) | doc_hash `f182c5703f8d9851dd3eae93bbb17cff49da98a7ad1b6b03469b32257bc0c496` (`72-rules-submit-cp1.json`) |
| 슬롯 ② | `ct_99ae0aa0176405e8` · AAPL · us-equity · 1m · 자본 10,000 · 손실 한도 60 · 1시간 (`80-container-cp1.json`) |
| 체결 | buy 1 @ **339.043881**, 기대가 338.91 → **+3.95bp**, fee 0, `quote_source=alpaca-iex` · 보호 손절 333.7918750 동시 등록 |
| 청산 | sell 1 @ 338.5111405 (기한 자동정지) · 왕복 **−0.5327405 USD** |
| 두 슬롯 | 실험 뒤 **정지·삭제 완료** |

### ALTA Shadow 체결 모델 대조 (`60-fill_model_compare.py`)

같은 호가(bid 338.94 / ask 338.99)를 ALTA 코드에 직접 넣은 결과.

| 수량 | 체결가 | 수수료 | 슬리피지 |
|---:|---|---|---|
| 1 | 339.159495 | 0.033916 | **5.0000bp** |
| 10,000 | 339.159495 | 339.16 | **5.0000bp** |

당시 실제 매도호가 잔량 **80주** (`62-weltiq-quote-aapl.json`).

## 8. 비용

| | |
|---|---|
| OpenRouter 셰임 기록 | **138건 · $0.7362** (`22-openrouter_shim.py` 가 건별 기록) |
| 같은 키 총 사용량 변화 | 15.563311797 → 17.134029008 (**+1.5707**) — 같은 키로 다른 작업이 함께 돌아 이 글의 몫이 아니다 |
| 상한 | $2 |

시작 `20-openrouter-key-start.json` · 종료 `99-openrouter-key-end.json`

## 9. 그림

`shots/` 11장. ALTA 쪽 10장(콘솔 5 · 터미널 5 — 설치 2·사이클 1·정찰 1 포함), weltiq 쪽 1장.
콘솔 데이터 화면이 비어 있는 이유는 `RUNTIME RECOVERING` — 관리 서비스가 도커 경로를 지나가기 때문이고, 글에 그대로 적었다.

## 10. 정리

- weltiq 슬롯 2개 정지·삭제 완료. 운영 DB·다른 슬롯은 건드리지 않았다.
- ALTA 는 `/private/tmp/tut11` 안에만 있다. PostgreSQL(9062)·Redis(9063)·셰임(9064)·콘솔(9070)·서비스(9071) 전부 그 안에서 기동했고 작업 종료와 함께 내렸다.
- launchd 서비스(`./alta service install`)는 **설치하지 않았다.**
