파일 목록으로

Personal Operations Typed Schema

1. 목적

이 문서는 canonical ontology를 실제 구현 가능한 타입과 저장 구조로 내리기 위한 초안이다.

범위는 다음과 같다.

  • canonical ontology 전체를 구현하지는 않는다
  • 하지만 이후 확장이 가능한 공통 타입 구조를 먼저 고정한다
  • 저장소는 우선 Postgres + JSONB + edge table을 가정한다

2. 설계 원칙

  • 공통 필드는 모든 엔티티에 일관되게 적용한다
  • 관계는 edge table에 저장하고 typed relation으로 구분한다
  • provenance와 privacy는 선택 사항이 아니라 기본 필드다
  • derived metric과 insight는 raw entity와 별도 테이블에 둔다
  • 시나리오는 실 그래프를 직접 수정하지 않고 별도 state copy에 기록한다

3. 공통 Enum

entity_kind

person
organization
role
goal
objective
milestone
plan
project
task
commitment
decision
option
scenario
assumption
resource
constraint
risk
calendar_event
conversation
document
financial_event
account
health_signal
relationship
metric
outcome
evidence_item
insight
recommendation

privacy_level

public
personal
sensitive
financial
health
legal

record_status

draft
active
paused
completed
dropped
archived
assumed
invalidated

confidence_level

low
medium
high
very_high

source_type

email
calendar
note
document
task_app
bank_csv
healthkit
manual
derived

relation_kind

owns
has_role
belongs_to
participates_in
supports
blocks
depends_on
requires
conflicts_with
scheduled_for
due_on
communicated_in
costs
improves
worsens
affects
evidenced_by
derived_from
chosen_for
rejected_for
leads_to
based_on_assumption
sensitive_to

4. Core Tables

4.1 entities

모든 typed entity의 공통 저장소.

컬럼타입설명
iduuidPK
entity_kindtext엔티티 타입
titletext대표 이름
descriptiontext설명
statustext공통 상태
privacy_leveltext민감도
confidence_leveltext신뢰도
canonical_keytextdedupe용 key
attributesjsonbkind-specific 속성
observed_attimestamptz관측 시점
effective_fromtimestamptz효력 시작
effective_totimestamptz효력 종료
created_attimestamptz생성 시점
updated_attimestamptz수정 시점

핵심 아이디어는 typed table per entity 대신 공통 entity table + attributes jsonb로 시작하는 것이다. 초기엔 유연성이 더 중요하다.

4.2 edges

관계 저장소.

컬럼타입설명
iduuidPK
relation_kindtext관계 타입
source_entity_iduuidsource
target_entity_iduuidtarget
weightnumeric강도 또는 영향도
attributesjsonbrelation-specific 속성
observed_attimestamptz관측 시점
effective_fromtimestamptz효력 시작
effective_totimestamptz효력 종료
confidence_leveltext신뢰도
created_attimestamptz생성 시점
updated_attimestamptz수정 시점

4.3 evidence_items

증거 원문 저장소.

컬럼타입설명
iduuidPK
source_typetextemail, calendar 등
source_apptextGmail, GCal 등
source_idtext외부 시스템 ID
content_texttext정규화된 텍스트
raw_excerpttext핵심 발췌
metadatajsonb추가 메타
privacy_leveltext민감도
observed_attimestamptz원본 발생 시점
created_attimestamptz수집 시점

4.4 entity_evidence_links

엔티티와 증거 연결.

컬럼타입
iduuid
entity_iduuid
evidence_item_iduuid
link_typetext
confidence_leveltext
created_attimestamptz

4.5 metrics

계산된 메트릭의 시계열 저장소.

컬럼타입설명
iduuidPK
metric_nametext예: runway_months
subject_entity_iduuid보통 user
value_numbernumeric수치
value_texttext범주형 값 허용
unittextmonths, hours 등
window_starttimestamptz계산 구간 시작
window_endtimestamptz계산 구간 끝
computed_attimestamptz계산 시점
computation_versiontext계산 로직 버전
inputsjsonb사용된 source ids

4.6 insights

파생 인사이트 저장소.

컬럼타입
iduuid
insight_kindtext
subject_entity_iduuid
titletext
bodytext
confidence_leveltext
attributesjsonb
created_attimestamptz

4.7 decision_sessions

사용자의 질문 단위.

컬럼타입설명
iduuidPK
user_entity_iduuid사용자
questiontext원문 질문
decision_typetextcareer, time, relationship 등
statustextopen, analyzing, completed
baseline_snapshot_iduuid분석 시작 state
created_attimestamptz생성 시점
updated_attimestamptz수정 시점

4.8 decision_options

컬럼타입
iduuid
decision_session_iduuid
labeltext
descriptiontext
statustext
attributesjsonb
created_attimestamptz

4.9 scenario_runs

컬럼타입설명
iduuidPK
decision_session_iduuid소속 결정
option_iduuid연결된 선택지
scenario_nametext시나리오 이름
assumptionsjsonb전제 목록
interventionsjsonb적용된 개입
baseline_snapshot_iduuid기준 상태
scenario_snapshot_iduuid결과 상태
statustextpending, completed
created_attimestamptz생성 시점

4.10 scenario_metric_deltas

컬럼타입
iduuid
scenario_run_iduuid
metric_nametext
baseline_valuenumeric
scenario_valuenumeric
delta_valuenumeric
delta_directiontext
created_attimestamptz

4.11 decision_memos

컬럼타입
iduuid
decision_session_iduuid
memo_markdowntext
summary_jsonjsonb
confidence_leveltext
created_attimestamptz

4.12 state_snapshots

분석 시점 상태를 고정하기 위한 스냅샷.

컬럼타입
iduuid
user_entity_iduuid
snapshot_kindtext
state_jsonjsonb
created_attimestamptz

5. Kind-Specific Attribute Shapes

goal.attributes

{
  "horizon": "quarterly",
  "priority": 1,
  "success_criteria": "decide whether to start startup prep",
  "area": "career"
}

project.attributes

{
  "project_type": "work",
  "owner_entity_id": "uuid",
  "deadline": "2026-06-30T00:00:00Z"
}

commitment.attributes

{
  "commitment_type": "work",
  "importance": "high",
  "hard_deadline": "2026-03-28T00:00:00Z",
  "repeating": true
}

resource.attributes

{
  "resource_type": "cash",
  "current_value": 42000,
  "unit": "usd"
}

constraint.attributes

{
  "constraint_type": "time",
  "severity": "high",
  "notes": "leadership meetings consume evenings"
}

health_signal.attributes

{
  "signal_type": "sleep_hours",
  "value": 6.4,
  "unit": "hours",
  "window": "daily"
}

relationship.attributes

{
  "relationship_type": "cofounder_candidate",
  "strength": 0.7,
  "trust_level": 0.6,
  "last_contact_at": "2026-03-10T12:00:00Z"
}

decision.attributes

{
  "decision_type": "career",
  "deadline": "2026-06-01T00:00:00Z",
  "reversibility": "medium",
  "stakes": "high"
}

6. Derived Metrics Spec

초기 MVP에서 우선 계산할 메트릭:

metric_name정의입력
weekly_committed_hours이번 주 총 약속 시간calendar, commitments
deep_work_hours_per_week연속 집중 가능 시간calendar, focus blocks
free_cash_flow월 순현금흐름income, expense
runway_months버틸 수 있는 개월 수cash, burn
execution_load현재 과부하 정도tasks, commitments
goal_alignment_score시간과 행동이 목표와 얼마나 일치하는가goals, activities
context_switch_load시간 파편화 정도calendar events

7. API Contract Draft

POST /api/decisions

입력:

{
  "question": "Should I stay at my current job or start startup prep in the next 6 months?",
  "decision_type": "career"
}

출력:

{
  "decision_session_id": "uuid",
  "status": "open"
}

POST /api/decisions/:id/run

입력:

{
  "options": [
    {
      "label": "remain_in_job",
      "description": "Stay focused on current job"
    },
    {
      "label": "startup_prep_weekends",
      "description": "Use weekends for startup prep",
      "assumptions": ["8 deep work hours per week can be secured"]
    }
  ]
}

출력:

{
  "decision_session_id": "uuid",
  "scenario_run_ids": ["uuid", "uuid"],
  "status": "analyzing"
}

GET /api/decisions/:id/memo

출력:

{
  "decision_session_id": "uuid",
  "status": "completed",
  "memo_markdown": "...",
  "top_metric_deltas": [
    {
      "metric_name": "runway_months",
      "delta_value": -4.0
    }
  ]
}

8. Why This Shape

이 구조를 택하는 이유는 세 가지다.

  • ontology를 너무 일찍 rigid table로 박아두면 확장이 어렵다
  • 그렇다고 모든 것을 문서와 embedding에만 두면 계산이 안 된다
  • 그래서 entity/edge/event/metric/scenario/memo 축만 먼저 고정하는 편이 좋다

9. Next Migration Path

스키마가 안정화되면 아래 순서로 더 정교하게 분리할 수 있다.

  1. high-volume event source는 별도 raw table로 분리
  2. goal, decision, relationship는 dedicated typed table 생성
  3. graph traversal이 복잡해지면 graph DB 또는 materialized path 계층 추가
  4. metrics 계산은 batch job에서 stream update로 이동

0 / 114