diff --git a/lib/dispatch.ts b/lib/dispatch.ts index 45ff79d..0f73434 100644 --- a/lib/dispatch.ts +++ b/lib/dispatch.ts @@ -193,6 +193,8 @@ const TRUENAS_SIGNAL_PATTERNS: Array<{ const ACTIVE_TRUENAS_SCAN_PATHS = [ "homelab/ubuntu", "homelab/grizzley", + "homelab/inventory/ubuntu.json", + "homelab/inventory/grizzley.json", "homelab/truenas/AGENTS.md", "homelab/AGENTS.md", "homelab/catalog", @@ -346,6 +348,8 @@ async function runTrueNasDatasetAudit(taskId: number, host: string, user: string })) .filter(({ activeRefs }) => activeRefs.length > 0); + const activeDatasetNames = new Set(activeDatasets.map(({ dataset }) => dataset.name)); + const reviewCandidates = datasets .map((dataset) => ({ dataset, @@ -358,12 +362,22 @@ async function runTrueNasDatasetAudit(taskId: number, host: string, user: string datasetHierarchyName(candidate.name).startsWith(`${datasetHierarchyName(dataset.name)}/`) && summarizeSignals(activeSignals, candidate.name).length > 0, ), + hasActiveAncestor: [...activeDatasetNames].some( + (activeDatasetName) => + dataset.name !== activeDatasetName && + datasetHierarchyName(dataset.name).startsWith(`${datasetHierarchyName(activeDatasetName)}/`), + ), })) - .filter(({ dataset, activeRefs, hasActiveChild }) => { - if (dataset.name === "TrueNAS" || dataset.name === "RPiPool" || dataset.name.includes("/.system")) { + .filter(({ dataset, activeRefs, hasActiveChild, hasActiveAncestor }) => { + if ( + dataset.name === "TrueNAS" || + dataset.name === "RPiPool" || + dataset.name.startsWith("boot-pool") || + dataset.name.includes("/.system") + ) { return false; } - return activeRefs.length === 0 && !hasActiveChild; + return activeRefs.length === 0 && !hasActiveChild && !hasActiveAncestor; }); const detailSections = [