fix(core,engine): 확장 번들 503 판정을 선언 축에서 소실 축으로 교체

빈 번들 503 을 "에셋을 선언한 활성 확장이 있는데 결과가 비었다" 로 판정해,
스타일 규칙이 아직 없는 0바이트 CSS 만 선언된 기본 구성이 통째로 503 이 됐다.
file_get_contents 는 0바이트에서 false 가 아니라 '' 를 돌려주므로 읽기 실패
분기도 타지 않는다. 선언 축 게터는 전부 file_exists 게이트라 부재를 셀 수 없어,
존재 게이트가 없는 getDeclaredAssetAbsolutePaths 를 통로로 두고 503 의 근거를
소실 축(findMissingDeclaredAssets)으로 옮긴다. 존재하되 비었으면 빈 200 이다.

곁들여: 실패 배너 항목명을 내부 구분 키에서 사용자 어휘로(engine-v1.64.7),
봇 화면이 없는 템플릿 CSS 를 링크하지 않도록 실재 게이트, 매니페스트 자산
선언 드리프트 4건 정정.
This commit is contained in:
HeuJung committed 2026-09-04 15:36:33 +09:00
1 parent 482faf00be
commit 0833bd1f6a
42 files changed
+1207 -90

No files matched your search

+18 -2
View File
@@ -9,10 +9,26 @@
import { createLogger } from '../utils/Logger';
import { loadScriptWithRetry, loadStylesheetWithRetry } from '../template-engine/networkResilience';
import { convertToCurrentMode, staticToLegacy } from '../support/assetUrl';
import { notifyAssetFailure } from '../assets/AssetFailureNotice';
import { assetText, notifyAssetFailure } from '../assets/AssetFailureNotice';
const logger = createLogger('ModuleAssetLoader');
/**
* 병합 CSS 번들의 실패 안내 항목명 (사용자 어휘).
*
* 번들 구분 키(`module`/`plugin`)는 내부 이름이다. 그대로 배너에 넘기면
* "module을(를) 불러오지 못했습니다" 처럼 사용자가 해석할 수 없는 문구가 된다.
*
* @param key 번들 구분 키 ('module' | 'plugin')
* @return string 사용자 어휘 항목명
* @since engine-v1.64.7
*/
function bundleCssLabel(key: string): string {
return key === 'plugin'
? assetText('core.assets.plugin_styles', '플러그인 스타일')
: assetText('core.assets.module_styles', '모듈 스타일');
}
/**
* 모듈 에셋 정보 인터페이스
*/
@@ -321,7 +337,7 @@ export class ModuleAssetLoader {
// 항상 실패한다 — 버튼은 있는데 아무것도 고치지 못하는 상태가 된다.
this.surfaceCssFailure(
`bundle-${key}`,
key,
bundleCssLabel(key),
legacyUrl !== null ? convertToCurrentMode(legacyUrl) : url,
error
);