Skip to content

fix: mote.50 이미지에만 있던 미커밋 운영코드 회수 (ProjectIssueType API + 동영상 업로드) - #5

Merged
otroym merged 2 commits into
motefrom
fix/recover-lost-mote50-code
Aug 5, 2026
Merged

fix: mote.50 이미지에만 있던 미커밋 운영코드 회수 (ProjectIssueType API + 동영상 업로드)#5
otroym merged 2 commits into
motefrom
fix/recover-lost-mote50-code

Conversation

@otroym

@otroym otroym commented Aug 5, 2026

Copy link
Copy Markdown

제가 mote.51 배포로 만든 회귀를 되돌립니다.

어떻게 발견했나

mote.51 회고(PLANE-80)에서 만들기로 한 diff -r 게이트를 구현하고 첫 실행하자마자 제 배포를 잡았습니다.

$ diff -r <origin/mote 트리> <mote.50 이미지의 /code/plane>
420 lines

mote.50 이미지에는 이 레포에 아예 없는 코드가 들어 있었습니다. mote.50 이 dirty 한 /srv/shared/app-src/plane 에서 빌드됐기 때문이고, 그 디렉토리는 지금도 dirty 합니다.

그래서 mote.51 을 깨끗한 origin/mote 에서 빌드해 배포하자 그 코드가 운영에서 사라졌습니다.

사라진 것

① 프로젝트별 작업유형 API

GET|POST  /api/workspaces/<slug>/projects/<id>/issue-types/
DELETE    /api/workspaces/<slug>/projects/<id>/issue-types/<pk>/

ProjectIssueTypeViewSet · ProjectIssueTypeSerializer · ProjectIssueType export 전부. 배포된 프론트엔드(아직 mote.50)가 이 경로를 호출합니다 — 번들에서 /api/workspaces/${e}/projects/${t}/issue-types/ 확인했습니다. mote.51 상태에서는 404 였습니다.

다만 게이트웨이 로그 보존구간 전체에서 실호출 0건이라(1건 잡힌 건 제 검증용 curl) 실제로 깨진 화면은 없었고 잠재 고장 상태였습니다.

② 동영상 첨부 업로드

video/mp4 · video/webm · video/quicktime 이 v2 에셋 엔드포인트 2곳의 allowlist 에서 빠졌습니다.

데이터는 무사합니다

ProjectIssueType 모델과 마이그레이션 0074이미 커밋돼 있었습니다. 사라진 건 API 표면뿐이고 테이블·데이터는 그대로입니다.

이 PR

mote.50 이미지에서 원문 그대로 꺼냈습니다. 재구현하지 않았습니다.

origin/mote 대비 전 hunk 가 순수 추가이고, 예외는 업로드 에러 문구 2줄 교체뿐입니다(같은 변경이 함께 고쳤던 문구). 오늘 머지한 fix 3개(page.py·logger.py·common.py)는 건드리지 않았습니다 — mote.50 쪽이 옛 버전이라 덮으면 안 되기 때문에 파일 단위로 확인했습니다.

검증

  • 라우트 등록 확인: registered url names: ['issue-type-properties', 'issue-types', 'project-issue-types']
  • reverse("project-issue-types")/api/workspaces/motemote/projects/<uuid>/issue-types/ (원 경로와 일치)
  • ProjectIssueTypeViewSet / ProjectIssueTypeSerializer / ProjectIssueType import 해소
  • 유닛 스위트 기준선과 동일 (114 passed, 4 failed, 18 error — 전부 배포 전과 같음)

⚠️ 짚어둘 것

출처 불명입니다. 커밋된 적이 없어 작성자 기록이 없습니다. 의도적으로 미커밋 상태였을 가능성은 배제하지 못합니다 — 되살리면 안 되는 코드였다면 알려주세요.

근본 원인은 이 PR 로 안 없어집니다. /srv/shared/app-src/plane 이 dirty 한 채로 남아 있는 한(현재 docs/RELEASES-mote.md 삭제 포함) 거기서 빌드할 때마다 같은 일이 납니다. PLANE-80 에서 다룹니다.

🤖 Generated with Claude Code

otroym and others added 2 commits August 5, 2026 15:56
These were running in production inside v1.3.1-mote.50 but exist nowhere in
this repository. mote.50 was built from a dirty working directory
(/srv/shared/app-src/plane), so uncommitted work was baked into the image
and never committed. That directory is still dirty today.

Rebuilding v1.3.1-mote.51 from a clean origin/mote tree therefore removed
them from production:

- ProjectIssueTypeViewSet / ProjectIssueTypeSerializer and the two routes
  GET|POST  /workspaces/<slug>/projects/<id>/issue-types/
  DELETE    /workspaces/<slug>/projects/<id>/issue-types/<pk>/
  The deployed frontend calls both (confirmed in the mote.50 bundle:
  `/api/workspaces/${e}/projects/${t}/issue-types/`), so they were
  returning 404. No real call appears in the retained gateway logs, so this
  was latent rather than actively failing.
- video/mp4, video/webm and video/quicktime in the asset upload allowlist,
  in both the v2 asset endpoints, with the matching error message.

The ProjectIssueType model and migration 0074 were already committed, so
only the API surface was missing and no data was affected.

Recovered verbatim from the mote.50 image. Every hunk is additive against
origin/mote except the two upload error strings, which the same change had
reworded. Verified: routes register and reverse() resolves to the original
path, imports resolve, unit suite unchanged from baseline (114 passed).

Provenance: author unknown -- the work was never committed, so there is no
authorship record to preserve. Recovered as-is rather than reimplemented.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
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