<!-- canonical: https://docs.axelabs.ai/services/index/skill-ownership -->
<!-- source: content/services/index/skill-ownership.mdx -->

---
title: Skill Ownership
description: index 산하 skill 의 canonical SoT + overlap 정책 + Phase 1 MCP discovery 진화 path. D-index-17 정합.
---

# Skill Ownership — index 산하 투자 도메인 skill

[D-index-17](/ops/decisions) 결정 정합. `ic` + `ingest` 의 ownership 을 Blueprint 에서 index 로 이전. Overlap 기간 양쪽 보유, index canonical.

## ⭐ 현재 구현 — D-index-47 (P0–P3, 2026-06-03 LIVE)

[D-index-17](/ops/decisions) 의 ownership *의도*를 [D-index-47](/ops/decisions) 가 **실구현·배포**했다. 아키텍처 = **index owns TRUTH** (SoT bytes·semver·schema-contract·append-only audit) · **Blueprint owns ROAD** (universal git→webhook→rsync 분배, 신규 transport 0) · **surface owns RUN** (Agent SDK 로컬 디스크 read).

- **P0 reconcile** (index `3b39a03`) — `index/skills/ingest` 가 Blueprint base 보다 뒤처져 있던("index=SoT" 가 `ingest` 에 대해 거짓) 역드리프트를 port 로 해소 → index 가 현행 SoT (`diff -qr` 동일). `ic` byte-identical · `pmc` index-only · `INDEX_OWNED.txt` manifest · 죽은 launchd 폐기.
- **P1 stamp + drift gate** (index `11aca12`, deployed) — propose event(`artifact_event.payload_after`)에 `_provenance`(skill·bundle_sha256·`frozen_enums_hash`·actor·surface) 스탬프 + propose 시 schema-drift hard gate(불일치 → `SCHEMA_CONTRACT_DRIFT`). `/index/schemas` envelope 가 `frozen_enums_hash` publish(외부 caller 가 contract discover+pin).
- **P2 attest + mirror mechanism** (index `6edf0ff`) — `index-skill-sync.py --attest`(deterministic dir-sha256 drift sentinel, advisory) + `index-skill-mirror.sh`(index→blueprint sanctioned PR-flow mirror = 아래 수동 cp -R 절차 대체). ⚠ 아래 "Phase 2 MCP-discovery" 의 MCP byte-delivery 는 **infeasible 판명**(`SKILLS_ROOT` host 경로·컨테이너 부재) → attest-only 로 재범위.
- **P3 vertical-gate** (blueprint PR #381 gate + #382 pmc, merged origin/main) — 8 투자 skill(ic·ingest·due-diligence·vc-deal-sourcing·investor-relations·portfolio-management·legal-compliance + pmc)에 `owner: index` frontmatter + blueprint boot(`start.sh`)/webhook(`route.ts`) 양 경로 gate(customer `services.index` 유무 → 비-index `rm -rf`+skip purge, index keep). **index customer(axe)만 투자 skill 수신**, 비-index(Truvia)는 universal 9개만. axe 3중 안전(services.index + `:-axe` 기본 + fail-safe keep + 운영자 sync ungated).

> **Sunset 재정의**: Blueprint mirror 는 "제거 대상"이 아니라 **분배 ROAD 로 정식 채택**(index→blueprint mirror + vertical-gate). 아래 design-era 절차/Phase-2 plan 은 이 구현으로 **superseded** — 실제 경로 = universal-base mirror + `--attest` sentinel + `owner:index` gate.

## 본질 — 왜 index 가 owner?

| Skill | 도메인 | index 가 owner 인 이유 |
|---|---|---|
| **ic** | 19-agent IC memo orchestration | 투자 도메인. 산출 = `index.ic_decision` + `index.financial_model` typed fact |
| **ingest** | dataroom pdf/pptx/xlsx → md clone | ic 의 직접 의존. 함께 가는 게 의존성 단순 |
| **pmc** (신규) | 분기 KPI / risk / NAV / postmortem | [D-index-12](/ops/decisions) — portfolio-management + investor-relations 흡수 |

향후 검토 (Phase 1 후속):
- `due-diligence` — DD 체크리스트 (투자 도메인)
- `vc-deal-sourcing` — pipeline 관리 (투자 도메인)

Blueprint 잔존:
- `ctx` / `humanizer` / `report-writing` / `vault-secret-capture` / `office-admin` / `code-review` / `browser-automation` / `md-to-pdf` / `blueprint-platform` — 일반 skill

## Overlap 정책 (2026-05-28 시점)

```
/Users/axe/index/skills/                     ← CANONICAL SoT ⭐
  ├── ic/
  │   ├── SKILL.md (45 KB, 25 rules)
  │   ├── scripts/  (gate_memo.sh + 26 Python scripts)
  │   ├── references/
  │   └── tests/fixtures/
  ├── ingest/
  │   ├── SKILL.md
  │   └── scripts/  (ingest.py + vision_ingest.py + sync.sh)
  └── README.md   (overlap 정책 + sync 책임)

/Users/axe/blueprint/.claude/skills/         ← MIRROR (overlap 기간)
  ├── ic/      (byte-identical)
  └── ingest/  (byte-identical)
```

**Sync 책임**:
1. **편집은 canonical 측** (`/Users/axe/index/skills/`) 에서만
2. Blueprint mirror 는 index 변경 후 byte-identical cp + sha256 검증
3. Blueprint hook (`skill-sot-guard.sh`) 가 main 직접 편집 차단 → drift 자동 방지

## Sync 절차 (overlap 기간 안내)

```bash
# 1. canonical 편집 + commit (index repo)
cd /Users/axe/index/skills/<name>
vim SKILL.md
cd /Users/axe/index && git add skills/<name> && git commit -m "feat(skill/<name>): ..."

# 2. Blueprint mirror sync
# Blueprint feature branch worktree 만들기 (hook 가 main 차단)
cd /Users/axe/blueprint
git fetch origin main
git worktree add .claude/worktrees/skill-sync-<date> -b claude/skill-sync-<date> origin/main

# 3. cp + sha256 검증
cd .claude/worktrees/skill-sync-<date>
cp -R /Users/axe/index/skills/<name>/* .claude/skills/<name>/
diff -qr /Users/axe/index/skills/<name> .claude/skills/<name>  # empty = identical
git add .claude/skills/<name>
git commit -m "sync(skill/<name>): mirror from index (D-index-17)"

# 4. PR + merge
```

Phase 2 진화 후 본 manual sync 절차는 자동화 (MCP discovery + 자동 fetch).

## Sunset 기준 (Phase 2 후 Blueprint mirror 제거)

다음 3 가지 모두 충족 시:

| 기준 | 검증 방법 |
|---|---|
| (a) 다음 3 deal 의 IC 실행이 `index/skills/ic/` 기반 정상 작동 | gate_memo.sh PASS + memo PDF 정상 + ctx review queue 정상 |
| (b) Blueprint Claude Agent SDK 가 index/skills/ mount/sync 자동화 확립 | docker-compose volume mount 또는 launchd cron sync |
| (c) `ic --push-to-index` mode 일반화 | [B-ic-push-mode-impl](/ops/backlog) PASS + 3 deal `propose_deal_closure` 성공 |

→ 충족 시 [B-index-skill-overlap-sunset](/ops/backlog) 으로 Blueprint mirror 완전 제거.

## Phase 2 진화 — MCP-based skill discovery  ⚠ SUPERSEDED (D-index-47)

> **⚠ 이 plan 은 [D-index-47](/ops/decisions) P2 에서 superseded.** MCP byte-delivery(`get_skill_resource` 로 SKILL.md/scripts fetch)는 **infeasible 판명**: `SKILLS_ROOT` 가 하드코딩 host 경로라 컨테이너에 부재 → 프로덕션에서 `SKILLS_ROOT_READ_FAILED`. 실제 채택 경로 = **universal-base git→webhook→rsync 분배(ROAD) + `index-skill-mirror.sh`(SoT push) + `--attest`(drift sentinel) + `owner:index` vertical-gate**. 아래는 역사적 기록.

본 결정 (D-index-17) 의 후속 진화 path (superseded). 별도 backlog 등재:

### `B-index-skill-mcp-discovery`

index MCP 에 신규 tool:

| Tool | 역할 |
|---|---|
| `list_skills(domain?)` | 전체 skill 카탈로그 (name + version + locked_at) |
| `get_skill_resource(name, version?)` | SKILL.md + scripts/* + references/* fetch (versioned) |
| `propose_skill_update(name, version, content_diff)` | atomic INSERT (git PR 대신 DB versioning) |

`/index/schemas` envelope 에 `index.skill_resource@1.0` 추가 — Blueprint `artifact_schema` 자동 mirror.

### `B-blueprint-skill-mcp-client`

Blueprint Claude Agent SDK 변경:
- session 시작 시 `list_skills()` 호출 → in-memory cache
- skill 사용 시 `get_skill_resource(name)` 동기 fetch
- filesystem `.claude/skills/` 의존 점진 제거

### `B-index-skill-versioning-schema`

```sql
CREATE TABLE shared.skill_resource (
  id              uuid PRIMARY KEY,
  name            text NOT NULL,       -- 'ic', 'ingest', 'pmc'
  version         int NOT NULL,        -- semver-like
  skill_md        text NOT NULL,       -- SKILL.md 본문
  scripts         jsonb NOT NULL,      -- { filename: content } map
  references_md   jsonb NOT NULL,      -- { filename: content }
  domain          text,                -- 'investment', 'platform', 'general'
  created_by      varchar(254),
  locked_at       timestamptz,         -- locked = immutable
  superseded_by   uuid,                -- next version FK
  UNIQUE (name, version)
);
```

Per-deal trace: `index.ic_decision.skill_version_used` field 추가 → "이 IC 메모는 ic skill v8.3 으로 작성" 영구 audit.

### 혁신적 capability — Cross-deal skill effectiveness analytics

```sql
-- "ic skill v8.3 사용한 deal 평균 IRR vs v8.0 사용한 deal"
SELECT
  ic.skill_version_used,
  AVG(fo.value) AS avg_loss_included_irr,
  COUNT(*) AS deal_count
FROM index.ic_decision ic
JOIN index.financial_output fo
  ON fo.model_id IN (SELECT id FROM index.financial_model WHERE deal_id = ic.deal_id)
  AND fo.output_code = 'irr_loss_included'
  AND fo.scenario_id IN (SELECT id FROM index.financial_scenario WHERE code = 'weighted')
WHERE ic.skill_version_used LIKE 'ic@%'
GROUP BY ic.skill_version_used;
```

→ ic skill 진화의 정량적 효과 측정 가능. 다른 vertical 서비스 (frame/hive) 가 못 하는 영역.

## 도메인 ownership 매트릭스 (전체)

| Skill | 현재 위치 | Phase 1 owner | 비고 |
|---|---|---|---|
| `ic` | **index** ⭐ | index (D-index-17) | 도메인 정확 일치 |
| `ingest` | **index** ⭐ | index (D-index-17) | ic 의 직접 의존 |
| `due-diligence` | Blueprint | index 검토 | Phase 1 후속 결정 |
| `vc-deal-sourcing` | Blueprint | index 검토 | Phase 1 후속 결정 |
| `portfolio-management` | Blueprint (deprecate 중) | pmc 흡수 | [D-index-12](/ops/decisions) |
| `investor-relations` | Blueprint (deprecate 중) | pmc 흡수 | [D-index-12](/ops/decisions) |
| `pmc` (신규) | (미생성) | index | Phase 1 [B-pmc-skill-skeleton](/ops/backlog) |
| `ctx` | Blueprint | Blueprint | cross-deal 공통 |
| `humanizer` | Blueprint | Blueprint | 일반 prose |
| `report-writing` | Blueprint | Blueprint | 일반 |
| `vault-secret-capture` | Blueprint | Blueprint | 보안 (운영자) |
| `office-admin` | Blueprint | Blueprint or hive | 잔존 |
| `legal-compliance` | Blueprint | Blueprint | 잔존 |
| `code-review` | Blueprint | Blueprint | 개발 |
| `blueprint-platform` | Blueprint | Blueprint | self-reference |
| `browser-automation` | Blueprint | Blueprint | 일반 |
| `md-to-pdf` | Blueprint | Blueprint | 일반 변환 |

## 5-axis 정합

| Axis | D-index-17 결정 결과 |
|---|---|
| **본질** | 도메인 alignment — ic skill 의 산출이 `index.ic_decision`/`index.financial_model` typed fact 라면 ic skill 본체도 index 산하가 자연 |
| **결과** | Phase 1 즉시 (1.5h) — 2 skill (ic + ingest) ownership 이전 완료. Phase 2 (3-5d) — MCP discovery 자동화 |
| **퀄리티** | Overlap (cp) 방식, symlink 아님 — Blueprint deploy / docker volume 과 충돌 없음. byte-identical sha256 검증 의무 |
| **안전** | Blueprint hook (`skill-sot-guard.sh`) 가 main 직접 편집 차단 = drift 자동 방지. Sunset 3 기준 명확 |
| **혁신** | Phase 2 의 versioning + per-deal skill_version_used → "skill 진화의 정량 효과" cross-deal analytics — frame/hive/cortex 가 못 하는 영역 |

## 관련 페이지

- [/services/index](/services/index) — 서비스 main
- [/services/index/skill-evolution](/services/index/skill-evolution) — 5 skill → service 진화 path
- [/services/index/skill-integration](/services/index/skill-integration) — 통합 architecture
- [/ops/decisions D-index-12](/ops/decisions) — pmc skill 흡수
- [/ops/decisions D-index-17](/ops/decisions) — 본 결정
- [/ops/backlog M7](/ops/backlog) — overlap sunset + MCP discovery 후속
