Skip to Content

백로그 (실행 큐)

다음 세션이 들어오면 이 페이지부터 본다. known-gaps 는 “함정과 미해결 사실”, 본 페이지는 “다음 실행 항목”. roadmap 은 마일스톤 큰 그림 — 각 백로그 항목은 마일스톤 ID (M1~M5) 로 묶임. 이미 ship 된 ✅ 항목은 updates 의 Ship Log 로 promote (Phase 2 자동 = B-axe-ship-update-hook).

시간축 4 페이지 (D-docs-updates-1): 본 페이지 (현재) · roadmap (미래) · updates (과거) · known-gaps (사실).

Lifecycle: 🆕 신규 (분류 안 됨) → 📋 ready (다음 세션이 집어가도 됨) → 🔧 in-progress (작업 중) → ✅ done (1주 후 archive 또는 삭제) → ⏸️ blocked (외부 차단)

운영 ritual:

  1. 세션 시작: 본 페이지 + known-gaps 같이 확인. 작업 주제의 항목 있으면 🔧 로 옮기고 owner 자기 이름으로
  2. 세션 종료: 끝낸 항목 ✅ + 새 발견 🆕. ✅ 항목은 다음 정비 시 archive 표로 이동
  3. 항상: 항목 = 한 줄 행동. 1주 안 끝날 항목은 마일스톤 (M-) 으로 승격하거나 쪼개기

🔧 In-progress (작업 중)

ID항목마일스톤owner시작일비고
B-search-deploydocs.axelabs.ai UI 검색 (Pagefind) 라이브 배포 — 코드 머지 끝, axe ship docs 후 검색박스 동작 검증운영자2026-05-22D-docs-search-1, 본 항목 ✅ 후 known-gaps 의 “docs 사이트 UI 검색” 섹션 제거
B-axe-idp-1 🔧Blueprint = 플랫폼 OIDC Provider — 로그인 1회로 전 서비스 (D-axe-idp-1, 설계 SSOT /architecture/platform-identity). Phase 1 (모델 증명, 진행 중): Blueprint OIDC-OP(.well-known/openid-configuration·jwks.json·/oauth/authorize(getServerSession 재사용)·/token·/register·/revoke) + RS256 키(vault) + Prisma 모델(AuthCode·RefreshToken·Client) + axe login loopback PKCE + frame 만 Blueprint 신뢰(_is_blueprint_iss 분기 + auth_blueprint.py). Phase 2: hive·cortex·index·matrix trust 이전 + frame/cortex 프록시(D-ops-14/15) 통합·폐기. Phase 3: 인가 중앙화(ent 클레임 + fine scope) + 감사 UI + headless device-code + 키 회전. 비파괴 cutover: 서비스별 flag BLUEPRINT_ISSUER/BLUEPRINT_JWKS_URL unset = 현행 그대로(롤백 = env 제거).Claude Code ([email protected])2026-06-03보안 핵심 → 설계 우선. 최종 검증 = 운영자 브라우저 SSO 1회 필요(단독 e2e 불가). B-axe-cli-P0 후속.

📋 Ready (다음 세션이 집어갈 수 있음)

📋 항목은 의존성이 해소돼서 지금 시작해도 되는 것들. 마일스톤 ID 가 묶음을 보여줍니다.

ID항목마일스톤추정의존성 / 비고
B-bp-mcp-teams-admin-consentBlueprint Next.js app (2b222356-1c36-48e0-96a3-2c5e0ecbf937) 에 Microsoft Graph Chat.Read.All + ChatMessage.Read.All Application permission 추가 + tenant admin consent grant. 검증: get_teams_message(url=...) → 200 (현재 AADSTS65001 invalid_grant 502). 운영자 1회 작업. D-bp-mcp-teams-1/2/3 가 LIVE 됐으나 본 grant 부재로 tool 모두 사실상 unusable. B-bp-mcp-calendar-2 admin consent 와 동일 패턴 (known-gaps “Blueprint Azure App ID 혼동” 참조). 후속: docker restart blueprint-app-green 으로 MSAL .default 토큰 캐시 무효화 (D-bp-mcp-calendar-2 함정 #3).M10.2d2026-05-26 본 세션 발견 (soohun.kang 1:34 메시지로 smoke test → 두 chat 모두 AADSTS65001). 운영자(Global Admin = soohun.kang) 만 가능 — [email protected] 은 일반 사용자라 admin consent 권한 X (known-gaps D-bp-mcp-calendar-2 §“Global Admin = soohun.kang 단독”).
B-cortex-xlsx-import-run 🆕Cortex live 후 잔여 — Network_CRM.xlsx 660 행 enrichment 1회 마이그. 전제: operator 가 connect_google + sync_google_now 완료 (Google Contacts → person artifact). 절차: xlsx 를 macmini 로 복사 → cortex import-xlsx --path <xlsx> --owner <whoami email> (dry-run) → 매칭 통계 + private 카운트 확인 → 필요시 --private-cols HPE,메모,소개 조정 → --apply. owner_id 는 claude.ai 로그인한 Entra email (whoami 로 확인). 멱등 (subject+key 중복 skip). 완료 후 ~/Network/~/Network.legacy/ archive + Network Manager Desktop OAuth client 폐기M10.3d2026-05-28 — cortex production live 후. CLI 전용 (로컬 파일이라 MCP tool 불가). 민감 컬럼 → visibility=private 태깅 구현 완료 (--private-cols, default HPE, commit 2ff4cf4, D-cortex-9) — 잔여 = 파일 복사 + Google sync + 실 dry-run/apply (운영자 prerequisite)
B-cortex-visibility-phase2-mirror-contract 🆕D-cortex-9 Phase 2 (M6 착수 시) — Blueprint mirror job 이 visibility='shared' 만 가져가도록 계약 enforce + field-level privacy (payload private 하위객체 mirror 제외 + 선택적 CORTEX_PII_PASSPHRASE pgp 암호화) + private artifact 의 audit event redact. 선행 = M6 Blueprint artifact mirror (D-bp-artifact-1)M62d2026-05-28 요청 3.2+3.4. M6 (2026 Q4) 종속
B-cortex-visibility-phase3-e2e 🆕D-cortex-9 Phase 3 (opt-in) — client-held key sealed payload, 서버 복호화 불가. search_person(payload::text ILIKE)·Google push 포기 trade-off → 가장 민감한 메모만 “sealed” 모드M63d2026-05-28 요청 3.5 (보너스). 우선순위 최하
B-cortex-mcp-catalog-publish 🆕axe mcp publish 로 cortex_mcp 를 Vaultwarden MCP Connectors collection 에 등재 (D-vault-mcp-catalog). customers.yaml sso.apps.cortex_mcp 이미 4-key (client_id + application_id_uri + scopes + client_secret_env) 있음 → publish idempotent. 그러면 다음 사용자가 claude.ai connector 등록 시 Bitwarden 확장이 URI 매칭으로 cortex 4-piece auto-suggestM10.1d2026-05-28. frame/hive/blueprint 와 동일
B-cortex-google-oauth-verify 🆕Cortex Google OAuth 앱 정식 검증(verification) 제출 → 동의 화면 “확인되지 않은 앱” 경고 제거. 앱 = External+production, 스코프 auth/contacts (sensitive), client 135512942819-l18ra7gkf1ac93ai8t4hf2h4jl6mi0a2.apps.googleusercontent.com (project no. 135512942819). 현재 unverified → 동의 시 경고(“고급 → 이동” 우회 중) + unverified 100-user 상한. 외부 개인 Gmail([email protected] 등) 온보딩 신뢰 문제로 검증 필요. 제출물: 브랜딩(앱명·로고·지원이메일) + 앱 도메인(홈페이지·개인정보처리방침·서비스약관 URL) + 승인된 도메인 Search Console 소유권 verify(axelabs.ai) + 민감 스코프 정당화 사유 + OAuth 동의 흐름 데모 영상 → Google Auth Platform(console.cloud.google.com/auth/*) 제출. 금전비용 0 — contacts 는 sensitive(not restricted)라 CASA 제3자 보안평가 불필요(restricted였으면 수천 $/yr). 대안 기각: Internal user type = Workspace 한정이라 개인 Gmail 제외 부적합. 참고: production 전환으로 Testing 의 refresh_token 7일 만료는 이미 회피(sync 안정성 확보, 검증과 별개).M10.5d (+Google 검토 수일~수주)2026-05-29 발견. 관문 = 개인정보처리방침/약관 페이지(axelabs.ai 정적 호스팅) — B-legal-pages 연계
B-axe-secret-pull-noquote 🆕axe secret pull 이 env_file 작성 시 값에 따옴표를 붙이는데, docker compose env_file: directive 는 따옴표를 literal 로 처리 (compose .env variable substitution 과 다름) → 컨테이너 안 secret 에 따옴표 포함 → DB auth / API key mismatch. cortex 가 첫 피해 (postgres auth 실패, 수동 sed 로 우회). fix: axe secret pull 이 quote 안 붙이게 (또는 env_file 소비처가 strip). frame/hive 는 Python config 가 우연히 strip 해서 안 터졌을 뿐M10.3d2026-05-28 cortex 발견. known-gaps Cortex #2
B-axe-tunnel-add-ingress 🆕axe tunnel add-ingress <hostname> <path> <service> CLI 신설. axe 에 이미 _cf_request helper + CF API token (vault Cloudflare API - axelabs) 있음 → Cloudflare Dashboard remote-managed 터널의 ingress 를 GET→insert→PUT. cortex 등재 시 4-step curl 수동 (fetch config + jq insert + PUT) — 1 명령으로 축소. catch-all 보다 앞 + axe.axelabs.ai 의 no-path rule 보다 앞에 삽입M10.3d2026-05-28 cortex 발견. known-gaps Cortex #7
B-artemis-tunnel-orphan 🆕artemis-tunnel (cloudflared, Up, 2026-05-09 생성) 가 project=artemis compose 라벨만 달고 현 docker-compose.yml 엔 정의 없음 — D-ops-20(터널 axelabs 스택 이전)의 잔재. 증상: artemis 에 docker compose 명령 시 orphan 경고 + down/up --remove-orphans살아있는 터널 삭제 함정. 조치: 용도 확인(서빙 라우트 식별) → 불필요시 docker rm -f artemis-tunnel, 필요시 axelabs 스택 compose 로 라벨 이전. 2026-06-03 artemis launchd 스크립트(filings/collectors/reporters) docker rundocker compose run 전환으로 경고 노출 빈도↑.M10.2d2026-06-03 발견. 현재 동작 무영향(안전). D-ops-20 잔재
B-bp-entity-table-create 🆕Blueprint Prisma Entity model 신설 (D-bp-entity-canonical Phase 1). schema = Entity 의 컬럼 (id text PK = axec/axev/axep/truvia, canonicalName 한글, customerId axe/realchoice, role 운영법인/GP/기타, isActive, createdAt) + EntityRole FK refactor (현재 EntityRole.entityId text → Entity.id FK). 데이터 seed: (a) customers.yaml.entities iterate → Entity row 1 per id, (b) customers.yaml.entity_meta.(id).legal_name → canonicalName, (c) frame.shared.entity.legal_name 과 cross-check (D-bp-entity-canonical migration 의 frame i18n 정정 후 sync). REST endpoint /api/admin/entities (GET list + GET by id) — axe CLI 와 docs/inventory.mdx 가 fetch 가능. backward compat = customers.yaml.entities 는 SoT 유지 (deployment prerequisite, 부팅 self-contained)M21dD-bp-entity-canonical. 선행 = B-org-fanout-1 (organizationId FK pattern 일관)
B-customers-yaml-entity-meta-derive 🆕customers.yaml.entity_meta (2026-05-27 본 세션 신설) 를 Blueprint Entity 의 derived view 로 전환 (D-bp-entity-canonical Phase 2). 3 sub-step: (a) axe CLI 의 cmd_customers_list 가 Blueprint REST /api/admin/entities?customerId=(id) fetch → entity_meta 표시 (yaml 의 entity_meta block 은 보존하되 “derived from Blueprint Entity, do not edit manually” comment 추가), (b) matrix collector 에 entity_meta_drift_check 추가 — customers.yaml 의 entity_meta vs Blueprint Entity table cross-check, mismatch detect 시 alert, (c) axe deploy 부팅 시 entity_meta 가 stale 이면 warning (단 부팅은 계속). transitional 기간 = Phase 1 완료 후 1 주 검증 + Phase 2 진입M20.5dD-bp-entity-canonical. 선행 = B-bp-entity-table-create
B-axelabs-matrix-customers-yaml-direct 🆕axelabs.ai/matrix UI 의 customer 정보 drift 영구 fix. 현재: /Users/axe/axelabs/app/api/matrix/customers/route.tshttp://axe-console-app:8228/api/customers proxy. console-app = 폐기 대상 (B-matrix-admin-retire), docker ps 미가동, build 시점 prerender stale 본 노출. 2026-05-27 본 세션이 customers.yaml SoT (axec/axev/axep 한글명 + truvia rename + entity_meta 신설) 변경했으나 production UI 는 옛 본 (axe=“에이엑스이 LLC” / axev 누락 / realchoice=“리얼초이스 주식회사” / entities=[“realchoice”]). fix: (a) route.ts 를 fs.readFile('/axe-data/customers.yaml') + js-yaml parse 로 변경 (console proxy 제거), (b) axelabs container docker-compose.yml/Users/axe/.axe:/axe-data:ro mount + js-yaml deps 추가, (c) Next.js revalidate: 0 유지 + page 의 customers metric card 가 server-fetch (현재 client fetch → SSR 으로 변환 권장), (d) /api/matrix/services / launchd / containers / backups / console / state 6 route 도 동일 패턴 검토 (모두 console proxy). D-bp-entity-canonical “customers.yaml = deployment SoT” 정합 + B-matrix-admin-retire prerequisite (console-app 폐기 가능). 작업자 = axelabs container owner2026-05-27M1, 1d (route 6개 마이그레이션 + compose mount + rebuild + ship)
B-org-fanout-1Blueprint Workspace/UsageLog/AgentorganizationId FK 추가 (prisma/schema.prisma:688 “별도 PR” 주석 해소) — D-bp-org-fanout 신규 결정 등재 동반M10.5dcross-tenant 쿼리 누락 = 전 고객 노출 차단
B-azure-multi-tenantsrc/lib/auth.ts:101AZURE_AD_TENANT_ID 단일 env → per-org Organization.azureTenantId + multi-tenant Azure AD provider 분기M11dB-org-fanout-1 선행
B-legal-pagesTOS / Privacy / DPA / PIPA 4 페이지 신설 + Blueprint 노출M11d법무팀 review 1회 필요
B-edge-rate-limitBlueprint API edge rate-limit (per-org, IP 보조). Cloudflare WAF 또는 next/middlewareM10.5d
B-sentry-wireBlueprint + frame + hive 에 Sentry SDK + DSN secret + sourcemap uploadM10.5dvault 에 SENTRY_DSN 등재 prereq
B-matrix-docker-deploymatrix Docker compose full deployment — launchd 또는 systemd 자동 시작 등록M10.5dD-matrix-1
B-matrix-blueprint-mcpBlueprint 에이전트에 matrix MCP connector 등록M10.5dD-matrix-1
B-matrix-admin-retireadmin.axelabs.aiaxelabs.ai/matrix 리다이렉트 + axe-console-app 컨테이너 폐기. Caddy ingress 변경 + DNS CNAME 제거M10.5dmatrix 가 console 데이터 전량 흡수 완료 (2026-05-23). 인증(Entra ID OAuth) 미구현 — 상태 보드 공개 또는 별도 auth gate 결정 필요
B-matrix-wan-monitor 🔧matrix collector WAN/인터넷 가용성 모니터링 (wan-gateway/wan-internet/wan-dns + ISP 귀책 판별) — D-matrix-2. 상태: 코드 구현 완료 (matrix branch feat/wan-monitor, cargo check 통과) + docs draft 완료. 잔여 = 운영자 검토 → docs axe ship (D-matrix-2 origin/main 반영) → matrix axe ship (blue/green rebuild, NET_RAW+iputils-ping+env 3종) → /matrix/api/status 에서 wan- 등장 + 강제 차단 테스트*. 시작점 = 댁내 wifi 민원용 wifi.log 분석 (~/wifi-complaint/)M10.2d (ship만)2026-06-03, ship 대기
B-matrix-wan-report-tool 🆕matrix get_wan_report MCP tool (D-matrix-2 v2) — check_results 에서 wan-internet/wan-gateway 전환을 읽어 장애 구간 (start/end/지속) + 업타임% + 귀책 을 ISP 민원 제출용 타임라인으로 출력. wifi.log 일회 분석 (2026-06-03 ~/wifi-complaint/) 의 상시 자동화 버전M10.5dD-matrix-2 v2, B-matrix-wan-monitor 선행
B-netheal-install인터넷 자가치유 데몬 — D-matrix-4. 완료 (2026-06-04): pty 고갈로 sudo 불가 → osascript ... with administrator privileges 우회 설치, com.axe.netheal LaunchDaemon 가동 중 (PID 16331, netheal started 로그, 오발동 0), inventory.mdx 등재. 잔여(선택) = 콘솔에서 실 WiFi-바운스 치유 1회 검증 (원격 ~15s 끊김)M12026-06-04
B-frame-runtime-invariant-testDB CHECK runtime test (entity_kind 위반·ownership all-or-none·bounds·link_kind 등 invalid INSERT 차단 검증) + sum invariant (active row sum(numerator)==denominator)M20.5dD-ops-22 후속. tests/test_shared_fund_domain.py 의 metadata test 외 runtime layer
B-bp-workspace-entity-nmBlueprint WorkspaceEntity join migration — D-bp-entity-1 plan 의 Workspace.entityId scalar → N:M 수정M2, M31dD-bp-entity-1 plan 수정 등재
B-bp-para-dispatch-spikePath B Spike — DB 변경 없이 단일 workspace 로 PARA dispatch 흐름 검증 (3~5일)M34d본 구현 (Path A) 전 권장
B-hive-payroll-cell-compare첨부 급여대장 셀별 정확 일치 검증 (axec/axev 4월·5월 데이터)M41dpayroll v2 ✓ 검증 마지막 단계
B-hive-dkim-prodhive 메일 발송용 DKIM/DMARC DNS prod 확정 (Cloudflare API token 자동화 검증)M40.5dD-hive-23
B-backup-restore-drillframe-postgres / blueprint-postgres / hive-postgres restore drill 첫 실시 + 회고 + 정기 cron. 부분진척 2026-06-03: axe drill(D-config-14 restic canary) 메커니즘 강화 — snapshot freshness 검사(--max-age-days·--strict, silent backup-stop 탐지) + robust canary(non-empty+YAML parse, customers.yaml live-drift false-FAIL 해소; axe-cli fc0f29f). 잔여 = 본 항목 핵심: frame/blueprint/hive postgres 실제 restore drill + 회고 (restic 스냅샷은 DB Docker 볼륨 미포함이라 별도 pg_dump 기반 drill 필요)M51dD-hive-backup, D-config-14
B-mysrt-backup-decisionmysrt-postgres 의 SRT 외부 SOT 여부 사용자 확인 → Tier A 합산 또는 보류 결정 등재M50.5d
B-frame-observabilityframe observability.py 의 Prometheus percentile 계산 — 현재 TODO 상태M10.5d/Users/axe/frame/src/frame/observability.py TODO 코멘트
B-frame-lpm-classifyLLM classify pipeline (raw_transaction → journal_line 자동 분류) — 현재 analyze_file_format 만 존재. ETA 3-단계 (2026-05-25 RE^4 회신): (a) D+90 (2026-09-01) minimum viable — LLM proposal + 운영자 confirm + commit, 정확도 60~80% (axe 백테스트), (b) D+120 (2026-10-01) rule-based pre-classifier 결합, 정확도 80%+, (c) 2026-12-01 stable — axec/axev 1년 backtest + 회귀 green. Truvia D+30 사이클은 수작업 분개 (/services/frame#신규-customer-1-차-사이클-runbook) 로 보완M2 (top)누적 4-6 주/Users/axe/frame/DECISIONS.md M2 Phase C, 트루비아 RE^4
B-frame-fund-cross-journal펀드 cross-entity mirror 분개 도구 (GP commitment / 운용보수 / 성과보수)M22d/Users/axe/frame/DECISIONS.md D-frame-N4. B-frame-cross-journal-link 선행
B-frame-vat-schemajournal_line 의 VAT (부가세) 컬럼 계산 로직 — 현재 컬럼만 예약, 로직 0M21d/Users/axe/frame/DECISIONS.md “VAT handling… but no logic yet”
B-hive-phase2-spikehive Phase 2 (성과평가 OKR/KPI, AI 목표 추천) 기능 명세 SPIKE 문서 작성3d/Users/axe/hive/DECISIONS.md Phase 2 scope. 본격 구현 전 명세
B-hive-dispatch-channelhive 이벤트 채널 5개 추가 (employee.hired/terminated, payroll.finalized, compensation.granted, blueprint.agent.*)1d/Users/axe/hive/DECISIONS.md KNOWN_INCOMING_EVENT_TYPES Phase 2
B-hive-compensation-validatehive compensation Phase 3 검증 — 현재 Phase 1 schema 만, Phase 3 tools 검증 조건 정의M41d/Users/axe/hive/DECISIONS.md Phase 1=schema / Phase 3=tools
B-bp-artifact-propose-apiBlueprint POST /api/artifact/propose REST endpoint 신설 — cross-service automation 용 generic surface. axelabs platform 내부 worker / 외부 서비스 / 사용자 정의 automation 이 artifact propose 가능. body = ProposeInput JSON. Bearer ARTIFACT_PROPOSE_TOKEN AppSetting auth (service-account, NextAuth session 미요구). admin UI 의 NextAuth-gated /api/admin/mcp-schemas/refresh 와 별 surface. response = StoredArtifact JSONM62dD-bp-artifact-1. 통합 자체의 도메인 결정은 각 호출자 측 별도
B-mysrt-srt-risk-reviewSRT 약관 위반 risk 재검토 (자동 예매 기능, 계정 정지 risk) + 운영 정책 재정의0.5d/Users/axe/mysrt/README.md “약관 위반… 계정 정지”
B-ops-stack-consolidationdocker-compose 7-stack 통합 운영 시작 (~/.axe/axelabs/docker-compose.yml 신설 + 12→7 마이그레이션)M11dD-ops-20
B-bp-artifact-arch-docBlueprint artifact + PARA 아키텍처 결정 문서 본격 작성 — D-bp-artifact-1~7 등재 후 implementation 결정 문서 (Artifact 테이블 정확한 컬럼 / Citation 6-kind resolver contract / PARA dispatch field-level engine / MCP tool 시그니처 / ctx 진화 path)M62dD-bp-artifact-1 ~ D-bp-artifact-7. 코드 0줄, ADR landing
B-bp-artifact-citation-resolverCitation kind 별 resolver (onedrive / frame.* / hive.* / teams.message / mail.thread / external.web) — typed contract + 통합 read APIM63dB-bp-artifact-prisma 선행
B-bp-artifact-dispatch-enginePARA dispatch field-level engine — Project artifact 종료 시 Area/Resource/Archive routing rule + 자동 분배 (LLM 제안 + 사용자 confirm). copy + link 2 mode 지원. M3 의 workspace-level dispatch (B-bp-para-provenance-fields) 의 field-level 진화M65dM3 PARA Dispatch land 선행 권장 + B-bp-artifact-link-table
B-bp-artifact-query-apiCross-PARA / cross-artifact / time-travel query — MCP tool 위주 (query_knowledge, get_artifact, list_artifactsD-bp-artifact-7 Layer 2 정합). 웹 UI 만 최소 REST endpoint (curation UX). agent SDK 가 grep 대신 typed queryM63dB-bp-artifact-citation-resolver 선행
B-bp-mcp-paraLayer-toolslist_projects / list_areas / list_resources / search_archive 등 paraLayer 별 MCP tool 분리 — LLM intent clarity (tool name 자체에 paraLayer 의도 드러남). + create_workspace(paraLayer, ...) / close_workspace(id, dispatch_plan?) / reclassify_workspace(id, new_paraLayer) workspace lifecycle toolM62dD-bp-artifact-6. B-bp-artifact-query-api 와 같이 진행 가능
B-bp-workspace-lifecycle-ui4 paraLayer 별 UI 페이지 신설 — /axe/projects (기존) + /axe/areas / /axe/resources / /axe/archive (신설). 각 page 의 “+New Workspace” 가 paraLayer 그 page 에 고정. + “Close Project” / “Reclassify” / dispatch plan 모달. ARAClient 의 3-tab 폐기 (분리로 대체)M65dD-bp-artifact-6. B-bp-artifact-prisma 선행 (paraLayer 컬럼 활성)
B-bp-ctx-skill-evolvectx skill 진화 — markdown PKM → artifact curation interface. flows: agent propose → ctx review → confirmed fact + audit. markdown 은 보조 (review UX, archive). 기존 ctx sync/review/status 3 mode 호환 유지 + artifact 모드 추가. + markdown → artifact 점진 migration mode (LLM extract 시도 → ctx review queue 등재 → 사용자 confirm/edit/reject → confirmed artifact + 원본 entry <!-- migrated: <id> --> 마킹)M65dB-bp-artifact-query-api 선행. D-bp-artifact-5
B-bp-ctx-migration-modectx review 의 markdown → artifact propose flow (점진 마이그레이션 UX) — review queue 에 migration_propose event 표시 + source markdown 발췌와 extracted typed fact 나란히 + confirm 시 markdown entry 에 archive 마킹 자동 삽입. B-bp-ctx-skill-evolve 안 포함될 수 있으나 UX 작업량 명시 분리M63dB-bp-ctx-skill-evolve 와 같이 진행
B-bp-markdown-archive-markermigrated 마킹 표준 (<!-- migrated: <artifact_id> -->) — 어떤 markdown entry 가 어떤 artifact 로 변환됐는지 trace. ctx review confirm 시 자동 삽입 + grep tool (ctx migrated-trace <markdown_path>)M61dB-bp-ctx-migration-mode
B-bp-knowledge-overviewKnowledge Overview dashboard (/axe/knowledge) — 3-pane layout (4 layer count + state / Sankey flow 지난 30일 / Cross-PARA query 입력) + Area health alert (stale 30일, inactive 90일) + drill-down view (PARA flow over time / artifact graph / provenance trace)M65dB-bp-artifact-query-api + B-bp-mcp-paraLayer-tools 선행
B-bp-artifact-ic-pilotIC pipeline 첫 vertical pilot — 1 deal (Sentry 권고) 의 §재무 가 raw markdown 대신 ICMemoArtifact 의 typed fact read. before/after 토큰 측정 + IRR 결정론성 검증. M6 활성화 검증 datapointM65dB-bp-ctx-skill-evolve 후. Stage 0 PoC 의 production 변환
B-index-blueprint-citation-kindBlueprint src/lib/artifact/citations/index.ts resolver 신설 — index.* kind 14 sub-type 의 stable ID → MCP call mapping. index.financial_outputquery_irr / index.dealget_dealM71dD-index-6 Phase 1
B-index-ic-skill-push-modeic skill SKILL.md 에 신규 Rule 25 (--push-to-index mode) 추가 + 산출물 5종 (financial_model xlsx + scenario_deltas yaml + exit_matrix yaml + memo md + recap yaml) → index propose 자동화 script. ctx review queue 경유M72dD-index-8 Phase 1, B-index-phase0-mcp-tools 선행
B-index-frame-event-mirrorpg_notify index_events channel (capital_call / valuation_recorded / exit_distributed) + frame 측 frame-worker LISTEN 추가 + cross_journal_link 분개 mirror. frame M2 의 commitment_ledger 정합M72dD-index-9 Phase 2, M2 의존
B-index-axev-fund2-frame-registerframe 에 axe_ia_002 (액스 투자조합 2호) 등록 — Iippo 2호 split 의 fund entity 가 frame 에 부재 (현재 axe_ia_001 만). frame register-entity --id axe_ia_002 --kind kvf + fund_meta JSONB 채움M70.2dM2 frame 펀드 회계 + index Phase 0 prereq
B-ic-push-mode-implic skill --push-to-index 5th mode 구현 (D-index-11) — SKILL.md Rule 25 + Step 5.5 (40-60 lines) + gate_memo.sh post-V_COUNT atomic propose dispatch (80-120 lines, idempotency_key 계산 + propose_deal_closure curl + polling) + orchestration-initial.md (50-80 lines) + build_3fs.py / calc_irr.py / postmortem_stub.py minor edits. 총 ~280-350 lines. backward compat 100% (flag 미사용 시 기존 동작). ic/index_push_state/v(N).json local checkpoint 도입M72dD-index-11, B-index-phase0-mcp-tools 선행
B-portfolio-mgmt-deprecationportfolio-management skill 3-phase deprecation (D-index-12) — Phase 0 (즉시) SKILL.md 에 deprecation notice + Blueprint suggest UI 에 marker / Phase 1 (M7 Phase 1 launch 후) KPI 표 → pmc/references/kpi-catalog.md copy + cross-link / Phase 2 (3개월 후) SKILL.md disable (Blueprint search 에서 미노출) / Phase 3 (6개월 후) archive (.deprecated/ 이동). 점진 패턴 D-bp-artifact-5 정합M70.5d per phaseD-index-12
B-investor-relations-deprecationinvestor-relations skill 3-phase deprecation (D-index-12) — portfolio-mgmt 와 동형. LP 보고 구조 + 펀드 성과 지표 → pmc/references/ir-lifecycle.md migration. Phase 0/1/2/3 timing 동일M70.5d per phaseD-index-12
B-index-error-model-enumsrc/index/error_model.rs Rust enum SoT (D-index-14) — 12+ case (IdempotencyConflict / ValidationWarning / SchemaNotFound / CitationResolveFailed / FinancialModelLocked / DslSyntaxError / UnknownEnum / DealNotFound / FundEntityNotFound / ServiceUnavailable / RateLimitExceeded / InsufficientScope) + impl From IndexError to McpErrorResponse deterministic mapping. ic/pmc skill 측 lib/index_client.py (또는 동형) 의 code 별 분기 handler. unit test 가 모든 case 의 wire-level response 검증. silent fallback 절대 금지M71dD-index-14, B-index-skeleton-mirror 선행
B-index-integration-fixtures/Users/axe/index/tests/fixtures/ic_integration_phase0.json + pmc_integration_phase1.json + cross_skill_regression.json (D-index-14, D-index-15 정합) — Iippo (1:N fund) + Sentry (option round) + Canopy (multi-round) 3 deal regression. ic_integration_phase0 assertion: propose_deal_closure 성공 + compute_outputs(base) IRR ±0.5pp vs ic v(N).xlsx cell J42 + citation roundtrip resolve. cross_skill_regression: 5 skill (ic/dd/vc-deal-sourcing/portfolio-management/investor-relations) 동시 propose → audit_trail 충돌 없음 + 마지막 silent overwrite 검출. PR merge gate (axe test index --fixtures)M71.5dB-index-phase0-mcp-tools + B-ic-push-mode-impl 후
B-index-mcp-checklist-extension/architecture/mcp-server-checklist § 8 운영 14 체크포인트 → 21 항목으로 확장 — skill 통합 5 항목 (#17 skill idempotency 2× call 409 검증 / #18 citation resolver roundtrip ±0.001 percent / #19 cross-skill conflict 시 audit_trail 또는 last-write-wins + warning modal / #20 graceful degradation: index 죽이고 ic 호출 시 markdown-only fallback / #21 schema evolution: 새 field 추가 시 old skill 호환). axe test index --accept-gate 명령 + 24h production monitor (error rate under 0.1 percent, citation cache hit over 95 percent)M71dB-index-error-model-enum + B-index-integration-fixtures 선행
B-index-vision-boundary-rulexlsx vision 보조 vs PDF vision 분리 룰 (D-index-15 worst-case #2 차단) — index 의 ingest_financial_model_xlsx 는 xlsx sheet/row label 만 vision (LLM 보조 inference), numeric cell value 는 mechanical (Rust calamine) 파싱 강제, PDF (IR pack 등) 는 vision 불가 → ingest skill 의 markdown clone 만. dataroom IR PDF 의 “5,941원” 가 “5,941엔” 오인식 → DB authoritative cell 가 되는 worst-case 영구 차단. 본 룰 /services/index/financial-model.mdx 추가 + ingest tool 의 input validation (PDF blob 거부)M70.3dD-index-15, B-index-phase0-mcp-tools 선행
B-index-proceeds-bridge-retrofit 🆕D-index-22 후속 — Iippo·Canopy 의 legacy_evev_bridge per-leaf 전환. 두 deal 은 EV-based 이나 per-leaf 에 exit_ev_krw/exit_net_debt_krw/exit_stake_pct 미itemize (validate Check 7 = legacy_ev WARN 2건). 작업: (a) Canopy — exit_assumptions 의 net debt 300억(EqV 498억) 를 per-leaf 로 분해, 40+ leaf 각각 exit_ev + stake 도출 → axe_proceeds ±2% reconcile, (b) Iippo — asset-light net debt 0, 30+ leaf 에 exit_ev(=proceeds/stake) + stake; 동시에 entry-F/D-flat dilution 교정 (중간 라운드 희석 미반영 → exit_stake 를 round-별 희석 반영값으로 — proceeds 수 pp 과대 낙관 해소), (c) proceeds_basis=ev_bridge 변경 + re-ingest + IRR ±1pp regression. Sentry(equity_value)·pre-IPO 3(mom) 는 bridge N/A 라 대상 아님.M71d2026-05-29 D-index-22. 검토 후 보류 (2026-05-29 “정확도 심화” 세션): (a) Canopy 는 per-leaf 순부채가 원자료에 없어 itemize 하려면 시나리오별 부채를 근거 없이 가정해야 함 (D-index-22 “없는 부채 날조 안 함” 원칙상 불가) — 모델-level net debt 300억은 이미 명시·정확, proceeds/IRR 도 검증됨 (즉 현 데이터는 정확, itemize 만 미수행); (b) Iippo net_debt=0 이라 itemize 가 tautological (exit_ev=proceeds/stake 환원); (c) dilution 교정은 D-index-24 와 충돌 (Iippo/Sentry 는 executed → 모델 사후 재작성 금지). 숫자 불변 + WARN→PASS 표현 rigor 만이라 효과 대비 위험 큼 → legacy_ev WARN 유지가 정직. 실 DD per-leaf 부채 데이터 확보 시 재개
B-index-skill-overlap-sunsetD-index-17 overlap 기간 종료 후 Blueprint mirror 측 .claude/skills/{ic,ingest} 제거. 3 sunset 기준 모두 충족 시: (a) 다음 3 deal IC 가 index/skills/ic/ 기반 정상 작동, (b) Blueprint Claude Agent SDK 의 index/skills/ mount/sync 자동화 확립, (c) ic skill --push-to-index mode 일반화 (B-ic-push-mode-impl). 작업 = Blueprint repo .claude/skills/ic + .claude/skills/ingest 디렉토리 삭제 + Claude Agent SDK 가 index/skills/ 또는 MCP 로 fetch 하도록 변경. drift 0 검증 (sha256). 충족 안 되면 overlap 지속M70.5d3 기준 충족 후
B-index-skill-versioning-schemaD-index-17 Phase 2 — shared.skill_resource table + [email protected] schema. name + version + skill_md + scripts (JSONB) + references_md (JSONB) + domain + locked_at + superseded_by. Per-deal trace: index.ic_decision.skill_version_used field 추가 → “이 IC 메모는 ic skill v8.3 으로 작성” 영구 audit. Cross-deal “ic v8.3 vs v8.0 평균 IRR” 분석 가능M71dD-index-17
B-index-dd-vc-sourcing-ownershipD-index-17 Phase 1 후속 — due-diligence + vc-deal-sourcing skill 의 index 산하 이전 검토. 두 skill 모두 투자 도메인이지만 ic + ingest 보다 결합도 낮음. 별도 결정 필요 (D-index-? 신규)M70.3d (검토) + 1h (이전)D-index-17 overlap 안착 후
B-index-ingest-structured-extraction 🔧 ⭐✅ L1 SHIPPED (2026-05-30, D-index-41, blueprint PR #379 merged → ~/.claude/skills/ingest v2) — convert_xlsx v2 ({stem}_xlsx.cells.json + key_outputs 자동탐지 + Model Summary/Key Outputs md) + convert_pdf v2 (figures.json). Apposter 20-sheet model → 31 key outputs(Exit IRR 57.2%/MoM 8.60x/EV 270억) 자동 surfacing(이전 truncated 주석 매몰), test 40/40, 의존성 0. + ✅ L2-core artifact화 SHIPPED (D-index-42, index 4ca5868, blue/green live) — ingest sidecars → proposed artifacts (artifact+citation+artifact_event op=propose, RLS index_app+GUC, idempotent). artifact store 0→35 (dormant 던 store 첫 가동). + ✅ lifecycle SHIPPED (D-index-43, 3eece93+118568a, blue/green live): Query API(query_artifacts/get_artifact) + ctx review(confirm_artifact/reject_artifact) + L3-lite reconcile_artifacts(metric spread flag) + L2 draft_seed_from_artifacts(보수적 scaffold — 날조금지 구조강제, draft non-ingestable). 6 신규 MCP tool, 27 test. + ✅ metric_kind 세분 (D-index-44, blueprint PR #380 — valuation/multiple/moic 분리+curation) + lifecycle 회귀 스위트(8 test, audit 영속성 발견) SHIPPED. 잔여 (축소, 📋): ctx review UI(Blueprint markdown-diff) · Query API → /ic·seed-building primary read path 통합 · 전 deal artifact화(현 Apposter 1) · L4 versioned diff. ⭐ 중요 — ingest 고도화: 단순 md transcription → source-type-aware structured extraction (사용자 2026-05-30 “IR·Excel 이 md 로 소화 안 되는 케이스 많음”). ingest 는 파이프라인 정문이라 여기 손실은 ic·index 에서 복구 불가 (GIGO). 현 md photocopy = L0. L1 (즉시·저위험): source-type routing — xlsx→구조화(HTML table 또는 cell+merge JSON), IR deck(PDF/PPT)→페이지 이미지+vision, 일반 prose→md 유지. 사용자 체감 손실(Excel 표 구조·deck 차트)의 80% 해결. L2 (핵심 레버리지): transcription→typed extraction — ingest 가 베끼는 대신 index typed 스키마를 채움 (D-index-31 intake 5필드 series·round_size·committed·entry_date·pre/post + exit 가정 + cap table → seed·financial_model 초안 생성). 지금 사람이 dataroom 읽고 손으로 쓰는 seed yaml 을 ingest 가 초안 잡고 사람은 검토·confirm — 정문 자동화. L3 (품질 배수): cross-source reconciliation — deck vs xlsx vs cap table 수치 불일치 flag (silently 택1 금지) + confidence 태그 (mechanical=high · vision-inferred=review). L4: versioned/idempotent 재ingest diff (v2 IR vs v1 변경점). 불변식: ① 숫자는 항상 mechanical(calamine) → vision 은 정성·cross-check 만 (D-index-15 vision-boundary 정합·확장), ② 원본은 항상 evidence blob 보존 (fidelity SoT, 클론은 파생·교체가능), ③ 추출 fact 마다 citation(page/cell) 자동 부착. 선행: 구현 전 D-index 결정으로 설계 ratify (extraction-not-transcription + source-type-aware 명문화). 관련 B-index-vision-boundary-rule.M7L1 1d / L2 3-5d / L3 2d2026-05-30 사용자 “중요”. D-index-15+D-index-31 위에서 진행, D-index 결정 선행

🆕 신규 (분류 안 됨)

발견했지만 아직 마일스톤·우선순위·owner 미정. 다음 정비 시 📋 로 옮기거나 known-gaps 로 강등.

ID항목발견일비고
B-index-judgment-in-seeds ✅ ⭐완료 2026-06-03 (D-index-46, index 8ec2c10) — seed.yaml 이 judgment 단일 SoT: per-seed judgment:(assumptions+calibrations) + seeds/_corpus.yaml + seed-ingest --emit-judgment(natural-name anchor→corpus id 해소, idempotent). 23 seed 마이그레이션 후 backfill.rs+corpus.rs(2824 LoC) 삭제. GATE: 재ingest +0 new · committed wipe→재현 byte-identical(42 dup citation pruned) · append-only intact · 51 test · validate-seeds Δ0. 신규 deal 자동 artifact화 — hardcode transcription 0.2026-06-03 ✅D-index-46
B-index-epic2-confidence-load-bearing 🆕D-index-45 Epic 2 — confidence 를 장식→load-bearing. 입력 assumption 신뢰도를 출력(E[CF]·E[MoM])으로 전파: 미확정/저신뢰 가정 위 딜은 저신뢰 플래그. provenance 위 confidence rollup. epistemic 차별점 심화.2026-06-03M7, 2-3d
B-index-epic3-self-calibrating-loop 🆕 ⭐D-index-45 Epic 3 (북극성) — prediction→outcome→recalibration. IC 시점 calibrated E[CF]/P(loss) 를 불변 prediction artifact 로 freeze → 실제 outcome(exit·후속·writeoff) 포착 → deal-class 별 예측-실제 bias 노출(체계적 낙관/비관) → 다음 IC 자동 보정. base-rate corpus(현 35 comp+5 base_rate) 누적. Palantir 가 안 주는 복리 자산. outcome-capture 는 B-index-postmortem-loop 가 공급.2026-06-03M8, prediction freeze 선행
B-index-pmc-operational 🆕 ⭐roadmap M7 Phase 3 — pmc(Post-Money Care) 운영 파이프라인. 현재 pmc 는 skill skeleton(D-index-12) + P3 에서 blueprint mirror 됐으나 index persistence 미구현. 8-agent 분기 cycle(KPI/risk/NAV/postmortem) → index.portfolio_kpi·risk_alert·valuation_snapshot·postmortem typed fact + pmc --push-to-index. IC결의~Exit(5년+) 포트폴리오 케어 phase.2026-06-04M7 Phase 3
B-index-postmortem-loop 🆕 ⭐roadmap M7 Phase 3 — post-mortem 루프: ic postmortem_stub → reminder cadence → pmc fill → index.postmortem(IC 예측 vs 실제 회고). Epic 3 의 outcome-capture leg — prediction(freeze)과 짝이 되어 self-calibrating 루프를 닫음. ic postmortem_stub/reminder(투자 phase) + pmc fill/render/push(care phase) 2-track(D-index-12).2026-06-04M7/M8, Epic 3 짝
B-index-evidence-durability ✅ v1 ⭐v1 완료 2026-06-04 (index b273979, deployed) — citation sha256 content-anchor(범용·무의존) + Blueprint-id 필드 readiness(workspace_id/driveItemId/marker/rel_path). CitationAnchor+is_durable(durable = sha256 OR drive_item_id OR workspace_id+rel_path) · ingest sidecar sha256 emit + propose-time fallback hashing(skill 무변경에도 durable) · verify_citations(deal?) MCP tool · 현황 페이지 “citation durability %” 라인. additive(기존 357 artifact/545 citation byte-identical) · 80 test · validate-seeds Δ0 · 공개 페이지 누출 0. 폴더 이동·삭제 분석 + 운영자 “workspace unique id” 제안에서 도출.2026-06-04 ✅D-index-45/47
B-index-evidence-durability-v2 🆕roadmap M7 Phase 3 — v1 deferred 잔여(cross-repo): ① 기존 545 path-only citation backfill(resolvable source hash→ref 에 sha256 merge, 또는 deal 별 재ingest) ② Blueprint resolve API(stable id→현 위치, sync 갱신) ③ driveItemId/workspace_id 채우기(Blueprint Workspace 쿼리) ④ ic/ingest skill blueprint mirror(런타임이 sidecar sha256 emit). v1 schema/predicate 가 이미 수용.2026-06-04M7 Phase 3, cross-repo
B-index-skill-p1-stamp완료 2026-06-03 (D-index-47, index 11aca12, deployed)artifact_event(op=propose).payload_after 에 _provenance(skill·skill_version·bundle_sha256·schema_envelope_version·frozen_enums_hash·actor·surface) 스탬프 + propose 시 schema-drift hard gate(불일치→SCHEMA_CONTRACT_DRIFT, insert 전 fail-closed). frozen_enums_hash=3b58b4b0…(전용 SoT fn, pinned tripwire test) + /index/schemas 가 publish(ic-push discover+pin). 66 test(+17) · additive(기존 357 untouched, append-only 라 retro-stamp 불가) · validate-seeds Δ0. live: 드리프트 probe→SCHEMA_CONTRACT_DRIFT(무오염).2026-06-03 ✅D-index-47
B-index-skill-p2-ci-mirror ✅ ⭐완료 2026-06-03 (D-index-47, index 6edf0ff) — ⭐ “런타임 fix” 는 이미 달성(P0 + 기존 sync): ic/ingest 가 index SoT↔blueprint origin/main↔런타임 전부 byte-identical(attest: ic cb9b9ec/ingest 7d09bcd IN-SYNC). 그래서 P2 = content push 아닌 메커니즘: index-skill-sync.py--attest(deterministic dir-sha256 drift sentinel, advisory) 재범위(깨진 byte-delivery 제거) + index-skill-mirror.sh(미래 미러, sanctioned PR flow, pmc fail-closed 거부) 빌드. blueprint 무쓰기·무push·무PR, pmc 보류(P3).2026-06-03 ✅D-index-47
B-index-skill-sync-wrapper-retireresolved 2026-06-03 — neutralized by P0blueprint/scripts/sync-index-skills.sh 는 (a) origin/main 에 없음(untracked local-only) (b) 호출하던 launchd ai.axe.index-skill-sync.plist 가 P0 에서 폐기 → invoker 0 = 무해. 물리 파일은 blueprint working-tree 의 untracked 파일(병렬 세션 활성 편집 중 — re-point 가능성) → index scope 밖, blueprint tree owner 가 rm/re-point. index-side action 불필요.2026-06-03 ✅D-index-47
B-index-skill-p3-contamination-purge ✅ ⭐완료 2026-06-03 (D-index-47, blueprint PR #381 gate + #382 pmc, both squash-merged origin/main) — 8 투자 skill(ic·ingest·due-diligence·vc-deal-sourcing·investor-relations·portfolio-management·legal-compliance + pmc)에 owner:index 태그 + boot(start.sh)/webhook(route.ts) 양 경로 gate(customer services.index 판정 → 비-index rm -rf+skip purge, index keep). axe 3중 안전(services.index + :-axe 기본 + fail-safe keep + 운영자 skills-sync.sh ungated → simul KEEP 16/16) · realchoice/Truvia PURGE 7/KEEP 9 · customers.ts customerHasService + test 21/21 · tsc 0. pmc(index-only)도 base 로 mirror(gated→axe 만). 운영자 잔여: Truvia BLUEPRINT_CUSTOMER_ID 확인 + 컨테이너 재기동(boot gate 가 purge) + R7 DB residue(assigned skill row). rollback=revert(axe 무영향).2026-06-03 ✅D-index-47
B-index-skill-owner-frontmatter 🆕D-index-47 follow-up — ic/ingest/pmc SKILL.md frontmatter 에 owner: index 추가(현재 INDEX_OWNED.txt manifest 가 de-facto SoT, frontmatter 미기재). drift-guard 가 frontmatter 키로 동작 시 필요. blueprint mirror PR 동반.2026-06-03소, P2 동반
B-index-ic-screen-mode 🆕D-index-36 후속 — /ic skill 에 lightweight screen-mode 통합. 현재 Screening 게이트는 수동(Claude best-effort: 외부 리서치 5종 + research-calibrated 재무모델 + engine IRR(E[CF]) + premortem 가정라벨). 이를 /ic --screen(또는 stage 자동감지)로 정규화: 19-agent full 대신 축약 파이프라인(market/competition/comps base-rate research + financial model + premortem-critic + screen-memo synthesist), dataroom 불요(teaser/1-pager 입력), 산출 = ic/memo screen + research + finance + index 적재(stage=‘Screening’). DD 전환 gate(조건) 명시. 첫 수동 사례 = 에듀온(D-index-36).2026-05-30M7, 1.5d. ic skill 4-mode(INITIAL·REVISION·APPEND·FINALIZE)에 SCREEN 추가
B-hive-compensation-adjustment-implhive compensation_events.adjustment 정식 MCP 도구 구현 — D-hive-17 후행 leg 완성. 2026-06-01 완료 (D-hive-29): compensation_event_adjustment_create(employee_id, period_label, line_kind, delta_krw, reason, evidence_url?) admin scope. 페이슬립 line append + 합계 보정 + compensation_events.adjustment audit row + hive.payroll.event (subtype=adjustment) 발행. compute_period UPSERT-with-gates 의 case C/D/E (발송됨/지급됨/역분개됨) skip 케이스의 정공법 정정 경로. delta_krw 부호 = line_items.amount_krw 부호 (공제 460원 증가 = -460). 발송된 페이슬립 정정 시 직원 메일 ≠ DB → 운영자 재발송 책임 (운영 절차).2026-05-30 → 2026-06-01 ✅D-hive-17 + D-hive-29
B-frame-payroll-event-consumer-adjustment 🆕frame consumer-worker 측 hive.payroll.event LISTEN + subtype=‘adjustment’ dispatch → 인건비 정정 분개 자동. D-frame-1 pending_payroll 패턴 정합 (이중 분개 위험 0). D-hive-29 동반 — hive 측 event 발행 ✅ but consumer 측 미구현. 본 leg 없으면 frame 분개 ≠ hive 페이슬립 차액 누적.2026-06-01M3, 1.5d. D-hive-29
B-hive-adjustment-auto-redispatch 🆕apply_adjustment 직후 send_payslip_email 자동 호출 (auto_redispatch=True default) + 메일 본문 템플릿에 정정사유·차액·새 net 표시 (정정명세서 전용 템플릿 payslip_adjusted.j2). 운영자가 “정정 → 재발송” 두 step 잊지 않게. 직원 메일 (옛 net) ≠ DB (새 net) 정합 갭 해소.2026-06-01M3, 1d. D-hive-29
B-hive-adjustment-operator-alert 🆕apply_adjustment 직후 Blueprint Teams DM 운영자 알림 (payslip 정정 ps#<id> 직원 <name> <delta>원 — 재발송 자동 ✅ / 운영자 확인 필요 ⚠️) — auto_redispatch 실패 / 차액 송금 필요 시 강조.2026-06-01M3, 0.5d. D-hive-29 + B-hive-adjustment-auto-redispatch 후속
B-hive-payroll-base-policy-decision 🆕hive compute_period 의 4대보험 base 일할 케이스 정책 결정 — 현재 D-hive-29 룰 K 로 base = reported_income_*_krw (보수월액), 값은 R(과세표준)과 같게 set 정책. 정액 케이스: 보수월액 = R → 결과 일치. 일할 케이스 (신규 입사·중도 퇴사): R(일할 적용된 변동값) vs 보수월액(고정값) → 결과 다를 수 있음. 예: 강태훈 axev 2/19 입사 → 2월 prorate. compute_payroll_v2 가 taxable_total 에는 prorate 적용 (= R 변동) 하는데 base = reported_income 사용 시 보수월액 고정값으로 NPS/NHIS 계산 → 일할 적용 안 됨. 요구: 일할 케이스 시뮬 + 회계법인 cross-check (NPS/NHIS 공단 정합 = 일할 시 보수월액도 비례 조정? 또는 고정?) → 룰 K 보강 결정 (예: 일할 비율을 보수월액에도 곱 적용 vs 보수월액은 항상 고정).2026-06-05M3, owner: 강수훈 dev. 우선도 🟡 중간 (현재 정액 결과 정합이라 시급 X). D-hive-29 룰 K 후속 일할 정책
B-index-ingest-pipeline-candidates 🆕2026-05-30 데이터룸 스캔 발견 — index 미적재 deal 중 IC 완료 후 적재 대상: Prj_Render (dataroom + ic 스캐폴드 有, IC 메모 미완 → 메모 완료 시 적재), Prj_Whale=위시켓 (보유 포폴 — 세무조정·주식이관·주총·등기 admin docs 만, 원 IC 재무모델 확보 시 적재). 비대상: 델리후레쉬(RFP 제휴건), Pipeline 잔여(Curi AI·엘리시움 등 — 미screen). 적재 완료 (7-deal): Interstellar(10th, PASS)·에듀온(11th, Screening PASS D-index-36)·EGA(12th, IC)·수성별(13th, Passed)·Nanora(14th, full IC, D-index-37디벨로퍼그룹(15th, buyout-class)·유비랩(16th, Screening) (D-index-38, 2026-05-30). 나머지 Pipeline 은 screen 또는 IC 시 D-index-36/21/24/26 프로토콜 적용. Prj_Render = 리얼초이스/트루비아 = 2026-05-30 best-effort SCREEN 완료 → 적재 (23rd, D-index-40, par-entry cheap-option). ⭐ 별도 Archive batch (1_Project (Archive)): Medistaff·Open Research·JS E&L·Catalyst·데이톤·Apposter 6건 = D-index-39 적재 (17~22th, 전부 미투자/correctly-avoided). ⛔ 데이터룸 소진 (DB 23) — 잔여 = Prj_Whale=위시켓(executed 포폴이나 원 IC/재무모델 부재, 자료 확보 시 적재) · Purple AI/TR Corp/엘리시움(DHP 빈 폴더, 자료 입수 시 screen) · 이노씨앤에스/Curi AI/가람봇/딥트리/블루밍(thin lead). 비-딜: Prj_Artemis(AXE 자체 제품)·델리후레쉬(RFP).2026-05-30M7, deal당 ~1d (screen) / DD 시 full /ic
B-blueprint-broadcast-mail 🆕Blueprint /api/admin/broadcast-dm (Teams DM) 와 동급의 실 SMTP/Graph email broadcast REST 추가/api/admin/broadcast-mail. 본 use case = 운영자가 임직원 1:N 공지 시 Teams DM 외에 이메일도 발송 필요한 경우 (외부 회계법인 cc / 감사 audit trail 보존 / 비-Teams 사용자 대비). sendEmail() 함수 (src/lib/graph.ts:412) + Mail.Send permission 이미 보유 — REST wrapper 만 추가하면 됨. Auth 동일 CRON_SECRET. 운영 정합 = /ops/runbook/operator-broadcast 의 함정 표 그대로 적용. 사용 빈도 추정 = 분기 1-2회 (vault 공지 / 신규 customer launch / 시스템 변경). 본 작업 ROI = 작음 (Teams DM 으로 대부분 충분), 다만 audit trail / 외부 cc 가 본질 필요한 deal 결정 발생 시 즉시 우선순위 ↑. 2026-05-29 update: MCP send_mail (D-bp-mcp-mail-1) 가 agent/connector 의 단발(1:N 임의 수신자 포함) 발송 + MailSendLog audit + 외부 cc 를 이미 커버 — 본 항목은 이제 운영자용 REST bulk broadcast (CRON_SECRET auth, 비-MCP 트리거) 한정으로 축소, ROI 더 작아짐.2026-05-26M5, 0.3d
B-axe-secret-prompt-store-cli 🆕axe secret prompt-store <name> --collection X --uri ... --username ... CLI subcommand 신설 — vault-secret-capture  skill 의 osascript hidden-dialog + vault item 저장 패턴을 한 줄 명령으로. 사용 빈도 (PAT 발급 / API key 등록 / OAuth client_secret 회전 등) 증가하면 진행. 본 작업 ROI = 중간 (skill 로도 충분, CLI 화 = 운영자 본인 typing 짧아짐).2026-05-26M3, 0.3d
B-dev-platform-dns-placeholder-cliaxe customers dns-placeholder <id> — Cloudflare DNS API 로 <id>.axelabs.ai 의 CNAME stub 추가 (tunnel target). vault token (Cloudflare API - axelabs) 가 zone DNS Edit 보유 — 즉시 가능2026-05-231시간 추정
B-dev-platform-customer-deployaxe customer deploy <id> — D-dev-platform-2 후속, customer macmini side. SSH (Tailscale/Cloudflare Tunnel) 로 customer 머신 진입 → Docker stack (frame/hive/blueprint blue/green + postgres + caddy) 배포 + cloudflared tunnel 등록 + customers.yaml 동기화. realchoice 첫 실 운영2026-05-23b5 — 2-3시간 추정. M1-M2
B-dev-platform-user-add-cliaxe user add <email> --customer <id> — Phase 1 강태훈 setup (macOS user + SSH key + Vaultwarden item + GitHub collaborator + Cloudflare Access policy) 의 자동화. 본 PR 의 강태훈/Soohun 수동 절차 1 명령으로2026-05-23Phase 1 의 반복 가능 형태
B-axe-pat-rotation-cronGitHub PAT (axe-labs-ai, 90일 TTL) + Cloudflare token + 기타 vault secret 의 만료 D-7 launchd alert (D-bp-alert-1 패턴) + axe secret rotate <path> end-to-end 회전 명령. D-dev-platform-4 의 운영 prereq2026-05-230.5d
B-dev-platform-host-rebuild-docaxe-macmini 전체 host 재구성 시 본 세션의 multi-user setup 재현 자동화 — sudoers + dev group + macOS users + sshd_config drop-in + Cloudflare tunnel + Vault. ad-hoc script 가 아니라 도구화 (e.g. axe host bootstrap)2026-05-231d
B-axe-host-inventory-cliaxe host inventory — 본 머신 13 layer (ops/host-setup) 의 현재 값 자동 수집 + docs 의 표 와 drift detect → markdown report. 신규 머신 진단 + 본 머신 정기 audit (launchd cron)2026-05-231d. D-host-setup-1 후속
B-axe-host-bootstrap-cliaxe host bootstrap — 신규 macmini 의 layer 1-13 자동 setup. inventory CLI 의 reverse — 본 머신 현 값을 reference 삼아 신규 머신 동일 상태로. layer 0/6/12 (Hardware/Entra/OneDrive) 는 manual prompt, 나머지 자동. Tailscale invite + Cloudflare tunnel UUID 발급 + sudoers + SSH + Docker stack + launchd + git config 모두 1 명령2026-05-233-5d. realchoice 본격 onboarding 의 핵심 prereq
B-axe-pty-max-launchdkern.tty.ptmx_max=511 한도 → 2047 로 늘림 + launchd plist 로 boot 시 자동 적용 (sudoers /usr/sbin/sysctl 추가 필요). Claude Desktop PTY leak 같은 함정 영구 차단2026-05-230.3d. ops/host-setup 의 알려진 함정
B-claude-desktop-pty-leak-trackClaude Desktop app (/Applications/Claude.app/Contents/MacOS/Claude) 의 PTY leak. 재발 확정 — 2026-05-26 D-bp-mcp-calendar-2 ship 중 forkpty: Device not configured (ENXIO) 로 새 터미널 차단 (43일 가동 누적, 511 한도 도달). lsof /dev/ptmx 결과 = Claude.app PID 가 fd 43,44,46,88,89,92,94,98,99,102+ 점유. userspace zsh 좀비 (82개 누적, Claude Code subprocess) 정리해도 해소 안 됨 = Claude.app 본체 leak 확정. macOS kern.tty.ptmx_max 가 511 초과 거부 → sysctl raise 무효 → Claude.app 종료/재시작이 유일한 fix. Anthropic 측 issue 제기 (5/26 재발로 1주 모니터 기간 단축, B-claudeapp-fd-leak-anthropic-report 로 split)2026-05-23, 2026-05-26 재발모니터 → 리포트
B-blueprint-user-add-entra-oidBlueprint User 테이블에 entraOid 컬럼 추가 (NextAuth Azure AD callback 에서 account.providerAccountId 또는 profile.oid 저장). 현재 User.id = Prisma cuid 라 Graph /users/{key} 호출 시 UPN/email 만 사용 가능. 미래 Graph endpoint 중 oid 만 받는 것 (event subscription, change notification 등) 대응. D-bp-mcp-calendar-2 의 send-as 함정 발견 직접 결과 (/ops/known-gaps#blueprint-user.id-≠-microsoft-entra-oid)2026-05-260.3d (schema migration + auth callback 갱신 + 백필 1회)
B-msal-cache-flush-on-consentAzure App admin consent 직후 MSAL acquireTokenByClientCredential 의 in-memory 토큰 캐시가 옛 (insufficient-scope) 토큰 계속 반환하는 함정. 현재 우회 = blueprint-app 컨테이너 수동 재시작 (전체 MSAL instance 폐기). 영구 fix 후보: (a) getMsalApp() 의 캐시 invalidation hash 에 “last admin consent timestamp” 같은 외부 signal 포함 — Azure CLI 의 admin-consent 명령 후 운영자가 axe blueprint touch-msal-cache 한 줄 실행, (b) acquireTokenByClientCredential({ skipCache: true }) 를 매 호출 사용 (성능 영향 검토), (c) MSAL 의 clearCache() API 호출하는 admin endpoint 신설. (a) 가 가장 간단. (/ops/known-gaps#msal-acquiretokenbyclientcredential-토큰-캐시)2026-05-260.5d
B-frame-cross-check-workflow외부 회계법인 cross-check workflow — frame 의 monthly trial_balance / income_statement export + 회계법인 회신 매칭 + adjustment 분개 자동 생성. hive payroll L2 패턴 mirror. Truvia 측 외부 회계법인 협의 결과 회신 시 본격 등재 (사내 협의 진행 중)2026-05-25M2, 1d (회신 후)
B-customer-deploy-generalization-phase3-3rd-customerB-customer-deploy-generalization Phase 3 잔여 — 3rd customer dry-run (realchoice 이후 다음 신규 customer 의 self-deploy 검증). Phase 1 + Phase 2 (realchoice D-day) ✅ 2026-05-25/26. 3rd customer 사례 발생 시 axe CLI flow 재현성 확인 + 추가 함정 발견 시 R6+ phase 등재2026-05-25M2, 0.5d (3rd customer onboard 시)
B-cf-token-rotation-2026-05-25Cloudflare API token (Cloudflare API - axelabs) 의 실제 값이 본 세션 transcript (axe secret get 출력) 에서 평문 노출. 토큰 가치 = 도메인 zone DNS Edit 권한 = 운영자 측 인프라 통제. 회전 권장: Cloudflare dashboard → API token → revoke + 신규 발급 → axe secret push CLOUDFLARE_API_TOKEN ...2026-05-25M1, 0.3d
B-realchoice-d-plus-checklistrealchoice 측 후속 회신 (RE^2 §7): vault 데이터 마이그레이션 plan (D+7), 마케팅 에이전트 10 → Blueprint Agent row 매핑표 (D+7), nemotron-personas 라이선스/origin (D+14), 2026 4Q 회계 병행 인력 분배 (D+30). 각 회신 시점에 docs / customers.yaml / Blueprint Agent row 반영2026-05-23M1-M2, 각 0.5d (회신 후)
B-magnet-tenant-env-injectionaxe ship magnet --customer <id>customers.yaml.service_tenant_map.magnet 에서 MAGNET_TENANT_SLUG/MAGNET_TENANT_ID 자동 주입. 현재는 service operator 가 .env.local 수동 편집. D-magnet-tenant-map-1 후속2026-05-23M1, 0.5d
B-nemotron-catalog-promoteTruvia 측 D+14 라이선스 회신 후, cross-customer OK 면 /services/nemotron-personas placeholder 본격 보강 + Blueprint MCP registry 등재. cross-customer X 면 customers.realchoice.private_services[] 신설 + 라이선스 박스 명시2026-06-15M1, 0.5d
B-operator-bus-factor운영자 SPOF (인력 1 명만 운영 가능) 해소. 2 인 이상 운영 가능 + cold SSD paper memo 분리 ownership + 분기 drill. 트루비아 측 보고서 (RE^2 §Q8) 가 drill 동참 의사 명시 — 분기 drill 일정 사전 통보 약속2026-05-23M5, 2d
B-container-name-customer-prefixframe/docker-compose.yml:197 (axe-frame-proxy), hive/docker-compose.yml:124 (axe-hive-proxy), vault/docker-compose.yml:29/66 (axe-vaultwarden, axe-vault-caddy) 의 container_name 이 axe- prefix 박혀 있음 — customer-per-macmini 격리로 충돌 없으나 realchoice macmini 에 axe-frame-proxy 가 떠서 misleading. ${CUSTOMER_PREFIX}- 변수화 또는 customer-agnostic 으로 정규화. 트루비아 측 첫 보고서 직접 지적 (2026-05-23). 운영 영향 0, docs/도식 명확성 中2026-05-23M1, 0.5d
B-axe-labs-ai-2faaxe-labs-ai GitHub 계정 2FA 강제 활성 — Settings → Password and authentication → Two-factor authentication. PAT 분실/유출 시 추가 보호 layer. ai@ 자동화 영향 0 (PAT 는 2FA 우회)2026-05-230.1d. 운영자 5분
B-hive-send-202605axev 2026-05 실 메일 발송 (payroll_send_all_payslips dry_run=false) — 2026-05-28 hive MCP 검증 결과 partial: 강태훈 ✅ sent (send_log id=6, channel=graph_api, status=sent, 2026-05-25T15:11:51), 한진우 ❌ pending (RRN 등록 선행 [B-hive-hanjinwoo-rrn]). DKIM/DMARC live 검증된 상태. 한진우 RRN 입력 후 본인분 send 실행 시 본 항목 ✅ 가능2026-05-22period_id=4
B-hive-mark-paid-202605axev 2026-05 KB 일괄송금 + payroll_mark_paid. hive event 발행 → frame-worker pending_payroll INSERT 예약2026-05-22D-frame-1 흐름
B-frame-ingest-kb-202605KB 거래내역 download → frame.ingest_kb_* → match_pending_sweep 자동 매칭 분개 생성. matching principle 검증 cycle 1번째. 2026-05-28 frame MCP 검증: axec raw_transaction 일부 존재하나 전부 journaled=false (+ 0원 카드 가승인/취소 noise) — 실 KB 거래내역 download + matching cycle 미수행 = pending2026-05-22D-frame-1
B-hive-202604-reconaxev 2026-04 cycle 산출 + mark_paid (강수훈 정산 24,660 환급 분개 발행)2026-05-22정산-only payslip 분기 코드 ready
B-hive-hanjinwoo-rrn한진우 주민번호 별도 보안 채널 수령 + complete_onboarding(national_id). 4대보험 신고 전 필수2026-05-22D-hive-18
B-frame-axev-resolution-ktx강태훈 임원 보수 axev 이사회 결의서 등록 (frame.axev.internal_resolution) + award.resolution_id backfill2026-05-22감사 추적
B-hive-simplified-tax-import국세청 2026 간이세액표 정확 import. 현재 placeholder 근사식 + 강태훈/한진우 ground truth row 만 정확2026-05-22D-hive-21. 다른 직원 임금 시점에 발견 risk
B-hive-reported-income-axevaxev 보수월액 신고치 확정. 현재 4,186,222 (연금) / 4,022,567 (건강) 추정 → 실 4대보험 신고서 cross-check2026-05-22D-hive-21
B-hive-golden-citests/payroll/golden_axec_2026_04.json 자동 CI 가동 (현재 수동 검증만). 산식 회귀 방지2026-05-22D-hive-21
B-hive-phase4-wage-tax원천세 자동 신고 자료 + 4대보험 EDI + 퇴직금 + 연말정산 + 연장/야간/휴일 + 연차수당2026-05-22Phase 4 scope
B-axelabs-ai-liveaxelabs.ai 도메인 라이브 배포 — Cloudflare Tunnel DNS (apex + www) + cloudflared ingress + docker compose up -d --build. /Users/axe/axelabs/ 의 Next.js standalone 컨테이너 (host:3900). 회사 홈 + /ui 쇼케이스 동시 노출2026-05-22docs.axelabs.ai 와 동일 패턴. /Users/axe/axelabs/DEPLOY.md 참고
B-axe-ui-blueprint-migrateBlueprint 가 @axe/ui 채택 — pnpm add git+ssh://...axelabs#v0.1.0 + transpilePackages: ["@axe/ui"] + globals.css 의 토큰 import 로 교체 + Fontshare <link> 정리. 기존 globals.css 와 @axe/ui 토큰의 시각 차이 회귀 점검2026-05-22B-axelabs-ai-live 선행 권장 (production tag 가 있어야 핀 가능). 첫 외부 소비자 검증
B-axe-ui-v0.1-tagaxelabs 레포에 v0.1.0 git tag — 외부 소비자들이 핀할 stable 버전 시작점. tag 직전 build/typecheck 통과 + axelabs.ai 라이브 확인2026-05-22B-axelabs-ai-live 후
B-axe-ship-update-hookDONE 2026-06-03 (axe-cli aa43d4a): cmd_ship post-deploy hook — updates.mdx Ship Log 자동 stub(멱등, backtick-hash) + --no-update-hook. 전체 guarded(ship 안 깸), 배포 성공 후만. 단 backlog 자동 promote 는 surfacing-only(🔧 항목 제안 출력) — markdown 행 자동이동은 fragile 해 제외, true 자동화는 B-axe-backlog-promote-cli 선행. D-docs-updates-1 Phase 22026-05-22done: Ship Log 자동화
B-axe-cli-git-trackDONE 2026-06-03: ~/.axe/bin 제자리 git-init(코드-only, 비밀은 ~/.axe 루트라 범위 밖) + 비공개 remote github.com/axelabs-ai/axe-cli(genesis ad91ea0, .bak·pycache gitignore). 이후 일반 git flow. (결정: 별도 repo 화 — ~/.axe 통째 git-init 은 tokens.json·vault/.env 밀집으로 기각.)2026-05-23done: axe-cli repo
B-axe-backlog-promote-cli 🆕axe backlog promote <id> — backlog.mdx 의 🔧/📋 항목을 ✅ Done 섹션으로 안전 이동(행 파싱 → 재배치 → 완료일·결정링크 삽입). 현재 B-axe-ship-update-hook 의 promote 는 surfacing-only(후보 출력) — markdown 행 자동이동이 fragile 해서다. 이 명령이 생기면 ship hook 이 호출해 true 자동 promote 가능. + 본 세션이 ✅ 항목을 in-place 마킹만 하고 물리적 Done 이동은 deferred 한 것도 이 명령으로 일괄 처리2026-06-03M3, 0.3d. B-axe-ship-update-hook 후속
B-matrix-backlog-system 🆕 ⭐matrix 를 backlog/roadmap/ship-log 구조화 SSOT 로 (D-matrix-3, ADR matrix/docs/adr/backlog-roadmap-system.md). markdown 의 멀티라이터 충돌·fragile 행이동·수동 카운트 해소. Phase 1 구현완료(미배포): matrix-postgres 3테이블(backlog_item/roadmap_milestone/ship_event, slug PK) + MCP 8도구(backlog_list/create/update/transition·roadmap_*·shiplog_*) + import 파서(206 backlog+16 ship+7 roadmap dry-run 검증), cargo check ✓. 잔여: Phase 1 배포(feat/wan-monitor 와 분리 브랜치 권장)+import apply, Phase 2 의례 cutover(전 서비스 CLAUDE.md→matrix MCP, ship-hook→shiplog_append, B-axe-backlog-promote-cli 흡수), Phase 3 보드뷰(axelabs app)+REST+host-side gen-docs2026-06-03M3 epic, Phase 1 done. D-matrix-3
B-axe-ui-consumer-mysrtmysrt 가 @axe/ui 토큰만 도입 (FastAPI+Jinja+vanilla JS, React 없음). Toss Pink 브랜드 유지 결정 → [data-brand="mysrt"] scope override 패턴. 토큰 이름만 통일2026-05-23브랜드 정책 결정 필요. 후순위
B-axe-ui-consumer-distributaDistributa (현재 빈 Vercel scaffold) 가 product surface 정의 후 sync-axe-ui 도입. 신규 화면 짓기 시작할 때 적용2026-05-23product 정의 선행
B-docs-box-verify-cronnpm run verify:box 의 cron 등록 (매 30분 또는 시간) — Cloudflare/외부 변화 catch. 운영자 launchd job. 실패 시 alert (e.g., known-gaps 자동 등재 또는 Slack/Teams webhook)2026-05-23Phase 20-21 의 보강. axe ship 통합으로 deploy 시점은 차단 — cron 은 외부 요인 catch
B-axe-ui-radix-bump@axe/ui v0.3.2 의 미해결 QA P1 11 + P2 6 fix (a11y/types/skip-link/contrast 등) → v0.3.3 patch. Phase 16 audit 보고서 참고2026-05-23non-blocking, 다음 cycle
B-docs-cf-purge-cliaxe cf purge <url> CLI 신설 — Cloudflare API token 을 vault 에 등재 후 운영자가 dashboard 우회. 본 chapter 의 Cloudflare 옛 404 4시간 잔존 fix 시 운영자 dashboard 작업 강제됐던 점 해소2026-05-22wrangler scope (cache_purge) 없음 확인
B-axe-secret-send-dmaxe secret send <ENV> --service <svc> --to <email> --dm flag 추가 — Bitwarden Send URL 발급 + Blueprint /api/admin/broadcast-dm 호출까지 1 명령에 묶음. 현재 운영자가 (1) axe secret send ... 6 회 + (2) curl /api/admin/broadcast-dm 3 회 + (3) 메시지 본문 bash 합성 필요. --dm 가 to-email 매핑 (taehun → [email protected]) + 메시지 템플릿 (--template connector-onboarding) + CRON 자동 추출까지. SSOT: /architecture/secrets § 자동 발사2026-05-23본 세션에서 발견 (axe-secret-send 라이브 첫 사용). 현재 docs 의 employee-onboarding §5.2 가 the bash boilerplate. --template 카탈로그도 같이 등재
B-vault-org-create-automation 🆕Vaultwarden organization 자체 생성 명령 부재 (client-side encryption 으로 web UI 만 가능). customer onboarding 시 운영자가 web UI 30초 수동. 영구 fix = (a) Vaultwarden API + admin token 으로 직접 호출 또는 (b) Playwright headless 자동화. Truvia 5/26 D-ops-32 = realchoice org eac93965-... 수동 생성 + 4 collection. 영향: 신규 customer 마다 30초 + 사람 손 의무2026-05-26M2, 0.5d
B-vault-org-cli-automation 🆕bw CLI 의 organization invite/confirm 명령 부재. Truvia 5/26 우회: Vaultwarden API + data.json 의 user_<uuid>_token_accessToken JWT 추출 (2025.7.0 schema). customer 측 onboarding 자동화에 필수. 영구 fix = (a) custom bw helper script (axe axe vault org-invite <email> 신설) 또는 (b) upstream bw CLI PR. Vaultwarden REST API 사용 (POST /api/organizations/{id}/users/invite)2026-05-26M2, 1d
B-port-conflict-preflight 🆕onboard step 3 (SSH probe) 직후 step 10 (docker preflight) 이전에 포트 충돌 사전 점검 추가 — ssh <host> "docker ps --format '{{.Names}}\t{{.Ports}}'" 매트릭스 추출 → AXE platform 표준 포트 (3700/3710-3712, 3800/3810-3812, 3100-3151) 와 cross-reference. 충돌 발견 시 차단 게이트 + 운영자 알림. realchoice 14 컨테이너 사례 (trap #6). 영구 fix = _onboard_step_port_audit 신설 + B-realchoice-port-collision-audit 통합2026-05-26M1, 0.3d
B-frame-keychain-to-vault 🆕frame docker-compose 의 FRAME_STORAGE_HOST_DIR=/Users/axe/frame/.local hardcoded default 영구 fix. R1 (HOME 변환) 부분 fix 적용 (wrapper 의 .env.local 에 FRAME_STORAGE_HOST_DIR=${HOME}/frame/.local 명시), 하지만 service repo 의 docker-compose.yml SOT 도 ${HOME}/frame/.local default 로 변경 필요 (frame 측 PR). 동일 검토 = blueprint·hive·matrix compose 도 axe 절대경로 hardcode 잔존 여부 grep2026-05-26M1, 0.5d (frame PR)
B-bw-cache-stale-autoheal 🆕bw CLI 의 local data.json cached cryptoSymmetricKey 가 server-side patch deploy (axe.2 / axe.3 등) 후 stale 상태로 저장되어 매 unlock [Encrypt service] MAC comparison failed → recurring (5/22 + 5/26 두 차례 manual recovery). bw unlock 은 cache 무효화 X. 영구 fix 3 갈래 (자동화 작업, docs portion 은 2026-05-28 ✅): (a) axe vaultcmd_vault_reset 신설 — data dir 옆으로 이동 + bw config server + bw login one-shot. 운영자 1 명령. (b) _bw_get_password 헬퍼가 MAC fail 패턴 감지 시 자동 reset + retry 1회. 자동 self-heal. (c) axe ship vault 의 post-deploy hook 이 patch shape 변경 감지 시 운영자에게 “운영자 자신 macmini 의 bw 재로그인 권장” osascript 알림. 함정: ai@’s personal vault 만 ~37 items 라 fresh login → sync 시 약 30초. 본 backlog 의 (a) 가 핵심 — (b), (c) 는 부가 가드. docs 측 표준 recovery 절차 = /ops/runbook/vault-recovery#bw-cli-data-json-cache-stale-recovery (2026-05-28 ✅).2026-05-26M1, 0.5d (자동화 잔여)
B-trap-33-frame-hive-multi-issuer 🆕trap #33 영구 fix — docs portion (c) ✅ 2026-05-28 (/architecture/auth line 147 정정 + 함정 표 row 추가). 잔여 code fix 2 갈래: (a) frame + hive code 에 v1 issuer 추가 — Blueprint MCP 의 config.py:76,81 + auth_oidc.py:153 issuer=[v2, v1] 패턴 mirror. get_microsoft_issuer_v1() helper 추가 (return f"https://sts.windows.net/<tenant_id>/"). 위치: /Users/axe/frame/src/frame/mcp/http_server.py:141 + /Users/axe/hive/src/hive/mcp/http_server.py:67. (b) bootstrap.sh 가 등록 시 v2 강제 + 검증 — Truvia D-day 시 3 app 모두 v1 였다 = PATCH 누락 또는 실패. bootstrap.sh 의 PATCH step 정합성 검증 + 등록 후 manifest version 검증 step 추가.2026-05-25M1, 0.7d (frame PR + hive PR + bootstrap.sh)
B-customer-sovereignty-architecture 🆕Q3 milestone. Truvia 측 architectural concern (5/25): operator vault SoT (D-ops-17) → customer-측 vault/secret SoT 으로 재 architecting. 본질 = operator 가 모든 customer secret 의 SoT 라고 주장 = customer data sovereignty 침해. 올바른 architecture: Code SoT=Github / Image SoT=registry / Service secret + Business data + Service config SoT = customer 본인 macmini. operator 책임 2개만 = (a) software supply (code/image push to registry) (b) 외부 노출 (DNS/tunnel ingress catch-all). axe deploy 의 vault fetch + customers.yaml 의 secret manifest 모두 제거. customer 자율 secret (openssl rand + .env + customer 자체 vault). 5/25 D-day 의 self-deploy 패턴 (Truvia 가 본인 .env + compose 자체) 가 본 architectural change 의 첫 실제 적용. customers.yaml = customer 식별 (legal_name, public_domain, tailscale_host) + onboard step (cloudflared tunnel/DNS) 만 유지.2026-05-25M2/M3 Q3, 5d
B-customer-deploy-generalization-r6-volume-precreate 🆕trap #19 + #23 영구 fix. docker-compose 의 external volume — (a) blueprint 6개 (app-data/workspace/claude-data/postgres-data + mcp-proxy data/config) 신규 customer 측 사전 부재 → compose up fail (trap #19), (b) hive 2개 (hive-proxy_axe-hive-proxy-{data,config}) 의 historical compose project prefix 정합성 문제 (trap #23) — 둘 다 본 R6 phase 에서 함께 해소. 영구 fix 2 옵션: (a) compose 의 external:true 제거 → compose 가 자체 volume 자동 생성 (권장 — compose self-contained, customer self-deploy 친화). (b) axe deploy pre-step 으로 docker volume create 자동 호출. R6 (customer-deploy-generalization 차기 phase) 으로 묶음.2026-05-25M1, 0.5d
B-docs-ssot-extension-2026-05-26-newpages 🆕B-docs-ssot-extension-2026-05-26 의 잔여 — 신규 페이지 2 (A1/A2) 만. A1 /partner/macmini-existing 신설 (기존 운영 macmini → customer 전환), A2 /services/vaultwarden 또는 /architecture/vault-integration 신설 (Timshel image + compose/Caddyfile/env 패턴 + axe.2 patch 정체 + D-ops-37 fork build). 정정 7건 (B1-B7) 은 2026-05-28 본 세션 ✅ 완료. A1/A2 는 5/27 D-day 후 Truvia 측 첨언 사전 받아 시작 권장2026-05-26M2, 0.5d
B-vault-collection-migration-v1 🆕D-ops-32 의 6 collection 신설 완료 (2026-05-26) 후속 — item migration + 옛 collection cleanup. 3 단계: (1) 운영자 personal vault → Platform — Service Secrets 이전 = axe secret list 의 ~37 service secrets (frame/hive/blueprint/matrix /axe/* + Cloudflare API + shared/* + infra/realchoice/) 가 현재 ai@ personal vault only ⇒ bus factor 위험. organization Platform — Service Secrets 로 옮기면 soohun 도 access. bw share (deprecated → bw move) 또는 web UI. (2) Default 의 3 items 분류: github PAT: [email protected] → Platform — Infrastructure (또는 rotation 후 폐기 — [B-cf-token-rotation-2026-05-25] 패턴), axe-macmini local: {soohun,taehun}.kang 은 각자 personal vault 가 본질 — organization 에서 제거 권장. (3) 옛 4 collection 의 item 이동 + collection 삭제: frame-jwt-axec 의 taehun-kang-axec-2026-05-17 + frame-jwt-operators 의 ai-operator-2026-05-16 검토 (D-ops-14 frame JWT 잔재) — Platform — Service Secrets 으로 옮기거나 unused 면 삭제. 빈 collection (frame-jwt-axev) 즉시 삭제 가능. Default + frame-jwt- item-empty 화 후 collection 삭제. 위험: axe CLI 가 name 기반이라 이동 자체는 안전, 다만 (a) item 이름 변경 금지 (axe secret get <name> 깨짐), (b) item 삭제는 영구 — 검토 후 진행. bw move <id> <orgId> <encodedCollectionIds> 가 personal→organization item 이전 명령. organization 내 collection 변경은 item 의 collectionIds 갱신 (bw edit) 으로.2026-05-26M1, 1d (운영자 검토 시간 큼)
B-blueprint-settings-graph-reconnect-button 🆕Blueprint /settings (또는 /axe/settings Integrations) 의 GraphToken status panel + Reconnect 버튼 부재 — 운영자가 token expiry / refresh 실패 진단·회복 self-service 불가. 본 세션 (2026-05-26) 함정: ai@ token 이 1.5h 전 expired + AADSTS65001 (Calendars.ReadWrite scope admin-consent 누락) 으로 refresh 침묵 실패. UI 는 “Connected as [email protected]” 만 표시 — token 실제 상태 0. 운영자가 직접 /api/graph/auth URL 알아 방문 + admin consent 별도 trigger 모두 운영자 black-box 지식 의존. 요구 UI (3 요소): (1) 현 상태 panel — Connected/Disconnected/Expired/RefreshFailed status badge + expiresAt 카운트다운 + 마지막 refresh 시각 + 현재 grant 된 scope 목록. (2) Reconnect 버튼 — 클릭 시 /api/graph/auth 로 redirect (prompt=consent 강제 query 추가). 옛 token row 는 fallback 으로 보존. (3) Admin consent 검증 + 안내 — Microsoft 화면에서 “Need admin approval” 차단 시 운영자 본인 (Global Admin) 으로 sign-in 안내 또는 별 admin consent URL 직접 제공 (https://login.microsoftonline.com/{tenant}/adminconsent?client_id={app}). 본 세션에서 발견 (강수훈 직접 보고: “settings 에서 기본적으로 reconnect 버튼이 필요해보입니다. 흐름이 이상하지 않습니까”).2026-05-26M1, 0.5d
B-blueprint-scope-change-admin-consent-runbook 🆕Blueprint app 의 OAuth scope 추가 ship 시 함정 — docs portion ✅ 완료 (2026-05-28, /architecture/auth#oauth-scope-추가-시-운영자-절차 함정 표 row + 운영자 절차 섹션). 잔여 자동화 2 prong: (1) axe ship blueprint post-deploy hookSCOPES array 변경 감지 시 az ad app permission admin-consent --id <client_id> 자동 호출 (또는 prompt). (3) Blueprint 자동 token health check — daily cron 또는 startup probe 가 모든 GraphToken refresh 시도 + AADSTS65001 발견 시 운영자 알림 (OperatorAlert + Teams DM).2026-05-26M1, 0.5d (자동화 잔여)

⏸️ Blocked (외부 차단)

ID항목차단 사유차단 해소 조건
(현재 없음)

✅ Done (최근 7일, archive 대기)

ID항목완료일결정/문서 링크
B-vault-axe.2-sso-mp-incompleteaxe.2 SSO→MP unlock 부분 fix 완전 종결 — 4명 KDF rotation 전부 완료 (D-ops-40 Progress xiii). 옛 user 의 user.akey 가 PBKDF2 600k schema 로 wrap 된 게 SSO→MP unlock 실패 원인. 본질 발견 = KDF type dropdown 변경 불필요 — Master password change + ☑ “Also rotate my account’s encryption key” 체크박스 만으로 akey 재wrap 충분 (ai@ 가 Phase A 로 검증, 나머지 3명 동일 패턴). 4명 (ai 5/27 → soohun → taehun 5/29 → jinwoo 6/4) 전부 SSO→MP unlock 정상 확인. DB: ai 는 Argon2id (Phase B 까지), soohun/taehun/jinwoo 는 PBKDF2 유지 (akey 재wrap 만 — kdf_type 안 바뀌어도 fix 동작). jinwoo last_login 5/23→6/4 점프 = 완료 신호 + 운영자 구두 확인. realchoice 측 영향 없음 (axe.2 후 신규 가입 = 새 schema). 운영자 안내 = Teams broadcast 2회 (operator-broadcast) + /onboard/vault-setup playbook. D-ops-40 전체 작업 종결 (build pipeline + axe.3 patches + deploy + 검증 3건 + 정책 layer + 4명 rotation).2026-06-04D-ops-40 Progress xiii
B-axe-cli-P0AXE CLI P0 골격 GREEN — stdlib 단일파일 ~/axe-cli/axe (login/logout/whoami + macOS Keychain + AXE_TOKEN env fallback + MCP streamable-HTTP 클라이언트 + --local Host-header 자동첨부). frame HS256 부트스트랩 토큰(frame mcp-token)으로 axe frame tools54 tools GREEN 검증. “커넥터 0 · 토큰 1회” 증명. repo git-tracked (B-axe-cli-git-track). 인터랙티브 인증 후속 = B-axe-idp-1 (Blueprint OIDC loopback PKCE).2026-06-03D-axe-cli-1
B-index-epic1-judgment-layer ✅ ⭐artifact-first judgment layer (Epic 1) — 증거층↔판단층 결합. 휴면 artifact store(39 fact)→relational 23 deal 결합: 모든 투자판단 fact 를 일급 typed+cited+audited artifact 로 승격 (kind assumption·calibration·comp·base_rate, migration 0 generic store 재사용, 링크=일급 citation index_field+artifact_ref relation, side-bridge table 아님). 23/23 deal → 357 fact, 0 orphan judgment value, additive-only 3중 증명(event propose/confirm·relational updated_at 미전진·validate-seeds Δ0), 48/48 test, sqlx clean. 2-wave supervised — adversarial gate 가 wave1 61% 미완 적발 → 직접 +4 → wave2 5딜 author + 6 rival module→1 backfill.rs 통합. index 1c707e1.2026-06-03D-index-45
B-index M7 build cohort (skeleton·azure-app·docker-compose·shared/artifact/financial migration·dsl-parser·topo-evaluator·mcp-checklist·schemas-endpoint·phase0-mcp-tools·3deal-seed·3deal-irr-validation·driver-period-refactor — 14)index 서비스 live: 23 deals·26 fund_investment·16 typed schema·artifact store(RLS)·MCP tools·DSL+topo evaluator. (phase0 4-tool 은 propose_deal_closure 로 통합 [D-index-13]; shared schema 는 public = Phase-0 설계.) validate-seeds A1 PASS Δ0.2026-05-31D-index-2~18 (triage 검증)
B-pmc-postmortem-2trackpmc skill 2-track 분리 구현 (ic: postmortem_stub/reminder · pmc: fill_interactive/render + cadence ref). ⚠ launchd reminder install 은 operator 잔여.2026-05-31D-index-12
B-index-sqlx-cache-guard.githooks/pre-commit + scripts/check-sqlx-cache.sh (cargo sqlx prepare --check), core.hooksPath=.githooks 활성화 (2026-05-31).2026-05-31D-index-32~33
B-cortex-visibility-phase1-sync-filterD-cortex-9 Phase 1 — Google contactGroup(라벨) whitelist/blacklist sync 유입 필터 (Personal/HPE 라벨 연락처 유입 차단). passes_label_filter + list_contact_group_names(id→name 맵 1회 로드) + 맵 로드 실패 시 owner cycle fail-safe skip. 민감정보 미유입의 가장 강한 보장2026-05-31env CORTEX_SYNC_GROUP_BLACKLIST(기본 Personal,HPE)/CORTEX_SYNC_GROUP_WHITELIST + sync_google_nowskipped_by_label stat. 코드 = cortex working tree (미commit), docs 반영 (services/cortex). axe ship cortex 시 commit/deploy
B-frame-hive-backup-cronaxe-backup 스크립트에 hive-postgres pg_dumpall 블록 실 추가 (D-hive-backup 결정 후 미실행) (stale-done: 감사+반증검증 통과)2026-05-30wf 감사 wf_f1573f47 (misc (B-)
B-hive-template-axevaxev payslip_email template clone + customize + activate (D-hive-25 customize 강제) (stale-done: 감사+반증검증 통과)2026-05-30wf 감사 wf_f1573f47 (hive)
B-bp-para-provenance-fieldsBlueprint Workspace에 sourceWorkspaceId/sourceArtifactPath/copiedAt 3필드 — PARA dispatch copy-with-provenance (stale-done: 감사+반증검증 통과)2026-05-30wf 감사 wf_f1573f47 (blueprin)
B-axe-ui-consumer-cortexCortex 가 @axe/ui 도입 — design token 채택 (Tailwind v3→v4 마이그 + sync-axe-ui + ★3→★4) (stale-done: 감사+반증검증 통과)2026-05-30wf 감사 wf_f1573f47 (cortex)
B-frame-fund-ksme-seedshared.account_templatefund_ksme standard 48행 이미 seed2026-05-30stale-done 감사 (DB 확인)
B-frame-mcp-register-entity-toolMCP register_entity+list_sub_entities 이미 @mcp.tool() (server.py:1470,1505)2026-05-30stale-done 감사 (코드)
B-frame-fund-commitment-ledgercommitment_ledger+lp_master 전 entity 스키마에 이미 존재 (schema 신설; population 별도)2026-05-30stale-done 감사 (DB)
B-frame-mcp-http-wraphttp_server.py 1012줄 HTTP MCP 가동 중 (frame DECISIONS.md:170 ‘M1 only stdio’ stale 정정 권장)2026-05-30stale-done 감사 (코드)
B-bp-onboard-claude-code/onboard/claude-code 페이지 5 컴포넌트 이미 구현 (Phase B)2026-05-30stale-done 감사 (코드)
B-axe-secret-totp-cliaxe secret get <name> --field totp 지원됨 (CLI —field choices ‘totp’; 전용 subcommand 만 미신설)2026-05-30stale-done 감사 (CLI)
B-frame-entity-legal-name-i18nframe DB shared.entity legal_name 정정 — 전제 정정: 사업자등록증 기준 법인명이 영문 (axec=“AXE Corporation”, axev=“AXE Ventures”) 이라 기존 “영문→한글” 전제 + customers.yaml SoT 의 한글값(“액스코퍼레이션 주식회사” 등)이 오기였음. frame-postgres 2행 UPDATE (+ per-entity audit_log) + customers.yaml(entity_meta·axe.legal_name) 정정. 잔여: hive shared.entity 가 동일 한글 stale → 운영자 확인 후 동일 정정 예정 (payroll 시스템)2026-05-30frame-postgres + customers.yaml
B-index-entry-date-backfill9 deal 전부 entry_date 기입 (executed=paid_date / planned·passed=가안), entry_basis=assumed 0건 (D-index-28 후속)2026-05-29index commit f650bec+e5ac7a6
B-index-deprecate-sump-irrΣp·IRR 폐기 → IRR(E[CF]) 단일 canonical (사용자 승인). weighted_irr_* 제거 + #[deprecated] + 9 baseline·html·xlsx 전환2026-05-29D-index-32, index commit 3b2f543
B-index-docs-irr-ecf-restatedocs IRR 을 canonical E[CF] 기준 재기재 — 8-deal 랭킹 확정 (tail flip Sendy 11.7 > Novachips 9.2) + per-deal 구→신 표 + seed 주석2026-05-29D-index-34, index commit 537c04e
B-index-instrument-adjusted-irrwon’t-do — instrument 효과가 exit_matrix leaf recovery 에 이미 반영 (flat discount table 은 이중계상). discount table 미구현 + Novachips irr_instrument_adjusted 폐기 + seed.rs 가드2026-05-29D-index-33, index commit 74e1eb4
B-blueprint-mcp-send-mailBlueprint MCP 범용 이메일 발송 tool send_mail (D-bp-mcp-mail-1). create_event 형제 — 신규 route POST /api/internal/mail (caller delegated Mail.Send self 발송 / admin app-only send-as) + Python tool mail.py + append-only MailSendLog audit (migration 20260529120000_add_mail_send_log). params: to/subject/body(html|text)/cc/bcc/attachments(base64)/save_to_sent_items/as_user_email/dry_run. 에러: send_as_forbidden/recipient_invalid/mail_send_not_consented/graph_error. typecheck 0 errors. ⚠️ Azure 선행조건 (운영자 1회): send-as 경로는 Next.js app (2b222356-...) 에 Application Mail.Send + admin consent 필요 — self 발송은 delegated Mail.Send 이미 보유라 불필요. 절차 = /architecture/auth § app-only Application permission. docs (blueprint/auth/mcp-server-checklist/decisions) 동시 갱신.2026-05-29branch feat/bp-mcp-send-mail, services/blueprint
B-index-infinity-3stepPrj_Infinity(INEX) 축적 — 3-step surface→재수행→비교 (D-index-23). 사용자 “기존 데이터 적재 테스트 → 신규 IC 재수행 → 두개 비교로 전 건들과 같게”. Step1: v8 FINAL(irr_locked) surface 적재 → index 13.8%/1.70x 정확 재현 (ev_bridge·net debt 0 보통주·exit-diluted 0.0724% — surface 모범). Step2 재수행: 외부 research — 실명계좌 base-rate near-zero(2021 특금법 후 원화마켓 신규 0건, P<10%) / 코빗 ceiling 1,000-1,400억 / Gopax·Binance license-shell M&A 선례 / 보통주 distress recovery 020%. 모달 exit 를 won-market rerating 아닌 SI shell M&A breakeven 으로 reframe + 보통주 wipeout leg(18% @ 0.12x). Step3 비교: calibrated −8.3%/0.82x. ~22pp gap + sign-flip. 핵심 = 성숙·정직한 v8(hurdle 미달 공개)도 핵심 base-rate 를 mgmt optimism 에 anchor + 보통주 wipeout 누락 → 역전. proceeds 메커니즘 불변(analytical gap only). canonical 결정 (D-index-24): executed/Closed deal 이므로 IC-approved 13.8% 가 canonical (decision-time 기록 보존), −8.3% 는 infinity_recalibrated.yaml retrospective overlay. 8-deal canonical: Infinity 13.8 (HancomNovachips 사이). validate-model 0 errors. IC memo v9 = OneDrive.2026-05-29index commit c0dcd9a + canonical swap
B-index-proceeds-bridge-hardeningproceeds 산정 강화 — EV→EqV(net debt) bridge + exit-dilution 명시·강제 (D-index-22). 사용자 audit “모두 EV=EqV+Net Debt + 투자 후 dilution 고려됐나 체크” 의 답. 발견: 7-deal proceeds 비일관 — net-debt bridge 는 Canopy 만 명시(EV 797−netdebt 300=EqV 498), Sendy(v2)·Iippo 는 stake×EV 직접, pre-IPO 3+Sentry 는 equity multiple(N/A); dilution 은 Iippo·Sentry entry F/D flat. 결정 = D-index-20 IRR determinism 을 proceeds 로 확장: proceeds_basis enum (ev_bridgeequity_valuemom
B-index-sendy-current-practice-rewrite센디(Sendy) IC v2 재작성 — 현 practice 재calibration (D-index-21). 사용자 redirect “그냥 적재 말고 ic memo 를 현 practice 수준으로 새로 써라 (당시 방법론 열위)”. D-index-19 (surface→calibrated) 의 종착 = memo 방법론 자체 재작성. 3-tier IRR: v1 md 31%/22.8%(fabricated) → v1 Excel 92.4%(math-correct, 낙관 input) → v2 현 practice 6.5% ⭐ canonical. v1 5결함 교정: IRR override(D-index-20 차단) / wipeout leg 부재(Downside +31.6% gain → 손실 시나리오 없음) → genuine 18% wipeout(부릉 1/6 recovery) / sendyX 66x 미검증 → base-rate haircut(-93%) / Exit 5x flat → segment-weighted(freight 11.5x + SaaS 45x, WiseTech-E2open 3.5x) / instrument 분석 부재. 외부 anchor: Convoy $3.8B→0 + 부릉 1/6 distress → wipeout 15~25%, 한국 Series C→IPO 예외(TMAP 교훈). 결과 4-scenario E[IRR] 6.5% / E[MoM] 1.51x / Sharpe-like -0.06. 7-deal 랭킹 Sendy 6.5 최하위로 정정. 산출물: OneDrive ic/memo/v2_axe_current_practice_260529.md + seed v2(version:2). validate-model 7/7 PASS.2026-05-29index commit b77a236
B-index-sendy-passed-deal센디(Sendy) 축적 — IRR override 오류 flagship + 첫 declined deal (D-index-20). 출처 1_Project/Pipeline/Sendy/. index 존재 이유 결정적 증거: exit_matrix/v1.yaml 의 corrected: 35% manual override (계산값 95.7% 를 근거없이 변경) — index 는 IRR 을 proceeds 에서 deterministic 계산 → override 물리적 불가, EV-derived seed → 자동 교정 (Base 95.7/Downside 31.6/Upside 146.6/weighted 92.43, Excel 일치). deal.stage ‘Passed’ 추가 (migration 0004) — declined deal first-class tracking. 7-deal portfolio Closed 3 / IC 3 / Passed 1. PASS 사유 구조+타이밍 (quality 아님). honesty: screening-grade model (sendyX 66x 미검증). validate-model 7/7 PASS.2026-05-29index commit 9263179
B-index-3-preipo-deals3 pre-IPO deal (스타넥스/한컴인스페이스/노바칩스) calibrated 검토 본 축적 (D-index-19). 출처 _comparative_20260528_preIPO/ 13-agent 비교 IC 메모. surface IRR(19.6/58.5/-1.5) → calibrated(36.4/22.4/7.45) 재calibration 본을 index 에 typed fact 로 저장 (xlsx surface cell 아님). pre-IPO scenario-tree 모델 (scenario=단일 outcome), parse_timing_years 소수 연도 확장 + timing CHECK 완화 migration. 6-deal portfolio 랭킹 검증 + validate-model 6/6 PASS. 신규 backlog 발견: B-index-instrument-adjusted-irr (보통주 vs RCPS 8-15pp discount systematic 적용).2026-05-29index commit e130a69
B-cortex-production-liveCortex (Rust + axum + sqlx, 첫 비-Python MCP 서비스) 를 claude.ai connector 까지 production live. 폐기 (file-based recall → .legacy.20260526/) → Rust 재출발 (19 task) → 5 secret vault push → Entra app (az cli) + Google OAuth Web client (Cloud Console, 신규 프로젝트 cortex-497605) → Cloudflare ingress (Dashboard remote-managed, CF API PUT) → docker compose (postgres+blue+green+proxy) + 2 migration → claude.ai connector (client_id+secret) → Microsoft OAuth → 12 tools 노출 + whoami + connect_google 검증. 시행착오 7 함정 (known-gaps Cortex) 전부 해소: DB password URL 파싱 (PgConnectOptions) / env_file 따옴표 / RFC 9728 resource-level path / RFC 8414 path-insertion (→ Microsoft-direct) / claude.ai client credential / ASCII-only property key (메모memo) / Cloudflare remote-managed tunnel. B-cortex-mcp-crash-loop (2026-05-27 등재) 해소 — 원인은 env_file 따옴표 + DB password URL + stale Docker image 복합.2026-05-28D-cortex-1..8, services/cortex, cortex commits c65b934..dfa9330
B-cortex-dockerfile-healthcheckblue/green 컨테이너 영구 unhealthy 해소. 원인: healthcheck CMD 가 python -c urllib... 인데 Rust/Debian-slim 이미지엔 python·curl·wget 전무 (/usr/local/bin/cortex 바이너리만). 트래픽 무해 (Caddy alias routing 이 health-gate 안 함) 했으나 blue/green swap 의 healthy gate 잠복 위험. fix = binary self-probe: cortex healthcheck 서브커맨드 (GET 127.0.0.1:$CORTEX_MCP_PORT/healthz, 2xx exit 0) + compose test ["CMD","/usr/local/bin/cortex","healthcheck"] (green 은 <<: *cortex-mcp-blue 머지 상속). Settings::load 전 short-circuit → DB 자격증명 독립 (false unhealthy 방지). index 의 python→curl 과 다른 선택 — 패키지 추가 없이 기존 바이너리 재사용 (minimal-base 정합). 검증: rebuild 후 blue+green (healthy) + 외부 200/401 유지. index 도 동일 패턴 정렬 권장 (curl 의존 제거, 우선순위 낮음).2026-05-28cortex commit b8d3aa0
B-cortex-private-partition-phase0D-cortex-9 Phase 0 — artifact visibility tier (shared|private) 도입. soohun.kang 2026-05-28 “Private Partition” 요청. migration 0003 (artifact.visibility DEFAULT shared + CHECK + index, 기존 3,250행 shared) + register_person visibility(private→Google push skip)·classify_person·update_person(re-tag) 에 visibility+skip_audit_payload + list_persons visibility/exclude_classification_key/_value 필터 (QueryBuilder) + get_person visibility 노출. 신규 schema key 전부 ASCII. 검증: build + migration + blue/green healthy + 필터 5-assertion rolled-back SQL 테스트 (zero residue) + 외부 200/401. 잔여(auth): claude.ai tools/list 12 + register_person(private) 실 round-trip 스모크.2026-05-28D-cortex-9, services/cortex, cortex commit f8cad8c
B-blueprint-agent-sdk-integrationD-index-17 Phase 2 — Blueprint Agent SDK 가 index MCP 의 skill 을 fetch 해 local cache sync. scripts/sync-index-skills.sh (index-skill-sync.py wrapper) + launchd/ai.axe.index-skill-sync.plist (10분 주기, RunAtLoad=true). drift 감지 시 /tmp/blueprint-skills-drift.log 에 기록. cache target = .claude/skills-cache/{ic,ingest,pmc}/. 검증: 1차 sync 3 skill / 61 file added (ic + ingest + 신규 pmc 자동 발견), 2차 sync 61 unchanged (cache hit). 운영자가 launchctl load 시 자동 동작. D-index-17 overlap 정책: 현재 SoT = .claude/skills/{ic,ingest}, skills-cache = 검증 사본 (drift 감지). sunset 후 cache 가 SoT.2026-05-28blueprint commit 579a0fa1
B-pmc-skill-skeletonD-index-12 — Post-Money Care skill 신규 scaffold (Background Agent worktree 에서 진행). 30 files / 1,906 LoC: SKILL.md (213 line) + 8 agents (data-fetcher / kpi-extractor / risk-alerter / valuation-updater / exit-signal-analyzer / board-pack-drafter / lp-comm-drafter / index-payload-composer, avg ~93 line) + 5 references (kpi-catalog [portfolio-management copy] / ir-lifecycle [investor-relations copy] / postmortem-cadence symlink to ic SoT / risk-kind-frozen [5 enum 박제] / trigger-tiers [SCHEDULED/EVENT/MANUAL]) + 4 Python stubs (render_postmortem / postmortem_fill_interactive / quarterly_close / event_trigger) + 11 sub-dir .gitkeep (runtime output 구조 박제). Phase 0 = scaffold only, Phase 1 = 첫 quarterly cycle 실행. 검증: index MCP list_skills 가 자동 발견 (ic + ingest + pmc), Blueprint sync hook 도 자동 fetch.2026-05-28index commit 2a74ef0
B-index-3fs-bs-cf-completionD-index-18 Gap 2 마무리 — Phase 0 working capital + simplified debt/ppe model 로 BS 12 line + CF 7 line 모두 derive. compute_3fs 가 IS-only → full 3FS. BS: ar=rev×dso_days/365, inv=cogs×inv_days/365, ap=cogs×dpo_days/365, ppe_net=cum_capex, equity=init+Σni, cash=plug (defaults 60/30/45 days, equity_init 1억). CF (indirect): ni+dep−Δwc−capex−debt_rp. xlsx 4→6 sheets, HTML 7→9 sections. 검증 Iippo Y1: total_assets = L+E = 14.4M+209.5M = 223.9M ✅ balanced. 4 (deal×scenario) compute_3fs persist 성공 (217+217+155+155 rows). 4 standalone HTML 모두 9 sections, 브라우저 즉시 view. Phase 1 = depreciation schedule + debt amortization + intangibles + deferred tax.2026-05-28commit 8997e28
B-index-xlsx-roundtripLP 가 수정해서 돌려보낸 xlsx 의 변경 검증 + DB 반영. 16번째 MCP tool import_xlsx(file_path, deal_code, scenario, apply=false). calamine 0.26 crate (read), Assumptions sheet parse. Input drivers 만 비교 (derived는 formula 재계산이라 round-trip 비교 대상 아님). effective_db_value semantic: period > 0 에 값 없으면 period 0 fallback (xlsx carry-forward visualization 과 동형). diff kinds: added/changed/removed/unchanged. apply=true 시 financial_driver_value UPSERT, removed 는 보존 (round-trip safety). 검증: 무수정 round-trip 49 unchanged ✅ byte-equivalent, 1 cell 수정 (0.02→0.05) → 정확히 1 changed 감지 ✅, apply=true → DB UPSERT 1 row ✅. LP 양방향 흐름 완성.2026-05-28commit 6aa2680
B-blueprint-skill-mcp-clientD-index-17 Phase 2 — Blueprint Claude Agent SDK 의 filesystem .claude/skills/ 직접 의존 제거 reference impl. bin/index-skill-sync.py (~297 line, Python stdlib only, no deps) — index MCP 의 list_skills() + get_skill_resource() 호출 → local cache sync. Dual transport: HTTP (production, Entra ID bearer) + CLI fallback (local-dev). sha256 cache invalidation — server sha256 vs local file sha256 비교, drift 감지 시 자동 update. Conditional recursive traversalhas_{references,scripts,tests,agents} 플래그 기반 sub-dir 만 fetch (scripts/_oneoff/ 같은 nested 도 처리). --diff mode (dry-run) + --skill 단일 필터. 검증: 1차 sync 43 files added (ic 39 + ingest 4) + 모든 sha256 verified + 2차 sync 43 unchanged + drift simulation (echo >> SKILL.md) → ‘updated’ 감지 + restore 1 updated. .manifest.json 으로 audit trail. 다음: Blueprint Agent SDK 의 skill loader 에 본 cache dir 인식 + cron 등록 → D-index-17 sunset 기준 (b) 충족.2026-05-28commit 8b6f05d
B-index-lp-html사용자 결정 PDF 말고 native HTML 로 LP dashboard. 신규 src/html.rs (~360 line) + 15번째 MCP tool export_lp_html(deal_code, scenario, out_dir?) — 단일 self-contained HTML5 (inline CSS, 외부 fetch 0). 7 sections: Reproducibility / IRR Summary metric cards / Fund Investments / Income Statement (with derivation rules) / Exit Matrix (joint_probability) / Assumptions / Audit Trail. Korean font stack (Apple SD Gothic Neo / Pretendard / Noto Sans KR), @media print 으로 LP 브라우저 PDF 출력 가능, semantic HTML5 (a11y), color-coded (양수 green / 음수 red), sticky table headers. export_lp_bundle v2: index.html + xlsx + README.md (cover.md 폐기, index.html zip 첫 entry — LP 가 Finder 에서 가장 먼저 봄). 검증: Iippo base HTML 20,250 bytes, byte-deterministic (2회 sha 동일 70096195...), 3 deal × 2 scenario 성공, regression 유지. LP 흐름 update: bundle.zip 첨부 → 풀어서 index.html 더블클릭 → 브라우저 dashboard + xlsx cell audit.2026-05-28commit eb66fab
B-index-lp-bundleGap 3 마무리 layer — LP 가 1 첨부로 받는 zip + byte-deterministic. 14번째 MCP tool export_lp_bundle(deal_code, scenario, out_dir?){deal}-{scenario}-{sha[:8]}-bundle.zip (xlsx + cover.md + README.md). src/xlsx.rs 확장 (~150 line): build_cover_markdown (IRR table + Fund table + reproducibility lock + Phase 0 한계 박제), build_readme_markdown (LP 안내문), build_bundle_zip (1980-01-01 epoch deterministic). Determinism fix 3종 (D-index-4 lock 강화): (a) xlsx DocProperties.set_creation_datetime(epoch) + set_author “AXE Labs index”, (b) cover.md Generated: <timestamp> 제거 → inputs_hash[:16] 로 대체, (c) zip last_modified_time(epoch). 검증: 2회 export → xlsx sha + bundle sha 모두 동일 (byte-equivalent). Iippo base bundle 13,302 bytes. 운영 흐름: 전 xlsx 첨부 → 후 zip 1개 (cover + README + xlsx).2026-05-28commit d33e8de
B-index-lp-deliverable-exportGap 3 — LP 전달용 xlsx export 완성 (D-index-18 chain 종결). rust_xlsxwriter 0.95 Rust 네이티브 crate. 신규 src/xlsx.rs (~280 line) + 13번째 MCP tool export_lp_model(deal_code, scenario, out_dir?). 4-sheet 결정론적 xlsx: (1) Assumptions driver_value 매트릭스 + cover (inputs_hash 포함), (2) Income Statement 12 line × 7 period + footer derivation rules, (3) Exit Matrix leaf-level (joint_probability 는 Excel formula =E*B, audit trail), (4) IRR Summary per-fund + weighted metrics + reproducibility footer. 검증: Iippo base 11,894 bytes “Microsoft Excel 2007+”, byte-equivalent reproducibility (같은 DB → 같은 sha256), 3 deal × 4 scenario 전부 export 성공. 운영 흐름: export_lp_model Iippo base/tmp/index-lp/Iippo-base-{sha[:8]}.xlsx → 운영자가 LP 에 첨부 → LP가 Excel 에서 cell formula audit + 1년 후 재현 가능. Phase 1 잔여 = xlsx round-trip (calamine read → DB diff sha256 verify, B-index-xlsx-roundtrip) + BS/CF 완성 (B-index-3fs-bs-cf-completion) + PDF cover bundle.2026-05-28commit 425a758
B-index-3fs-typed-schemaGap 2 — driver_value 위 typed Income Statement / Balance Sheet / Cash Flow line items 도입. migration 20260528000002 financial_statement_line 테이블 (model×scenario×statement×line_code×period UNIQUE). 신규 12번째 MCP tool compute_3fs(deal_code, scenario, persist=false) — driver_value lookup (period-0 fallback + base inheritance) → IS 12 line 재구성 (cogs = revenue×(1-gross_margin), opex_total = Σopex, ebit fallback, tax_expense = max(0, pretax × tax_rate), net_income). 검증 Iippo base: 12 line × 7 period = 84 cells persisted, net_income Y1=1.10억 → Y7=17.15억 (정확히 pretax × 0.78). Frozen enum 신설 (D-index-15): statement 3 (income_statement / balance_sheet / cash_flow) + is_line_code 12. BS 12 line + CF 7 line 은 placeholder (Phase 1 = working capital + debt schedule 추가 driver 도입 후 완성). /index/schemas 15 → 16 ([email protected] active). 회귀: validate-model 27/27 + IRR 3 deal ±1pp 유지. 다음 = Gap 3 LP xlsx export.2026-05-28commit 9ac0c68
B-index-compute-full-modelGap 1 closure — DSL evaluator DB 통합 (사용자 질문 “Excel model → DB화 best practice” 의 첫 gap). DSL evaluator 는 이미 구현돼 있었으나 financial_driver 와 financial_driver_value table 과 연결 안 됨. 신규 11번째 MCP tool: compute_full_model(deal_code, scenario, persist?) — DB load → scenario inheritance (base 폴백) → base_revenue_period0 → revenue[-1] sentinel → dsl::evaluator::evaluate(horizon) → derived 결과 매트릭스 + inputs_hash + (persist=true 시 financial_driver_value UPSERT). evaluator 개선 2건: (a) topo_order self-edge skip (revenue[y-1] lag, A7 check_driver_dag 와 동일 정책), (b) lookup_value input period 0 fallback (Excel “constant input row” 패턴, derived 는 strict). 검증: Iippo base 8 period × 2 derived = 16 cells persist → validate-model scenario_coverage 46% → 77% 자동 상승, IRR ±1pp 회귀 유지. Iippo mgmt 시나리오 inheritance: base 13 + mgmt 11 override = 14 effective inputs, hash 분리 (base 와 다른 inputs_hash). 발견된 Y-suffix anti-pattern → D-index-18 신규: revenue_growth_y1..y7 + 단일 formula 결합 시 period 7 에서 revenue 1.2 quadrillion 원 비현실 compounding. Refactor 잔여 = B-index-driver-period-indexed-refactor.2026-05-28commit 9df7f71
B-index-skill-mcp-discoveryD-index-17 Phase 2 entry point — index MCP 가 ic + ingest skill 의 canonical SoT (filesystem) 위에 discovery layer 추가. 2 신규 tool 도입 (MCP 총 10): (9) list_skills()/Users/axe/index/skills/ 의 모든 skill 의 SKILL.md frontmatter (name / description / allowed-tools / required_model) + sha256 + sub-dir 존재 (references / scripts / tests / agents); (10) get_skill_resource(skill, path?) — path 미지정 시 SKILL.md, file = content + sha256, directory = entries[] listing. Security 4중 차단: (a) .. path traversal, (b) skill name 영문/숫자/_/- 만 허용, (c) canonicalize 후 starts_with 재검증 (symlink escape), (d) invalid → NOT_FOUND + context. /index/schemas 도 [email protected] 추가 → 14 → 15 schemas (9 active + 6 stub). 다음 = B-blueprint-skill-mcp-client (Blueprint Agent SDK 가 본 두 tool 로 skill discovery, filesystem 의존 제거) → D-index-17 sunset 기준 (b) 충족.2026-05-28commit bf09547
B-index-mcp-surface-2xPhase 0 마무리 — MCP tools/list 4 → 8 tool 확장 + /index/schemas envelope 활성화 (D-index-7). 신규 tool: list_deals(stage?, sector?) portfolio overview, get_deal(deal_code) full snapshot (target_company + fund_investments[] + financial_model + scenarios[]), cross_deal_benchmark(driver, scenario) D-index-10 A5 의 MCP 노출, get_exit_matrix(deal_code, scenario?) leaf-level detail (joint_probability + dead_leaf + concentration). /index/schemas 가 빈 list → 14 schema 본문 (8 active DB-backed: target_company / deal / fund_investment / financial_model / financial_driver / financial_scenario / exit_matrix_leaf / financial_output + 6 stub Phase 1: dd_finding / ic_decision / portfolio_kpi / risk_alert / valuation / lp_comm) + metadata.frozen_enums 4종 (D-index-15 immutable) + dsl_operators 12 + decision_references 9. 신규 CLI index dump-schemas (auth bypass JSON dump). 회귀 검증 PASS: validate-model 27/27 + IRR ±1pp IC baseline 유지 (Iippo 36.52% / Sentry 40.26% / Canopy 26.39%). 다음 consumer = ic skill --push-to-index (D-index-13 atomic batch) + Blueprint citation resolver (index.financial_output kind).2026-05-28commit 2dfc484
B-index-customers-yamlD-index-10 production prereq — customers.yaml axe.services.index block 신설 (5 secret manifest: INDEX_DB_PASSWORD / INDEX_JWT_SECRET / AZURE_INDEX_MCP_CLIENT_SECRET escape_dollar / INDEX_PII_PASSPHRASE_AXEC Phase 1 backlog / ANTHROPIC_API_KEY shared). service_paths.index “placeholder 503” → 정상 path. axe ship CLI 에 index 등재 (SHIP_SERVICES["index"] = {repo, deploy: manual_hint} + SHIP_DIRNAME_MAP). Dockerfile cortex→index 정정 + sqlx offline .sqlx/ 28 query cache → DB 없이 Docker 빌드 가능. docker-compose healthcheck python→curl. 검증: 4 컨테이너 healthy + /healthz 200 + /index/mcp 401 + WWW-Authenticate (RFC 9728) + RFC 9728 envelope. Manual 잔존 (Soohun Global Admin): az ad app + admin consent + axe secret push + cloudflared route + GitHub remote + 첫 axe ship index. 상세 runbook = /services/index#production-배포-axe-ship-index.2026-05-28commit 38dcac8
B-index-A8-mcp-tools-integrationD-index-10 A8 — MCP tools/list + tools/call 4 tool 통합 (src/mcp.rs 137 → 566 line). 4 tools: (1) propose_deal_closure(seed) atomic batch INSERT (D-index-13 정합 — 4 sub-tool 흡수, UUIDv5(deal_code) idempotency_key retry-safe), (2) validate_financial_model(deal_code) (A7 6 sanity check), (3) compute_outputs(deal_code, scenario?) (exit_matrix aggregation), (4) query_irr(deal_code) (per-fund display + summary weighted IRR). Methodology = irr::weighted_* 함수 재사용으로 validate.rs in-memory 결과와 byte-identical. 검증: Iippo 36.52% / Sentry 40.26% / Canopy 26.39% — 3 deal 모두 IC baseline ±1pp PASS. 3-layer error model (D-index-14) 적용: L1 HTTP (auth middleware) + L2 MCP body (JsonRpcError + error_code + context) + L3 skill. CLI smoke test 도입: index mcp-call TOOL --args JSON (auth bypass, dev 반복 회귀). D-index-10 acceptance 8/8 PASS (A6 xlsx round-trip 만 별 backlog 잔여).2026-05-28D-index-10, src/mcp.rs
B-index-A7-validate-financial-modelD-index-10 A7 — index validate-model CLI 6개 sanity check 도입 (src/validate_model.rs 608 라인). (1) driver_dag.cycle (topo sort, revenue[y-1] self-lag skip), (2) scenario_coverage (exit-matrix-only 모델 인식 — Sentry/Canopy 0% = PASS), (3) exit_matrix.sanity (dead_leaf + concentration > 50%), (4) leaf_probability_sum (Σ = 1.0 ± 0.02), (5) leaf_probability_sanity (V1 outdated upside never×writedown > 5% 자동 검출), (6) fund_investment.invariants (status=paid → invested_krw + paid_date 필수). 3 deal 모두 9/9 check PASS. 발견·수정: Canopy Initial BW paid_date NULL → 2025-06-01 보강. D-index-10 6/8 acceptance test 완료 (A1+A2+A3+A4+A5+A7). 잔여 = A6 (xlsx round-trip) + A8 (MCP tool integration).2026-05-28D-index-10, src/validate_model.rs
B-customer-deploy-generalization5 요건 R1-R5 빌트인 완료 (Phase 1 5/26 + Phase 2 D-day 5/25). plan SSOT: /Users/axe/customer-deploy-generalization-plan.md. R1 ${HOME} 변환 ✅, R2 vault SoT (bw get password) ✅, R3 $$$ escape (escape_dollar flag) ✅, R4 image_override 슬롯 ✅, R5 container_name customer-prefix (별 backlog B-container-name-customer-prefix 으로 split). _deploy_service_customer 13-step + wrapper 3종 (start-{frame,blueprint,hive}.sh) + bw-bootstrap.sh. realchoice D-day 5/5 endpoint LIVE 검증. Phase 3 (3rd customer dry-run) 은 B-customer-deploy-generalization-phase3-3rd-customer split.2026-05-26/Users/axe/customer-deploy-generalization-plan.md
B-realchoice-port-collision-audit트루비아 기존 14 컨테이너 (stream-mcp:8780, magnet-mcp:8770, ~/vault:8222, stream-realchoice 외) ↔ axec stack 포트 충돌 사전 점검. D-day 5/25 5/5 endpoint LIVE 으로 implicit pass (trap #6 포트 점유 함정은 onboard 중 발견 후 해소, known-gaps “realchoice D-day 6 함정” 에 포트 충돌 미언급 = 실제 충돌 없음). 영구화 = B-port-conflict-preflight 의 onboard step preflight CLI.2026-05-25trap #6 + Ship Log 5/25
B-realchoice-vault-instance-decision트루비아 기존 ~/vault (Vaultwarden Timshel fork, port 8222) ↔ axec deploy 시 신설 axe-vaultwarden 인스턴스 선택. 결정: 옵션 (a) 기존 vault 유지 + OIDC SSO 추가 (data migration 부담 0). 5/25 (PM) Ship Log “Vault OIDC SSO 통합 ✅ (Q3 (a) 채택, ~/vault = soohunkang/vault repo, SSO 로그인 → 잠금 해제 정상)” — D-day 실 운영 검증 완료. description 의 “(b) 잠정” 은 5/24 시점 RE^2 §Q3 가정 → 5/25 (a) 확정으로 정정.2026-05-25Ship Log 5/25 PM
B-anthropic-connector-input-attrsclaude.ai Custom Connector modal 의 4 input 식별자 부재 함정 — Anthropic 측 업스트림 보고 draft 작성. /ops/reports/anthropic-connector-input-attrs-2026-05 (173 라인, 9 섹션 self-contained: Summary / Env+Repro / Root cause + DOM analysis / Requested fix name/aria-label/autocomplete / Impact 표 / AXE Labs 우회 (B-axe-mcp-catalog-en-aliases 참조) / Attachments / Channels ([email protected] + GitHub claude-code issue) / Status). 운영자 검토 후 제출. 수락 시 한국어 UI 4/4 자동입력 + 모든 i18n locale 동시 해소.2026-05-28/ops/reports/anthropic-connector-input-attrs-2026-05
B-vault-axe.2-patches-upstream-prTimshel/vaultwarden upstream PR draft 작성. /ops/reports/timshel-vaultwarden-upstream-pr-2026-05 (165 라인, 9 섹션 self-contained: Summary / Motivation (symptom + trigger + affected) / Changes (patch 0001 prelogin alias + 0002 connect/token AccountKeys+MasterPasswordUnlock) / Testing (manual verification + real-world validation) / Compatibility (backward+forward+no migration) / Code reference (axelabs-ai/vault commit hash TBD) / Related (axe.3 patches 별 PR) / Status / Channels). 두 patch 모두 dani-garcia/vaultwarden mainline backport 성격 → 수락 가능성 높음. 수락 시 AXE fork diff 자연 소실 → B-vault-axe.2-sso-mp-incomplete archive.2026-05-28/ops/reports/timshel-vaultwarden-upstream-pr-2026-05
B-trap-33-frame-hive-multi-issuer-docstrap #33 의 (c) docs portion — /architecture/auth line 147 정정 + 함정 표 row 추가. “v1 token (aud=URI) OR middleware 양쪽 수용” 권장 → “v2 강제 + middleware multi-issuer 양쪽 모두” (defense in depth). 함정 row = Frame/Hive _MICROSOFT_ISS_PREFIX v2-only matcher 가 v1 token 을 HS256 fallback path 로 보내 RS256 reject 시키는 정확한 메커니즘 + fix 위치 (http_server.py:141/:67). code fix (a, b) 잔존 = B-trap-33-frame-hive-multi-issuer.2026-05-28/architecture/auth
B-vault-d-day-traps-2026-05-25realchoice vault SSO 통합 시 발견 8 함정 인벤토리 entry. 모든 함정 catalog 완료 + 80%+ resolved (#10 $ escape ✅ / #11 sso_nonce verifier ✅ / #12 axe.2 patch ✅ / #13 bw appdata 격리 ✅ / #14 → B-vault-org-cli-automation split). 잔여 #8 (vault-caddy path mount), #9 (wget → curl), #15 (Caddyfile /vault/ trailing slash) 는 production 운영 검증 (axe.axelabs.ai/vault 정상) — vault-caddy 측 minor patch 또는 documented behavior 로 본 inventory entry 는 종결.2026-05-28trap #8-#15 인벤토리
B-onboard-d-day-traps-2026-05-25realchoice D-day 첫 onboard 실행 중 발견 15 함정 인벤토리 entry. #1-#10 D-day 초기 함정 ✅ (Tailscale alias / SSH PATH / keychain partition / 포트 점유 B-port-conflict-preflight split / hardcoded path R1 ✅ / docker ps 사전 검사 ✅ / frame-proxy archived ✅ / cloudflared 127.0.0.1 ✅). #11/#12 PAT workaround. #16 → B-vault-org-create-automation. #17 _svc_step_network ✅. #18 → B-axelabs-bootstrap-blueprint-mcp-app ✅. #19 → B-customer-deploy-generalization-r6-volume-precreate. #20 → B-customers-yaml-mkdir-trap ✅. 모든 sub-trap 이 ✅ 또는 split 완료 — 본 inventory entry 종결.2026-05-28trap #1-#20 인벤토리
B-ops-reports-sidebar/Users/axe/axelabs-docs/content/ops/_meta.jsreports entry 추가 (troubleshooting 다음, known-gaps 앞). Round 1 의 ops/reports/ 폴더 신설 + Round 2 의 2 추가 mdx 가 sidebar 에 노출.2026-05-28content/ops/_meta.js
B-vault-setup-playbook-v2taehun.kang 의 첫 실제 vault setup 피드백 5건 (2026-05-27 Teams) 을 /onboard/vault-setup playbook 에 inline 반영. (1) Phase 2 macOS/Windows sub-section 분리 (Windows Hello + Microsoft Store vs .exe + PIN fallback), (2) Phase 4/5 강제 vs 선택 구분 + skip 영향, (3) Phase 5 TOTP 의미 “기존 item 손댈 필요 없음, 새 2FA 부터 적용” 명시, (4) TOTP UI 동작 3종 (view/edit/empty) 표, (5) “자동 채우기 정상” 검증을 SSO 위주 vs 웹 폼 위주 워크플로 분기, (6) 표준 vs valid 변형 섹션 신설. +84 라인 (200→284).2026-05-28/onboard/vault-setup
B-vault-revoke-scope-doctaehun 피드백 #6 (2026-05-27) — vault trust boundary 명확화. /architecture/vault-policies## Vault scope — 무엇을 보호하는가 (trust boundary) 신설 (8-row 분리표) + /ops/runbook/employee-offboarding 에 step 8 “외부 service 권한 회수 (vault scope 외)” 표 6 row + 함정 표 row. 메시지 = vault = secret 보관 ≠ 외부 service 권한 제어 (KB / 홈택스 / GitHub PAT / Cloudflare Access 회수는 별 절차).2026-05-28/architecture/vault-policies
B-bw-cache-recovery-procedure-docsbw CLI data.json cache stale 함정의 표준 recovery 절차 docs 등재 (/architecture/secrets 함정 표 row + /ops/runbook/vault-recovery 새 ## 섹션 ~48 라인). 증상/원인/빈도 (5/22 + 5/26)/회복 절차 4 step bash/자동화 후보 3 prong/함정 4-row 표. 자동화 잔여는 B-bw-cache-stale-autoheal (별 backlog).2026-05-28/ops/runbook/vault-recovery
B-blueprint-scope-change-runbook-docsBlueprint OAuth scope 추가 함정의 docs 등재. /architecture/auth 의 함정 표에 row 1개 (refresh token 침묵 사망 + AADSTS65001 + MSAL 캐시) + ## OAuth scope 추가 시 운영자 절차 새 섹션 (5-step bash: ship → admin-consent → docker restart → 검증 → user reconnect 안내). +27 라인. 자동화 prong 2개 (post-deploy hook + token health check) 는 B-blueprint-scope-change-admin-consent-runbook 잔존.2026-05-28/architecture/auth
B-claudeapp-fd-leak-anthropic-reportClaude.app PTY/fd leak 의 Anthropic 측 공식 리포트 draft 작성. /Users/axe/axelabs-docs/content/ops/reports/claudeapp-fd-leak-2026-05.mdx (113 라인, 10 섹션 + frontmatter) — Summary / Environment / Symptom (failure mode + reproduction + diagnosis) / Workarounds / Suspected root cause / Impact / Requested fix / Attachments / Channels / Status. ops/reports/ 폴더 + _meta.js 신설. 운영자 검토 후 [email protected] 또는 GitHub claude-code repo issue 로 제출.2026-05-28/ops/reports/claudeapp-fd-leak-2026-05
B-docs-ssot-extension-2026-05-26-correctionsTruvia 2026-05-26 피드백 정정 7건 (B1-B7) docs 반영. B1 /ops/runbook/vault-recovery bw cache section + B2 /architecture/secrets $ escape 함정 row + B3 /architecture/auth (별 B-blueprint-scope-change 와 연계) + B4 /architecture/topology artemis_default external network 함정 row + B5 /services/frame ${HOME} 함정 + /Users/axe/ hardcode 금지 callout + B6 /partner/registration --allow-no-subscriptions 검증 step + B7 /partner/deploy 함정 표 18-step 형태 재구성 (11 신규 row). 잔여 = 신규 페이지 A1/A2 (B-docs-ssot-extension-2026-05-26-newpages).2026-05-28다중 페이지
B-docs-playbook-frontmatter-markerplaybook 페이지 frontmatter playbook: true 스킴 + _meta.js entry title 에 prefix. 15 페이지 일괄 적용 (onboard 4 + ops/runbook 11). SSOT = /architecture/playbooks.2026-05-26/architecture/playbooks
B-docs-playbook-catalog-build-timescripts/generate-playbook-catalog.mjs 도입 — frontmatter playbook: true 페이지 인덱싱 + SSOT /architecture/playbooks 의 marker 사이 표 자동 교체 + public/playbooks.json deterministic export.2026-05-26/architecture/playbooks
B-realchoice-d7-checklistTruvia 5/25 D-7 회신 처리 완료 (RE^4). (1) payslip Hive Phase 3 deferral, (2) 외부 회계법인 사내 협의 → B-frame-cross-check-workflow 분리, (3) macmini 이진우 자택, IP 동일, Tailscale 입고 후 회신 → B-realchoice-tailscale-onboard 분리.2026-05-25RE^4
B-realchoice-tailscale-onboard피벗 (5/25 RE^6) — macmini 발주 skip, 기존 운영 macmini → realchoice-macmini. Tailscale ACTIVE direct + SSH + Docker + 절전 OFF 모두 기존 상태. 외부 IP 변경 X. D-day = 본일 (5/25).2026-05-25RE^6
B-axe-mcp-catalog-en-aliasesaxe mcp publish_mcp_item_payload 3 차례 iteration + 운영자 retest 결과 — autofill 2/4 (Client ID + Secret) 유지 + Name/URL 은 copy-paste convenience field 등재. 확정 finding: Remote MCP server URL field 추가 = regression (1/4), Server URL 단독 (EN label) = 안전. 6 Custom Field 표준 (Name + Server URL + MCP URL + Tenant ID + Scopes + Vault secret path). 매칭 천장 4/4 는 Anthropic markup 변경 (B-anthropic-connector-input-attrs) 필수. 금지 = Remote MCP server URL 절대 추가 X.2026-05-27axe CLI docstring
B-docs-cache-control-staticdocs.axelabs.ai 의 자주 갱신되는 정적 자산 (/llms.txt, /llms-full.txt, /changes.json) 에 s-maxage=60 cache-control 명시. next.config.mjsheaders() source 3개 추가 — 기존 /_pagefind/* (commit 9c13bcc) 와 동일 패턴. ship 직후 Cloudflare 캐시 잔존 함정 차단.2026-05-26commit 9c13bcc + 본 PR
B-trap-24-blueprint-mcp-admin-consenttrap #24 영구 fix (docs 측). /partner/registration 의 Option A 사전 확인 표에 admin consent grant 권한 4 가지 role (Global Admin / Privileged Role Admin / Cloud App Admin / Application Admin) 명시 + 함정 표에 admin consent 실패 시 manual grant 절차 (portal UI / admin consent URL) 명시 + Option B 함정 모음에 admin consent 함정 row 추가. bootstrap.sh 측 Blueprint MCP app 등록 fix 는 B-axelabs-bootstrap-blueprint-mcp-app 별 task.2026-05-26trap #24
B-customers-yaml-mkdir-traptrap #20 영구 fix. Root cause 확인 = axe CLI / bootstrap.sh / wrapper scripts / partner docs 어디에도 mkdir -p .../customers.yaml 같은 잘못된 명령 부재 (grep 검증 완료). Truvia 측 manual 실수 가능성 高 (customer 측에는 customers.yaml 부재가 정상 — operator SOT). Defensive fix = axe CLI _load_yaml + _load_customers_yaml_rtpath.is_dir() sanity check 추가 — file 예상한 path 가 dir 일 때 IsADirectoryError stack trace 대신 명확한 회복 안내 (rm -rf <path> + recreate as file). axe CLI 는 git untracked (B-axe-cli-git-track) 라 단일 머신 적용.2026-05-26trap #20
B-axelabs-bootstrap-blueprint-mcp-apptrap #18 영구 fix. axelabs-bootstrap.sh 에 App #4 Blueprint MCP 등록 step 추가 (Frame MCP 패턴 1:1 mirror — application_id_uri /blueprint/mcp + mcp.access scope + claude.ai redirect + optional claims + v1 token + self-ref permission). JSON pack 의 appsblueprint_mcp 필드 추가. axe customers ingest 가 optional 로 흡수 (옛 3-app pack 도 backward compat). /partner/registration docs = “3 개” → “4 개” + Option B App #4 섹션 신설 (Frame MCP 와 동일 절차 + 경로 차이 표). 새 SHA-256 = ae6f771e85f7ec49d75bc082e1e0d42b106ba095e03d9adad430e590c2c4aefb. 양쪽 (public/ + .axe/bootstrap/) 동기화.2026-05-26trap #18
B-trap-23-hive-volume-compose-prefixtrap #23 영구 fix — R6 (B-customer-deploy-generalization-r6-volume-precreate) 통합 결정. hive docker-compose.yml 의 external volume name (hive-proxy_* historical prefix) 정합성 문제는 R6 의 blueprint volume 6개 fix 와 함께 차기 phase 에서 한꺼번에 해소 (compose external:true 제거 → self-contained volume 권장). 별 task 종결, R6 row 비고에 trap #23 명시 추가.2026-05-26trap #23 → R6
B-vault-mcp-catalog 🆕✅MCP Connectors catalog view (D-vault-mcp-catalog) — Vaultwarden MCP Connectors org collection (1a62e754-6e47-43e0-a99a-cf71c37b8638, 4 org 멤버 모두 access) + axe mcp publish/list CLI subcommand (axe CLI cmd_mcp_publish/cmd_mcp_list) + axe secret rotate 의 step 4.5 자동 hook (env name 패턴 AZURE_*_MCP_CLIENT_SECRET 감지 시 catalog 재발행) + customers.yaml frame_mcp 의 stale client_secret_env 주석 정정. 3 MCP seed (frame/hive/blueprint) publish 완료. customers.yaml SoT + Vaultwarden item SoT 변경 0 (catalog 은 derived view only). 함정 1 발견 + 정정 (frame_mcp client_secret_env stale, 5/26 정정). docs = /architecture/secrets#mcp-connectors-catalog + /ops/decisions D-vault-mcp-catalog + known-gaps “vault측 미해결” 표의 bw cache stale 항목 cross-link.2026-05-26D-vault-mcp-catalog
B-bw-cache-recovery-procedure 🆕✅bw 2025.7.0 의 local data.json cached cryptoSymmetricKey stale 증상 (5/22, 5/26 두 차례) root cause 확정 + recovery procedure 표준화. Root cause = server-side patch deploy (axe.2, axe.3 등) 후 bw sync 가 cache 를 inconsistent 상태로 저장. bw unlock 은 캐시 무효화 X. 확정 절차 = mv "~/Library/Application Support/Bitwarden CLI" .broken.$(date +%s) && bw config server https://axe.axelabs.ai/vault && bw login [email protected] (positional password 또는 osascript dialog). 약 1분. 추가 발견: bw 2025.7.0 의 bw unlock --passwordenv 가 silent failure (rc=0 + empty output) — positional password bw unlock "$PW" --raw 만 작동. 본 PR 의 본격 영구 fix 는 B-bw-cache-stale-autoheal (axe wrapper layer) 로 분리.2026-05-26known-gaps “vault측 미해결” 표 + B-bw-cache-stale-autoheal
B-vault-fork-build-pipelineD-ops-40 의 build pipeline 실 구현 + axe.3 release. axelabs-ai/vault repo public 전환, build/build.sh + .github/workflows/build.yml + build/patches/0001..0004.patch (axe.2 + axe.3 4 patch) commit + main push (commit 799015b). GHA buildx multi-arch (linux/amd64+arm64) → GHCR push (PAT vault-stored, item ghcr-axelabs-ai-pull-pat in Platform — Service Secrets). main-<sha7> rolling tag + imagetools alias 1.34.1-6-axe.3 (manifest list digest sha256:a26208a0794acbc9a2807379ffba33c7478dbe8d41daed24893f7916a55aeada). axe-macmini compose 의 image 라인 = ghcr.io/axelabs-ai/vault@sha256:... 로 재핀 (D-ops-11 immutable manifest-digest 정책 정합 복원).2026-05-26D-ops-40 + axelabs-ai/vault commit 799015b
B-vault-org-perm-3-quirksD-ops-40 patch 0003 + 0004 axe.3 release deploy + 3건 in-production 검증 통과. patch 0003 = src/api/core/organizations.rs 의 3 site (line 522, 600, 685 — post_organization_collections + post_bulk_access_collections + post_organization_collection_update) 에서 if member.access_all { continue; } skip 제거 → Owner 도 명시 users_collections row 생성. patch 0004 = src/db/models/cipher.rs::to_json (line 374 근방, User-sync branch) 에 permissions: {response:null, delete:<bool>, restore:<bool>} 추가 (<bool> = collection manage OR org Owner/Admin). 함정 2 (cipher edit collectionIds silent partial-revert) 는 vaultwarden bug 아닌 mainline design 으로 확인 — 운영 룰 영구 (B-vault-org-cli-automation 의 본 함정 확장). 검증 3건 in-production (2026-05-26 13:19 KST): (1) bw create org-collection ... users=[{id:ai@,manage:true}] → SQLite users_collections 에 [email protected]|0|0|1 row 명시 insert ✅, (2) raw GET /api/sync → org cipher 의 permissions: {delete:true,restore:true,response:null} 정확 emit ✅, (3) bw delete item rc=0 ✅. 영구 fix 완성, 운영 임시 룰 (SQL 수동 INSERT, admin endpoint 직접 호출) 자연 폐기.2026-05-26D-ops-40 Progress
B-matrix-git-init/Users/axe/matrix git init + first commit. 본 점검 세션 시작 시 working tree 가 init 상태였으나 commit 0 (no commits yet). .gitignore 보강 (.env, .env.local, .claude/, .DS_Store, *.log 추가 — 기존 /target 만) 후 13 파일 staged + commit f73492d “initial: matrix MCP monitoring service v0.1.0” + commit 48a301b (collector port fix). ultrareview / 롤백 / origin push 가능 상태 회복.2026-05-26D-matrix-1
B-matrix-rebuild-stalematrix blue/green 컨테이너 rebuild — cargo check 결과 src/api.rs:26matrix_info 함수 미정의 (E0425) 로 working tree 자체가 컴파일 불가였음 (11:35 빌드 후 11:39 미완성 수정 흔적). matrix_info honest minimal stub (service info JSON: name/version/endpoints 4개) 추가 + collector port fix 와 한 번에 무중단 rebuild (green→blue 순서, 두 컨테이너 healthy 검증). 새 image digest, external axe.axelabs.ai/matrix 도 새 landing 반환.2026-05-26commit 48a301b
B-matrix-collector-port-fixsrc/collector.rs:180 의 blueprint-http URL :3110:3100/api/health 정정. 호스트 lsof + 컨테이너 안 docker exec curl 양쪽 검증 — :3110 미 listening, :3100/api/health 가 정답 (Blueprint Next.js dev, /Users/axe/blueprint/src/app/api/health/route.ts 존재). cortex-fe/cortex-be 는 그대로 — cortex backend :3210 실제 down, cortex frontend :3200 root path 빈 응답으로 valid alert. rebuild 후 첫 cycle: failures = ["cortex-fe-http", "cortex-be-http"] (blueprint 사라짐 ✓). 누적된 blueprint-http unacked alert 1 row 도 ack 처리 (acked_by='collector-port-fix-2026-05-26').2026-05-26commit 48a301b
B-matrix-mcp-auth-enforcematrix /matrix/mcp 에 JWT auth middleware 부착. router 분리 — mcp_router = Router::new().route("/matrix/mcp", post(mcp::handle_mcp)).route_layer(middleware::from_fn(auth::auth_middleware)) + main router 에 merge. REST + health 는 anonymous 유지 (의도된 공개 status board). 부착 전 안전 검증 = production access log 0 (matrix-mcp-blue/green/proxy 모두 /matrix/mcp 호출 흔적 0) + Blueprint repo 에 matrix MCP client 코드 0 + customers.yaml 에 MATRIX_JWT_SECRET vault 등재 (matrix/axe/jwt-secret) = JWT 의도 분명. 검증: no-auth POST → 401 “missing bearer token”, REST → 200. cargo checkauth_middleware never used warning 사라짐.2026-05-26commit 96cf758
B-matrix-cortex-collector-skipmatrix collector 의 cortex-fe-http / cortex-be-http 두 endpoint 제거 — cortex 는 개발 중 (운영자 확인 2026-05-26), launchd 미부트 + :3210 미 listening + :3200 빈 응답으로 valid alert 가 운영 noise 화. src/collector.rs:181 에 재가동 시 재활성화 조건 주석 명시. rebuild 후 collector cycle = check passed (failures 0). 누적 unacked alert 2 row (cortex-fe + cortex-be) 도 ack 처리.2026-05-26commit 96cf758
B-frame-fund-ingest-verify강태훈 대표 fund 자료 ingest 시도 결과 audit — D-ops-30/PR #38 fix 적용 후 axe_ia_001 (kip, fund_ksme) 정상 empty fund 로 회복 (48 accounts + accounting_policy bootstrap + alembic 0019 head). 회계 데이터 0 = 사용 시작 준비 완료. 7 entities → 5 로 좀비 정리 (axe_ia_001_diag + bug_check_kip_20260524 DROP, axep 보존)2026-05-26D-frame-fund-ksme-policy-check + D-frame-register-entity-atomic
B-frame-register-entity-atomicregister_entity atomicity + mismatch detect (강태훈 bug report root cause #2/#3 잔여분 영구 fix). (a) existing row 의 standard/kind/schema_name mismatch 시 ValueError (silent override 금지), (b) upgrade_entity 실패 시 compensating DROP SCHEMA CASCADE + DELETE shared.entity 로 좀비 회수. 6 신규 pytest (mismatch standard/kind/all-diffs · idempotent identical · zombie cleanup · pre-existing 보호) + 16 기존 PASS 무회귀2026-05-26D-frame-register-entity-atomic. src/frame/db/migrations.py:88 + tests/test_register_entity_atomicity.py 신설

🗄️ Archive (1주+ 경과 · Ship Log + decisions 영구 보존)

Done 에서 1주 경과한 ship 완료 항목. 상세 narrative = updates Ship Log, 결정 = decisions. 본 표는 ID → 결정 trace 만 유지 (compact).

ID한 줄완료일결정
B-bp-artifact-prisma + B-bp-artifact-link-tableArtifact + ArtifactLink Prisma migration + src/lib/artifact/store/2026-05-23D-bp-artifact-1
B-bp-artifact-schema-discoveryBlueprint McpSchema 모델 + fetcher/registry + admin API 22026-05-23D-bp-artifact-1
B-frame-mcp-schema-endpointframe /frame/schemas 13 schemas2026-05-23D-bp-artifact-1
B-hive-mcp-schema-endpointhive /hive/schemas 15 schemas2026-05-23D-bp-artifact-1
B-onboard-azure-packaxe customers ingest CLI 신설 (schema 검증 + yaml fill + vault push)2026-05-23D-ops-34
B-onboard-bootstrap-publishaxelabs-bootstrap.sh raw 노출 + partner docs self-contained2026-05-23D-onboard-bootstrap-publish
B-health-monitor-launchdcom.axe.health-check → matrix service 대체2026-05-23D-matrix-1
B-docs-search-impldocs.axelabs.ai Pagefind UI 검색 코드 머지2026-05-22D-docs-search-1
B-frame-shared-extendshared.entity entity_kind+fund_meta+closed_at ADD (0008_shared)2026-05-22D-ops-22
B-frame-entity-relationshipentity_relationship ownership numerator/denominator + kind ENUM2026-05-22D-ops-22
B-frame-cross-journal-linkshared.cross_journal_link 신설 (mirror 분개 pair)2026-05-22D-ops-22
B-frame-register-entity-cliregister_entity Python API + CLI --kind/--fund-meta2026-05-22D-ops-22
B-frame-fund-deployframe-mcp rebuild + 0008_shared migration + 0 regression2026-05-22D-ops-22
B-frame-rfc9728-fixRFC 9728 resource-level path 401 → Connector Reconnect fix2026-05-22D-ops-23
B-vault-sso-email-verifSSO_ALLOW_UNKNOWN_EMAIL_VERIFICATION Entra email_verified fix2026-05-22D-ops-24

신규 항목 등재 — 한 줄 가이드

| **B-<area>-<slug>** | <행동 한 줄> | M? | <추정 d> | <의존성/비고 + decisions/docs 링크> |

규칙:

  • ID = B-AREA-SLUG (B = Backlog, area = org · frame · hive · bp · docs · infra · legal · backup 등)
  • 한 줄 행동 — 1주 안 끝날 항목은 쪼개거나 마일스톤으로 승격
  • 마일스톤 ID 명시 (M1~M5) — 없으면
  • 관련 decisions / docs 항상 링크
  • 작업 시작 = 🔧 로 옮기고 owner + 시작일 추가
  • 완료 = ✅ 로 옮기고 완료일 + 결정 링크. 1주 후 archive

본 페이지의 의도

다른 세션이 들어와도 “무엇부터 할 지” 가 5초 안에 보이게. known-gaps 는 “왜 그렇게 됐는지·뭐가 함정인지” 의 분석적 정보, 본 페이지는 “다음 행동” 의 실행 큐. 마일스톤 큰 그림은 roadmap.

Last updated on