본문 바로가기
C.W.K.
Stream
Lesson 04 of 05 · published

적어두는 비채택

~13 min · records, boundaries, judgment, decision-record

Level 0흩어진 부품
0 XP0/36 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete

표면 하나는 바깥에 남아

조수를 붙이는 이 가족의 모든 앱이 공용 껍데기를 돌려. 하나만 빼고. 브라우저 확장 하나가 완전히 다른 환경에서 같은 일을 하고, 그건 의도된 비채택이야. 구조적 이유 다섯이랑 같이 적혀 있고, 다시 논쟁이 안 열리게 명시적으로 닫혔어.

이유들은 묶음으로 읽을 값이 있어. 하나만으론 결정적이지 않은데 모이면 압도적이거든.

  • 설계상 빌드가 없어. 컴포넌트 프레임워크를 채택한다는 건 콘텐츠 스크립트한테 번들러랑 런타임을 준다는 뜻이야. 채택인 척하는 재작성이지.
  • 사이드 모드가 브라우저 자기 네이티브 패널이야. 컨테이너도 드래그 손잡이도 열고 닫기도 브라우저가 그려. 거기 공용 껍데기를 넣으면 껍데기 안의 껍데기야.
  • 붙는 모드들은 임의의 남의 페이지에 주입돼. 거기선 클래스 기반 캐스케이드가 설계상 호스트 스타일이랑 충돌해. 확장의 전부-인라인 방식은 적대적 DOM 에 맞는 공학이지 부족한 게 아냐.
  • 공용 컴포넌트를 정의하는 규칙이 거기선 불가능해. 계약 전부가 패널이 호스트 내용을 덮지 말고 옆으로 밀라는 거야. 콘텐츠 스크립트는 남의 페이지를 다시 배치 못 해.
  • 기하 정보가 확장 저장소에 살아. 일부러 다른 저장 계약이야.

이유가 적혀야 하는 이유

수렴 표에서 빠진 항목은 안 끝난 일이랑 구별이 안 돼. 표는 체크 표시로 가득한데 칸 하나가 비었어. 자연스러운 독법은 누가 시간이 없었나 보다야. 결국 친절한 사람이 변환을 시작하고, 진짜 노력을 쓰고, 끝내버려. 의도된 결정을 부수면서. 아니면 중간에 네 번째 이유를 발견하고, 문단 하나가 알려줬을 걸 배운 채로 포기하거나.

이유를 적으면 수상한 빈칸이 닫힌 질문이 돼. 그 기록은 닫힌 채로 있게 하려고 적었다고 소리 내어 말하고, 그건 사실을 문서화하는 것과 다른 발화 행위야. 미래를 향한 결정이거든.

통합 안 하기로 한 것도 이유와 함께, 한 것과 같은 표에 적어. 수렴 작업은 진척처럼 읽히는 체크 표시 자국을 남기고, 거기 난 빈칸은 남은 일로 읽혀. 의도된 제외는 그 제외가 눈에 띄는 자리에 적히지 않으면 안 보여. 그 자리는 표지, 커밋 메시지도 누구 기억도 아니야.

그래도 뭘 나눠 갖는지 봐

기록에서 제일 센 부분은 마지막 줄이야. 그 확장은 이미 중요한 부분을 나눠 갖고 있어. 얘 패널은 다른 모든 앱이 싣는 그 임베드 표면을 그대로 실어. 그러니까 그 표면의 개선은 확장을 하나도 안 고쳐도 거기 닿아. 내비게이션 컨트롤 하나가 공짜로 내려앉았을 때 확인됐고.

그게 제외를 완전히 다시 짜. "얘만 뒤에 남겨졌다"가 아냐. 나눔이 다른 층에서 벌어지고 있고, 안 나누는 층은 애초에 나눠도 도움이 안 될 층이었다는 거야. 그 문장이 붙은 비채택은 경계고, 없으면 구멍처럼 보여.

Code

채택 표, 제외까지 적어 넣은 것·text
SHARED CHROME - who runs it

  app A  ✅  shim, app emblem in header
  app B  ✅  shim, origin resolved from settings
  app C  ✅  shim, extra frame permission (kit grew a prop for it)
  app D  ✅  shim, region above the frame
  ...
  extension  — DELIBERATE NON-ADOPTION, settled and closed:
               1. buildless vanilla by design; adopting a component
                  framework = a rewrite pretending to be an adoption
               2. side mode is the BROWSER's own panel; the browser
                  draws the container -> chrome inside chrome
               3. docked modes inject into arbitrary third-party
                  pages; cascade styling collides by construction,
                  and inline-everything is CORRECT there
               4. the chrome's defining rule (push, never cover) is
                  IMPOSSIBLE: a content script cannot repack someone
                  else's page
               5. geometry lives in extension storage - a different
                  persistence contract, on purpose

               WHAT IT SHARES ANYWAY: its panel loads the same
               embedded surface as every other app, so embed-side
               improvements reach it with no extension change.
               (Verified: a navigation control landed there free.)

  native apps  — different platform entirely; not a target
  one web app  — the OWNER draws this panel and controls its mode
                 over a message channel; jurisdiction, not a gap

LEGEND, because deployment and adoption differ:
  ✅ has a call site
  ⚙️ vendored only because another shared file imports it
  ⏳ vendored and intended, not yet wired
  —  not a target (reason required)

External links

Exercise

네 팀 문서에서 수렴이나 이주 표를 찾아서 빈칸을 전부 봐. 각각이 안 끝난 일인지 의도된 제외인지 판단해. 의도된 칸엔 이유를 써 넣고, 각각에 대해 그 참가자가 여전히 뭔가를 나누는 층도 이름 대.
Hint
표 주인 말고 제외된 컴포넌트 주인한테 물어. 표 주인은 빈칸을 남은 일로 읽는 경향이 있고, 컴포넌트 주인은 보통 자기 게 왜 다른지 정확히 알면서 그걸 적어달라는 요청을 한 번도 안 받았을 뿐이야.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.