---
name: 88-taliban
description: >
  88-Taliban 메타 검증 — 수학적 렌즈 113개로 임의 대상을 적대적 검증.
  Invoke when: 새 방법론/시스템/프로젝트/아키텍처를 88렌즈로 검증할 때,
  "88렌즈 돌려줘", "메타 검증해줘", "수학적 속성 분석해줘" 등.
  Enforces: 5-category 병렬 평가, ✓/✗/N/A 3-verdict, 본질적/우연적 분류,
  KG 기록, Lean 증명 연계.
---

# /88-taliban — 수학적 메타 검증: "이 대상은 어떤 수학적 성질을 갖는가?"

> **탈레반 9-lens는 APT 산출물을 검증하고, 88-Taliban은 대상 자체의 수학적 구조를 검증한다.**
> 레벨이 다르다. 9-lens = 품질 감사, 88-Taliban = 존재론적 X-ray.

---

## 입력

```
/88-taliban <대상_이름> [--depth quick|standard|deep] [--categories all|algebra|order|topology|probability|complexity]
```

- `대상_이름`: KG 노드 이름 또는 자유 텍스트 (방법론, 시스템, 프로젝트, 아키텍처 등)
- `--depth`: quick(핵심 30개), standard(전체 113개, 기본), deep(113개 + 교차 분석)
- `--categories`: 특정 카테고리만 실행 가능

---

## 실행 프로토콜

### Step 0: 대상 로드

```cypher
// KG에서 대상 로드 (있으면)
MATCH (target {name: $target_name})
RETURN target.name, labels(target), properties(target)
```

KG에 없으면 사용자 설명 기반으로 진행. 대상의 핵심 특성을 먼저 정리:
- 이 대상은 무엇인가? (시스템/방법론/알고리즘/아키텍처)
- 주요 연산(operation)은 무엇인가?
- 순서/계층 구조가 있는가?
- 확률/비결정적 요소가 있는가?
- 계산 복잡도 특성은?

### Step 1: 렌즈 로드

```cypher
// KG에서 전체 렌즈 로드
MATCH (p:TalibanProperty)
RETURN p.name AS lens, p.category AS category, p.description AS desc
ORDER BY p.category, p.name
```

5개 카테고리 (113개 렌즈):
| Category | Count | 핵심 질문 |
|----------|-------|-----------|
| **fundamental** | 33 | 대수/그래프 기본 성질 (결합, 교환, 폐쇄, 반사, ...) |
| **order** | 20 | 순서/격자 구조 (유계, 완비, 정렬, ...) |
| **function** | 20 | 함수/사상 성질 (단사, 전사, 연속, 함자, ...) |
| **probability** | 20 | 확률/통계 성질 (마르코프, 에르고딕, 엔트로피, ...) |
| **complexity** | 20 | 계산 복잡도 (결정가능, NP, 튜링완전, 비잔틴, ...) |

### Step 2: 5-Category 병렬 평가

**카테고리별 독립 에이전트 병렬 실행:**

```
Agent(model=haiku, run_in_background=true) × 5
- agent_fundamental: fundamental 33개 렌즈 평가
- agent_order: order 20개 렌즈 평가
- agent_function: function 20개 렌즈 평가
- agent_probability: probability 20개 렌즈 평가
- agent_complexity: complexity 20개 렌즈 평가
```

각 에이전트에게 전달할 프롬프트:

```
대상: {target_name}
대상 설명: {target_description}

아래 {category} 렌즈 각각에 대해 판정하라:
- holds (✓): 이 성질이 성립함. 근거를 1-2문장으로.
- notHolds (✗): 이 성질이 성립하지 않음. 반례 또는 이유를 1-2문장으로.
- notAppl (N/A): 이 성질이 대상에 해당하지 않음 (구조 자체가 없음).

렌즈 목록:
{lenses_in_category}

출력 형식 (JSON):
[
  {"lens": "렌즈이름", "verdict": "holds|notHolds|notAppl", "reason": "근거/반례"},
  ...
]

주의:
- 모호하면 notHolds로 판정 (보수적)
- N/A는 구조 자체가 없을 때만 (예: 확률 구조 없는 대상에 markovian은 N/A)
- 고무도장 금지: "아마 될 것 같다"는 notHolds
```

### Step 3: 결과 집계

```
총 113개 렌즈:
- ✓ (holds): N개
- ✗ (notHolds): M개  
- N/A (notAppl): K개
```

### Step 4: ✗ 분류 — 본질적 vs 우연적

**모든 ✗에 대해 분류:**

| 유형 | 정의 | 예시 | 조치 |
|------|------|------|------|
| **본질적 ✗** | 대상의 본질상 성립할 수 없음. 바꾸면 대상이 아님. | 비대칭 시스템에 symmetric ✗ | 수용. 바꾸면 안 됨. |
| **우연적 ✗** | 현재 설계/구현의 한계. 개선하면 ✓ 가능. | dense가 30% 미달 | 공략 대상. 개선 계획 수립. |

분류 기준:
```
IF "이 성질을 만족시키면 대상의 정체성이 바뀌는가?"
  → YES: 본질적 ✗
  → NO: 우연적 ✗ (공략 가능)
```

### Step 5: KG 기록

```cypher
// 판정 결과 노드 생성
MERGE (j:AbstractNode:LensJudgment {name: 'lens-judgment-' + $target + '-' + $date})
SET j.target = $target,
    j.totalHolds = $holds_count,
    j.totalNotHolds = $notHolds_count,
    j.totalNA = $na_count,
    j.essentialNotHolds = $essential_count,
    j.accidentalNotHolds = $accidental_count,
    j.status = CASE WHEN $accidental_count = 0 THEN 'CLEAN_PASS' ELSE 'HAS_ACCIDENTAL' END,
    j.sourceId = 'skill-88-taliban',
    j.sourcePath = '.claude/skills/88-taliban/SKILL.md',
    j.groundedAt = datetime(),
    j.createdAt = datetime()

// 대상과 연결
MATCH (target {name: $target_name})
MERGE (target)-[:HAS_JUDGMENT]->(j)
```

### Step 6: 보고서 출력

```markdown
## 88-Taliban 판정 결과: {target_name}

### 요약
| 판정 | 수 | 비율 |
|------|---|------|
| ✓ holds | N | X% |
| ✗ notHolds | M | Y% |
| N/A | K | Z% |

### 본질적 ✗ (바꾸면 안 됨)
- {lens}: {reason}
- ...

### 우연적 ✗ (공략 대상)
- {lens}: {reason} → {개선 방향}
- ...

### 카테고리별 분포
| Category | ✓ | ✗ | N/A |
|----------|---|---|-----|
| fundamental | | | |
| order | | | |
| function | | | |
| probability | | | |
| complexity | | | |
```

---

## --depth 옵션별 차이

### quick (핵심 30개)
fundamental에서 10 + order 5 + function 5 + probability 5 + complexity 5.
가장 판별력 높은 렌즈만 선별:
- fundamental: associative, closure, commutative, idempotent, reflexive, transitive, symmetric, connected, dense, finite
- order: antisymmetric, bounded, partial-order, total-order, well-founded
- function: bijective, continuous, homomorphic, injective, surjective
- probability: ergodic, markovian, entropy-reducing, probabilistic, stochastic
- complexity: computable, decidable, fault-tolerant, turing-complete, verifiable

### standard (전체 113개, 기본)
모든 렌즈 실행.

### deep (113개 + 교차 분석)
전체 실행 + 렌즈 간 상관관계 분석:
- 동시에 ✓인 렌즈 쌍 → 구조적 강점
- 동시에 ✗인 렌즈 쌍 → 공통 약점 근원
- ✓↔✗ 쌍 → 내부 긴장(tension) 식별

---

## 메타사이클 연계

88-Taliban을 같은 대상에 반복 적용하면 메타사이클:

```
1회차: 인상비평 (haiku 병렬) → 초기 판정
2회차: 분석기계 (형식 매핑) → 고무도장 제거, ✓ 감소
3회차: Lean 컴파일러 → 증명 가능한 것만 ✓, sorry = 미증명
4회차: 우연적 ✗ 공략 → 본질적/우연적 분류 후 우연적만 증명 시도
...
수렴: 우연적 ✗ = 0 → 고정점 도달 → CLEAN_PASS
```

각 회차는 이전 회차 결과를 KG에서 로드하여 비교.

---

## 기존 결과 조회

```cypher
// 특정 대상의 모든 판정 이력
MATCH (j:LensJudgment) WHERE j.target = $target
RETURN j.name, j.totalHolds, j.totalNotHolds, j.totalNA, j.status, j.createdAt
ORDER BY j.createdAt

// 수렴 추이 확인
MATCH (j:LensJudgment) WHERE j.target = $target
RETURN j.name, j.totalHolds AS holds, j.accidentalNotHolds AS accidental
ORDER BY j.createdAt
```

---

## What NOT To Do

| 금지 | 이유 | 대안 |
|------|------|------|
| 대상 설명 없이 실행 | 렌즈 적용 불가 | 최소 3문장 설명 필수 |
| ✗를 전부 "개선해야"로 처리 | 본질적 ✗를 바꾸면 대상 파괴 | 반드시 본질/우연 분류 |
| 1회차에서 CLEAN_PASS 선언 | 고무도장 가능성 | 최소 2회차 교차 검증 권장 |
| N/A 남발 | 회피 = 검증 약화 | N/A는 구조 부재 시에만 |
| 순차 실행 | 느림 | 5-category 병렬 필수 |

---

*88-Taliban은 대상의 수학적 DNA를 읽는다. ✓는 강점, ✗는 정체성, N/A는 범위.*
