diff --git a/.planning/phases/14-domain-jobs-and-external-integrations/14-REVIEW-DISPOSITION.md b/.planning/phases/14-domain-jobs-and-external-integrations/14-REVIEW-DISPOSITION.md new file mode 100644 index 0000000..595a441 --- /dev/null +++ b/.planning/phases/14-domain-jobs-and-external-integrations/14-REVIEW-DISPOSITION.md @@ -0,0 +1,91 @@ +--- +phase: 14 +review: 14-REVIEW.md +titles: json +findings: + - id: CR-01 + severity: critical + disposition: open + title: "Album writes after slow Discogs I/O save every column from a stale struct, silently reverting concurrent edits" + - id: WR-01 + severity: warning + disposition: open + title: "A stale CSV match pass can cancel, advance or fork a remapped import (the race D-10 claims to close)" + - id: WR-02 + severity: warning + disposition: open + title: "The anonymous feedback upload keeps an attacker-chosen file extension in public storage" + - id: WR-03 + severity: warning + disposition: open + title: "Credential-test routes are unthrottled oracles for third-party keys (parity security hole)" + - id: WR-04 + severity: warning + disposition: open + title: "The \"write-only\" admin AI key can be redirected to any host by changing base_url" + - id: WR-05 + severity: warning + disposition: open + title: "`golem:import-settings` silently drops models from a repeater saved with non-sequential keys" + - id: WR-06 + severity: warning + disposition: open + title: "The G15Office sync job is not idempotent, and a retry files duplicate tasks" + - id: IN-01 + severity: info + disposition: open + title: "sunscreen does not scrub the Discogs token shape or struct fields" + - id: IN-02 + severity: info + disposition: open + title: "tide sidecar masking accepts a partly masked credential and prints two unredacted URLs" + - id: IN-03 + severity: info + disposition: open + title: "The match job's re-dispatch delay overflows on a huge Retry-After" + - id: IN-04 + severity: info + disposition: open + title: "`security.AllowedHosts` ignores a string-valued config key" + - id: IN-05 + severity: info + disposition: open + title: "The G15Office task id from the response is concatenated into the request path unescaped" + - id: IN-06 + severity: info + disposition: open + title: "embed.js `escapeHtml` is used in attribute context without escaping quotes (parity)" + - id: IN-07 + severity: info + disposition: open + title: "Job cancellation inside the mapping and cancel transactions is not rolled back with them" + - id: IN-08 + severity: info + disposition: open + title: "`wishlistReleaseMatchRules` aliases `releaseMatchRules`' backing array" +open: 15 +total: 15 +recorded: 2026-10-04T01:05:31.197Z +--- + +# Phase 14: Code Review Disposition + +| Finding | Severity | Disposition | Source | +|---------|----------|-------------|--------| +| CR-01 | critical | open | - | +| WR-01 | warning | open | - | +| WR-02 | warning | open | - | +| WR-03 | warning | open | - | +| WR-04 | warning | open | - | +| WR-05 | warning | open | - | +| WR-06 | warning | open | - | +| IN-01 | info | open | - | +| IN-02 | info | open | - | +| IN-03 | info | open | - | +| IN-04 | info | open | - | +| IN-05 | info | open | - | +| IN-06 | info | open | - | +| IN-07 | info | open | - | +| IN-08 | info | open | - | + +Dispositions: `open` (recorded, not yet triaged), `fixed`, `skipped`, `deferred`.