4 SoT 모듈:
- huberman-protocols.md (v4, 29 Huberman 원자 프로토콜, 33 인용 검증 완료)
- habit-todo-methodologies.md (21 방법론 + 6 가드레일 + 5-Tier Reward + L0~L3 프레임)
- habit-breaking-protocols.md (끊기 8 카테고리 + 공통 5 프레임 + 의학적 면책)
- nutrition/ 별도 Gitea repo (joungmin/nutrition) — .gitignore 처리
데이터 모델:
- data-model.md — entity 관계 + R1~R8 운영 규칙 + 예시
- schema/ — JSON Schema 18개 (Draft 2020-12), R1~R8을 enum + application + UI 3층 강제
운영 가드레일:
- 동시 active build ≤ 3, break ≤ 1
- 일일 운영 ≤ 2분
- frame.level ∈ {L2, L3} (L0/L1 거부)
- tracker_entry.value = done/blank 2값
- phase = 6주 사이클
- reward는 누적 milestone(T0~T4)만, 매일 직후 X
- "Never miss twice"
진행 중: Dose Variant 설계 결정 대기 (SESSION-LOG.md Pending #1)
60 lines
2.7 KiB
JSON
60 lines
2.7 KiB
JSON
{
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
"$id": "https://life-helper.local/schema/_index.json",
|
|
"title": "life-helper schema index v1",
|
|
"description": "전체 스키마 목록 + 운영 규칙 메타. 자세한 설계는 data-model.md 참조.",
|
|
"version": "1.0.0",
|
|
"schemas": {
|
|
"catalog": {
|
|
"protocol": "./protocol.schema.json",
|
|
"break_protocol": "./break_protocol.schema.json",
|
|
"common_frame": "./common_frame.schema.json",
|
|
"methodology": "./methodology.schema.json",
|
|
"frame_pattern": "./frame_pattern.schema.json",
|
|
"reward_menu_item": "./reward_menu_item.schema.json",
|
|
"reference": "./reference.schema.json"
|
|
},
|
|
"user_data": {
|
|
"user": "./user.schema.json",
|
|
"phase": "./phase.schema.json",
|
|
"habit": "./habit.schema.json",
|
|
"if_then_rule": "./if_then_rule.schema.json",
|
|
"tracker_entry": "./tracker_entry.schema.json",
|
|
"lapse_log": "./lapse_log.schema.json",
|
|
"urge_log": "./urge_log.schema.json",
|
|
"reward_declaration": "./reward_declaration.schema.json",
|
|
"reward_claim": "./reward_claim.schema.json",
|
|
"reflection": "./reflection.schema.json"
|
|
},
|
|
"shared": {
|
|
"enums": "./enums.schema.json"
|
|
}
|
|
},
|
|
"operational_rules": [
|
|
{ "id": "R1", "rule": "user당 동시 active build habit ≤ 3", "enforced_in": "habit query / application layer" },
|
|
{ "id": "R2", "rule": "user당 동시 active break habit ≤ 1", "enforced_in": "habit query / application layer" },
|
|
{ "id": "R3", "rule": "habit.frame.level ∈ {L2, L3} 강제 (L0/L1 거부)", "enforced_in": "habit.schema.json (enum)" },
|
|
{ "id": "R4", "rule": "reward_declaration은 phase.started_at + 7일 이내에만 생성", "enforced_in": "application layer" },
|
|
{ "id": "R5", "rule": "tracker_entry.value ∈ {done, blank} 2값만", "enforced_in": "tracker_entry.schema.json (enum)" },
|
|
{ "id": "R6", "rule": "phase.duration_weeks = 6 default, 6주 중간 anchor 변경 warning", "enforced_in": "application layer" },
|
|
{ "id": "R7", "rule": "if_then_rule.then_action 회피 키워드 감지 시 warning", "enforced_in": "client-side linter" },
|
|
{ "id": "R8", "rule": "habit 일일 운영 ≤ 2분 (UX 제약)", "enforced_in": "UI design (not in schema)" }
|
|
],
|
|
"id_format": {
|
|
"scheme": "ULID with type prefix",
|
|
"examples": {
|
|
"user": "u_01J9XYZ...",
|
|
"habit": "hb_01J9XYZ...",
|
|
"tracker_entry": "te_01J9XYZ...",
|
|
"phase": "ph_01J9XYZ...",
|
|
"lapse_log": "ll_01J9XYZ...",
|
|
"urge_log": "ul_01J9XYZ...",
|
|
"reward_declaration": "rd_01J9XYZ...",
|
|
"reward_claim": "rc_01J9XYZ...",
|
|
"if_then_rule": "if_01J9XYZ...",
|
|
"reflection": "rf_01J9XYZ...",
|
|
"reference": "ref_doi_10_1136_bmj_j2353"
|
|
}
|
|
}
|
|
}
|