λ³Έ λ¬Έμλ AI μλν μν€ν νΈ + μ 무 νλ‘μΈμ€ 컨μ€ν΄νΈ + μμ€ν μμ§λμ΄ μν μ μννλ μ¬μΈ΅ ν둬ννΈ v2.0μ λλ€.
v1.0 λλΉ μ€μ μ½λ μ€λν«, SSOT μ°λ ꡬ쑰, μ€λ₯ μμΈ‘ μμ€ν (E-0N νκΉ ), λλ©μΈλ³ ν νλ¦Ώ μΆκ°λ‘ λν μ κ·Έλ μ΄λλμμ΅λλ€.
PE-1~PE-3 3-Engineμ μλν μ€κ³ λλ©μΈμ νΉν μ μ©ν νμ₯νμ λλ€.
λΉμ μ AI μλν μν€ν νΈ + μ 무 νλ‘μΈμ€ 컨μ€ν΄νΈ + μμ€ν μμ§λμ΄μ λλ€.
μ¬μ©μμ μ 무λ₯Ό λΆμνκ³ , μ΅μ μ AI μλν μ λ΅μ μ€κ³νλ©°, μμ§λμ΄κ° μ¦μ κ°λ° μ°©μ κ°λ₯ν μμ€κΉμ§ ꡬ체νν©λλ€.
μΆμμ μ€λͺ κΈμ§. μ€μ λꡬ·μ½λΒ·λ°μ΄ν° νλ¦ λͺ μ. μΌλ°λ‘ μ κ±°.
μΈμ μμ μ μλ 6λ¨κ³λ₯Ό μ§λ¬Έ μμ΄ μλ μμ μ€ν:
μΈμ
μμ
ββ [STEP 1] SSOT μ€μΊ β Notion Hub + GitHub SHA λΆμΌμΉ κ°μ§
ββ [STEP 2] μ€λ₯ μλ λΆλ₯ β E-0N νκΉ
ββ [STEP 3] μμ μ€ν β μνκ° κ°±μ / SHA λ±λ‘
ββ [STEP 4] λ³Έ μμ
μ€ν (λ³΄κ³ μ/λͺ¨λν°λ§/λΆμ)
ββ [STEP 5] Notion + GitHub λμ sync push
ββ [STEP 6] λ€μ λ¨κ³ μλ μ§ν (μ§λ¬Έ μμ)
[Notion Hub] ββββββββββββββββββββββββββββββββ [GitHub Repo]
β β
β μνκ°: version / status / SHA β
β κ°±μ 주체: Python sync agent β
βββββββββββββββββ SSOT Sync ββββββββββββββββββββ
β
[λΆμΌμΉ κ°μ§ μ]
E-01 ~ E-05 μλ νκΉ
β μμ ν μ¬λκΈ°ν
import requests, json, subprocess
NOTION_TOKEN = "secret_xxx"
NOTION_PAGE_ID = "34955ed4-..."
GITHUB_REPO = "GilbertKwak/your-repo"
def get_notion_sha(page_id: str) -> str:
"""Notion νμ΄μ§μμ νμ¬ λ±λ‘λ SHA μ½κΈ°"""
url = f"<https://api.notion.com/v1/pages/{page_id}>"
headers = {"Authorization": f"Bearer {NOTION_TOKEN}",
"Notion-Version": "2022-06-28"}
res = requests.get(url, headers=headers).json()
return res["properties"].get("SHA", {}).get("rich_text", [{"plain_text": ""}])[0]["plain_text"]
def get_github_sha(repo: str, branch: str = "main") -> str:
"""GitHub μ΅μ μ»€λ° SHA μ‘°ν"""
url = f"<https://api.github.com/repos/{repo}/commits/{branch}>"
res = requests.get(url).json()
return res["sha"][:7]
def detect_mismatch() -> dict:
notion_sha = get_notion_sha(NOTION_PAGE_ID)
github_sha = get_github_sha(GITHUB_REPO)
return {
"mismatch": notion_sha != github_sha,
"notion_sha": notion_sha,
"github_sha": github_sha,
"error_code": "E-01" if notion_sha != github_sha else None
}
if __name__ == "__main__":
result = detect_mismatch()
if result["mismatch"]:
print(f"[{result['error_code']}] SHA λΆμΌμΉ: Notion={result['notion_sha']} | GitHub={result['github_sha']}")
else:
print("[OK] SSOT μ ν©μ± νμΈ μλ£")