미리보기 편집기는 설정을 시험해 보는 자리인데, 본문 동기화가 hasChanges 를 렌더를 일으키는 setLocal 로 올리면서 시험 입력만으로 [저장] 이 켜졌다. 어느 편집기가 저장 대상인지는 레이아웃만 알므로 핸들러가 필드명을 알아보게 하지 않고 trackChanges 선언으로 받는다 — 하드코딩하면 다른 확장이 같은 미리보기 패턴을 쓸 때 그대로 재발한다. 같은 결함이 형제 경로에도 있었다. 평문 폴백은 hasChanges 를 본문 배치 (render:false + selfManaged:true)에 실어, 편집기 자산을 못 불러온 환경에서 본문만 고치면 저장 버튼이 잠긴 채로 남았다 — 폐쇄망에서는 그 폴백이 정상 경로다. 폴백은 렌더 시점에도 같은 함수를 부르므로 화면을 여는 것만으로 변경됨이 되지 않도록, 사용자 입력에서 온 호출만 플래그를 올린다. components.json 생성기는 종결 개행을 PHP_EOL 로 써서 Windows 빌드마다 그 파일을 유령 변경으로 남겼다. 줄 내용이 같아 diff 가 비어 보이므로 무엇이 바뀐 것인지 알 수 없는 변경만 쌓인다.
CKEditor 5 WYSIWYG 에디터 개발자 문서
plugins/_bundled/sirsoft-ckeditor5 · 플러그인
훅 수: 4 · 구독 훅 수: 0 · 라우트 수: 5 · 모델 수: 1 · 테이블 수: 1 · 마이그레이션 수: 2 · 레이아웃 수: 2 · 핸들러 수: 3
문서 목차
| 문서 | 내용 |
|---|---|
| architecture.md | 설계 의도·계층 지도·디렉토리 맵 |
| extension-points.md | 발행/구독 훅·미들웨어·채널·스케줄 |
| data-model.md | 모델·소유 테이블·마이그레이션·Enum |
| settings.md | 설정 스키마·권한·메뉴·라우트·의존 관계 |
| frontend.md | 레이아웃·액션 핸들러·전역 진입점·에셋 |
| editor-spec.md | 레이아웃 편집기에 선언한 팔레트·컨트롤·샘플 데이터 |
| api/ | API 레퍼런스 |
| ../AGENTS.md | 에이전트·확장개발자 진입점 |
| ../README.md | 사람(도입검토자·운영자) 진입점 |