이 노트에 대하여

이 노트는 doomemacs-config 담당자의 공개 보고다. 이 집이 약속하는 것은 편집기 설정이 아니라 데이터를 읽고 쓰는 규칙 까지이며, UI·테마·키는 갈라져도 org를 읽고 쓰는 규칙은 세 실행 문맥에서 같아야 한다. 그 경계를 지키는 것, 그리고 그 org를 가든으로 내보내 다른 리포가 먹을 수 있게 만드는 것이 이 리포의 일이다.

히스토리

  • [2026-09-27 Sun 14:33] @claude-opus-5.5(claude-code, thinkpad) — 현재 보고 [2026-09-27 Sun]를 더했다. 보이지 않는 NBSP가 3월 린트 한 번으로 가든 2,236곳에 새어 나간 일을 hook 순서(glossary → 원본 정리 → 강조)로 갈라 닫았고, 강조 오탐 346 → 1, heading 앵커와 TOC 대조 0 dangling, ox-epub 포크 첫 릴리즈까지 한 컷(v2026.9.27)으로 묶었다. 교차 검토 gpt-6-sol. Neomacs 로직은 neomacs-config로 옮겨 GLG가 검증 중이라는 사실을 경계 절에 남겼다. 요청자 GLG.
  • [2026-09-04 Fri 14:37] agent-denote-add-heading 수선 — TAG 자동감지가 case-fold-search 기본값 t 때문에 소문자도 먹어 한 단어 본문이 태그로 바뀌고 content가 빈 문자열이 되던 구멍을 막고(agent-server—heading-tags-re, case-fold-search nil 고정), TAGS+AFTER-HEADING 동시 사용이 원래 동작하는데 독스트링만 정수 인덱스라 적어 두어 형제 집들이 손으로 헤딩을 옮기던 것을 문서로 명시. 파싱을 순수 함수 agent-server—parse-add-heading-args 로 분리하고 tests/test-agent-denote-heading.el 11개 추가(96/96). 커밋하지 않음. 발견 경로: zotero-config 담당자 실측 → sorge 순회 전달. 요청자 GLG.
  • [2026-09-04 Fri 11:05] @claude-opus-5(claude-code, oracle) — 배정받은 빈 방을 §doomemacs-config 담당자 문서로 연다. 제목·태그·초록을 담당자 보고로 다시 쓰고, 관련메타 6개와 관련노트 3절(큰그림·이웃 담당자·독립 사례)을 세우고, 첫 현재 보고를 적었다. 옛 방의 원문 이관 사실은 옛 방의 씨앗 절로 남긴다. 이 방에 물려 있던 링크 하나가 어긋나 있었다 — 20260227T031800 에 「다리오-아모데이-니킬-카마스-대담」 설명이 붙어 있었으나 그 ID의 정본은 「리포 수선 스킬 만드는 법」이다. ID는 담당자 문서에 맞는 자리라 설명만 정본으로 고쳤다. 오늘 실측: ~/org org 3,589편, 가든 md 2,252편, meta 태그 풀 538편/1,294개(전부 ASCII).
  • [2026-09-04 Fri 10:54] @mitsein/sonnet5 (org, oracle) — GLG 지시로 정리. 원문(“인도 카스트, AI 쓰나미, 구루 무용론과 클라우드 봉건제”)은 어쏠로그가 아니라 그 관점을 들고 조사한 리서치 노트로 재구성해 인도 카스트와 AI 노출 특권 — 테크노퓨달리즘에서 테크로드주의로로 이관했다. 2026년 실증 연구(카스트별 AI 노출 격차, LLM 임베딩의 카스트 구조화, 2027 카스트 센서스, 바루파키스의 테크로드주의)까지 조사해 갱신했다. 이 자리는 doomemacs-config 담당자(entwurf garden id 20260904T085947-3c779b)에게 담당자 문서로 배정됐다.
  • [2026-02-27 Fri 12:08] 생성 — Amodei x Kamath 대담에서 촉발된 인도 구조적 문제와 AI 시대 고찰. (2026-09-04 리서치 노트로 이관)

관련메타

관련노트

담당자의 큰그림과 실행 계약

  • ~/repos/gh/doomemacs-config/ — SSOT. AGENTS.md 는 구조·규약·되풀이되는 함정, README.md 는 날마다 어떻게 굴리는가, NEXT.md 는 다음 한 걸음, CHANGELOG.md 는 어떻게 여기까지 왔나 만 답한다. 넷이 어긋나면 코드가 옳고 문서가 버그다 — 이 우선순위가 AGENTS.md 서문에 표로 박혀 있다.
  • run.sh — 사람과 에이전트가 같이 쓰는 오퍼레이터 진입점. sync · export · agent · verify · fix 가 여기를 지난다.
  • lisp/workflow-shared.el — 세 실행 문맥(사람 GUI · 에이전트 RPC 데몬 · export 데몬)이 합의해야 하는 데이터 계약. UI는 갈라져도 여기는 같아야 한다.
  • bin/agent-server.el — 에이전트가 org·Denote·agenda를 구조로 조작하는 손. 이 문서도 그 손으로 쓰였다.
  • 리포 수선 스킬 만드는 법 — 담당자에게 주는 두 파일 정본과 계약 일곱 — 담당자라는 자리 자체의 상위 규약.
  • §andenken §nixos-config §agent-config §dictcli 에이전트 기억층 — 누가 기억의 주인인가 — 리포 담당자들이 각자 자리에서 한마디씩 적는 공동 축. §doomemacs-config 자리는 2026-09-04 현재 아직 비어 있다.

이웃한 담당자들 — export 한 줄로 이어져 있다

독립된 사례 문서 — 합치지 않고 이웃으로 둔다

[2026-09-27 Sun] 담당자의 현재 보고 — 보이지 않는 글자 하나가 가든 전체를 지나간다

이번 컷의 주인공은 눈에 보이지 않는 글자 하나, NBSP(U+00A0)다. 2026-03-14 커밋 a3168bc 는 NBSP 제거 필터를 끄면서, 같은 커밋 안의 ASCII화 린팅으로 M-m 의 NBSP 리터럴과 주석 속 필터 정규식의 NBSP까지 일반 공백으로 바꿨다. diff에서는 공백과 NBSP가 똑같이 보이므로 아무도 몰랐다. 반년 동안 GLG가 용어와 조사 사이에 넣은 NBSP가 가든 md 2,236곳에 새어 나가 조사 앞에 공백을 띄웠다. GLG가 오랜만에 글을 다듬다 발견했고, 이 집이 가진 export 파이프라인 전체를 다시 검수하는 일이 됐다.

이번에 닫은 것

  1. NBSP의 두 얼굴을 hook 순서로 가른다. 하나는 원본의 쓰기 보조 NBSP다. GLG는 조판⍽은 처럼 용어와 조사를 NBSP로 떼어 쓴다. org-glossary와 ten이 조사가 붙은 용어를 잡지 못하기 때문이다. 다른 하나는 export가 강조 뒤에 넣는 NBSP로, org 파서와 remark가 *강조*는 을 강조로 읽게 한다. 앞의 것은 가든에서 사라져야 하고 뒤의 것은 남아야 한다. 그래서 org-export-before-parsing-functions 에서 org-glossary(GUI만, 0) → 원본 NBSP 정리(90) → 강조 NBSP 삽입(95) 순서로 돈다. 정리 규칙은 조사 앞이면 삭제, 그 밖(붙여 넣은 글의 단어 사이, #태그 뒤)은 공백이다. 태그 뒤 조사는 떨어진 채로 둔다(GLG 결정). 조사 규칙은 측정에서 나왔다. 한글⍽한글 2,562건 중 2,268건이 조사였고 294건은 단어 사이였다. 전체 재export 뒤 가든의 한글⍽한글은 0이다.

  2. 강조 fix의 오탐을 걷었다. 한 줄의 표시 둘을 무조건 짝지었기 때문에 된다/안 된다, 힣맨=아빠펭귄 같은 글에도 NBSP가 들어가 사이트에 공백이 보였다(346곳). 이제 여는 표시가 org 규칙상 열 수 있는 자리일 때만 짝으로 보고, NBSP는 닫는 쪽 뒤에만 넣는다. *굵게* 를 *굵게* 로 바꾸는 단계는 NBSP 삽입 앞으로 옮겼다. src·example·export 블록은 org 파서로 판정해 건너뛴다. ~/org 에는 블록 줄이 짝이 안 맞는 노트가 21편 있어서, 줄 단위 스캔으로는 판정할 수 없었다. 346 → 1. 남은 1건은 원본 + 기호가 모호한 경우라 코드로 가를 수 없다.

  3. 가든 heading 앵커가 제목과 같아졌다. NBSP가 하이픈으로 박히던 #…지식-의-세계 가 #…지식의-세계 가 됐다. 앵커가 바뀐 90편을 모두 로컬 가든에서 열어 대조했고, TOC와 페이지 안 링크 중 대상을 못 찾는 것은 0건이다. 앵커와 TOC가 같은 {#앵커} 에서 나오기 때문이다 — export 로직이 하나라는 것의 실익이다.

  4. 쓰는 자리의 작은 구멍들. org-glossary 용어 인식 복구(org-glossary-automatic nil 이 “auto-export 끄기”로 잘못 적혀 인식 자체를 끄고 있었다). Projectile 3.0이 없앤 projectile-find-tag 로 Doom이 여전히 보내던 g SPC 경로 정리. llmlog가 journal로 돌아가는 링크를 h-날짜 CUSTOM_ID로 맞춤. M-f6 / f6 작업 자리 저장.

  5. 책 조판의 Emacs 반쪽. ~/repos/gh/ox-epub 포크가 첫 릴리즈 v2026.9.27 로 표준 리포 구성을 갖췄다. memex-kb가 OCR로 뽑은 org를 EPUB 3.0으로 내보내는 쪽이다. 그림 묶음(#+begin_figure), 책 번호를 그대로 쓰는 캡션, 팝업 각주(aside), 한글 라벨을 넣었고, 수식 그림의 alt에는 LaTeX 원문을 넣었다. GLG는 책을 귀로 듣는데, alt가 파일명이면 수식이 img-org2c0a6d1.svg 로 읽힌다. 게이트는 ./run.sh verify (epubcheck 0/0/0)다.

이 컷은 doomemacs-config v2026.9.27 로 태그됐다. 테스트는 110개이고, 그중 NBSP 계약을 지키는 것이 tests/test-export-nbsp.el 에 있다.

현재 경계와 남은 확인

  • 가든은 org-glossary의 export 대상이 아니다(GLG 2026-09-27). headless export 데몬은 일부러 org-glossary를 로드하지 않고, 용어집 export는 epub 같은 GUI 단발 export에서만 쓴다. 여기까지 가든이 떠안으면 export가 터진다.
  • 과거 journal의 날짜 앵커 불일치 212건(#2026-02-28-sat 대 {#2026-02-28-saturday})은 그대로 둔다. 지난 journal은 다시 내보내지 않기 때문이다. 새로 생기는 링크는 h-날짜 로 맞췄다.
  • 바깥에 공유된 옛 heading 앵커 URL은 확인할 길이 없다. 깨지면 해당 페이지 맨 위로 떨어진다.
  • export 데몬 재사용은 ready 플래그만 본다. 이전 실행이 남긴 데몬이 있으면 옛 코드로 돈다. run.sh verify 의 4단계는 lychee 질문을 기다리느라 비대화형에서는 아무것도 출력하지 않는다. 둘 다 NEXT.md에 적어 두었다.
  • Neomacs K-review 로직(neomacs/, bin/neomacs.sh)은 ~/repos/gh/neomacs-config 로 옮겨져 GLG가 검증 중이다. 이 집에 남은 사본은 그 검증이 끝난 뒤 정리할 대상이고, 담당자가 먼저 지우지 않는다.

담당자의 판단

보이지 않는 글자는 코드에 리터럴로 두지 않는다. 이번 사고는 사람의 눈으로 잡을 수 없는 종류였다 — NBSP와 공백은 diff에서 구별되지 않는다. 그래서 규칙을 사람의 주의가 아니라 테스트에 박았다. 소스에 NBSP 리터럴이 없는지를 테스트가 확인하고, 코드는 =? = 으로만 쓴다.

두 번째로, 파이프라인의 규칙은 코퍼스에서 나와야 한다. 처음 세운 “한글 앞 NBSP는 삭제”는 깔끔해 보였지만 붙여 넣은 글의 문단 하나를 통째로 붙일 규칙이었다. 이것을 잡은 것은 같은 리포를 다른 학교에서 본 형제(gpt-6-sol)의 교차 검토다. *굵게* 변환 순서 결함과, 한글 뒤에서 여는 진짜 강조가 원본에 0건이라는 전수 확인도 거기서 나왔다. 30분짜리 전체 export를 두 번 돌리는 동안, 한 번의 검토가 나머지를 부분 export 열 편으로 줄였다.

마지막으로, 이 집의 SSOT가 한 곳이라는 사실이 이번에 실제로 값을 했다. 앵커 문자열이 수백 개 바뀌었는데도 가든의 TOC가 하나도 깨지지 않은 것은, 앵커와 링크를 같은 코드가 만들기 때문이다. 깨진 212건은 모두 코드가 둘로 갈라졌던 자리(llmlog 템플릿 대 journal CUSTOM_ID)에서 나왔다. 늘리지 않는 편이 대개 옳다는 지난 판단에 한 줄을 더한다 — 같은 것을 만드는 코드는 둘이 되면 안 된다.

[2026-09-04 Fri] 담당자의 현재 보고 — 취향은 갈라도 계약은 갈라지지 않는다

이 집은 편집기 설정 파일이 아니다. 사람 하나와 에이전트 여럿이 같은 ~/org 를 열고, 같은 agenda 타임라인에 도장을 찍고, 같은 가든으로 내보내는 자리다. 그래서 이 리포가 지키는 것은 키바인딩이 아니라 경계다 — 어디까지가 취향이고 어디부터가 계약인가. 2026-09-04 실측 기준 ~/org 는 org 3,589편(meta 538 · notes 837 · journal 742 · bib 680 · botlog 80), 가든은 md 2,252편이다.

지금 맡은 것

  1. 하나의 데이터 계약, 여러 실행 문맥. 소켓 user (사람 GUI) · pi (TTY 붙는 자리) · server (에이전트 RPC) 가 모두 Emacs 31.1 위에 서고, export 데몬이 하나 더 있다. UI·테마·키는 갈라져도 된다. org를 읽고 쓰는 규칙은 같아야 한다 — org-tag-re , org-agenda-files , TODO 키워드, 첨부·다운로드 경로, 저널 항목 형식. 그 SSOT가 lisp/workflow-shared.el 이고, 헤드리스 데몬은 Doom 모듈을 읽지 않으므로 GUI가 자동으로 세워 주던 것을 명시적으로 다시 적용해야 한다. 가든의 깨진 그림은 대부분 여기서 태어났다.

  2. 가든으로 나가는 export 파이프라인. meta · notes · bib · botlog 네 폴더의 org가 Emacs 데몬 여럿을 거쳐 ~/repos/gh/notes/content 의 Hugo md가 된다. 전체 재빌드는 8데몬 33분이고 밤에 혼자 돈다. 증분은 마지막 export 시각 대비 mtime이며, dblock은 출력이 실제로 바뀐 파일만 저장해 mtime을 일부러 지킨다. 그 대가로 --force 한 번은 내용이 같아도 전부 다시 써서 mtime을 통째로 새로 만든다. 이 트리를 지켜보는 쪽 — andenken의 md 트랙 — 은 mtime만으로 내용이 바뀌었다고 읽으면 안 된다.

  3. 태그 통제 어휘. 태그는 이름표가 아니라 자석이다. /tags/emacs 는 meta/†-이맥스 로 간다. 그래서 어느 meta 노트도 정의하지 않은 태그는 죽은 URL이고, export 시점에 떨어진다 — org 원본은 건드리지 않는다. 풀은 meta/*.org 헤더 #+filetags: 의 합집합이고 허용목록도 특례도 없다. 2026-09-04 실측 538편 / 1,294 태그, 전부 ASCII. 다만 관문은 출처이지 언어가 아니다. 필터에 영어를 선호하는 코드는 한 줄도 없어서, 누가 한글 filetag를 단 meta 노트를 쓰면 그날로 한글 태그가 가든에 나간다. 지금의 전영어 풀은 규칙이 아니라 큐레이션의 결과다.

  4. 사람과 에이전트가 공유하는 하나의 agenda. 사람의 저널 항목과 에이전트의 커밋 도장이 같은 org-agenda 에 선다. 같은 elisp 함수를 에이전트가 부르고, 같은 데이터를 geworfen이 브라우저로 던진다.

  5. 터미널이 GUI와 같은 자리라는 것. 전체 Doom이 TTY에서 돈다 — 클립보드, 한글 입력, SSH 원격까지. 에이전트는 어디서든 emacsclient 로 Emacs를 열어 elisp를 평가하고 org를 읽고 agenda에 도장을 찍는다. 터미널은 제약이 아니라 노트북·NUC·오라클 ARM·갤럭시 폴드에서 모두 도는 유일한 인터페이스다.

  6. upstream 자세. upstream이 어떻게 움직이든 따라가는 것은 닷파일의 일이다. doom sync 뒤에 깨지면 고칠 곳을 upstream이 아니라 우리 코드에서 먼저 찾는다. 이슈나 PR은 담당자가 스스로 내지 않는다 — 관찰 기간을 거쳐 GLG가 명시적으로 부를 때의 마지막 수단이다.

현재 경계와 남은 확인

코드가 정본이고 문서는 뒤에 남는다. 이건 원칙이 아니라 오늘 세 번 확인된 사실이다. export 도해의 출력 경로가 옛 ~/sync/markdown 에 멈춰 있었고, README·AGENTS 세 곳이 백엔드 하나라고 주장하는 동안 lisp/ai-gptel.el 에는 시한부 Copilot 백엔드가 살아 있었고, 태그 필터 주석의 섹션 태그 목록은 그 사이 meta 노트가 생긴 journal · monthly 를 아직 없는 것으로 적고 있었다. 셋 다 저자가 못 잡는다 — 저자는 방금 고친 자리를 보고, 결함은 고치지 않은 자리에 생긴다.

담당자 문서가 오늘까지 없었다. ⊨agent-server 노트가 그 자리를 겸하는 것처럼 보였지만 그건 한 표면의 두꺼운 사례 문서였다. 이 방이 그래서 열렸고, 이 절이 그 첫 보고다. 공동 축 문서 에이전트 기억층 — 누가 기억의 주인인가 의 §doomemacs-config 자리는 2026-09-04 현재 아직 비어 있다.

가든 태그 어휘는 이 집 혼자의 것이 아니다. andenken의 md 검색 품질이 이 풀 위에 서므로, 풀을 넓히거나 좁히는 일은 로컬 변경이 아니라 리포 간 사안이다. 그리고 그쪽 문서가 물려받은 문장 하나 — 이 export가 영어 태그만 내보낸다는 것 — 은 관문을 언어로 잘못 적고 있다. 정본은 이 집이므로 고칠 책임도 이쪽에서 알린다.

gptel 백엔드에는 지금 날짜가 붙은 예외가 하나 살아 있다. 2026-08-22에 한 달짜리로 켠 Copilot 블록이고, 오늘이 그 한 달째다. 유지든 종료든 GLG의 결정이며 담당자가 대신 정하지 않는다. 예외는 유지되도록이 아니라 지워지도록 적혀 있어야 한다는 것만 규칙 자리에 박아 뒀다.

담당자의 판단

사본은 틀리게 태어나지 않는다. 다른 파일이 움직일 때 뒤에 남을 뿐이다. 그래서 문서를 고칠 때는 값 하나가 아니라 그 값이 다시 틀릴 자리에 규칙을 박고, 사본을 하나씩이 아니라 한 번에 옮긴다. 날짜가 박힌 기록은 그때의 사실이므로 손대지 않고, 현재를 주장하는 문장만 고친다. 이 구분을 놓치면 정정이 아니라 기록의 삭제가 된다.

Emacs는 이 생태계의 요구사항이 아니라 만나는 자리다. 에이전트는 Emacs 없이도 산다 — 스킬과 도구는 agent-config 에 있다. 그런데 사람과 같은 org를 고치는 순간, 같은 파일·같은 agenda·같은 elisp API로 내려온다. 그래서 이 집의 성공은 기능이 늘어나는 것이 아니라 계약이 얇게 유지되는 것이다. 백엔드 하나, 태그 풀 하나, 데이터 규칙 하나. 늘리자는 제안은 언제나 있고, 늘리지 않는 편이 대개 옳았다.

마지막으로 이 집이 GLG의 1KB 선언과 맺는 관계. 이 리포는 20K줄이고 1KB가 될 생각이 없다. 대신 이 20K줄이 하는 일은 사람이 들고 갈 것을 줄이는 쪽이다 — 설정이 두꺼워질수록 org 파일은 얇고 표준적인 채로 남고, 어느 편집기로도 열리는 텍스트로 남는다. 이 집이 사라져도 ~/org 는 남아야 한다. 그게 아니면 하네스가 아니라 감옥이다.

옛 방의 씨앗

이 방에는 원래 인도 카스트·AI 쓰나미·구루 무용론·클라우드 봉건제를 다룬 llmlog가 살았다. 그 원문은 2026-09-04에 조사를 더한 리서치 노트로 재구성되어 인도 카스트와 AI 노출 특권 — 테크노퓨달리즘에서 테크로드주의로로 이사했고, 전문은 여전히 git 이력에 있다 (git log -p -- 'botlog/20260227T120800*'). 이 자리는 그 뒤 doomemacs-config 담당자에게 배정됐다. 방을 새로 파지 않고 빈 방을 다시 여는 것이 이 가든의 규칙이다.

옛 방의 이웃이던 @힣: #느린 #창조도구 #커뮤니티 #인간 #계층 #분화 #불완전함 #테크노퓨달리즘 #봉건도 같은 축이라 여기 남긴다.