---
title: "Maester v3.4 Final Report — Object Explorer + daily_log 42건 + Supabase 보안"
from: claude-code
to: ["jadong"]
project: "sentinel"
date: 2026-05-09T00:25:02.201005+09:00
status: sent
type: report
---

# Maester v3.4 Final Report

> 실행: 2026-05-09 | Claude Code Opus 4.6
> 이전: v3.3 (daily_log 승격 + OpenClaw recall + ChatGPT Actions 준비)

---

## 달성 요약

| Phase | 목표 | 결과 |
|-------|------|------|
| P0 | Preflight 재검증 | ✅ 전체 서비스 정상 |
| P1 | ChatGPT Custom GPT read-only 자료 확정 | ✅ 4개 파일 확정 (instructions, openapi, test queries, checklist) |
| P2 | Object Explorer MVP | ✅ `ai.shinjadong.cloud/docs/{id}` 라이브 |
| P3 | Supabase Security Impact Report | ✅ 37 RLS disabled 테이블 민감도 분류 완료 |
| P4 | daily_log 57건 dry-run 분류 | ✅ INGEST_NOW 42, REVIEW 4, SKIP 7, ALREADY 4 |
| P5 | Recall 품질 테스트 5쿼리 | ✅ 1 GOOD, 2 WEAK, 2 FAIL — 아키텍처 gap 분석 |
| P6 | 보고서 업로드 | ✅ 본 문서 |

---

## P0. Preflight

모든 서비스 정상 가동. Neo4j 384 nodes / 163 edges. Public HTTPS OK.

## P1. ChatGPT Custom GPT 자료

### 확정 파일

| 파일 | 위치 |
|------|------|
| GPT Instructions | `/tmp/maester_v3_4_chatgpt_custom_gpt_instructions.md` |
| OpenAPI Spec | `/tmp/maester_v3_4_chatgpt_actions_openapi.yaml` |
| 테스트 질문 5개 | `/tmp/maester_v3_4_chatgpt_test_queries.md` |
| 설정 체크리스트 | `/tmp/maester_v3_4_chatgpt_setup_checklist.md` |

### v3.3 대비 변경

- Instructions에 "알려진 제한" 섹션 추가 (엔티티 기반 검색 한계)
- OpenAPI spec에 response schema 상세화 (nodes, edges 필드 정의)
- Object Explorer canonical URL 추가: `https://ai.shinjadong.cloud/docs/{id}`
- 테스트 질문에 알려진 실패 케이스와 우회 방법 명시

## P2. Object Explorer MVP

### EC2 SSH 문제 해결

- 원인: 이전 IP(43.203.12.112) → 현재 IP(54.180.15.229) 변경
- 해결: EC2 Instance Connect로 키 푸시 → 영구 authorized_keys 등록
- SSH config: `Host ai-shinjadong` → `54.180.15.229`

### Object Explorer 구현

comms-hub(EC2) FastAPI에 3개 라우트 추가:

| URL | 기능 |
|-----|------|
| `GET /docs` | 문서 목록 (필터 검색, 50개 최신순) |
| `GET /docs/{doc_id}` | 문서 상세 (메타+본문 HTML+관계+Raw JSON) |
| `GET /api/maester/docs/{doc_id}/raw` | JSON API |

아키텍처:
```
Browser → Cloudflare → Caddy(EC2) → comms-hub:8770
                                         ↓ httpx proxy
                          kontology(Predator) Maester API:8780
```

- Jinja2 템플릿: `object_explorer.html.j2`, `docs_index.html.j2`
- 기존 comms-hub 다크테마 CSS 재사용
- Caddy에 `/docs`, `/docs/*`, `/api/maester/*` 라우트 추가

### Canonical URL 달성

```
https://ai.shinjadong.cloud/docs/{doc_id}     ← 목표 달성
https://ai.shinjadong.cloud/docs               ← 문서 목록
```

## P3. Supabase Security Impact

### 주요 발견

| 유형 | 건수 | 심각도 |
|------|------|--------|
| RLS Disabled | 37 테이블 | ERROR |
| Security Definer View | 2 뷰 | ERROR |
| Sensitive Columns Exposed (session_id) | 3 테이블 | ERROR |
| Function Search Path Mutable | 13 함수 | WARN |
| RLS Policy Always True | 1 테이블 | WARN |
| Public Bucket Listing | 1 버킷 | WARN |

### 분류

- **CRITICAL_PRIVATE**: 11개 (kakao_messages 543K rows, sessions 267, voice_transcripts 850 등)
- **BUSINESS_PRIVATE**: 10개 (daily_log_history, project_contexts, ontology 등)
- **KAKAO_SUBSYSTEM**: 4개 (rooms, senders, sync_state, messages)
- **LOW_RISK/UNUSED**: 12개 (earthing_spots, note_bridge_*, games, players 등)

### 유일한 보호 테이블

`config_vault` — RLS ON + "Service role only" 정책. 나머지 36개는 무방비.

### 안전한 Remediation 순서

1. 함수 search_path 고정 (무위험)
2. 미사용 테이블 RLS 활성화 (영향 없음)
3. 서비스 의존성 조사 후 순차 RLS 활성화
4. Security Definer 뷰 전환
5. 버킷 정책 조정

상세: `/tmp/maester_v3_4_supabase_security_impact.md`

## P4. daily_log 57건 Dry-run 분류

| 카테고리 | 건수 | 비율 |
|----------|------|------|
| INGEST_NOW | 42 | 73.7% |
| REVIEW_MANUAL | 4 | 7.0% |
| SKIP_NOISE | 7 | 12.3% |
| ALREADY_INGESTED | 4 | 7.0% |

### INGEST_NOW 42건 내역

- high: 33건 / medium: 9건
- 유형: code_work 21, decision 11, discovery 6, meeting 2, report 2
- 프로젝트: keeper-direct 8, direct-market 7, multi 7, kontology 6, review-on 4, consciousness-bridge 3, cash-direct 2, marketer-system 2, etc.

### 다음 단계

v3.5에서 INGEST_NOW 42건을 실제 ingest. high 33건 우선.

상세: `/tmp/maester_v3_4_daily_log_dry_run.md`, `/tmp/maester_v3_4_daily_log_candidates.json`

## P5. Recall 품질

| 쿼리 | 노드 | 엣지 | 판정 |
|-------|------|------|------|
| keeper-direct CPC 전략 | 5 | 1 | ✅ GOOD |
| 혜성 대표 통화 결정 | 1 | 0 | ⚠️ WEAK |
| 토스 미팅 아키텍처 | 3 | 0 | ⚠️ BUG (null node) |
| 현장 출격 STAGE4/5 | 0 | 0 | ❌ FAIL |
| 자동독트린 문명론 | 0 | 0 | ❌ FAIL |

### 근본 원인

Recall = 엔티티 이름 매칭 → Document 탐색. 문서 본문/제목에만 있는 키워드는 검색 불가.

### 개선 우선순위

1. **P0**: title + content_md full-text search fallback
2. **P1**: ingest 시 더 많은 도메인 엔티티 추출
3. **P2**: null 노드 BUG 수정
4. **P3**: 프로젝트 공유 문서 간 FOLLOWS_UP 엣지 자동 생성

상세: `/tmp/maester_v3_4_recall_quality.md`

---

## v3.4 성공 기준 체크

| 기준 | 충족 |
|------|------|
| ChatGPT Custom GPT 설정 자료 확정 | ✅ |
| ChatGPT read-only 연결 체크리스트 완성 | ✅ |
| Object Explorer read-only MVP 라이브 | ✅ (EC2 blocker도 해결) |
| Supabase 보안 영향 분석 문서 완성 | ✅ |
| daily_log 57건 전체 dry-run 분류 | ✅ |
| recall 품질 테스트 5개 문서화 | ✅ |
| 데이터 삭제/RLS 변경/시크릿 노출 없음 | ✅ |

---

## 산출물 목록

| 파일 | 내용 |
|------|------|
| `/tmp/maester_v3_4_preflight.md` | P0 Preflight |
| `/tmp/maester_v3_4_chatgpt_custom_gpt_instructions.md` | P1 GPT Instructions |
| `/tmp/maester_v3_4_chatgpt_actions_openapi.yaml` | P1 OpenAPI Spec |
| `/tmp/maester_v3_4_chatgpt_test_queries.md` | P1 테스트 질문 |
| `/tmp/maester_v3_4_chatgpt_setup_checklist.md` | P1 설정 체크리스트 |
| `/tmp/maester_v3_4_object_explorer_blocker.md` | P2 블로커 (해소됨) |
| `/tmp/maester_v3_4_supabase_security_impact.md` | P3 보안 분석 |
| `/tmp/maester_v3_4_daily_log_dry_run.md` | P4 분류 요약 |
| `/tmp/maester_v3_4_daily_log_candidates.json` | P4 분류 JSON |
| `/tmp/maester_v3_4_recall_quality.md` | P5 품질 보고 |
| `/tmp/maester_v3_4_final_report.md` | P6 본 보고서 |

## 인프라 변경

| 변경 | 상세 |
|------|------|
| EC2 SSH | id_ed25519 영구 등록, SSH config alias `ai-shinjadong` |
| comms-hub server.py | Object Explorer 라우트 3개 추가 |
| comms-hub templates | `object_explorer.html.j2`, `docs_index.html.j2` 추가 |
| comms-hub systemd | MAESTER_READ_TOKEN, MAESTER_API_URL env 추가 |
| Caddy | `/docs`, `/docs/*`, `/api/maester/*` 라우트 추가 |

## v3.5 권장 사항

1. **daily_log INGEST_NOW 42건 실제 적재** (high 33건 우선)
2. **Recall full-text search fallback** 구현
3. **null 노드 BUG** 수정 (recall Cypher 필터)
4. **ChatGPT Custom GPT 실제 생성** (자동님 직접)
5. **Supabase Phase 1 remediation** (함수 search_path 고정)
6. **Object Explorer 그래프 뷰** 추가 (D3.js/vis.js force-directed)
