Files
KVideo/verification/history/review-decisions.json
T
kuekhaoyang 3771b63332 feat: add self-contained strict verification chain
Keep every post-59948b5 change inside verification/. The verifier owns its npm working directory and sanitized Docker context, so no release metadata or root Docker configuration is modified.
2026-08-02 06:11:13 +08:00

36 lines
6.1 KiB
JSON

[
{"id":"PRRT_kwDOQWhk_85nQ-fI","pr":6,"priority":"medium","status":"open","contract":"cards","reason":"Fallback poster still uses a separate rendering branch and lacks the primary image hover behavior."},
{"id":"PRRT_kwDOQWhk_85na0j1","pr":17,"priority":"medium","status":"open","contract":"cards","reason":"MovieCard title container still has vertical padding only."},
{"id":"PRRT_kwDOQWhk_85na0j5","pr":17,"priority":"medium","status":"fixed","contract":"cards","reason":"VideoCard information container currently uses p-3."},
{"id":"PRRT_kwDOQWhk_85na0j6","pr":17,"priority":"medium","status":"fixed","contract":"cards","reason":"VideoCard title currently restores min-h-[2.5rem]."},
{"id":"PRRT_kwDOQWhk_85nzS0b","pr":29,"priority":"medium","status":"fixed","contract":"branding","reason":"The default site description is now the short 视频聚合平台 string."},
{"id":"PRRT_kwDOQWhk_85nzS0c","pr":29,"priority":"medium","status":"fixed","contract":"branding","reason":"The unused accessor function and getter-based configuration no longer exist."},
{"id":"PRRT_kwDOQWhk_85pqYkA","pr":47,"priority":"critical","status":"dismissed","contract":"dependencies","reason":"glob-parent 5.1.2 is the patched boundary for CVE-2021-35065; npm audit remains authoritative."},
{"id":"PRRT_kwDOQWhk_85wUpDZ","pr":90,"priority":"high","status":"open","contract":"cloud-sync","reason":"Subscriptions are registered without waiting for the initial cloud pull."},
{"id":"PRRT_kwDOQWhk_85wUpDb","pr":90,"priority":"high","status":"open","contract":"cloud-sync","reason":"Cloud-sync GET parses JSON without first checking response.ok."},
{"id":"PRRT_kwDOQWhk_85wUpDe","pr":90,"priority":"high","status":"open","contract":"cloud-sync","reason":"Empty remote arrays do not clear existing local history and favorites."},
{"id":"PRRT_kwDOQWhk_85wUpDi","pr":90,"priority":"high","status":"open","contract":"cloud-sync","reason":"Cloud-sync POST does not check response.ok."},
{"id":"PRRT_kwDOQWhk_85wUpDj","pr":90,"priority":"medium","status":"open","contract":"cloud-sync","reason":"The sync API persists undefined history or favorites fields without schema defaults."},
{"id":"PRRT_kwDOQWhk_85wUpDr","pr":90,"priority":"medium","status":"fixed","contract":"cloud-sync","reason":"The debounce helper now uses generics and ReturnType<typeof setTimeout>."},
{"id":"PRRT_kwDOQWhk_8527gmY","pr":128,"priority":"medium","status":"fixed","contract":"runtime-config","reason":"Runtime danmaku configuration now checks hasStoredAppSetting before applying defaults."},
{"id":"PRRT_kwDOQWhk_854fAdu","pr":136,"priority":"medium","status":"open","contract":"settings","reason":"Settings handlers still repeat read-spread-save operations."},
{"id":"PRRT_kwDOQWhk_854fAd2","pr":136,"priority":"medium","status":"open","contract":"settings","reason":"The controlled custom seek field still refuses an intermediate empty value."},
{"id":"PRRT_kwDOQWhk_854fUF3","pr":137,"priority":"medium","status":"fixed","contract":"videotogether","reason":"VideoTogether now assigns window state and injects a script element instead of interpolating inline script text."},
{"id":"PRRT_kwDOQWhk_854fiht","pr":138,"priority":"medium","status":"open","contract":"fullscreen","reason":"Web-fullscreen stage sizing still hardcodes a 16:9 aspect ratio."},
{"id":"PRRT_kwDOQWhk_854frlV","pr":139,"priority":"medium","status":"fixed","contract":"android-tv","reason":"The URL field now handles IME confirmation and Enter keys."},
{"id":"PRRT_kwDOQWhk_854frld","pr":139,"priority":"medium","status":"open","contract":"android-tv","reason":"MainActivity still overrides deprecated onBackPressed instead of using OnBackPressedDispatcher."},
{"id":"PRRT_kwDOQWhk_854frlg","pr":139,"priority":"medium","status":"open","contract":"android-tv","reason":"android:maxWidth remains on a LinearLayout where it is not an effective width constraint."},
{"id":"PRRT_kwDOQWhk_857KrxU","pr":157,"priority":"critical","status":"dismissed","contract":"next-route","reason":"For the installed Next.js generation, generated route types require params as a Promise; TypeScript and production build verify it."},
{"id":"PRRT_kwDOQWhk_857W0Em","pr":160,"priority":"high","status":"open","contract":"resolution","reason":"Resolution probing still accepts a 100-item batch without a documented provider-budget proof."},
{"id":"PRRT_kwDOQWhk_857W0E0","pr":160,"priority":"medium","status":"open","contract":"resolution","reason":"Manifest hint scanning still walks every media-playlist line."},
{"id":"PRRT_kwDOQWhk_857W_-W","pr":161,"priority":"medium","status":"open","contract":"resolution","reason":"Numeric resolution regexes still differ and hd720 can match inside longer identifiers."},
{"id":"PRRT_kwDOQWhk_857W_-l","pr":161,"priority":"medium","status":"open","contract":"resolution","reason":"Resolution keyword tables remain duplicated across two modules."},
{"id":"PRRT_kwDOQWhk_857Xhh9","pr":162,"priority":"medium","status":"open","contract":"android-tv","reason":"PiP change dispatch still uses lateinit webView without an initialization guard."},
{"id":"PRRT_kwDOQWhk_857XhiC","pr":162,"priority":"medium","status":"open","contract":"android-tv","reason":"PiP entry does not reject calls while the Activity is finishing."},
{"id":"PRRT_kwDOQWhk_86NJ3bv","pr":198,"priority":"medium","status":"open","contract":"video-card","reason":"The source badge can still occupy 100% width beneath the favorite action."},
{"id":"PRRT_kwDOQWhk_86NJ3bx","pr":198,"priority":"medium","status":"open","contract":"video-card","reason":"Latency rendering still checks only undefined and can pass null through."},
{"id":"PRRT_kwDOQWhk_86QZpa0","pr":211,"priority":"critical","status":"fixed","contract":"latency","reason":"The polling effect now resets mountedRef.current to true whenever it starts."},
{"id":"PRRT_kwDOQWhk_86QZpa4","pr":211,"priority":"high","status":"open","contract":"latency","reason":"stableSourceUrls still depends on raw array identity instead of source content."},
{"id":"PRRT_kwDOQWhk_86QZpa9","pr":211,"priority":"medium","status":"open","contract":"latency","reason":"A thrown probe still rejects the entire worker pool."}
]