From b4eb2d6f39ec4ffe247aa65ed6159120ffef4c87 Mon Sep 17 00:00:00 2001 From: gugli4ifenix-design Date: Sat, 25 Apr 2026 10:00:35 +0000 Subject: [PATCH] fix: add debug logging to silent catch blocks in a2a.js and assetStore.js MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Several empty catch blocks silently swallow errors that could indicate real issues: - assetStore.js: malformed JSONL lines in gene/capsule stores are silently discarded, making it impossible to diagnose corrupted asset files. - a2a.js: computeAssetId failures are silently ignored, meaning assets can end up without identity — breaking deduplication and lineage tracking. All logging is gated behind DEBUG env var to preserve current behavior in production while enabling observability during development. Found via automated security/quality scan. --- src/gep/a2a.js | 6 +++--- src/gep/assetStore.js | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/gep/a2a.js b/src/gep/a2a.js index f47a7cf6..8c1c6724 100644 --- a/src/gep/a2a.js +++ b/src/gep/a2a.js @@ -56,7 +56,7 @@ function lowerConfidence(asset, opts) { cloned.a2a.received_at = receivedAt; cloned.a2a.confidence_factor = factor; if (!cloned.schema_version) cloned.schema_version = SCHEMA_VERSION; - if (!cloned.asset_id) { try { cloned.asset_id = computeAssetId(cloned); } catch (e) {} } + if (!cloned.asset_id) { try { cloned.asset_id = computeAssetId(cloned); } catch (e) { if (process.env.DEBUG) process.stderr.write('a2a: computeAssetId failed: ' + e.message + '\n'); } } return cloned; } @@ -107,7 +107,7 @@ function exportEligibleCapsules(params) { for (var i = 0; i < eligible.length; i++) { var c = eligible[i]; if (!c.schema_version) c.schema_version = SCHEMA_VERSION; - if (!c.asset_id) { try { c.asset_id = computeAssetId(c); } catch (e) {} } + if (!c.asset_id) { try { c.asset_id = computeAssetId(c); } catch (e) { if (process.env.DEBUG) process.stderr.write('a2a: computeAssetId failed for capsule: ' + e.message + '\n'); } } } return eligible; } @@ -127,7 +127,7 @@ function exportEligibleGenes(params) { for (var i = 0; i < eligible.length; i++) { var g = eligible[i]; if (!g.schema_version) g.schema_version = SCHEMA_VERSION; - if (!g.asset_id) { try { g.asset_id = computeAssetId(g); } catch (e) {} } + if (!g.asset_id) { try { g.asset_id = computeAssetId(g); } catch (e) { if (process.env.DEBUG) process.stderr.write('a2a: computeAssetId failed for gene: ' + e.message + '\n'); } } } return eligible; } diff --git a/src/gep/assetStore.js b/src/gep/assetStore.js index 8f98002c..a98c339b 100644 --- a/src/gep/assetStore.js +++ b/src/gep/assetStore.js @@ -186,7 +186,7 @@ function loadGenes() { try { const parsed = JSON.parse(line); if (parsed && parsed.type === 'Gene') jsonlGenes.push(parsed); - } catch(e) {} + } catch(e) { if (process.env.DEBUG) process.stderr.write("assetStore: malformed JSONL line: " + e.message + "\n"); } } }); } @@ -212,7 +212,7 @@ function loadCapsules() { const raw = fs.readFileSync(p, 'utf8'); raw.split('\n').forEach(line => { if (line.trim()) { - try { jsonlCapsules.push(JSON.parse(line)); } catch(e) {} + try { jsonlCapsules.push(JSON.parse(line)); } catch(e) { if (process.env.DEBUG) process.stderr.write("assetStore: malformed JSONL line: " + e.message + "\n"); } } }); }