보셈.
고로 AI 전문 사무원 없이 AI 자율 주행에 맞기는 건 문제가 있음.
즉, AI 딸깍으로 Clair, Nimf, Guiyom 이런 거 못 만든다는 말임.
────────────────────────────────────────────────────────────────────────────────
• 재검토 결론: 문제는 맞다. 다만 “ABI가 완전히 안 맞는다”가 핵심 문제라는 표현은
과했다.
정확한 문제는 이겁니다.
- include/clair.h:33는 C 사용자가 clair_event_loop_t storage를 직접 가질 수 있
게 공개합니다.
- src/c/clair-c.adb:92는 그 포인터를 Ada Context_Access처럼 취급해서
initialize를 호출합니다.
- 그런데 C storage에는 Ada new Context에서 일어나는 default initialization이
없습니다.
- Context.fd의 정상 초기값은 src/clair-io.ads:19인데, C에서 clair_event_loop_t
loop = {0};이면 첫 int 값은 0입니다.
- backend initialize는 src/event_loop/epoll/clair-event_loop-backend.adb:307를
반환합니다.
더 나쁜 경우도 있습니다. C stack object를 초기화하지 않고 넘기면 fd가 우연히
-1일 수도 있는데, 그러면 backend fd만 설정되고 list head/tail, call_depth,
signal registration 같은 나머지 필드는 garbage 그대로 남습니다. 이후 API 호출
에서 잘못된 포인터를 따라갈 수 있습니다.
그래서 판정은 이렇게 정리하는 게 맞습니다.
- create/destroy만 쓰는 현재 C 테스트 경로는 대체로 괜찮습니다. src/
event_loop/clair-event_loop.adb:860는 new Context를 쓰므로 Ada default
initialization이 됩니다.
- public clair_event_loop_initialize/finalize로 C in-place object를 지원하려는
API는 현재 깨져 있습니다.
- “포인터 크기가 달라서 ABI가 깨진다”는 식의 설명은 부정확합니다. 바이너리 호
출 자체보다 객체 수명/초기화 계약이 성립하지 않는 것이 실제 문제입니다.
- 작업 규모는 줄일 수 있습니다. C in-place API가 꼭 필요 없으면 initialize/
finalize 공개를 제거하거나 비지원으로 정리하는 쪽이 가장 작습니다. 필요하다
면 그때만 lifecycle marker와 reset 경로를 넣으면 됩니다.
─ Worked for 2m 08s ────────────────────────────────────────────────────────────
하네스 걸어도 비즈로직은 결국 일일이 미주알고주알 알려줘야 하는듯
codex, opencode, openclaw 같은 걸 하네스라 말하는 듯.
@guiyom.org 그 agents.md 같은거
LLM 애플리케이션을 만들 때 모델 자체는 퍼즐의 한 조각일 뿐이다. 실제로 동작하는 시스템에는 모델을 감싸는 코드가 필요하다. 사용자 질문이 들어왔을 때 어떤 문서를 검색할지, 이전 대화에서 무엇을 기억해둘지, 검색 결과를 어떤 순서로 프롬프트에 배치할지, 이 모든 결정을 내리는 코드를 논문에서는 "하네스"라고 부른다.
https://wikidocs.net/blog/@jaehong/12785/