- Replace 'import ... with { type: "json" }' with fs-based JSON.parse (ESLint espree cannot parse JSON import attributes) - Prefix unused catch-clause variables with _ (e -> _e) - Prefix unused hls.js event data params with _ (data -> _data) - Freeze HLS_CONFIG with Object.freeze for defensive immutability Lint: 0 errors (3 cosmetic _e warnings in catch blocks) Tests: 44/44 passed Build: 9 modules, 201ms
- viewer.js: dynamic hls.js loading, HLS-aware panel creation, error handling - schema.json: hlsManifest and mediaType fields (optional, backward compatible) - types.ts: VideoEntry interface with MediaType type - isHls() null guard fix - tests: 39 tests (schema, viewer units, data flow, integration) - CI: GitHub/Gitea Actions workflow (npm test on push/PR) - deps: ajv, ajv-formats, jsdom for testing