Files
netfelix-audio-fix/package.json
Felix Förtsch afd95f06df
All checks were successful
Build and Push Docker Image / build (push) Successful in 1m11s
✓✓ is now jellyfin-corroborated, not a self-confirming ffprobe
user reported ad astra got the double checkmark instantly after
transcode — correct, and correct to flag: the post-execute
verifyDesiredState ran ffprobe on the file we had just written, so it
tautologically matched the plan every time. not a second opinion.

replaced the flow with the semantics we actually wanted:

1. refreshItem now returns { refreshed: boolean } — true when jellyfin's
   DateLastRefreshed actually advanced within the timeout, false when it
   didn't. callers can tell 'jellyfin really re-probed' apart from
   'we timed out waiting'.

2. handOffToJellyfin post-job: refresh → (only if refreshed=true) fetch
   fresh streams → upsertJellyfinItem(source='webhook'). the rescan SQL
   sets verified=1 exactly when the fresh analysis sees is_noop=1, so
   ✓✓ now means 'jellyfin independently re-probed the file we wrote
   and agrees it matches the plan'. if jellyfin sees a drifted layout
   the plan flips back to pending so the user notices instead of the
   job silently rubber-stamping a bad output.

3. dropped the post-execute ffprobe block. the preflight-skipped branch
   no longer self-awards verified=1 either; it now does the same hand-
   off so jellyfin's re-probe drives the ✓✓ in that branch too.

refreshItem's other two callers (review /rescan, subtitles /rescan)
ignore the return value — their semantics haven't changed.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 18:29:00 +02:00

43 lines
1.1 KiB
JSON

{
"name": "netfelix-audio-fix",
"version": "2026.04.14.20",
"scripts": {
"dev:server": "NODE_ENV=development bun --hot server/index.tsx",
"dev:client": "vite",
"dev": "concurrently \"bun run dev:server\" \"bun run dev:client\"",
"build": "vite build",
"start": "bun server/index.tsx",
"lint": "biome check .",
"format": "biome format . --write",
"test": "bun test"
},
"dependencies": {
"@internationalized/date": "^3.12.0",
"@tanstack/react-form": "^1.28.3",
"@tanstack/react-router": "^1.163.3",
"clsx": "^2.1.1",
"hono": "^4",
"mqtt": "^5.15.1",
"react": "19",
"react-aria-components": "^1.16.0",
"react-dom": "19",
"ssh2": "^1",
"tailwind-merge": "^3.5.0",
"zod": "^4.3.6",
"zustand": "^5.0.11"
},
"devDependencies": {
"@biomejs/biome": "^2.4.4",
"@tailwindcss/vite": "^4.2.1",
"@tanstack/router-plugin": "^1.163.3",
"@types/react": "^19.2.14",
"@types/react-dom": "^19.2.3",
"@types/ssh2": "^1",
"@vitejs/plugin-react-swc": "^4.2.3",
"bun-types": "latest",
"concurrently": "^9.2.1",
"tailwindcss": "^4.2.1",
"vite": "^7.3.1"
}
}