Glyphs 3 플러그인을 Glyphs 4로 마이그레이션하기
검토 가능한 마이그레이션 복사본을 만듭니다. 정적 마이그레이션은 Glyphs 4에서의 수동 실행 테스트를 위한 준비 과정으로 취급하며, 런타임 호환성을 증명하는 것은 아닙니다.
가드레일
- 원본 플러그인 또는 저장소를 보존합니다.
- 제자리 마이그레이션을 절대 수행하지 않습니다. 기존 출력 경로가 있으면 거부합니다.
- 사용자가 별도로 요청하지 않는 한 Glyphs를 설치, 실행, 다시 로드하거나, Plugins 폴더를 변경하지 않습니다.
- Glyphs MCP
docs_search및docs_get도구를 주요 개발 지식 베이스로 사용합니다. 도구 네임스페이스는 클라이언트에 따라 다르므로, 최종 도구 이름과 설명으로 확인합니다. - GlyphsApp API, 플러그인 생명주기 메서드, 선택자, 콜백, 번들 메타데이터 또는 셰이프 처리를 변경하기 전에 공식 지침을 먼저 확인합니다.
- 일반적인 작업을 위해
docs_enable_page_resources를 호출하지 않습니다. 필요할 때만 페이지를 검색합니다. schriftgestalt/GlyphsSDK의 최신Glyphs4브랜치를 선호합니다. Glyphs 3 템플릿이나 캐시된 로더가 최신이라고 가정하지 않습니다.- 동작 변경 사항은 기계적 마이그레이션 변경 사항과 분리하여 유지합니다.
Glyphs MCP 지식 베이스 워크플로우
API 관련 내용을 검토하기 전에 references/glyphs-mcp-development-kb.md를 읽으십시오.
docs_search및docs_get이 Glyphs MCP 서버에서 사용 가능한지 확인합니다.- 편집 전 문서 기준선을 설정합니다.
plugins를 검색하고 공식 플러그인 핸드북 결과를 가져옵니다.Info.plist를 검색하고 Python 플러그인 템플릿 개요와 plist 템플릿을 가져옵니다.- 정확한 기본 클래스(예:
GeneralPlugin,ReporterPlugin,FilterWithoutDialog,PalettePlugin,SelectTool,FileFormatPlugin)를 검색하고 해당 가이드, 소스 템플릿 및 관련 플러그인 API 섹션을 가져옵니다.
- 각각의 익숙하지 않은 클래스, 프로퍼티, 콜백 또는 선택자를 개별적으로 검색합니다.
GSLayer,shapes,addCallback과 같은 짧고 정확한 심볼을 선호합니다. - 반환된
doc_id또는path로 결과를 가져옵니다.truncated가 true이면 관련 섹션이 완료될 때까지nextOffset에서 계속합니다. - 각 가져온 페이지의 제목,
docId,sourceKind,sourceUrl및 이를 통해 내린 마이그레이션 결정을 기록합니다. 이 증거를 핸드오프에 포함시킵니다. - 도구를 사용할 수 없으면 Glyphs MCP 문서 검토가 차단되었음을 보고합니다. 정적 감사는 계속할 수 있지만, 확인되지 않은 API 또는 생명주기 변경 사항을 마이그레이션 준비 완료된 것으로 제시하지 마십시오.
워크플로우
-
소스 플러그인 또는 저장소, 의도된 호환성 대상(
Glyphs 4 only또는Glyphs 3 and 4) 및 새 출력 경로를 확인합니다. -
Glyphs MCP 개발 지식 베이스에 연결하고 감지된 플러그인 패밀리에 대한 기준 페이지를 가져옵니다.
-
공식 GlyphsSDK
Glyphs4브랜치의 최신 체크아웃을 얻거나 찾습니다. -
복사 전 감사:
python3 scripts/migrate_plugin.py "/path/to/source" \ --sdk "/path/to/GlyphsSDK" -
references/migration-review.md를 읽습니다. 모든 API 관련 발견 사항에 대해 해당 클래스, 프로퍼티, 콜백, 선택자 또는 플러그인 유형에 대한 Glyphs 번들 문서를 검색하고 관련 페이지만 가져옵니다.
-
마이그레이션된 복사본을 만들고 보수적인 프레임워크 임포트 수정을 적용합니다:
python3 scripts/migrate_plugin.py "/path/to/source" \ --output "/path/to/new-glyphs4-copy" \ --sdk "/path/to/GlyphsSDK" \ --apply-safe-fixes -
영향 검토 후에만 선택적 재작성을 사용합니다:
--rewrite-wildcard-imports추가: Glyphs 4.pyi스텁에서 찾은 심볼을 사용하여 단순from GlyphsApp import *문을 대체합니다.--replace-loader추가: SDK 템플릿의Contents/MacOS/plugin을 각 번들에 복사합니다.--align-glyphs4-plist추가: 현재 Glyphs 4 템플릿에 없는 레거시 업데이트 피드 키를 제거합니다. 먼저 플러그인이 자체 업데이트 피드에 의존하지 않는지 확인합니다.
-
생성된 마이그레이션 보고서와 전체 소스 diff를 검토합니다. 생명주기, API, 의존성, UI 또는 혼합 셰이프 관련 발견 사항을 수동으로 수정합니다. 각 API별 변경 사항을 가져온 KB 페이지에 연결합니다.
-
모든 번들을 검증합니다:
- 의도된 Glyphs Python 버전으로 모든 Python 파일을 구문 분석합니다.
- 모든
Contents/Info.plist에서plutil -lint를 실행합니다. NSPrincipalClass,PyMainFileNames및 기본 Python 클래스가 일치하는지 확인합니다.- 번들 구조를 일치하는 최신 Glyphs 4 SDK 템플릿과 비교합니다.
- 인터페이스가 변경된 경우
.xib파일을 다시 컴파일합니다.
-
수동 테스트 계획을 전달합니다. 일회용 복사본을 Glyphs 4에서 테스트하고, 모든 메뉴 항목과 콜백을 실행하며, Macro Panel 및 Console 출력을 검사하고, 플러그인과 관련된 실행 취소, 내보내기, 드로잉 및 의존성 경로를 테스트합니다.
호환성 결정
Glyphs 4 only의 경우: 현재 스텁에서 확인한 후 Glyphs 4 런타임이 지원하는 API 및 Python 구문만 허용합니다.Glyphs 3 and 4의 경우: 실용적인 경우 공유 코드 경로를 유지하고, 실제 API 차이는 기능 점검으로 처리하며, 두 앱에서 모두 테스트합니다. 주석만을 위해 Glyphs 4 전용 구문을 추가하지 마십시오.- 플러그인이
layer.paths,layer.components또는layer.shapes를 재구성하는 경우, 혼합 셰이프 순서 또는 최신 셰이프 종류를 보존해야 하는지 검사하십시오. 경로 전용 재작성이 무손실이라고 추론하지 마십시오.
산출물
새 복사본, 마이그레이션 보고서, 호환성 대상, 정적 검증 결과 및 나머지 수동 Glyphs 4 테스트를 반환합니다. 각 페이지의 제목, Glyphs MCP docId, 공식 sourceUrl 및 내린 결정을 포함하는 문서 증거 테이블을 포함합니다. 실제로 라이브 설치 또는 런타임 테스트가 발생하지 않았으면 그렇지 않았다고 명확히 명시합니다.
리소스
scripts/migrate_plugin.py: 감사 및 비파괴 복사 도우미.references/migration-review.md: 증거 기반 검토 체크리스트 및 에스컬레이션 지점.references/glyphs-mcp-development-kb.md: 정확한 MCP 조회, 페이징, 증거 및 복구 프로토콜..mcp.json: 로컬 Glyphs MCP 서버에 대한 Claude Code 플러그인 연결.mcp.json: 로컬 Glyphs MCP 서버에 대한 Cursor 플러그인 연결..claude-plugin/plugin.json: Claude Code 커뮤니티/플러그인 메타데이터; 이 폴더를claude --plugin-dir로 로드합니다..cursor-plugin/plugin.json: 루트SKILL.md및mcp.json을 등록하는 Cursor 플러그인 메타데이터.agents/openai.yaml: Codex 디스플레이 메타데이터 및 Glyphs MCP 의존성.