Skip to content

feat(editor): 동영상 첨부 기능 + teamspace 페이지 fix — 운영에만 있던 미커밋 코드 반영 - #7

Merged
otroym merged 2 commits into
motefrom
feat/editor-video-attachments
Aug 5, 2026
Merged

feat(editor): 동영상 첨부 기능 + teamspace 페이지 fix — 운영에만 있던 미커밋 코드 반영#7
otroym merged 2 commits into
motefrom
feat/editor-video-attachments

Conversation

@otroym

@otroym otroym commented Aug 5, 2026

Copy link
Copy Markdown

/srv/shared/app-src/plane 정리의 2단계입니다. PR #6 이 미푸시 커밋을 올렸다면, 이건 아예 커밋된 적도 없는 작업입니다.

동영상 첨부 — v1.3.1-mote.50 부터 운영에서 동작 중, git 에는 없음

?? packages/editor/src/core/extensions/custom-video/    ← 7개 파일 통째로 untracked
 M packages/editor/src/core/{constants,extensions,plugins,types}/   ← 5개 파일 미커밋

custom-video/ 디렉토리 생성 시각이 mote.50 프론트엔드 빌드 5분 전(7/21 17:24 → 17:29)입니다. 그 빌드가 dirty 트리에서 이뤄지면서 커밋 없이 그대로 배포됐습니다.

배포된 번들에서 videoComponentvideo/quicktime 을 확인했습니다 — 지금 운영에서 살아있습니다. 이 커밋 없이 프론트를 origin/mote 로 재빌드했다면, 오늘 아침 백엔드에서 ProjectIssueType 이 사라진 것과 똑같은 방식으로 동영상 기능이 조용히 사라졌을 겁니다.

내용

파일 역할
custom-video/ (7파일, 618줄) tiptap 노드 — extension, config, node-view, block/uploader 컴포넌트, types, utils
constants/config.ts ACCEPTED_VIDEO_MIME_TYPES (mp4/webm/quicktime) — PR #5 로 되살린 백엔드 allowlist 와 짝
constants/extension.ts, types/extensions.ts CUSTOM_VIDEO 등록 + TExtensions"video" 추가(기능 플래그로 끌 수 있게)
extensions/extensions.ts 비활성화되지 않았으면 CustomVideoExtension 등록
plugins/drop.ts 드롭된 파일이 동영상 MIME 이면 일반 첨부 경로 대신 insertVideoComponent

재구현이 아니라 작업 트리에서 원문 그대로 가져왔습니다.

teamspace 페이지 "use client" (별도 커밋)

동영상과 무관해서 커밋을 분리했습니다. useParams() 를 쓰는 페이지라 client component 지시자가 필요하고, 없으면 재빌드 시 빌드가 깨지거나 페이지가 망가집니다.

검증

  • custom-video/ 의 모든 import 가 이 트리에서 해소됨 — @/hooks/use-file-uploaduseUploader·useDropZone·uploadFirstFileAndInsertRemaining 3개 심볼 존재 확인 포함
  • CustomVideoExtension export ↔ extensions.ts import 경로 일치, insertVideoComponent 커맨드 정의 확인

⚠️ 프론트엔드에는 백엔드 같은 게이트를 만들 수 없습니다

백엔드는 verify-image-source.sh 로 이미지 내부 /code/plane 과 git 트리를 md5 대조할 수 있습니다. 프론트엔드는 번들이 컴파일·미니파이되어 있어 같은 방식이 불가능합니다. 실제로 이 PR 검증 중에도 isLoadingProjectLinks(지역 식별자)가 번들에서 안 잡혀 판정이 불가능했습니다 — 문자열 리터럴만 겨우 확인 가능합니다.

즉 프론트엔드는 "dirty 트리에서 빌드하지 않는다"는 절차로만 막을 수 있습니다.

다음

이 PR 이 머지되면 배포된 mote.50 프론트엔드의 내용이 전부 git 에 들어옵니다(GROWTH-144 = PR #6, 동영상 = 이 PR, use client = 이 PR). 그때부터 프론트엔드 재빌드가 안전합니다.

관련: PR #4 · #5 · #6, PLANE-78 / PLANE-80

🤖 Generated with Claude Code

otroym and others added 2 commits August 5, 2026 16:59
This has been running in production since v1.3.1-mote.50 (2026-07-21) but
existed nowhere in git. The mote.50 frontend image was built from
/srv/shared/app-src/plane while these changes sat uncommitted in the working
tree, so the feature shipped without ever being committed. The
custom-video/ directory was created five minutes before that build.

Confirmed live: the deployed bundle contains videoComponent and
video/quicktime. Rebuilding the frontend from origin/mote without this
commit would have silently removed the feature from production -- the same
way rebuilding the backend cleanly removed ProjectIssueType earlier today.

Contents:

- packages/editor/src/core/extensions/custom-video/ -- new tiptap node:
  extension, config, node view, block/uploader components, types, utils.
- constants/config.ts: ACCEPTED_VIDEO_MIME_TYPES (mp4, webm, quicktime),
  matching the backend allowlist recovered in the previous release.
- constants/extension.ts + types/extensions.ts: CUSTOM_VIDEO core extension
  and a "video" entry in TExtensions so it can be feature-flagged off.
- extensions/extensions.ts: register CustomVideoExtension unless disabled.
- plugins/drop.ts: route a dropped file to insertVideoComponent when its
  MIME type is a video and the extension is enabled, instead of falling
  through to the generic attachment path.

Recovered from the working tree as-is, not reimplemented. There is no
authorship record because it was never committed; it sits alongside otro's
GROWTH-144 work from the same period.

Verified: every import resolves against this tree, including the three
symbols taken from @/hooks/use-file-upload.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Also uncommitted in the mote.50 build tree, and unrelated to video -- kept
separate for that reason.

The page calls useParams(), which requires a client component. Without the
directive a rebuild from origin/mote would fail or ship a broken page.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@makeplane

makeplane Bot commented Aug 5, 2026

Copy link
Copy Markdown

Linked to Plane Work Item(s)

References

This comment was auto-generated by Plane

@otroym
otroym merged commit 8bd38bb into mote Aug 5, 2026
@otroym
otroym deleted the feat/editor-video-attachments branch August 5, 2026 08:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant