Merge pull request 'downloads: an adopted feed the app refuses is said and left as found, not a failure' (#10) from fix/adopted-dead-feed-is-a-notice into main

This commit was merged in pull request #10.
This commit is contained in:
2026-10-01 15:35:37 +00:00
4 changed files with 32 additions and 0 deletions
+8
View File
@@ -676,6 +676,14 @@ export async function reconcileIndexers(
const outcome = await reconcileEntry(
http, app, "indexer", what, e, feedConnection(ep, feed.id), feedDiffers(e, ep, feed.id), "apiKey", ep.credential, known,
);
if (outcome.result === "refused" && !settings.indexers.includes(feed.id) && /would not save it/.test(outcome.problem ?? "")) {
// An entry the mesh found and only re-pointed — not one it was told to make — that the app
// refuses because the feed behind it is gone (a public tracker that died, an indexer jackett
// no longer has). Nothing here can put that right, and failing the node's apply on every
// heartbeat for it reports the mesh as wrong about a tracker. Said, and left as found.
outcomes.push({ what, result: "notice", note: `left as found — ${outcome.problem}; remove the entry in ${app.module} or repair the feed in jackett, or list the indexer in downloads.jackett-api.indexers to make this a failure` });
continue;
}
outcomes.push(outcome);
if (!known && outcome.result !== "refused") {
outcomes.push({ what, result: "notice", note: `jackett has no indexer "${feed.id}" configured, so it was not tested; configure it in jackett or remove the entry in ${app.module}` });
+8
View File
@@ -676,6 +676,14 @@ export async function reconcileIndexers(
const outcome = await reconcileEntry(
http, app, "indexer", what, e, feedConnection(ep, feed.id), feedDiffers(e, ep, feed.id), "apiKey", ep.credential, known,
);
if (outcome.result === "refused" && !settings.indexers.includes(feed.id) && /would not save it/.test(outcome.problem ?? "")) {
// An entry the mesh found and only re-pointed — not one it was told to make — that the app
// refuses because the feed behind it is gone (a public tracker that died, an indexer jackett
// no longer has). Nothing here can put that right, and failing the node's apply on every
// heartbeat for it reports the mesh as wrong about a tracker. Said, and left as found.
outcomes.push({ what, result: "notice", note: `left as found — ${outcome.problem}; remove the entry in ${app.module} or repair the feed in jackett, or list the indexer in downloads.jackett-api.indexers to make this a failure` });
continue;
}
outcomes.push(outcome);
if (!known && outcome.result !== "refused") {
outcomes.push({ what, result: "notice", note: `jackett has no indexer "${feed.id}" configured, so it was not tested; configure it in jackett or remove the entry in ${app.module}` });
+8
View File
@@ -676,6 +676,14 @@ export async function reconcileIndexers(
const outcome = await reconcileEntry(
http, app, "indexer", what, e, feedConnection(ep, feed.id), feedDiffers(e, ep, feed.id), "apiKey", ep.credential, known,
);
if (outcome.result === "refused" && !settings.indexers.includes(feed.id) && /would not save it/.test(outcome.problem ?? "")) {
// An entry the mesh found and only re-pointed — not one it was told to make — that the app
// refuses because the feed behind it is gone (a public tracker that died, an indexer jackett
// no longer has). Nothing here can put that right, and failing the node's apply on every
// heartbeat for it reports the mesh as wrong about a tracker. Said, and left as found.
outcomes.push({ what, result: "notice", note: `left as found — ${outcome.problem}; remove the entry in ${app.module} or repair the feed in jackett, or list the indexer in downloads.jackett-api.indexers to make this a failure` });
continue;
}
outcomes.push(outcome);
if (!known && outcome.result !== "refused") {
outcomes.push({ what, result: "notice", note: `jackett has no indexer "${feed.id}" configured, so it was not tested; configure it in jackett or remove the entry in ${app.module}` });
+8
View File
@@ -676,6 +676,14 @@ export async function reconcileIndexers(
const outcome = await reconcileEntry(
http, app, "indexer", what, e, feedConnection(ep, feed.id), feedDiffers(e, ep, feed.id), "apiKey", ep.credential, known,
);
if (outcome.result === "refused" && !settings.indexers.includes(feed.id) && /would not save it/.test(outcome.problem ?? "")) {
// An entry the mesh found and only re-pointed — not one it was told to make — that the app
// refuses because the feed behind it is gone (a public tracker that died, an indexer jackett
// no longer has). Nothing here can put that right, and failing the node's apply on every
// heartbeat for it reports the mesh as wrong about a tracker. Said, and left as found.
outcomes.push({ what, result: "notice", note: `left as found — ${outcome.problem}; remove the entry in ${app.module} or repair the feed in jackett, or list the indexer in downloads.jackett-api.indexers to make this a failure` });
continue;
}
outcomes.push(outcome);
if (!known && outcome.result !== "refused") {
outcomes.push({ what, result: "notice", note: `jackett has no indexer "${feed.id}" configured, so it was not tested; configure it in jackett or remove the entry in ${app.module}` });