기술 문서

Xenkey 사양 v1.0

Xenkey의 권위 있는 읽기 쉬운 사양 spec=1.0. 스키마, 의미 모델, 라이프사이클 규칙, 인덱싱 및 기술적 동작.

Xenkey란?

Xenkey는 실제 세계 객체—비즈니스, 제품, 서비스, 장소, 사람, 프로세스, 이벤트—에 대한 원자 단위의 의미입니다. 마케팅 설득이 아니라 AI 이해를 위해 작성됩니다.

각 Xenkey는 하나의 최소·반증 가능한 아이디어를 나타냅니다. 사양 버전은 각 문서에 선언됩니다:

스키마 헤더
{ "spec": "1.0" }

설계 목표

설득보다 진실

홍보가 아닌 현실을 설명한다.

문맥성

언제, 어디서, 누구에게 적용되는지 포착한다.

조합 가능성

여러 Xenkey가 하나의 객체를 설명한다.

AI 가독성

검색과 인덱싱을 위한 엄격한 구조.

식별

필드타입설명
idstring주 식별자. 형식: xk_ + ULID
ulidstring선택 사항. id 접미사에서 파생(있으면 일치해야 함)
spec"1.0"사양 버전

라이프사이클 및 변경 가능성

Xenkey는 데이터 무결성과 신뢰를 보장하는 엄격한 라이프사이클을 따릅니다.

상태:
draftunpublishedpublishedarchived

변경 가능성 규칙

  • Draft — 자유롭게 수정 가능
  • Published — 불변. 변경하려면 새로운 Xenkey 필요
  • 만약 published_at 가 설정되면 상태는 draft
필드타입설명
statusenumdraft | unpublished | published | archived
created_atdatetime생성 타임스탬프 (RFC 3339)
published_atdatetimeXenkey가 공개된 시점
updated_atdatetime내부/읽기 전용, API가 설정
etagstring내부/읽기 전용, 동시성 제어용

의미 코어

각 Xenkey의 심장. 구조화된 진실 단위를 담는 4개의 필수 필드.

필드타입설명
titlestring경험을 요약하는 짧고 설명적인 식별자
factstring현실에 대한 사실적이고 검증 가능한 진술
meaningstring이 사실이 사람들에게 왜 중요한지
contextstring언제, 어디서, 누구에게 적용되는지
constraintsstring구조화 필드로 포착되지 않는 자유 텍스트 뉘앙스

범위와 앵커

앵커는 Xenkey를 실제 엔티티에 연결합니다. 각 Xenkey는 최소 하나의 앵커가 있어야 합니다. 멀티 앵커 지원으로 여러 객체의 교차점을 설명할 수 있습니다.

필드타입설명
organization_idstring소유 조직
base_idstring논리 그룹 (워크스페이스/프로젝트)
unit_idstring구조화 데이터 입력에 대한 선택적 참조
anchors[]array앵커 객체 배열 (최소 1)
앵커 객체
{
  "anchor_id": "anchor_001",
  "anchor_type": "product",
  "role": "primary"
}
앵커 타입:
productservicepersonlocationeventprocessresource

태그, 감정, 바이브

필드타입설명
tagsstring[]분류 태그 (예: booking_required, wifi)
emotionsstring[]감정 맥락 코드 (emotion-codes.json)
vibestring분위기/무드 설명
seasonsstring[]적용 계절
time_of_daystring[]적용 시간대
mealstring[]적용 식사 시간
계절:
springsummerautumnwinterall_yearholidaynew_yearchristmasorient_new_year
시간대:
all_dayearly_morningmorningnoonafternooneveningnightlate_night
식사:
breakfastbrunchlunchdinnersuppertea_timecoffee_timesnack_time

인구통계

필드타입설명
age_mininteger권장 최소 연령
age_maxinteger권장 최대 연령 (age_min 이상)
genderstring타겟 성별 (해당 시)

지리

Xenkey는 글로벌 또는 지리적 범위를 가질 수 있습니다. 필드 geo_scope 가 어떤 지리 필드가 필수인지 결정합니다.

지리 범위:
globalcountryregionpoint
필드타입설명
geo_scopeenum지리 정밀도 수준
countrystringISO 3166-1 alpha-2 국가 코드
regionstring지역 / 주 / 도
citystring도시 이름
timezonestringIANA 타임존 (예: Europe/Rome)
geo[lng, lat]좌표 [경도, 위도]
availability_countriesstring[]제공 가능한 국가 (위치 아님)

범위 규칙: 만약 geo_scope=country 라면 country 필수. 만약 geo_scope=region 라면 countryregion (or city) 필수. 만약 geo_scope=point 라면 geo 필수.

로컬라이제이션

필드타입설명
localestring언어 태그 (예: en-US, ja-JP)
source_localestring콘텐츠 원문 언어
translation_groupstring번역을 그룹화. 형식: tg_ + ULID
is_source_localeboolean원문 언어 버전이면 true

규칙: 만약 is_source_locale = true, 라면 localesource_locale. 와 동일해야 합니다. 번역은 같은 translation_group을 사용합니다.

무결성

공개된 Xenkey에는 공개 시점에 계산된 암호학적 해시가 포함되어 콘텐츠 무결성을 보장합니다.

필드타입설명
hash_alg"sha256"사용되는 해시 알고리즘
hash_idstring고유 해시 ID. 형식: hash_ + ULID
hashstring정규화 페이로드의 SHA-256 해시

인덱싱 및 프라이버시

Xenkey는 여러 채널로 공개될 수 있습니다. 각 채널은 다른 검색 기능을 제공합니다.

필드타입설명
publicationstring[]채널: vector, graph, aidex
is_publishedboolean최소 하나의 채널에 게시되면 true
is_vectorboolean벡터 스토어에 인덱싱 (Qdrant)
is_graphboolean지식 그래프로 투영 (Neo4j)
is_aidexboolean로봇 지향 위키 계층 Aidex에 게시
is_privateboolean조직 범위 접근에만 표시

규칙:

  • aidexvector 를 필요로 함 (publication에 둘 다 포함)
  • • 만약is_published=true 라면 publication에 최소 한 항목 필요
  • • Aidex는 벡터 인덱싱보다 더 엄격한 쿼터를 가진 로봇 지향 위키 계층

벡터/그래프 검색

공개된 Xenkey는 자동으로 두 가지 보완적인 데이터 표현으로 변환되어 하이브리드 AI 검색을 가능하게 합니다.

벡터 인덱스 (Qdrant)

  • • 텍스트 소스:fact + meaning + context
  • • 고차원 임베딩으로 변환
  • • 의미 유사성 검색을 가능하게 함
  • • 페이로드 필터: status, geo, tags, emotions, time
  • • 멱등성: 키 (id, version)

지식 그래프 (Neo4j)

  • • 노드: Xenkey, Organization, Object, Tag, Emotion
  • • 엣지: OWNS, DESCRIBED_BY, TAGS, EXPRESSES
  • • 관계와 구조를 드러냄
  • • 자연 키에 대한 멱등 MERGE
  • • 그래프 탐색 쿼리 가능

하이브리드 검색 은 벡터 유사성과 구조적 그래프 필터를 결합하여 근거 있는 설명 가능한 AI 응답을 제공합니다. 인덱싱 파이프라인은 재시도와 데드레터 큐를 포함한 비동기 처리입니다.

불변 조건

  • anchors 는 존재하며 비어 있으면 안 됨
  • 만약age_minage_max 가 있다면 age_max >= age_min
  • 만약geo 가 있다면 [longitude, latitude] 형태여야 함
  • geo_scope=countrycountry 를 요구
  • geo_scope=regioncountry + region (or city) 를 요구
  • geo_scope=pointgeo 를 요구
  • aidex 가 publication에 있으면 vector 도 필요
  • is_published=truepublication[] 비어 있지 않음 을 요구

예시 페이로드

초안 Xenkey (최소)

draft-xenkey.json
{
  "spec": "1.0",
  "id": "xk_01J8Y6S4V9ZQ3M9K2W2M8JQY5C",
  "status": "draft",
  "created_at": "2026-01-21T12:00:00Z",
  "organization_id": "org_123",
  "base_id": "base_123",
  "anchors": [
    { "anchor_id": "anchor_1", "anchor_type": "product", "role": "primary" }
  ],
  "title": "Fresh espresso",
  "fact": "A 30 ml espresso shot made from 100% Arabica beans.",
  "meaning": "Represents the cafe's standard espresso offering.",
  "context": "Default menu item available all day.",
  "locale": "en-US",
  "source_locale": "en-US",
  "translation_group": "tg_01J8Y6S6Q4K8FKJ1PS2H0WQ1B8",
  "is_source_locale": true,
  "hash_alg": "sha256",
  "hash_id": "hash_01J8Y6S6Q4K8FKJ1PS2H0WQ1B9",
  "hash": "6e4f8c9d8b0f7a6d3b3a0f3c1f8e9d6e...",
  "is_vector": false,
  "is_graph": false,
  "is_aidex": false,
  "publication": [],
  "is_published": false,
  "is_private": false
}

게시된 Xenkey (geo + 벡터 인덱싱)

published-xenkey.json
{
  "spec": "1.0",
  "id": "xk_01J8Y6S9QH8P2G8P6X1K3R2H5A",
  "status": "published",
  "created_at": "2026-01-21T12:05:00Z",
  "published_at": "2026-01-21T12:10:00Z",
  "organization_id": "org_123",
  "base_id": "base_123",
  "unit_id": "unit_456",
  "anchors": [
    { "anchor_id": "anchor_1", "anchor_type": "product", "role": "primary" }
  ],
  "title": "Fresh espresso",
  "fact": "A 30 ml espresso shot made from 100% Arabica beans.",
  "meaning": "Represents the cafe's standard espresso offering.",
  "context": "Default menu item available all day.",
  "tags": ["coffee", "espresso", "menu_item"],
  "time_of_day": ["morning", "afternoon"],
  "meal": ["breakfast", "coffee_time"],
  "vibe": "energetic",
  "geo_scope": "point",
  "country": "IT",
  "city": "Milan",
  "timezone": "Europe/Rome",
  "geo": [9.1900, 45.4642],
  "locale": "en-US",
  "source_locale": "en-US",
  "translation_group": "tg_01J8Y6S6Q4K8FKJ1PS2H0WQ1B8",
  "is_source_locale": true,
  "hash_alg": "sha256",
  "hash_id": "hash_01J8Y6S6Q4K8FKJ1PS2H0WQ1B9",
  "hash": "6e4f8c9d8b0f7a6d3b3a0f3c1f8e9d6e...",
  "is_vector": true,
  "is_graph": false,
  "is_aidex": false,
  "publication": ["vector"],
  "is_published": true,
  "is_private": false
}

이 사양은 Xenkey의 정준 참조입니다 spec=1.0.

정준 JSON 스키마: xenkey_schema_v1_0.json