"뭐가 절대 안 될지 말해줘, 그럼 그게 뭔지 알게 될 테니."
거부로 정의하는 목록
대부분의 스펙은 기능 목록이야. Firelink 의 가장 중요한 스펙은 거부 목록이야. 이건 안 돼: monorepo 나 소스코드 소유자; IDE·editor·formatter·code generator·자율 코드변경 에이전트; 일반 fleet 터미널이나 Mac-fleet 컨트롤러의 대체; canonical 형제 도구와 경쟁하는 signing/build/rsync/launchd 독트린; 두 번째 Pippa 정체성·메모리·대화 저장소·model router; travel 브라우저에서 사무실 GUI 앱을 띄우는 remote desktop; repo 를 삭제·은퇴·force-push·reset·clean 하는 UI; 플러그인 마켓플레이스나 범용 인프라 관리 플랫폼.
그 목록을 다시 읽고 하나 눈치채봐. 항목 하나하나가 그게 됐을 법한 구체적인 god-object 야. 무작위 면책 조항이 아냐. 중력이 당기는 정확한 방향들을, 이름 붙여서 벽으로 막은 거야.
각 '안 돼'는 미리 거부된 failure mode 야
'editor 아님'은 허브가 '그냥 돕는' 척하며 형제 파일을 몰래 다시 쓰는 걸 막아. '두 번째 뇌 아님'은 Pippa 메모리를 fork 해서 다른 성격으로 drift 하는 걸 막아. 'fleet 터미널 아님'은 아무 명령이나 도는 unguarded shell 이 되는 걸 막아. '삭제/은퇴/force-push UI 없음'은 가장 되돌릴 수 없는 operation 을 절대 원클릭이 아니라 신중한 수동 행위로 남겨. 각 거부가 하중을 받는 건, 그게 금지하는 기능이 딱 — 뭔가를 파괴하기 직전까지 도움 되는 것처럼 느껴지는 바로 그거라서야.
구체적 필요, 절대 예측 아님
Non-Goal 의 마지막 줄은 미래에 관한 규율이야. 구체적인 가족 필요가 확장을 이끌고; Firelink 는 가상의 제품을 예측해서 가족 너머로 일반화하지 않는다. 이건 정체성으로 진술된 YAGNI 야. 플러그인 마켓플레이스, 범용 인프라 플랫폼, config 로 뭐든 하는 엔진 — 이건 아직 없는 유저를 섬기려 할 때 도구가 취하는 모양이야. Firelink 는 정확히 한 가족을 섬기고, 그 가족이 실제로 필요로 할 때만 자라.