Skip to content

confluence-mdx: folder 저장 및 MDX 변환을 지원합니다 - #1051

Merged
jk-kim0 merged 4 commits into
mainfrom
jk/feat-confluence-folder-mdx
Jul 28, 2026
Merged

confluence-mdx: folder 저장 및 MDX 변환을 지원합니다#1051
jk-kim0 merged 4 commits into
mainfrom
jk/feat-confluence-folder-mdx

Conversation

@jk-kim0

@jk-kim0 jk-kim0 commented Jul 27, 2026

Copy link
Copy Markdown
Contributor

Summary

Confluence page 계층에서 누락되던 folder를 원본 API 응답으로 저장하고, 직계 자식 목록을 제공하는 MDX landing page로 변환합니다.

문제 현상

  • fetcher가 모든 직계 자식을 page로 간주하여 folder endpoint와 metadata를 처리하지 못합니다.
  • folder가 catalog와 MDX navigation에서 누락되어 하위 문서로 이동할 수 없습니다.
  • 계층 이동이나 이름 변경 후 과거 generated output이 남을 수 있습니다.

구현 내용

  • page와 folder type을 보존하는 typed content tree와 cursor pagination을 구현합니다.
  • folder API 응답을 var/{folder_id}/folder.v2.yamlchildren.v2.yaml에 저장합니다.
  • folder MDX에 frontmatter, 제목, 지원되는 직계 자식 page/folder 목록을 결정적으로 생성합니다.
  • _meta.ts 생성을 convert_all.py로 일원화하고 manifest가 소유한 stale output을 전체 변환 성공 후 삭제합니다.
  • profile manifest를 var/convert-manifests/에 보존하고 directory bind mount로 atomic replace를 지원합니다.
  • 다른 sync profile이 소유한 output을 stale cleanup에서 보호합니다.
  • full-all에서 모든 profile catalog를 먼저 갱신하고, profile 간 current output path 충돌을 생성 전에 차단합니다.
  • database, whiteboard, embed는 경고 후 제외하고 generated folder MDX의 reverse sync를 차단합니다.
  • folder 저장·변환·navigation·cleanup 계약과 회귀 테스트를 추가합니다.

기대 효과

  • --remote 실행 시 Confluence의 page/folder 계층 변경을 catalog와 generated MDX에 반영합니다.
  • 중첩 folder는 부모 목록에서 직계 링크로 표시하며, 이동한 folder page에서 그 하위 문서를 조회할 수 있습니다.
  • 기존 page 변환 동작과 수동 파일을 보존하면서 converter-owned stale output만 안전하게 정리합니다.
  • ephemeral container를 다시 실행해도 profile별 output 소유권을 유지합니다.
  • 공유 output root에서 뒤 profile이 앞 profile의 current output을 덮어쓰지 않습니다.

Test plan

  • confluence-mdx/venv/bin/python -m pytest -q — 1,182 passed, 4 skipped
  • confluence-mdx/tests/run-tests.sh --type convert --log-level warning과 동일한 convert loop — 21 passed
  • openspec validate confluence-folder-mdx --strict
  • openspec validate complete-reverse-sync --strict
  • confluence-mdx/venv/bin/python -m compileall -q confluence-mdx/bin confluence-mdx/tests/test_fetch_folders.py confluence-mdx/tests/test_convert_all_folders.py
  • bash -n confluence-mdx/scripts/entrypoint.sh
  • git diff --check
  • 실제 QM folder 2167636017 remote smoke test — 로컬 Atlassian 인증 정보가 없어 실행하지 못했습니다.

Related tickets & links

🤖 Generated with Codex

Co-Authored-By: Atlas atlas@jk.agent

@vercel

vercel Bot commented Jul 27, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
querypie-docs Ready Ready Preview, Comment Jul 27, 2026 9:13am

Request Review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 9f48c8ae48

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread confluence-mdx/bin/convert_all.py Outdated
Comment thread confluence-mdx/bin/convert_all.py
jk-kim0 and others added 2 commits July 27, 2026 17:51
Confluence page 계층의 folder를 저장하고 MDX landing page로 변환할 수 있도록 지원합니다.

- page와 folder를 구분하는 typed content tree와 cursor pagination을 구현합니다.
- folder 직계 자식 목록, navigation, generated output manifest를 생성합니다.
- unsupported content type과 folder reverse sync를 안전하게 차단합니다.
- OpenSpec 계약과 fetch 및 conversion 회귀 테스트를 추가합니다.

🤖 Generated with Codex

Co-Authored-By: Atlas <atlas@jk.agent>
## Summary
ephemeral container에서 manifest persistence와 atomic replace를 함께 보장합니다.

- profile manifest를 전용 directory로 이동하고 directory 단위로 bind mount합니다.
- 개별 file mount의 mount point 교체 위험을 OpenSpec 계약에 반영합니다.
- Compose mount와 profile별 baseline 경로를 회귀 테스트로 검증합니다.

🤖 Generated with Codex
## Summary
공유 output root에서 sync profile 간 현재 출력 경로 충돌을 생성 전에 차단합니다.

- full-all이 모든 profile catalog를 먼저 갱신한 뒤 변환하도록 순서를 조정합니다.
- sibling catalog의 출력 계획과 겹치는 경로를 preflight에서 거부합니다.
- 소유권 이전, stable collision, 실행 순서를 회귀 테스트와 OpenSpec 계약에 반영합니다.

🤖 Generated with Codex
@jk-kim0
jk-kim0 merged commit f8b1aa4 into main Jul 28, 2026
7 checks passed
@jk-kim0
jk-kim0 deleted the jk/feat-confluence-folder-mdx branch July 28, 2026 06:07
@jk-kim0 jk-kim0 self-assigned this Jul 28, 2026
jk-kim0 added a commit that referenced this pull request Jul 28, 2026
## Summary

QM Confluence Space의 전체 page/folder 계층과 다국어 문서를 최신 상태로 동기화하고, 표시용 영어 제목과
canonical route를 독립적으로 유지합니다.

- MCP Access Control, MCP Server, Audit MCP folder와 하위 문서를 ko/en/ja에
추가합니다.
- MongoDB / Document DB Privilege Type Mapping과 운영 로그 수집 가이드를 추가합니다.
- Premium Support 이메일과 navigation 순서를 최신 Confluence와 맞춥니다.
- `current`가 아닌 child를 fetch, catalog, navigation에서 제외합니다.
- content ID 기반 slug override를 도입해 정확한 영어 breadcrumb와 기존 public route를
함께 보존합니다.
- `Web Client로 쿠버네티스 클러스터 접속하기`의 영어 제목을 `Connecting to Kubernetes
Clusters with Web Client`로 복원하면서 경로는 `web-client`로 유지합니다.
- typed catalog와 QM manifest, OpenSpec 계약 및 회귀 테스트를 갱신합니다.

## Test plan

- [x] `confluence-mdx/bin/fetch_cli.py --remote --attachments`
- [x] `confluence-mdx/bin/fetch_cli.py --local --sync-code qm`
- [x] QM 전체 변환 315개 성공 및 manifest 경로 유지 확인
- [x] `confluence-mdx/bin/convert_all.py --verify-translations`
- [x] `pytest -q tests/test_fetch_folders.py
tests/test_convert_all_folders.py` (`26 passed`)
- [x] `pytest -q -k 'not test_sample_page'` (`1,187 passed, 1
deselected`)
- [x] 변경 문서 22건 Skeleton MDX 비교
- [x] `npm run build -- --webpack` (953 URLs)
- [x] `openspec validate confluence-folder-mdx --strict`
- [x] `git diff --check`

## Notes

- tracked `confluence-mdx/var/pages.qcp.yaml`이 0바이트여서 current
cross-profile preflight가 YAML `null`을 거부합니다. QM 전체 변환 검증에서는 이 빈 sibling
catalog만 일시적으로 제외한 뒤 원상 복원했으며 QCP 파일은 변경하지 않았습니다.
- `tests/test_unused_attachments.py::TestRealData::test_sample_page`는 로컬
실제 데이터에 미사용 첨부파일 1개가 있다고 가정하지만 현재 `var/1060306945`에서는 0개를 반환합니다. 이번 변경과
연결된 테스트는 모두 통과했으며 해당 환경 의존 assertion만 제외해 전체 suite를 재검증했습니다.

## Related tickets & links

- #1051

🤖 Generated with Codex

Co-Authored-By: Atlas <atlas@jk.agent>

---------

Co-authored-by: Atlas <atlas@jk.agent>
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.

confluence-mdx: page 하위 folder가 catalog와 MDX 변환에서 누락됩니다

1 participant