Skip to main content
← Back to list
01Issue
BugClosedSwamp CLITeam
AssigneesNone

Relationships

#1467 seadex-latent-bugs: latent product bugs pinned by the wave-2b test backfill

Opened by magistr · 7/29/2026

Summary

@magistr/seadex's wave-2b test backfill (ext-quality-bf-seadex) characterized seadex.ts's already-shipped behavior across five STANDARD.md test suites without modifying seadex.ts (byte-frozen). The suites pinned the following latent product bugs as current behavior — none are fixed here; this issue tracks them for a future fix pass.

Pinned bugs (test file : test name)

  1. render-upgrades is a permanent no-op. All filter arguments (year/status/minScore/title) are accepted but silently ignored; every call writes an identical all-zero summary marker. (seadex_methods_test.ts: "render-upgrades: PIN — ... have NO effect on the written marker")
  2. AniList GraphQL-level errors are swallowed as an ordinary no-match. A {errors:[...], data:null} response at HTTP 200 is indistinguishable from a legitimate "no such anime" — anilistFindIdByTitle never inspects the errors[] array. (seadex_adversarial_test.ts: "PIN: an AniList HTTP-200-with-{errors, data:null} response is SWALLOWED...")
  3. lookup-many's write phase is not isolated. The per-item try/catch covers fetch + result-building, but the entry-writeResource loop runs afterward, outside that try/catch — one rejected write discards the whole batch and no summary resource is ever written. (seadex_adversarial_test.ts: "PIN (BUG-3): the entry writeResource loop runs OUTSIDE the per-item try/catch...")
  4. No runtime validation of upstream shapes — several dereferences crash instead of degrading gracefully on hostile/malformed upstream JSON:
    • a Pocketbase torrent file's length arriving as a string turns totalSizeBytes into a concatenated string (harness-fidelity note: the real runtime's schema would reject this write, which is bug #3 above)
    • an AniList Media object present but its title key entirely absent throws an uncaught TypeError
    • a Pocketbase response missing the items key entirely throws an uncaught TypeError (symmetric to the AniList case)
    • a 200-OK response with a non-JSON body throws an uncaught SyntaxError, on both upstream contracts (seadex_adversarial_test.ts, several "PIN" tests)
  5. Errored fan-out items are undercounted. lookup-many's summary lumps a fetch-errored item into notInSeadex identically to a legitimately not-found item — there is no separate error tally anywhere in the summary schema. (seadex_adversarial_test.ts: "PIN: an errored lookup-many item is lumped into summary.notInSeadex...")
  6. Duplicate input anilistIds clobber the same resource key. Two items in one lookup-many call sharing an anilistId both write to the same al-<id> key (the second clobbers the first in a real datastore), while summary.total still counts both. (seadex_adversarial_test.ts: "PIN: duplicate anilistId within one lookup-many call writes the SAME al- key TWICE...")
  7. Server-returned alID can diverge from the resource key. The written resource's key is derived from the requested id, but its alID content field is taken from whatever the server returned — a hostile/buggy Pocketbase response can make these disagree. (seadex_adversarial_test.ts: "PIN: a hostile Pocketbase response whose alID field DIVERGES from the requested filter...")
  8. infoHash is never normalized. Case, whitespace, and length are passed through completely verbatim with no validation. (seadex_adversarial_test.ts: "PIN: infoHash is passed through byte-for-byte verbatim...")
  9. Hostile upstream content is echoed verbatim with no redaction — into both the notes field of a written resource and into thrown error messages (up to 200 chars of the raw response body). seadex is credential-less, so this is a trust-boundary/content-integrity concern rather than a credential leak. (seadex_adversarial_test.ts: two "PIN" tests on hostile notes / hostile error body)
  10. A malformed expand.trs array element (e.g. null or a non-object entry) would throw an uncaught TypeError in normaliseTorrent — flagged during code review as symmetric to bug #4's crash class but not yet pinned by a dedicated test at the time of filing.

Where this is tracked

None of the above are fixed in ext-quality-bf-seadexseadex.ts is byte-frozen there; the suites only characterize (pin) this behavior. This issue is the tracking home referenced by that change's CHANGELOG.md and PR description.

02Bog Flow
OPENTRIAGEDIN PROGRESSCLOSED

Closed

7/29/2026, 10:32:55 PM

No activity in this phase yet.

03Sludge Pulse
Editable. Press Enter to edit.

stack72 commented 7/29/2026, 10:32:54 PM

This looks like it's not a swamp issue

Sign in to post a ripple.